diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java index f31a628f..4bdced31 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java @@ -8,6 +8,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import vazkii.patchouli.client.book.BookContents; import vazkii.patchouli.client.book.BookEntry; import vazkii.patchouli.client.book.BookPage; import vazkii.patchouli.client.book.ClientBookRegistry; @@ -26,32 +27,41 @@ public class ClientBookRegistryMixin { @Inject(method = "reload", at = @At("RETURN"), remap = false) private void performDeduplication(CallbackInfo ci) { Field templateField = ObfuscationReflectionHelper.findField(PageTemplate.class, "template"); + Field contentsField = ObfuscationReflectionHelper.findField(Book.class, "contents"); Field componentsField = ObfuscationReflectionHelper.findField(BookTemplate.class, "components"); Field itemsField = ObfuscationReflectionHelper.findField(ComponentItemStack.class, "items"); int numItemsCleared = 0; for(Book book : BookRegistry.INSTANCE.books.values()) { - for(BookEntry entry : book.contents.entries.values()) { - for(BookPage page : entry.getPages()) { - if(page instanceof PageTemplate) { - List components; - try { - BookTemplate template = (BookTemplate)templateField.get(page); - components = (List)componentsField.get(template); - for(TemplateComponent component : components) { - if(component instanceof ComponentItemStack) { - ItemStack[] items = (ItemStack[])itemsField.get(component); - for(int i = 0; i < items.length; i++) { - if(items[i] != null && items[i].getItem() == Items.AIR) { + try { + BookContents contents = (BookContents)contentsField.get(book); + if(contents == null || contents.entries == null) + continue; + for(BookEntry entry : contents.entries.values()) { + for(BookPage page : entry.getPages()) { + if(page instanceof PageTemplate) { + List components; + BookTemplate template = (BookTemplate) templateField.get(page); + if(template == null) + continue; + components = (List) componentsField.get(template); + if(components == null) + continue; + for (TemplateComponent component : components) { + if (component instanceof ComponentItemStack) { + ItemStack[] items = (ItemStack[]) itemsField.get(component); + if(items == null) + continue; + for (int i = 0; i < items.length; i++) { + if (items[i] != null && items[i].getItem() == Items.AIR) { items[i] = ItemStack.EMPTY; } } } } - } catch(ReflectiveOperationException e) { - continue; } } } + } catch(ReflectiveOperationException ignored) { } } ModernFix.LOGGER.info("Cleared {} unneeded book NBT tags", numItemsCleared);