TrueHorse / Wild-Tool-Access

A Minecraft mod, that adds an item quick select.
MIT License
8 stars 1 forks source link

Remove server side requirement #2

Closed ModProg closed 2 years ago

ModProg commented 2 years ago

On modrinth it claims to be required on both server and client side.

shouldn't this be a client side only mod?

TrueHorse commented 2 years ago

As this is my first mod I tried doing it client side first, but the the result was that, when I swaped a tool in my hotbar and tried to use it, it "transformed" back into what was there before, so it was just a visual change. And in hindsight it made sence to me, because I thought "actual" servers wouldn't just let the client manipulate it's inventory and because the inventory information is relevant to the server, to let the player interact with the world. If I am overlooking something, please tell me and I will update the mod (at some point) to be client side only.

ModProg commented 2 years ago

If I am overlooking something, please tell me and I will update the mod (at some point) to be client side only.

I would need to investigate the correct functions to call my self, but it should be possible to tell the vanilla server to swap the item from the inventory to the hotbar.

You would claim to have opened the inventory and swapped the two items.

I think https://github.com/maruohon/tweakeroo does something like that.

TrueHorse commented 2 years ago

Yeah, looks like it. I will look into that at some point, but I don't know how soon that will be.

TrueHorse commented 2 years ago

Thank you for telling me though.

dadoirie commented 2 years ago

yeah - that would be pretty neat, because currently my server crashes when launching, but loading up the same modpack singleplayer it causes no errors and works as expected ... using fabric 1.18.2 and version 1.0.2 of the mod

that's what server logs regarding that crash

Minecraft has crashed!
net.fabricmc.loader.impl.FormattedException: java.lang.BootstrapMethodError: java.lang.RuntimeException: Mixin transformation of net.minecraft.class_1661 failed
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:463) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.server.FabricServerLauncher.main(FabricServerLauncher.java:69) [fabric-loader-0.14.9.jar:?]
Caused by: java.lang.BootstrapMethodError: java.lang.RuntimeException: Mixin transformation of net.minecraft.class_1661 failed
        at net.minecraft.class_3917.<clinit>(class_3917.java:11) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_17583(class_2378.java:201) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_40280(class_2378.java:352) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_34031(class_2378.java:300) ~[server-intermediary.jar:?]
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
        at net.minecraft.class_2378.<clinit>(class_2378.java:299) ~[server-intermediary.jar:?]
        at net.minecraft.class_2966.method_12851(class_2966.java:49) ~[server-intermediary.jar:?]
        at net.minecraft.server.Main.main(Main.java:98) ~[server-intermediary.jar:?]
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461) ~[fabric-loader-0.14.9.jar:?]
        ... 3 more
Caused by: java.lang.RuntimeException: Mixin transformation of net.minecraft.class_1661 failed
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:419) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:145) ~[fabric-loader-0.14.9.jar:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at net.minecraft.class_3917.<clinit>(class_3917.java:11) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_17583(class_2378.java:201) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_40280(class_2378.java:352) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_34031(class_2378.java:300) ~[server-intermediary.jar:?]
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
        at net.minecraft.class_2378.<clinit>(class_2378.java:299) ~[server-intermediary.jar:?]
        at net.minecraft.class_2966.method_12851(class_2966.java:49) ~[server-intermediary.jar:?]
        at net.minecraft.server.Main.main(Main.java:98) ~[server-intermediary.jar:?]
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461) ~[fabric-loader-0.14.9.jar:?]
        ... 3 more
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
        at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:392) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:414) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:145) ~[fabric-loader-0.14.9.jar:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at net.minecraft.class_3917.<clinit>(class_3917.java:11) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_17583(class_2378.java:201) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_40280(class_2378.java:352) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_34031(class_2378.java:300) ~[server-intermediary.jar:?]
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
        at net.minecraft.class_2378.<clinit>(class_2378.java:299) ~[server-intermediary.jar:?]
        at net.minecraft.class_2966.method_12851(class_2966.java:49) ~[server-intermediary.jar:?]
        at net.minecraft.server.Main.main(Main.java:98) ~[server-intermediary.jar:?]
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461) ~[fabric-loader-0.14.9.jar:?]
        ... 3 more
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinPreProcessorException: Attach error for wildtoolaccess.mixins.json:PlayerInventoryMixin from mod wildtoolaccess during activity: [Transform -> Method scrollInAccessBar(DLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V -> INVOKESTATIC -> net/minecraft/class_310::method_1551:()Lnet/minecraft/class_310;]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.attach(MixinPreProcessorStandard.java:313) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.createContextFor(MixinPreProcessorStandard.java:277) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinInfo.createContextFor(MixinInfo.java:1289) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:292) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:421) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:403) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:414) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:145) ~[fabric-loader-0.14.9.jar:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at net.minecraft.class_3917.<clinit>(class_3917.java:11) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_17583(class_2378.java:201) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_40280(class_2378.java:352) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_34031(class_2378.java:300) ~[server-intermediary.jar:?]
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
        at net.minecraft.class_2378.<clinit>(class_2378.java:299) ~[server-intermediary.jar:?]
        at net.minecraft.class_2966.method_12851(class_2966.java:49) ~[server-intermediary.jar:?]
        at net.minecraft.server.Main.main(Main.java:98) ~[server-intermediary.jar:?]
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461) ~[fabric-loader-0.14.9.jar:?]
        ... 3 more
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: net.minecraft.class_310
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transformMemberReference(MixinPreProcessorStandard.java:783) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transformMethod(MixinPreProcessorStandard.java:769) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transform(MixinPreProcessorStandard.java:735) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.attach(MixinPreProcessorStandard.java:307) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.createContextFor(MixinPreProcessorStandard.java:277) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinInfo.createContextFor(MixinInfo.java:1289) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:292) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:421) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:403) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:414) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:145) ~[fabric-loader-0.14.9.jar:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at net.minecraft.class_3917.<clinit>(class_3917.java:11) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_17583(class_2378.java:201) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_40280(class_2378.java:352) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_34031(class_2378.java:300) ~[server-intermediary.jar:?]
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
        at net.minecraft.class_2378.<clinit>(class_2378.java:299) ~[server-intermediary.jar:?]
        at net.minecraft.class_2966.method_12851(class_2966.java:49) ~[server-intermediary.jar:?]
        at net.minecraft.server.Main.main(Main.java:98) ~[server-intermediary.jar:?]
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461) ~[fabric-loader-0.14.9.jar:?]
        ... 3 more
