1515import java .util .IllegalFormatException ;
1616import java .util .List ;
1717import java .util .Map ;
18+ import java .util .Optional ;
1819import java .util .function .BiConsumer ;
1920
2021import com .google .common .collect .Lists ;
2526import net .minecraft .client .resources .language .I18n ;
2627import net .minecraft .locale .Language ;
2728import net .minecraft .resources .ResourceLocation ;
29+ import net .minecraft .server .packs .repository .KnownPack ;
2830import net .minecraft .server .packs .resources .Resource ;
2931import net .minecraft .server .packs .resources .ResourceManager ;
3032import net .minecraft .server .packs .resources .ResourceManagerReloadListener ;
@@ -192,9 +194,11 @@ private void loadTranslations(ResourceManager manager,
192194 // be caught to prevent mod detection vulnerabilities using
193195 // intentionally corrupted resource packs.
194196 for (Resource resource : manager .getResourceStack (langId ))
197+ {
195198 try (InputStream stream = resource .open ())
196199 {
197- Language .loadFromJson (stream , entryConsumer );
200+ if (isBuiltInWurstResourcePack (resource ))
201+ Language .loadFromJson (stream , entryConsumer );
198202
199203 }catch (IOException | JsonParseException e )
200204 {
@@ -209,6 +213,27 @@ private void loadTranslations(ResourceManager manager,
209213 + langCode );
210214 e .printStackTrace ();
211215 }
216+ }
212217 }
213218 }
219+
220+ /**
221+ * Ensures that the given resource is from Wurst's built-in resource pack,
222+ * or at least from another client-side mod pretending to be Wurst, as it
223+ * should be impossible for server-provided resource packs to obtain a
224+ * KnownPack of <code>fabric:wurst</code>.
225+ *
226+ * <p>
227+ * ASSUME THEY CAN BYPASS THIS. CATCH EXCEPTIONS ANYWAY.
228+ */
229+ private boolean isBuiltInWurstResourcePack (Resource resource )
230+ {
231+ KnownPack knownPack = Optional .ofNullable (resource )
232+ .flatMap (Resource ::knownPackInfo ).orElse (null );
233+ if (knownPack == null )
234+ return false ;
235+
236+ return "fabric" .equals (knownPack .namespace ())
237+ && "wurst" .equals (knownPack .id ());
238+ }
214239}
0 commit comments