More null checks

This commit is contained in:
embeddedt 2023-04-25 21:28:31 -04:00
parent c684cccf74
commit 56aed7284c
No known key found for this signature in database
GPG Key ID: A69433EC199B5613

View File

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