Caused by: java.lang.ClassNotFoundException: net.minecraft.class_310
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transformMemberReference(MixinPreProcessorStandard.java:783) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transformMethod(MixinPreProcessorStandard.java:769) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transform(MixinPreProcessorStandard.java:735) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.attach(MixinPreProcessorStandard.java:307) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.createContextFor(MixinPreProcessorStandard.java:277) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinInfo.createContextFor(MixinInfo.java:1289) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:292) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:421) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:403) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202) ~[sponge-mixin-0.11.4+mixin.0.8.5.jar:0.11.4+mixin.0.8.5]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:414) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218) ~[fabric-loader-0.14.9.jar:?]
        at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:145) ~[fabric-loader-0.14.9.jar:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at net.minecraft.class_3917.<clinit>(class_3917.java:11) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_17583(class_2378.java:201) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_40280(class_2378.java:352) ~[server-intermediary.jar:?]
        at net.minecraft.class_2378.method_34031(class_2378.java:300) ~[server-intermediary.jar:?]
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
        at net.minecraft.class_2378.<clinit>(class_2378.java:299) ~[server-intermediary.jar:?]
        at net.minecraft.class_2966.method_12851(class_2966.java:49) ~[server-intermediary.jar:?]
        at net.minecraft.server.Main.main(Main.java:98) ~[server-intermediary.jar:?]
        at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461) ~[fabric-loader-0.14.9.jar:?]
        ... 3 more
TrueHorse commented 2 years ago

yeah - that would be pretty neat, because currently my server crashes when launching, but loading up the same modpack singleplayer it causes no errors and works as expected ... using fabric 1.18.2 and version 1.0.2 of the mod

For now I will address this as a separate issue (#5 ), which doesn't mean client only is off the table, I just don't feel like working on it for now.

TrueHorse commented 2 years ago

@ModProg Actually, now that I think about it: What would be the benefit of this mod being client only? Wouldn't this just lead to cheating issues without any benefit?

ModProg commented 2 years ago

The advantage is, that this is the same level of "cheating" as zoom, minimap, tweakeroo etc., that many survival players tolerate on their servers, but don't want to actively support by installing mods serverside.

There are already similar features available in Client Only mods, and there is also dedicated cheat software that is capable of a lot more than this.

I don't think you increase the cheatablility by making this clientside, but you'd allow people to use this on vanilla servers that accept these small utility mods, without the server needing to run on fabric and actively installing this mod.

TrueHorse commented 2 years ago

I guess that makes sense. And servers that don't want mods like this are probably looking for weird packets already anyway, since there are enough client side mods, that would be cheating in a pvp environment, already. My bad.

TrueHorse commented 2 years ago

It has finally been done. Thank you for your patience @ModProg. Next update won't require server side anymore.