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.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<TemplateComponent> components;
try {
BookTemplate template = (BookTemplate)templateField.get(page);
components = (List<TemplateComponent>)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<TemplateComponent> components;
BookTemplate template = (BookTemplate) templateField.get(page);
if(template == null)
continue;
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;
}
}
}
}
} catch(ReflectiveOperationException e) {
continue;
}
}
}
} catch(ReflectiveOperationException ignored) {
}
}
ModernFix.LOGGER.info("Cleared {} unneeded book NBT tags", numItemsCleared);