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
|
maven { // CTM
|
||||||
url "https://maven.tterrag.com/"
|
url "https://maven.tterrag.com/"
|
||||||
}
|
}
|
||||||
|
maven { url 'https://maven.blamejared.com' }
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
@ -103,6 +104,7 @@ dependencies {
|
||||||
modCompileOnly("curse.maven:valhesiastructures-347488:3476252")
|
modCompileOnly("curse.maven:valhesiastructures-347488:3476252")
|
||||||
modCompileOnly files("deps/starlight-1.2.jar")
|
modCompileOnly files("deps/starlight-1.2.jar")
|
||||||
modCompileOnly("appeng:appliedenergistics2:8.4.7")
|
modCompileOnly("appeng:appliedenergistics2:8.4.7")
|
||||||
|
modCompileOnly("vazkii.patchouli:Patchouli:1.16.4-53.3")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ public class ModernFixEarlyConfig {
|
||||||
this.addMixinRule("perf.deduplicate_location", false);
|
this.addMixinRule("perf.deduplicate_location", false);
|
||||||
this.addMixinRule("perf.cache_blockstate_cache_arrays", true);
|
this.addMixinRule("perf.cache_blockstate_cache_arrays", true);
|
||||||
this.addMixinRule("perf.cache_model_materials", 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.datapack_reload_exceptions", true);
|
||||||
this.addMixinRule("perf.async_locator", true);
|
this.addMixinRule("perf.async_locator", true);
|
||||||
this.addMixinRule("perf.faster_texture_stitching", 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.TransformationMatrixMixin",
|
||||||
"perf.model_optimizations.BooleanPropertyMixin",
|
"perf.model_optimizations.BooleanPropertyMixin",
|
||||||
"perf.model_optimizations.PropertyMixin",
|
"perf.model_optimizations.PropertyMixin",
|
||||||
|
"perf.patchouli_deduplicate_books.ClientBookRegistryMixin",
|
||||||
"perf.async_jei.InputConstantsMixin",
|
"perf.async_jei.InputConstantsMixin",
|
||||||
"perf.async_jei.IngredientListElementFactoryMixin",
|
"perf.async_jei.IngredientListElementFactoryMixin",
|
||||||
"perf.async_jei.ClientLifecycleHandlerMixin",
|
"perf.async_jei.ClientLifecycleHandlerMixin",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user