Closed ModProg closed 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.
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.
Yeah, looks like it. I will look into that at some point, but I don't know how soon that will be.
Thank you for telling me though.
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
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.
@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?
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.
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.
It has finally been done. Thank you for your patience @ModProg. Next update won't require server side anymore.
On modrinth it claims to be required on both server and client side.
shouldn't this be a client side only mod?