Add logic to clear air items of NBT from Patchouli book registry
This commit is contained in:
parent
e843f8ed6d
commit
d86344f309
|
|
@ -64,6 +64,7 @@ repositories {
|
|||
maven { // CTM
|
||||
url "https://maven.tterrag.com/"
|
||||
}
|
||||
maven { url 'https://maven.blamejared.com' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
|
@ -103,6 +104,7 @@ dependencies {
|
|||
modCompileOnly("curse.maven:valhesiastructures-347488:3476252")
|
||||
modCompileOnly files("deps/starlight-1.2.jar")
|
||||
modCompileOnly("appeng:appliedenergistics2:8.4.7")
|
||||
modCompileOnly("vazkii.patchouli:Patchouli:1.16.4-53.3")
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ public class ModernFixEarlyConfig {
|
|||
this.addMixinRule("perf.deduplicate_location", false);
|
||||
this.addMixinRule("perf.cache_blockstate_cache_arrays", true);
|
||||
this.addMixinRule("perf.cache_model_materials", true);
|
||||
this.addMixinRule("perf.patchouli_deduplicate_books", modPresent("patchouli"));
|
||||
this.addMixinRule("perf.datapack_reload_exceptions", true);
|
||||
this.addMixinRule("perf.async_locator", true);
|
||||
this.addMixinRule("perf.faster_texture_stitching", true);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,68 @@
|
|||
package org.embeddedt.modernfix.mixin.perf.patchouli_deduplicate_books;
|
||||
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||
import org.embeddedt.modernfix.ModernFix;
|
||||
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.BookEntry;
|
||||
import vazkii.patchouli.client.book.BookPage;
|
||||
import vazkii.patchouli.client.book.ClientBookRegistry;
|
||||
import vazkii.patchouli.client.book.page.PageTemplate;
|
||||
import vazkii.patchouli.client.book.template.BookTemplate;
|
||||
import vazkii.patchouli.client.book.template.TemplateComponent;
|
||||
import vazkii.patchouli.client.book.template.component.ComponentItemStack;
|
||||
import vazkii.patchouli.common.book.Book;
|
||||
import vazkii.patchouli.common.book.BookRegistry;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Mixin(ClientBookRegistry.class)
|
||||
public class ClientBookRegistryMixin {
|
||||
@Inject(method = "reload", at = @At("RETURN"), remap = false)
|
||||
private void performDeduplication(CallbackInfo ci) {
|
||||
Field templateField = ObfuscationReflectionHelper.findField(PageTemplate.class, "template");
|
||||
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(ItemStack item : items) {
|
||||
if(item.getItem() == Items.AIR) {
|
||||
// remove any NBT
|
||||
CompoundTag tag = item.getTag();
|
||||
if(tag != null) {
|
||||
numItemsCleared++;
|
||||
List<String> keys = new ArrayList<>(tag.getAllKeys());
|
||||
for(String key : keys)
|
||||
item.removeTagKey(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(ReflectiveOperationException e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ModernFix.LOGGER.info("Cleared {} unneeded book NBT tags", numItemsCleared);
|
||||
}
|
||||
}
|
||||
|
|
@ -95,6 +95,7 @@
|
|||
"perf.model_optimizations.TransformationMatrixMixin",
|
||||
"perf.model_optimizations.BooleanPropertyMixin",
|
||||
"perf.model_optimizations.PropertyMixin",
|
||||
"perf.patchouli_deduplicate_books.ClientBookRegistryMixin",
|
||||
"perf.async_jei.InputConstantsMixin",
|
||||
"perf.async_jei.IngredientListElementFactoryMixin",
|
||||
"perf.async_jei.ClientLifecycleHandlerMixin",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user