From 01c1d733551e1de078cbef87784d5d07712e63fe Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 21:00:50 -0400 Subject: [PATCH 1/6] Use custom BakedModel as sentinel --- .../DynamicBakedModelProvider.java | 55 +++++++++++++++++-- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java index cb4f81e9..d11971b3 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java @@ -2,18 +2,21 @@ package org.embeddedt.modernfix.dynamicresources; import com.mojang.math.Transformation; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BlockModelRotation; -import net.minecraft.client.resources.model.BuiltInModel; import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; import org.apache.commons.lang3.tuple.Triple; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import java.util.AbstractMap; -import java.util.Collection; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.BiFunction; import java.util.stream.Collectors; @@ -22,7 +25,47 @@ public class DynamicBakedModelProvider implements Map, BakedModel> bakedCache; private final Map permanentOverrides; private BakedModel missingModel; - private static final BakedModel SENTINEL = new BuiltInModel(null, null, null, false); + private static final BakedModel SENTINEL = new BakedModel() { + @Override + public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) { + return null; + } + + @Override + public boolean useAmbientOcclusion() { + return false; + } + + @Override + public boolean isGui3d() { + return false; + } + + @Override + public boolean usesBlockLight() { + return false; + } + + @Override + public boolean isCustomRenderer() { + return false; + } + + @Override + public TextureAtlasSprite getParticleIcon() { + return null; + } + + @Override + public ItemTransforms getTransforms() { + return null; + } + + @Override + public ItemOverrides getOverrides() { + return null; + } + }; public DynamicBakedModelProvider(ModelBakery bakery, Map, BakedModel> cache) { this.bakery = bakery; From 81a2b9cb56e47d0971eb8cdf88713ccda6cd7452 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 21:12:02 -0400 Subject: [PATCH 2/6] Fix issues --- .../java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java | 1 - .../org/embeddedt/modernfix/forge/init/ModernFixClientForge.java | 1 - .../java/org/embeddedt/modernfix/forge/init/ModernFixForge.java | 1 - 3 files changed, 3 deletions(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java b/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java index f423bd1c..49b5c487 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java @@ -11,7 +11,6 @@ import org.spongepowered.asm.mixin.extensibility.IMixinInfo; import java.io.File; import java.util.*; -import java.util.regex.Pattern; public class ModernFixMixinPlugin implements IMixinConfigPlugin { private static final String MIXIN_PACKAGE_ROOT = "org.embeddedt.modernfix.mixin."; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java index ac42856a..6d65d0dd 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java @@ -9,7 +9,6 @@ import net.minecraftforge.client.event.RecipesUpdatedEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.gui.ForgeIngameGui; import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TagsUpdatedEvent; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.world.WorldEvent; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java index 09d88b53..4354ff49 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java @@ -21,7 +21,6 @@ import net.minecraftforge.fml.server.ServerLifecycleHooks; import net.minecraftforge.registries.ForgeRegistries; import org.apache.commons.lang3.tuple.Pair; import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.forge.classloading.ModFileScanDataDeduplicator; import org.embeddedt.modernfix.forge.ModernFixConfig; import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler; From 6879c6a2740386e546389a09e3adf4df48e2003d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 21:12:14 -0400 Subject: [PATCH 3/6] Use unmapped name for shadow method --- .../mixin/perf/dynamic_resources/ModelBakeryMixin.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java index d81f62cf..53358a06 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -33,10 +33,7 @@ import org.embeddedt.modernfix.duck.IExtendedModelBakery; import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider; import org.embeddedt.modernfix.dynamicresources.ModelBakeryHelpers; import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -60,7 +57,8 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { @Shadow @Final public static ModelResourceLocation MISSING_MODEL_LOCATION; - @Shadow protected abstract BlockModel loadBlockModel(ResourceLocation location) throws IOException; + @Dynamic + @Shadow(remap = false) protected abstract BlockModel method_4718(ResourceLocation location) throws IOException; @Shadow @Final protected ResourceManager resourceManager; @Shadow private AtlasSet atlasSet; @@ -134,7 +132,7 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/ModelBakery;loadBlockModel(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/block/model/BlockModel;", ordinal = 0)) private BlockModel captureMissingModel(ModelBakery bakery, ResourceLocation location) throws IOException { - this.missingModel = this.loadBlockModel(location); + this.missingModel = this.method_4718(location); this.blockStateFiles = new HashSet<>(); this.modelFiles = new HashSet<>(); return (BlockModel)this.missingModel; From 25237eee8c17b349d529f4064b3cda2f1f40200b Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 21:12:26 -0400 Subject: [PATCH 4/6] Add Arch transformer to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c4d1b6c5..bcd10106 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ run libs media classes/ +.architectury-transformer/ # Changelog CHANGELOG.md From 6d8f90d30324f5efa66d3725623992449a440dda Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 21:18:19 -0400 Subject: [PATCH 5/6] Fix dynresources compat with Fabric API --- .../perf/dynamic_resources/ModelBakeryMixin.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java index 53358a06..2d7007af 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -36,11 +36,11 @@ import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; @@ -57,9 +57,6 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { @Shadow @Final public static ModelResourceLocation MISSING_MODEL_LOCATION; - @Dynamic - @Shadow(remap = false) protected abstract BlockModel method_4718(ResourceLocation location) throws IOException; - @Shadow @Final protected ResourceManager resourceManager; @Shadow private AtlasSet atlasSet; @Shadow @Final private Set loadingStack; @@ -130,12 +127,12 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { private Set blockStateFiles; private Set modelFiles; - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/ModelBakery;loadBlockModel(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/block/model/BlockModel;", ordinal = 0)) - private BlockModel captureMissingModel(ModelBakery bakery, ResourceLocation location) throws IOException { - this.missingModel = this.method_4718(location); + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0), index = 1) + private Object captureMissingModel(Object model) { + this.missingModel = (UnbakedModel)model; this.blockStateFiles = new HashSet<>(); this.modelFiles = new HashSet<>(); - return (BlockModel)this.missingModel; + return this.missingModel; } /** @@ -145,6 +142,8 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { */ @Inject(method = "loadTopLevel", at = @At("HEAD"), cancellable = true) private void addTopLevelFile(ModelResourceLocation location, CallbackInfo ci) { + if(location == MISSING_MODEL_LOCATION) + return; /* needed for FAPI compat */ ci.cancel(); if(Objects.equals(location.getVariant(), "inventory")) { modelFiles.add(new ResourceLocation(location.getNamespace(), "item/" + location.getPath())); From ade8f2789b092e4b7112b5f89d0133c3f4a8cb09 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 21:23:10 -0400 Subject: [PATCH 6/6] Fix screen open firing too soon --- .../embeddedt/modernfix/ModernFixClientFabric.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java index a73a29a2..41254e49 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java @@ -4,6 +4,9 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.client.Minecraft; + +import java.util.concurrent.atomic.AtomicBoolean; public class ModernFixClientFabric implements ClientModInitializer { public static ModernFixClient commonMod; @@ -13,7 +16,16 @@ public class ModernFixClientFabric implements ClientModInitializer { commonMod = new ModernFixClient(); ClientTickEvents.END_CLIENT_TICK.register((mc) -> commonMod.onRenderTickEnd()); - ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> commonMod.onScreenOpening(screen)); + ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { + AtomicBoolean hasOpened = new AtomicBoolean(false); + ScreenEvents.beforeTick(screen).register(screen1 -> { + if(Minecraft.getInstance().overlay != null) + return; + if(!hasOpened.getAndSet(true)) { + commonMod.onScreenOpening(screen1); + } + }); + }); ServerLifecycleEvents.SERVER_STARTED.register(server -> { commonMod.onServerStarted(server); });