diff --git a/src/main/java/ru/betterend/interfaces/IdentifiedContext.java b/src/main/java/ru/betterend/interfaces/IdentifiedContext.java deleted file mode 100644 index e03bfbb6..00000000 --- a/src/main/java/ru/betterend/interfaces/IdentifiedContext.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.betterend.interfaces; - -import net.minecraft.util.Identifier; - -public interface IdentifiedContext { - public Identifier getContextId(); - public void setContextId(Identifier id); - - default void removeId() { - this.setContextId(null); - } -} diff --git a/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java b/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java new file mode 100644 index 00000000..d635bdbc --- /dev/null +++ b/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java @@ -0,0 +1,14 @@ +package ru.betterend.mixin.client; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import com.google.gson.Gson; + +import net.minecraft.client.render.model.json.ModelVariantMap; + +@Mixin(ModelVariantMap.DeserializationContext.class) +public interface ContextGsonAccessor { + @Accessor + public Gson getGson(); +} diff --git a/src/main/java/ru/betterend/mixin/client/DeserializationContextMixin.java b/src/main/java/ru/betterend/mixin/client/DeserializationContextMixin.java deleted file mode 100644 index 0852e1e2..00000000 --- a/src/main/java/ru/betterend/mixin/client/DeserializationContextMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.betterend.mixin.client; - -import org.spongepowered.asm.mixin.Mixin; - -import net.minecraft.client.render.model.json.ModelVariantMap.DeserializationContext; -import net.minecraft.util.Identifier; -import ru.betterend.interfaces.IdentifiedContext; - -@Mixin(DeserializationContext.class) -public class DeserializationContextMixin implements IdentifiedContext { - - private Identifier contextId; - - @Override - public Identifier getContextId() { - return this.contextId; - } - - @Override - public void setContextId(Identifier id) { - this.contextId = id; - } -} diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 20c2696f..f1c8b1f0 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -9,32 +9,24 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.block.Block; import net.minecraft.client.render.model.ModelLoader; import net.minecraft.client.render.model.json.JsonUnbakedModel; -import net.minecraft.client.render.model.json.ModelVariantMap.DeserializationContext; -import net.minecraft.client.util.ModelIdentifier; import net.minecraft.item.Item; import net.minecraft.resource.Resource; import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; + import ru.betterend.BetterEnd; -import ru.betterend.interfaces.IdentifiedContext; import ru.betterend.patterns.Patterned; @Mixin(ModelLoader.class) public class ModelLoaderMixin { - @Final - @Shadow - private DeserializationContext variantMapDeserializationContext; - @Final @Shadow private ResourceManager resourceManager; @@ -92,24 +84,4 @@ public class ModelLoaderMixin { return model; } - - @Inject(method = "loadModel", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/render/model/json/ModelVariantMap$DeserializationContext;setStateFactory(Lnet/minecraft/state/StateManager;)V", - shift = Shift.AFTER)) - private void appendContextID(Identifier id, CallbackInfo info) { - IdentifiedContext context = IdentifiedContext.class.cast(variantMapDeserializationContext); - if (id.getNamespace().equals(BetterEnd.MOD_ID)) { - context.setContextId(BetterEnd.makeID("pattern/" + id.getPath())); - } else { - context.setContextId(null); - } - } - - @Inject(method = "loadModel", at = @At("HEAD")) - private void loadModel(Identifier id, CallbackInfo info) throws Exception { -// if (!(id instanceof ModelIdentifier)) { -// System.out.println(id); -// } - } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java index b8315dfd..2c982d31 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java @@ -4,40 +4,29 @@ import java.io.Reader; import java.io.StringReader; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.google.gson.Gson; + import net.minecraft.block.Block; import net.minecraft.client.render.model.json.ModelVariantMap; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import ru.betterend.interfaces.IdentifiedContext; +import net.minecraft.util.JsonHelper; + import ru.betterend.patterns.BlockPatterned; @Mixin(ModelVariantMap.class) public abstract class ModelVariantMapMixin { - @Shadow - static ModelVariantMap deserialize(ModelVariantMap.DeserializationContext context, Reader reader) { - return null; - } - @Inject(method = "deserialize", at = @At("HEAD"), cancellable = true) private static void deserializeBlockState(ModelVariantMap.DeserializationContext context, Reader reader, CallbackInfoReturnable info) { - IdentifiedContext idContext = IdentifiedContext.class.cast(context); - Identifier id = idContext.getContextId(); - if (id != null && id.getPath().contains("pattern")) { - String[] data = id.getPath().split("/"); - Identifier blockId = new Identifier(id.getNamespace(), data[1]); - Block block = Registry.BLOCK.get(blockId); - idContext.removeId(); - if (block instanceof BlockPatterned) { - String pattern = ((BlockPatterned) block).getStatesPattern(reader); - info.setReturnValue(deserialize(context, new StringReader(pattern))); - info.cancel(); - } + Block block = context.getStateFactory().getDefaultState().getBlock(); + if (block instanceof BlockPatterned) { + String pattern = ((BlockPatterned) block).getStatesPattern(reader); + Gson gson = ContextGsonAccessor.class.cast(context).getGson(); + ModelVariantMap map = JsonHelper.deserialize(gson, new StringReader(pattern), ModelVariantMap.class); + info.setReturnValue(map); } } } diff --git a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java index 0bb4451a..6fbe8fcc 100644 --- a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java @@ -2,7 +2,6 @@ package ru.betterend.mixin.client; import java.util.List; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -15,23 +14,17 @@ import com.google.common.collect.Lists; import net.minecraft.block.Block; import net.minecraft.resource.NamespaceResourceManager; import net.minecraft.resource.Resource; -import net.minecraft.resource.ResourcePack; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; + import ru.betterend.BetterEnd; import ru.betterend.patterns.BlockPatterned; @Mixin(NamespaceResourceManager.class) public abstract class NamespaceResourceManagerMixin { - @Final - @Shadow - protected List packList; - @Shadow public abstract Resource getResource(Identifier id); - @Shadow - public abstract List getAllResources(Identifier id); @Inject(method = "getAllResources", cancellable = true, at = @At( value = "NEW", diff --git a/src/main/resources/betterend.mixins.client.json b/src/main/resources/betterend.mixins.client.json index 20148d62..7da8b81b 100644 --- a/src/main/resources/betterend.mixins.client.json +++ b/src/main/resources/betterend.mixins.client.json @@ -7,12 +7,12 @@ "AbstractSoundInstanceAccessor", "ClientPlayNetworkHandlerMixin", "NamespaceResourceManagerMixin", - "DeserializationContextMixin", "EnchantingTableBlockMixin", "BackgroundRendererMixin", "ClientRecipeBookMixin", "ModelVariantMapMixin", "MinecraftClientMixin", + "ContextGsonAccessor", "WorldRendererMixin", "MusicTrackerMixin", "AnvilScreenMixin",