From c0c88423eecf02331dd2e325de7ff09aafa56b65 Mon Sep 17 00:00:00 2001 From: Dragon-Seeker Date: Wed, 14 Aug 2024 17:08:51 -0500 Subject: [PATCH 1/3] Fix issues with incorrect overdraw handling for Condensed Creative - Adjust Stack rendering to be based off of drawSlot call giving full support for custom slot rendering within CC - Adjust injection to be conditionally though mixin conifg --- build.gradle | 44 ++++++++++++++----- gradle.properties | 1 + .../smoothscroll/DelegatingInventory.java | 43 ++++++++++++++++++ src/main/java/smsk/smoothscroll/SmoothSc.java | 9 ++++ .../compat/CondensedInventoryCompat.java | 36 ++++++++++++--- .../CreativeScreenAccessor.java | 13 ------ .../CreativeScreenHandlerMixin.java | 5 +-- .../CreativeScreen/HandledScreenMixin.java | 38 +++++++++++----- .../mixin/SmoothScMixinPlugin.java | 27 ++++++++++++ .../compat/CreativeScreenHandlerMixin_CC.java | 17 +++++++ src/main/resources/smoothscroll.mixins.json | 3 +- 11 files changed, 192 insertions(+), 44 deletions(-) create mode 100644 src/main/java/smsk/smoothscroll/DelegatingInventory.java delete mode 100644 src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenAccessor.java create mode 100644 src/main/java/smsk/smoothscroll/mixin/SmoothScMixinPlugin.java create mode 100644 src/main/java/smsk/smoothscroll/mixin/compat/CreativeScreenHandlerMixin_CC.java diff --git a/build.gradle b/build.gradle index eb49c2f..dbdb1cd 100644 --- a/build.gradle +++ b/build.gradle @@ -11,11 +11,6 @@ base { } repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. exclusiveContent { forRepository { maven { @@ -27,7 +22,9 @@ repositories { includeGroup "maven.modrinth" } } - maven { url 'https://maven.wispforest.io' } + maven { url "https://maven.shedaniel.me/" } + maven { url "https://maven.terraformersmc.com/releases/" } + maven { url 'https://maven.wispforest.io/releases' } } dependencies { @@ -38,15 +35,42 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. // modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - + // modImplementation "maven.modrinth:chat-heads:${project.chat_heads_version}" DISABLED due to not being neccessary anymore // modCompileOnly "maven.modrinth:immediatelyfast:${project.immediatelyfast_version}" DISABLED due to not being neccessary anymore modCompileOnly "maven.modrinth:item-borders:${project.item_borders_version}" //modCompileOnly "maven.modrinth:condensed-creative:3.3.0+1.21" - modCompileOnly ("io.wispforest:condensed_creative-fabric:3.3.0+1.21") { - exclude(group: "me.shedaniel.cloth") - } + modCompileOnly ("io.wispforest:condensed_creative-fabric:${project.cc_version}") { exclude(group: "me.shedaniel.cloth") } +} + +loom { + runs { + // Loom Run for using Mixin Debugging with export and HotSwapping capability + it.create("clientMixinDebug", { + client() + runDir "run" + name "Minecraft Client [Mixin Debug]" + + vmArg "-Dfabric.dli.config=${file(".gradle/loom-cache/launch.cfg").toString()}" + vmArg "-Dfabric.dli.env=client" + vmArg "-Dfabric.dli.main=net.fabricmc.loader.impl.launch.knot.KnotClient" + Object runConfig = it + + project.afterEvaluate { + project.configurations.compileClasspath + .getAllDependencies() + .findAll { Dependency test -> test.getName() == "sponge-mixin" } + .iterator().forEachRemaining {runConfig.vmArg "-javaagent:\"${(project.configurations.compileClasspath.files(it).iterator().next().getPath())}\"" } + } + + vmArg "-Dlog4j.configurationFile=${file(".gradle/loom-cache/log4j.xml").toString()}" + vmArg "-Dfabric.log.disableAnsi=false" + vmArg "-Dmixin.debug.export=true" + + ideConfigGenerated = true + }) + } } processResources { diff --git a/gradle.properties b/gradle.properties index db9d456..42e5e28 100755 --- a/gradle.properties +++ b/gradle.properties @@ -14,3 +14,4 @@ maven_group=smsk.smoothscroll archives_base_name=smoothscroll item_borders_version=1.2.3 +cc_version=3.4.0+1.21 diff --git a/src/main/java/smsk/smoothscroll/DelegatingInventory.java b/src/main/java/smsk/smoothscroll/DelegatingInventory.java new file mode 100644 index 0000000..acc6dc7 --- /dev/null +++ b/src/main/java/smsk/smoothscroll/DelegatingInventory.java @@ -0,0 +1,43 @@ +package smsk.smoothscroll; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; + +import java.util.function.Function; +import java.util.function.IntFunction; + +/** + * An implementation of {@link Inventory} used to allow for wrapping any method of getting a + * stack from a given collection. Used to support Condensed Creative method of entries. + */ +public class DelegatingInventory implements Inventory { + + protected final IntFunction getter; + protected final Function mapper; + + protected DelegatingInventory(IntFunction getter, Function mapper){ + this.getter = getter; + this.mapper = mapper; + } + + public static DelegatingInventory itemStackBased(IntFunction stackGetter) { + return new DelegatingInventory<>(stackGetter, stack -> stack); + } + + @Override + public ItemStack getStack(int slot) { + return mapper.apply(getter.apply(slot)); + } + + //-- DEFAULT IMPLEMENTATION SECTION BELOW --// + + @Override public int size() { return 1; } + @Override public boolean isEmpty() { return false; } + @Override public ItemStack removeStack(int slot, int amount) { return ItemStack.EMPTY; } + @Override public ItemStack removeStack(int slot) { return ItemStack.EMPTY; } + @Override public void setStack(int slot, ItemStack stack) {} + @Override public void markDirty() {} + @Override public boolean canPlayerUse(PlayerEntity player) { return true; } + @Override public void clear() {} +} diff --git a/src/main/java/smsk/smoothscroll/SmoothSc.java b/src/main/java/smsk/smoothscroll/SmoothSc.java index 1af6bda..d92cf8b 100644 --- a/src/main/java/smsk/smoothscroll/SmoothSc.java +++ b/src/main/java/smsk/smoothscroll/SmoothSc.java @@ -5,11 +5,14 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen.CreativeScreenHandler; +import net.minecraft.inventory.Inventory; +import net.minecraft.screen.ScreenHandler; import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import smsk.smoothscroll.compat.CondensedInventoryCompat; public class SmoothSc implements ModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("Smooth Scrolling"); @@ -38,6 +41,12 @@ public void onInitialize() { FabricLoader.getInstance().getObjectShare().put("smoothscroll:creative_screen/item_count", 0); } + public static Inventory getDelegatingInventory(ScreenHandler handler) { + return isCondensedInventoryLoaded + ? CondensedInventoryCompat.of(handler) + : DelegatingInventory.itemStackBased(creativeSH.itemList::get); + } + public static void print(Object s) { LOGGER.info(s + ""); } diff --git a/src/main/java/smsk/smoothscroll/compat/CondensedInventoryCompat.java b/src/main/java/smsk/smoothscroll/compat/CondensedInventoryCompat.java index 5538ded..a263d3a 100644 --- a/src/main/java/smsk/smoothscroll/compat/CondensedInventoryCompat.java +++ b/src/main/java/smsk/smoothscroll/compat/CondensedInventoryCompat.java @@ -1,11 +1,37 @@ package smsk.smoothscroll.compat; -import io.wispforest.condensed_creative.util.CondensedInventory; -import net.minecraft.item.ItemStack; -import smsk.smoothscroll.mixin.CreativeScreen.CreativeScreenAccessor; +import io.wispforest.condensed_creative.ducks.CreativeInventoryScreenHandlerDuck; +import io.wispforest.condensed_creative.entry.Entry; +import io.wispforest.condensed_creative.entry.EntryContainer; +import io.wispforest.condensed_creative.entry.impl.ItemEntry; +import net.minecraft.screen.ScreenHandler; +import smsk.smoothscroll.DelegatingInventory; public class CondensedInventoryCompat { - public static ItemStack getStack(int i) { - return ((CondensedInventory) CreativeScreenAccessor.INVENTORY()).getEntryStack(i - 9).getEntryStack(); + + public static DelegatingInventory of(ScreenHandler handler) { + return new CondensedEntryDelegatingInventory(handler); + } + + public static class CondensedEntryDelegatingInventory extends DelegatingInventory implements EntryContainer { + protected CondensedEntryDelegatingInventory(ScreenHandler handler) { + super(value -> { + try { + if(handler instanceof CreativeInventoryScreenHandlerDuck duck) { + return duck.getFilteredEntryList().get(value); + } + } catch (IndexOutOfBoundsException ignored) {} + + return ItemEntry.EMPTY; + }, Entry::getDisplayStack); + } + + @Override + public Entry getEntryStack(int slot) { + return this.getter.apply(slot); + } + + @Override + public void setEntryStack(int slot, Entry entryStack){} } } diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenAccessor.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenAccessor.java deleted file mode 100644 index 7d2e167..0000000 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenAccessor.java +++ /dev/null @@ -1,13 +0,0 @@ -package smsk.smoothscroll.mixin.CreativeScreen; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.inventory.SimpleInventory; - -@Mixin(CreativeInventoryScreen.class) -public interface CreativeScreenAccessor { - @Accessor("INVENTORY") - static SimpleInventory INVENTORY() { throw new UnsupportedOperationException(); } -} diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerMixin.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerMixin.java index b080d8f..db19820 100644 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerMixin.java @@ -25,10 +25,7 @@ private int scrollItems(int row) { } //@Inject(method = "scrollItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/SimpleInventory;setStack(ILnet/minecraft/item/ItemStack;)V")) - @Inject(method = "scrollItems", at = { - @At(value = "INVOKE", target = "Lnet/minecraft/inventory/SimpleInventory;setStack(ILnet/minecraft/item/ItemStack;)V"), - @At(value = "INVOKE", target = "Lio/wispforest/condensed_creative/util/CondensedInventory;setEntryStack(ILio/wispforest/condensed_creative/entry/Entry;)V") - }) + @Inject(method = "scrollItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/SimpleInventory;setStack(ILnet/minecraft/item/ItemStack;)V")) private void itemCount(CallbackInfo ci) { SmoothSc.creativeScreenItemCount += 1; } diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java index 4b4093a..3844052 100644 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java @@ -1,6 +1,11 @@ package smsk.smoothscroll.mixin.CreativeScreen; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; @@ -9,25 +14,29 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; -import io.wispforest.condensed_creative.util.CondensedInventory; import smsk.smoothscroll.Config; +import smsk.smoothscroll.DelegatingInventory; import smsk.smoothscroll.SmoothSc; import smsk.smoothscroll.compat.CondensedInventoryCompat; @Mixin(value = HandledScreen.class, priority = 999) -public class HandledScreenMixin { +public abstract class HandledScreenMixin { - Identifier backTex = Identifier.ofVanilla("textures/gui/container/creative_inventory/tab_items"); - boolean cutEnabled = false; - DrawContext savedContext; - int originalCursorY; + @Shadow @Final protected T handler; + + @Shadow protected abstract void drawSlot(DrawContext context, Slot slot); + + @Unique private final Identifier backTex = Identifier.ofVanilla("textures/gui/container/creative_inventory/tab_items"); + @Unique private boolean cutEnabled = false; + @Unique private int originalCursorY; + + @Unique private boolean drawingOverdrawnSlot = false; @Inject(method = "render", at = @At("HEAD")) void render(DrawContext context, int mx, int my, float d, CallbackInfo ci) { @@ -64,16 +73,22 @@ void renderMid0(DrawContext context, int mx, int my, float d, CallbackInfo ci, @ var currRow = SmoothSc.creativeScreenPrevRow - SmoothSc.getCreativeScrollOffset() / 18; var fromIndex = currRow * 9 + overUnder; for(int i = fromIndex; i >= 0 && i < SmoothSc.creativeSH.itemList.size() && i < fromIndex + 9; i++) { - // Can't figure out where to get the correct items from the mod condensed creative - //ItemStack item = SmoothSc.isCondensedInventoryLoaded ? CondensedInventoryCompat.getStack(i) : SmoothSc.creativeSH.itemList.get(i); - ItemStack item = SmoothSc.creativeSH.itemList.get(i); + var tempSlot = new Slot(SmoothSc.getDelegatingInventory(this.handler), i, 9 + i % 9 * 18, SmoothSc.getCreativeScrollOffset() > 0 ? 0 : 18 * 6); - context.drawItem(item, 9 + i % 9 * 18, SmoothSc.getCreativeScrollOffset() > 0 ? 0 : 18 * 6); + this.drawSlotOverridden(context, tempSlot); } } + @Unique + private void drawSlotOverridden(DrawContext context, Slot slot) { + this.drawingOverdrawnSlot = true; + this.drawSlot(context, slot); + this.drawingOverdrawnSlot = false; + } + @ModifyVariable(method = "drawSlot", at = @At(value = "STORE"), ordinal = 1) int drawItemY(int y) { + if(drawingOverdrawnSlot) return y; SmoothSc.creativeScreenItemCount -= 1; if (SmoothSc.creativeScreenItemCount < 0) tryDisableMask(savedContext); if (Config.cfg.creativeScreenSpeed == 0 || SmoothSc.creativeScreenItemCount < 0) return y; @@ -92,6 +107,7 @@ void renderMid1(DrawContext context, int mx, int my, float d, CallbackInfo ci, @ } void tryDisableMask(DrawContext context){ + if (drawingOverdrawnSlot) return; if (!cutEnabled) return; if (Config.cfg.enableMaskDebug) context.fill(-100, -100, context.getScaledWindowWidth(), context.getScaledWindowHeight(), ColorHelper.Argb.getArgb(50, 0, 255, 255)); diff --git a/src/main/java/smsk/smoothscroll/mixin/SmoothScMixinPlugin.java b/src/main/java/smsk/smoothscroll/mixin/SmoothScMixinPlugin.java new file mode 100644 index 0000000..e720300 --- /dev/null +++ b/src/main/java/smsk/smoothscroll/mixin/SmoothScMixinPlugin.java @@ -0,0 +1,27 @@ +package smsk.smoothscroll.mixin; + +import net.fabricmc.loader.api.FabricLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class SmoothScMixinPlugin implements IMixinConfigPlugin { + + @Override public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if(mixinClassName.contains("CreativeScreenHandlerMixin_CC")) { + return FabricLoader.getInstance().isModLoaded("condensed_creative"); + } + + return true; + } + + @Override public void onLoad(String mixinPackage) {} + @Override public String getRefMapperConfig() { return null; } + @Override public void acceptTargets(Set myTargets, Set otherTargets) {} + @Override public List getMixins() { return List.of(); } + @Override public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + @Override public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} +} diff --git a/src/main/java/smsk/smoothscroll/mixin/compat/CreativeScreenHandlerMixin_CC.java b/src/main/java/smsk/smoothscroll/mixin/compat/CreativeScreenHandlerMixin_CC.java new file mode 100644 index 0000000..eaa63dd --- /dev/null +++ b/src/main/java/smsk/smoothscroll/mixin/compat/CreativeScreenHandlerMixin_CC.java @@ -0,0 +1,17 @@ +package smsk.smoothscroll.mixin.compat; + +import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +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 smsk.smoothscroll.SmoothSc; + +// Specific mixin for targeting CondensedCreative call for setting Entry within Creative Screen +@Mixin(value = CreativeInventoryScreen.CreativeScreenHandler.class, priority = 1001) +public class CreativeScreenHandlerMixin_CC { + @Inject(method = "scrollItems", at = @At(value = "INVOKE", target = "Lio/wispforest/condensed_creative/util/CondensedInventory;setEntryStack(ILio/wispforest/condensed_creative/entry/Entry;)V")) + private void itemCount(CallbackInfo ci) { + SmoothSc.creativeScreenItemCount += 1; + } +} diff --git a/src/main/resources/smoothscroll.mixins.json b/src/main/resources/smoothscroll.mixins.json index efd4f02..0f9ee2e 100755 --- a/src/main/resources/smoothscroll.mixins.json +++ b/src/main/resources/smoothscroll.mixins.json @@ -1,5 +1,6 @@ { "required": true, + "plugin": "smsk.smoothscroll.mixin.SmoothScMixinPlugin", "package": "smsk.smoothscroll.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ @@ -8,11 +9,11 @@ "Chat.ChatHudMixin", "Chat.SuggestionWindowMixin", "CreativeScreen.CreativeScreenHandlerMixin", + "compat.CreativeScreenHandlerMixin_CC", "CreativeScreen.CreativeScreenMixin", "CreativeScreen.HandledScreenMixin", "CreativeScreen.MinecraftClientMixin", "CreativeScreen.CreativeScreenHandlerAccessor", - "CreativeScreen.CreativeScreenAccessor", "EntryListWidgetMixin" ], "injectors": { From ac51a65815f514a464975c118ebe70196e665c07 Mon Sep 17 00:00:00 2001 From: Dragon-Seeker Date: Wed, 14 Aug 2024 17:10:14 -0500 Subject: [PATCH 2/3] Adjust build script for CC import --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dbdb1cd..1d87618 100644 --- a/build.gradle +++ b/build.gradle @@ -39,8 +39,8 @@ dependencies { // modImplementation "maven.modrinth:chat-heads:${project.chat_heads_version}" DISABLED due to not being neccessary anymore // modCompileOnly "maven.modrinth:immediatelyfast:${project.immediatelyfast_version}" DISABLED due to not being neccessary anymore modCompileOnly "maven.modrinth:item-borders:${project.item_borders_version}" - //modCompileOnly "maven.modrinth:condensed-creative:3.3.0+1.21" modCompileOnly ("io.wispforest:condensed_creative-fabric:${project.cc_version}") { exclude(group: "me.shedaniel.cloth") } + //modLocalRuntime ("io.wispforest:condensed_creative-fabric:${project.cc_version}") } loom { From bd06f04d2e3cd893ad54c0d4152b1eedb2f8de70 Mon Sep 17 00:00:00 2001 From: Dragon-Seeker Date: Wed, 14 Aug 2024 17:17:21 -0500 Subject: [PATCH 3/3] Refactors/Cleanup for mixins combined with making such a client mod specifically --- src/main/java/smsk/smoothscroll/SmoothSc.java | 5 +- .../smoothscroll/mixin/Chat/ChatHudMixin.java | 55 ++++++++++--------- .../mixin/Chat/SuggestionWindowMixin.java | 34 +++++++----- .../CreativeScreenHandlerAccessor.java | 2 +- .../CreativeScreen/CreativeScreenMixin.java | 4 +- .../CreativeScreen/HandledScreenMixin.java | 21 +++---- .../CreativeScreen/MinecraftClientMixin.java | 4 +- .../mixin/EntryListWidgetMixin.java | 14 +++-- .../mixin/Hotbar/HotbarMixin.java | 36 ++++++------ .../mixin/ScrollableWidgetMixin.java | 7 ++- src/main/resources/fabric.mod.json | 4 +- src/main/resources/smoothscroll.mixins.json | 3 +- 12 files changed, 105 insertions(+), 84 deletions(-) diff --git a/src/main/java/smsk/smoothscroll/SmoothSc.java b/src/main/java/smsk/smoothscroll/SmoothSc.java index d92cf8b..180029c 100644 --- a/src/main/java/smsk/smoothscroll/SmoothSc.java +++ b/src/main/java/smsk/smoothscroll/SmoothSc.java @@ -1,5 +1,6 @@ package smsk.smoothscroll; +import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; @@ -14,7 +15,7 @@ import org.slf4j.LoggerFactory; import smsk.smoothscroll.compat.CondensedInventoryCompat; -public class SmoothSc implements ModInitializer { +public class SmoothSc implements ClientModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("Smooth Scrolling"); public static final MinecraftClient mc = MinecraftClient.getInstance(); @@ -33,7 +34,7 @@ public class SmoothSc implements ModInitializer { public static int hotbarRollover = 0; @Override - public void onInitialize() { + public void onInitializeClient() { isSmoothScrollingRefurbishedLoaded = FabricLoader.getInstance().isModLoaded("smoothscrollingrefurbished"); isCondensedInventoryLoaded = FabricLoader.getInstance().isModLoaded("condensed_creative"); updateConfig(); diff --git a/src/main/java/smsk/smoothscroll/mixin/Chat/ChatHudMixin.java b/src/main/java/smsk/smoothscroll/mixin/Chat/ChatHudMixin.java index 5cab726..55d209d 100644 --- a/src/main/java/smsk/smoothscroll/mixin/Chat/ChatHudMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/Chat/ChatHudMixin.java @@ -1,8 +1,12 @@ package smsk.smoothscroll.mixin.Chat; import java.util.List; + +import com.llamalad7.mixinextras.sugar.Local; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArgs; import org.spongepowered.asm.mixin.injection.ModifyVariable; @@ -23,21 +27,19 @@ @Mixin(value = ChatHud.class, priority = 1001) // i want mods to modify the chat position before, so i get to know where they put it public class ChatHudMixin { - @Shadow int scrolledLines; - @Shadow List visibleMessages; + @Shadow private int scrolledLines; + @Final @Shadow private List visibleMessages; - float scrollOffset; - float maskHeightBuffer; - boolean refreshing = false; - int scrollValBefore; - DrawContext savedContext; - int savedCurrentTick; - Vec2f mtc = new Vec2f(0, 0); // matrix translate - int shownLineCount; + @Unique private float scrollOffset; + @Unique private float maskHeightBuffer; + @Unique private boolean refreshing = false; + @Unique private int scrollValBefore; + @Unique private int savedCurrentTick; + @Unique private Vec2f mtc = new Vec2f(0, 0); // matrix translate + @Unique private int shownLineCount; @Inject(method = "render", at = @At("HEAD")) - public void renderH(DrawContext context, int currentTick, int mouseX, int mouseY, boolean focused, CallbackInfo ci) { - savedContext = context; + private void renderH(DrawContext context, int currentTick, int mouseX, int mouseY, boolean focused, CallbackInfo ci) { if (Config.cfg.chatSpeed == 0) return; savedCurrentTick = currentTick; @@ -60,7 +62,7 @@ private void matrixTranslateCorrector(Args args) { } @ModifyVariable(method = "render", at = @At("STORE"), ordinal = 7) - private int mask(int m) { // m - the y position of the chat + private int mask(int m, @Local(argsOnly = true) DrawContext context) { // m - the y position of the chat if ((Config.cfg.chatSpeed == 0 && Config.cfg.chatOpeningSpeed == 0) || isChatHidden()) return (m); var shownLineCount = 0; @@ -99,7 +101,7 @@ private int mask(int m) { // m - the y position of the chat maskbottom -= distance; } - savedContext.enableScissor(0, masktop, savedContext.getScaledWindowWidth(), maskbottom); + context.enableScissor(0, masktop, context.getScaledWindowWidth(), maskbottom); return (m); } @@ -116,43 +118,43 @@ private int changePosY(int y) { } @ModifyVariable(method = "render", at = @At("STORE")) - private long demask(long a) { // after the cycle + private long demask(long a, @Local(argsOnly = true) DrawContext context) { // after the cycle if ((Config.cfg.chatSpeed == 0 && Config.cfg.chatOpeningSpeed == 0) || this.isChatHidden()) return (a); - if (Config.cfg.enableMaskDebug) savedContext.fill(-100, -100, savedContext.getScaledWindowWidth(), savedContext.getScaledWindowHeight(), ColorHelper.Argb.getArgb(50, 255, 0, 255)); - savedContext.disableScissor(); + if (Config.cfg.enableMaskDebug) context.fill(-100, -100, context.getScaledWindowWidth(), context.getScaledWindowHeight(), ColorHelper.Argb.getArgb(50, 255, 0, 255)); + context.disableScissor(); return (a); } @Inject(method = "render", at = @At("TAIL")) - public void renderT(DrawContext context, int currentTick, int mouseX, int mouseY, boolean focused, CallbackInfo ci) { + private void renderT(DrawContext context, int currentTick, int mouseX, int mouseY, boolean focused, CallbackInfo ci) { if (Config.cfg.chatSpeed == 0) return; scrolledLines = scrollValBefore; } @ModifyVariable(method = "addVisibleMessage", at = @At("STORE"), ordinal = 0) - List onNewMessage(List ot) { + private List onNewMessage(List ot) { if (refreshing) return (ot); scrollOffset -= ot.size() * getLineHeight(); return (ot); } @Inject(method = "scroll", at = @At("HEAD")) - public void scrollH(int scroll, CallbackInfo ci) { + private void scrollH(int scroll, CallbackInfo ci) { scrollValBefore = scrolledLines; } @Inject(method = "scroll", at = @At("TAIL")) - public void scrollT(int scroll, CallbackInfo ci) { + private void scrollT(int scroll, CallbackInfo ci) { scrollOffset += (scrolledLines - scrollValBefore) * getLineHeight(); } @Inject(method = "resetScroll", at = @At("HEAD")) - public void scrollResetH(CallbackInfo ci) { + private void scrollResetH(CallbackInfo ci) { scrollValBefore = scrolledLines; } @Inject(method = "resetScroll", at = @At("TAIL")) - public void scrollResetT(CallbackInfo ci) { + private void scrollResetT(CallbackInfo ci) { scrollOffset += (scrolledLines - scrollValBefore) * getLineHeight(); } @@ -192,10 +194,13 @@ private int addLinesUnder(int r) { @Shadow public boolean isChatFocused() {return (false);} - int getChatDrawOffset() { + @Unique + private int getChatDrawOffset() { return Math.round(scrollOffset) - (Math.round(scrollOffset) / getLineHeight() * getLineHeight()); } - int getChatScrollOffset() { + + @Unique + private int getChatScrollOffset() { return Math.round(scrollOffset); } } diff --git a/src/main/java/smsk/smoothscroll/mixin/Chat/SuggestionWindowMixin.java b/src/main/java/smsk/smoothscroll/mixin/Chat/SuggestionWindowMixin.java index fc35271..2a9eb63 100644 --- a/src/main/java/smsk/smoothscroll/mixin/Chat/SuggestionWindowMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/Chat/SuggestionWindowMixin.java @@ -2,8 +2,11 @@ import java.util.List; +import com.llamalad7.mixinextras.sugar.Local; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; @@ -21,18 +24,17 @@ @Mixin(SuggestionWindow.class) public class SuggestionWindowMixin { - @Shadow int inWindowIndex; - @Shadow List suggestions; - @Shadow Rect2i area; - DrawContext savedContext; - int indexBefore; - float scrollPixelOffset; - int targetIndex; + @Shadow private int inWindowIndex; + @Final @Shadow private List suggestions; + @Final @Shadow private Rect2i area; + + @Unique private int indexBefore; + @Unique private float scrollPixelOffset; + @Unique private int targetIndex; @Inject(method = "render", at = @At("HEAD")) private void renderH(DrawContext context, int mouseX, int mouseY, CallbackInfo ci) { if(Config.cfg.chatSpeed == 0) return; - savedContext = context; scrollPixelOffset = (float) (scrollPixelOffset * Math.pow(Config.cfg.chatSpeed, SmoothSc.getLastFrameDuration())); inWindowIndex = SmoothSc.clamp(targetIndex - getScrollOffset() / 12, 0, suggestions.size() - 10); // the clamp is here as a workaround to a crash } @@ -47,7 +49,7 @@ private boolean mask(boolean a) { private void mask(DrawContext context, int mouseX, int mouseY, CallbackInfo ci) { if(Config.cfg.chatSpeed == 0) return; // savedContext.enableScissor(area.getX() - 1, area.getY(), area.getX() + area.getWidth(), area.getY() + area.getHeight()); - savedContext.enableScissor(0, area.getY(), context.getScaledWindowWidth(), area.getY() + area.getHeight()); + context.enableScissor(0, area.getY(), context.getScaledWindowWidth(), area.getY() + area.getHeight()); } @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Ljava/lang/String;III)I", shift = At.Shift.AFTER)) @@ -78,11 +80,14 @@ private int textPosY(int s) { private void scrollH(int off, CallbackInfo ci) {commonSH();} @Inject(method = "scroll", at = @At("TAIL")) private void scrollT(int off, CallbackInfo ci) {commonST();} - + + @Unique private void commonSH(){ if(Config.cfg.chatSpeed == 0) return; indexBefore = inWindowIndex; } + + @Unique private void commonST(){ if(Config.cfg.chatSpeed == 0) return; scrollPixelOffset += (inWindowIndex - indexBefore) * 12; @@ -101,11 +106,14 @@ private int addLineUnder(int i) { if (Config.cfg.chatSpeed == 0 || getScrollOffset() >= 0 || inWindowIndex >= suggestions.size() - 10) return (i); return (i + 1); } - - int getDrawOffset() { + + @Unique + private int getDrawOffset() { return Math.round(scrollPixelOffset) - (Math.round(scrollPixelOffset) / 12 * 12); } - int getScrollOffset() { + + @Unique + private int getScrollOffset() { return Math.round(scrollPixelOffset); } } diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerAccessor.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerAccessor.java index a3e8a13..6c53a54 100644 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerAccessor.java +++ b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenHandlerAccessor.java @@ -7,5 +7,5 @@ @Mixin(CreativeScreenHandler.class) public interface CreativeScreenHandlerAccessor { @Invoker("getScrollPosition") - public float getPos(int row); + float getPos(int row); } diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenMixin.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenMixin.java index 6cfd658..98f3c83 100644 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/CreativeScreenMixin.java @@ -21,12 +21,12 @@ public class CreativeScreenMixin { private static ItemGroup selectedTab; @Inject(method = "setSelectedTab", at = @At("TAIL")) - void setSelectedTabT(ItemGroup group, CallbackInfo ci) { + private void setSelectedTabT(ItemGroup group, CallbackInfo ci) { SmoothSc.creativeScreenScrollOffset = 0; } @Inject(method = "drawBackground", at = @At(value = "INVOKE", shift = Shift.AFTER, target = "Lnet/minecraft/client/gui/DrawContext;drawTexture(Lnet/minecraft/util/Identifier;IIIIII)V")) - void drawBackground(DrawContext context, float delta, int mouseX, int mouseY, CallbackInfo ci) { + private void drawBackground(DrawContext context, float delta, int mouseX, int mouseY, CallbackInfo ci) { if (SmoothSc.getCreativeScrollOffset() == 0 || Config.cfg.creativeScreenSpeed == 0 || SmoothSc.creativeSH == null) return; int x0 = Math.round(context.getScaledWindowWidth() / 2f) - 90; diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java index 3844052..d062327 100644 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/HandledScreenMixin.java @@ -39,9 +39,8 @@ public abstract class HandledScreenMixin { @Unique private boolean drawingOverdrawnSlot = false; @Inject(method = "render", at = @At("HEAD")) - void render(DrawContext context, int mx, int my, float d, CallbackInfo ci) { - savedContext = context; - originalCursorY = my; + private void render(DrawContext context, int mx, int my, float d, CallbackInfo ci) { + this.originalCursorY = my; if (Config.cfg.creativeScreenSpeed == 0 || SmoothSc.creativeSH == null) return; SmoothSc.creativeScreenScrollOffset = (float) (SmoothSc.creativeScreenScrollOffset * Math.pow(Config.cfg.creativeScreenSpeed, SmoothSc.getLastFrameDuration())); @@ -57,13 +56,13 @@ void render(DrawContext context, int mx, int my, float d, CallbackInfo ci) { } @Inject(method = "render", at = @At(shift = At.Shift.AFTER, value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V")) - void renderMid0(DrawContext context, int mx, int my, float d, CallbackInfo ci, @Local(ordinal = 1) LocalIntRef mouseY) { + private void renderMid0(DrawContext context, int mx, int my, float d, CallbackInfo ci, @Local(ordinal = 1, argsOnly = true) LocalIntRef mouseY) { if (Config.cfg.creativeScreenSpeed == 0 || SmoothSc.creativeScreenItemCount <= 0 || SmoothSc.getCreativeScrollOffset() == 0) return; context.enableScissor(0, context.getScaledWindowHeight() / 2 - 50, context.getScaledWindowWidth(), context.getScaledWindowHeight() / 2 + 38); context.getMatrices().push(); context.getMatrices().translate(0, SmoothSc.getCreativeDrawOffset(), 0); cutEnabled = true; - if(originalCursorY >= savedContext.getScaledWindowHeight() / 2 - 51 && originalCursorY <= savedContext.getScaledWindowHeight() / 2 + 38) + if(originalCursorY >= context.getScaledWindowHeight() / 2 - 51 && originalCursorY <= context.getScaledWindowHeight() / 2 + 38) mouseY.set(my - SmoothSc.getCreativeDrawOffset()); // the fix for instantly disappearing items on the opposite side of scrolling... @@ -87,26 +86,28 @@ private void drawSlotOverridden(DrawContext context, Slot slot) { } @ModifyVariable(method = "drawSlot", at = @At(value = "STORE"), ordinal = 1) - int drawItemY(int y) { + private int drawItemY(int y, @Local(argsOnly = true) DrawContext context) { if(drawingOverdrawnSlot) return y; SmoothSc.creativeScreenItemCount -= 1; - if (SmoothSc.creativeScreenItemCount < 0) tryDisableMask(savedContext); + if (SmoothSc.creativeScreenItemCount < 0) tryDisableMask(context); if (Config.cfg.creativeScreenSpeed == 0 || SmoothSc.creativeScreenItemCount < 0) return y; return y ;//+ SmoothSc.getCreativeDrawOffset(); } + @ModifyVariable(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawSlot(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/screen/slot/Slot;)V", shift = At.Shift.AFTER), argsOnly = true, ordinal = 1) - int revertMousePos(int mouseY) { + private int revertMousePos(int mouseY) { if (Config.cfg.creativeScreenSpeed == 0 || SmoothSc.creativeScreenItemCount < 0) return originalCursorY; return mouseY; } @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawForeground(Lnet/minecraft/client/gui/DrawContext;II)V")) - void renderMid1(DrawContext context, int mx, int my, float d, CallbackInfo ci, @Local(ordinal = 1) int mouseY) { + private void renderMid1(DrawContext context, int mx, int my, float d, CallbackInfo ci, @Local(ordinal = 1) int mouseY) { tryDisableMask(context); mouseY = originalCursorY; } - void tryDisableMask(DrawContext context){ + @Unique + private void tryDisableMask(DrawContext context){ if (drawingOverdrawnSlot) return; if (!cutEnabled) return; if (Config.cfg.enableMaskDebug) diff --git a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/MinecraftClientMixin.java b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/MinecraftClientMixin.java index 51c41b3..243b754 100644 --- a/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/MinecraftClientMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/CreativeScreen/MinecraftClientMixin.java @@ -22,12 +22,12 @@ private void setScreenT(@Nullable Screen s, CallbackInfo ci) { try { var sh = ((CreativeScreenHandler) ((ScreenHandlerProvider) s).getScreenHandler()); if (sh != null) SmoothSc.creativeSH = sh; - } catch (Exception e) {} + } catch (Exception ignored) {} SmoothSc.creativeScreenScrollOffset = 0; } @Inject(method = "reloadResources", at = @At("HEAD")) - void onResReload(CallbackInfoReturnable> cir) { + private void onResReload(CallbackInfoReturnable> cir) { SmoothSc.updateConfig(); } } diff --git a/src/main/java/smsk/smoothscroll/mixin/EntryListWidgetMixin.java b/src/main/java/smsk/smoothscroll/mixin/EntryListWidgetMixin.java index 352b7d8..845b5bd 100644 --- a/src/main/java/smsk/smoothscroll/mixin/EntryListWidgetMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/EntryListWidgetMixin.java @@ -2,6 +2,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -13,13 +14,14 @@ @Mixin(EntryListWidget.class) public class EntryListWidgetMixin { - @Shadow double scrollAmount; // this is the number of pixels - double scrollAmountBuffer; - double targetScroll; - boolean mousescrolling = false; + @Shadow private double scrollAmount; // this is the number of pixels - double scrollValBefore; - boolean updateScActive = false; // this makes the mod know, when things aren't working as expected and lets the user scroll non-smoothly + @Unique private double scrollAmountBuffer; + @Unique private double targetScroll; + @Unique private boolean mousescrolling = false; + + @Unique private double scrollValBefore; + @Unique private boolean updateScActive = false; // this makes the mod know, when things aren't working as expected and lets the user scroll non-smoothly @Inject(method = "setScrollAmount", at = @At("TAIL")) private void setScrollT(double s, CallbackInfo ci) { diff --git a/src/main/java/smsk/smoothscroll/mixin/Hotbar/HotbarMixin.java b/src/main/java/smsk/smoothscroll/mixin/Hotbar/HotbarMixin.java index c6cf04e..c6c0f99 100644 --- a/src/main/java/smsk/smoothscroll/mixin/Hotbar/HotbarMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/Hotbar/HotbarMixin.java @@ -1,6 +1,8 @@ package smsk.smoothscroll.mixin.Hotbar; +import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArgs; @@ -19,21 +21,19 @@ @Mixin(value = InGameHud.class, priority = 999) // if bedrockify applies its mixin before smoothsc, modifyarg crashes public class HotbarMixin { - int rolloverOffsetR = 4; // TODO - int rolloverOffsetL = 4; - int rolloverOffset = 4; - float selectedPixelBuffer = 0; - boolean masked = false; - DrawContext savedContext; + @Unique private int rolloverOffsetR = 4; // TODO + @Unique private int rolloverOffsetL = 4; + @Unique private int rolloverOffset = 4; + @Unique private float selectedPixelBuffer = 0; + @Unique private boolean masked = false; @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lnet/minecraft/util/Identifier;IIII)V", ordinal = 1)) private void draw1(DrawContext context, RenderTickCounter rtc, CallbackInfo ci) { if (Config.cfg.hotbarSpeed == 0) return; - savedContext = context; } @ModifyArgs(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lnet/minecraft/util/Identifier;IIII)V", ordinal = 1)) - private void selectedSlotX(Args args) { + private void selectedSlotX(Args args, @Local(argsOnly = true) DrawContext context) { if (Config.cfg.hotbarSpeed == 0) return; Identifier texture = args.get(0); int x = args.get(1); @@ -59,25 +59,27 @@ private void selectedSlotX(Args args) { masked = false; if (Math.round(selectedPixelBuffer) < 0) { - enableMask(); - SmoothSc.drawHotbarRolloverMirror(savedContext, texture, x, 9 * 20, rolloverOffset, y, width, height); + enableMask(context); + SmoothSc.drawHotbarRolloverMirror(context, texture, x, 9 * 20, rolloverOffset, y, width, height); } else if (Math.round(selectedPixelBuffer) > 20 * 8) { - enableMask(); - SmoothSc.drawHotbarRolloverMirror(savedContext, texture, x, -9 * 20, -rolloverOffset, y, width, height); + enableMask(context); + SmoothSc.drawHotbarRolloverMirror(context, texture, x, -9 * 20, -rolloverOffset, y, width, height); } } @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lnet/minecraft/util/Identifier;IIII)V", ordinal = 1, shift = At.Shift.AFTER)) private void draw2(DrawContext context, RenderTickCounter rtc, CallbackInfo ci) { if (!masked) return; - if (Config.cfg.enableMaskDebug) savedContext.fill(-100, -100, savedContext.getScaledWindowWidth(), savedContext.getScaledWindowHeight(), ColorHelper.Argb.getArgb(50, 0, 255, 255)); + if (Config.cfg.enableMaskDebug) context.fill(-100, -100, context.getScaledWindowWidth(), context.getScaledWindowHeight(), ColorHelper.Argb.getArgb(50, 0, 255, 255)); context.disableScissor(); } - void enableMask() { - var x2 = savedContext.getScaledWindowWidth() / 2 - 91; - var y2 = savedContext.getScaledWindowHeight() - 22; + + @Unique + private void enableMask(DrawContext context) { + var x2 = context.getScaledWindowWidth() / 2 - 91; + var y2 = context.getScaledWindowHeight() - 22; if (FabricLoader.getInstance().getObjectShare().get("raised:hud") instanceof Integer distance) y2 -= distance; - savedContext.enableScissor(x2 - 1, y2 - 1, x2 + 182 + 1, y2 + 22 + 1); + context.enableScissor(x2 - 1, y2 - 1, x2 + 182 + 1, y2 + 22 + 1); masked = true; } } diff --git a/src/main/java/smsk/smoothscroll/mixin/ScrollableWidgetMixin.java b/src/main/java/smsk/smoothscroll/mixin/ScrollableWidgetMixin.java index 53c402c..2be986f 100644 --- a/src/main/java/smsk/smoothscroll/mixin/ScrollableWidgetMixin.java +++ b/src/main/java/smsk/smoothscroll/mixin/ScrollableWidgetMixin.java @@ -2,6 +2,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -13,9 +14,9 @@ @Mixin(ScrollableWidget.class) public class ScrollableWidgetMixin { // DISABLED - @Shadow double scrollY; - double predScrollY; - double targetScrollY; + @Shadow private double scrollY; + @Unique private double predScrollY; + @Unique private double targetScrollY; @Inject(method = "setScrollY(D)V", at = @At("HEAD")) private void SetScrollYH(double s, CallbackInfo ci) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 57e8745..3f3d0aa 100755 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,9 +13,9 @@ }, "license": "gpl-3.0", "icon": "assets/smoothscroll/icon.png", - "environment": "*", + "environment": "client", "entrypoints": { - "main": [ + "client": [ "smsk.smoothscroll.SmoothSc" ] }, diff --git a/src/main/resources/smoothscroll.mixins.json b/src/main/resources/smoothscroll.mixins.json index 0f9ee2e..8654e6e 100755 --- a/src/main/resources/smoothscroll.mixins.json +++ b/src/main/resources/smoothscroll.mixins.json @@ -3,7 +3,8 @@ "plugin": "smsk.smoothscroll.mixin.SmoothScMixinPlugin", "package": "smsk.smoothscroll.mixin", "compatibilityLevel": "JAVA_17", - "mixins": [ + "mixins": [], + "client": [ "Hotbar.HotbarMixin", "Hotbar.PlayerInventoryMixin", "Chat.ChatHudMixin",