More null checks
This commit is contained in:
parent
c684cccf74
commit
56aed7284c
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user