Open Sodium-Aluminate opened 2 weeks ago
I created a mixin to log the sendPacket function:
package fi.dy.masa.tweakeroo.mixin;
import net.minecraft.client.network.ClientCommonNetworkHandler;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
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;
@Mixin(ClientCommonNetworkHandler.class)
public class SendPacketLogger {
@Inject(method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", at = @At("HEAD"))
private void a(Packet<?> packet, CallbackInfo ci){
if(packet instanceof KeepAliveC2SPacket || packet instanceof PlayerMoveC2SPacket) return;
System.out.println(packet.getClass());
}
}
// here is what I found:
// using water bucket:
//[22:05:47] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket
//[22:05:47] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket
//[22:05:47] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.PlayerInteractItemC2SPacket
// we can found that there are the 2nd Interact packet sent after the 1st swap packet
// which means we switch the hotbar first, then use the water bucket.
// so we should send switch hotbar packet it later.
//[22:05:47] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.HandSwingC2SPacket
//[22:05:47] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket
//[22:05:53] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket
// powersnow bucket, works fine.
//[22:06:05] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket
//[22:06:05] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket
//[22:06:05] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.HandSwingC2SPacket
//[22:06:05] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket
//[22:06:09] [Render thread/INFO] (Minecraft) [STDOUT]: class net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket
the trace three packet: PlayerInteractBlockC2SPacket -> UpdateSelectedSlotC2SPacket -> PlayerInteractItemC2SPacket
PlayerInteractBlockC2SPacket
java.lang.Exception
at net.minecraft.client.network.ClientCommonNetworkHandler.printTrace(ClientCommonNetworkHandler.java:529)
at net.minecraft.client.network.ClientCommonNetworkHandler.handler$zel000$tweakeroo$a(ClientCommonNetworkHandler.java:523)
at net.minecraft.client.network.ClientCommonNetworkHandler.sendPacket(ClientCommonNetworkHandler.java)
at net.minecraft.client.network.ClientPlayerInteractionManager.sendSequencedPacket(ClientPlayerInteractionManager.java:239)
at net.minecraft.client.network.ClientPlayerInteractionManager.interactBlock(ClientPlayerInteractionManager.java:275)
at fi.dy.masa.tweakeroo.tweaks.PlacementTweaks.processRightClickBlockWrapper(PlacementTweaks.java:816)
at fi.dy.masa.tweakeroo.tweaks.PlacementTweaks.tryPlaceBlock(PlacementTweaks.java:602)
at fi.dy.masa.tweakeroo.tweaks.PlacementTweaks.onProcessRightClickBlock(PlacementTweaks.java:365)
at net.minecraft.client.MinecraftClient.redirect$zde000$tweakeroo$onProcessRightClickBlock(MinecraftClient.java:3007)
at net.minecraft.client.MinecraftClient.doItemUse(MinecraftClient.java:1680)
at net.minecraft.client.MinecraftClient.handleInputEvents(MinecraftClient.java:1907)
at net.minecraft.client.MinecraftClient.tick(MinecraftClient.java:1758)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1176)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:838)
at net.minecraft.client.main.Main.main(Main.java:237)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
UpdateSelectedSlotC2SPacket
slot: 1
java.lang.Exception
at net.minecraft.client.network.ClientCommonNetworkHandler.printTrace(ClientCommonNetworkHandler.java:529)
at net.minecraft.client.network.ClientCommonNetworkHandler.handler$zel000$tweakeroo$a(ClientCommonNetworkHandler.java:521)
at net.minecraft.client.network.ClientCommonNetworkHandler.sendPacket(ClientCommonNetworkHandler.java)
at fi.dy.masa.tweakeroo.util.InventoryUtils.swapItemToHand(InventoryUtils.java:809)
at fi.dy.masa.tweakeroo.util.InventoryUtils.restockNewStackToHand(InventoryUtils.java:331)
at fi.dy.masa.tweakeroo.tweaks.PlacementTweaks.tryRestockHand(PlacementTweaks.java:693)
at fi.dy.masa.tweakeroo.tweaks.PlacementTweaks.onProcessRightClickPost(PlacementTweaks.java:151)
at net.minecraft.client.network.ClientPlayerInteractionManager.handler$zca000$tweakeroo$onProcessRightClickPost(ClientPlayerInteractionManager.java:587)
at net.minecraft.client.network.ClientPlayerInteractionManager.method_41929(ClientPlayerInteractionManager.java:336)
at net.minecraft.client.network.ClientPlayerInteractionManager.sendSequencedPacket(ClientPlayerInteractionManager.java:238)
at net.minecraft.client.network.ClientPlayerInteractionManager.interactItem(ClientPlayerInteractionManager.java:323)
at net.minecraft.client.MinecraftClient.doItemUse(MinecraftClient.java:1696)
at net.minecraft.client.MinecraftClient.handleInputEvents(MinecraftClient.java:1907)
at net.minecraft.client.MinecraftClient.tick(MinecraftClient.java:1758)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1176)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:838)
at net.minecraft.client.main.Main.main(Main.java:237)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
PlayerInteractItemC2SPacket
java.lang.Exception
at net.minecraft.client.network.ClientCommonNetworkHandler.printTrace(ClientCommonNetworkHandler.java:529)
at net.minecraft.client.network.ClientCommonNetworkHandler.handler$zel000$tweakeroo$a(ClientCommonNetworkHandler.java:523)
at net.minecraft.client.network.ClientCommonNetworkHandler.sendPacket(ClientCommonNetworkHandler.java)
at net.minecraft.client.network.ClientPlayerInteractionManager.sendSequencedPacket(ClientPlayerInteractionManager.java:239)
at net.minecraft.client.network.ClientPlayerInteractionManager.interactItem(ClientPlayerInteractionManager.java:323)
at net.minecraft.client.MinecraftClient.doItemUse(MinecraftClient.java:1696)
at net.minecraft.client.MinecraftClient.handleInputEvents(MinecraftClient.java:1907)
at net.minecraft.client.MinecraftClient.tick(MinecraftClient.java:1758)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1176)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:838)
at net.minecraft.client.main.Main.main(Main.java:237)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
HandSwingC2SPacket // not related
UpdateSelectedSlotC2SPacket
slot: 1
java.lang.Exception
at net.minecraft.client.network.ClientCommonNetworkHandler.printTrace(ClientCommonNetworkHandler.java:529)
at net.minecraft.client.network.ClientCommonNetworkHandler.handler$zel000$tweakeroo$a(ClientCommonNetworkHandler.java:521)
at net.minecraft.client.network.ClientCommonNetworkHandler.sendPacket(ClientCommonNetworkHandler.java)
at net.minecraft.client.network.ClientPlayerInteractionManager.syncSelectedSlot(ClientPlayerInteractionManager.java:265)
at net.minecraft.client.network.ClientPlayerInteractionManager.tick(ClientPlayerInteractionManager.java:248)
at net.minecraft.client.MinecraftClient.tick(MinecraftClient.java:1725)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1176)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:838)
at net.minecraft.client.main.Main.main(Main.java:237)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
we can found that: the UpdateSelectedSlotC2SPacket is sent by tweakeroo.tweaks.PlacementTweaks.onProcessRightClickPost
,and caused by net.minecraft.client.network.ClientPlayerInteractionManager.interactItem
but the packet was earlier than the PlayerInteractItemC2SPacket.
I also tried a Lingering potion, it have same bug.
checked #17, to avoid any network issue, using single player game
when I use the water bucket:
I found my hotbar was switch from slot 1 to slot 3, but the item 3 is empty bucket.
but if i try to put a stone, tweakeroo will only swap the item, and not switch my hotbar:
to avoid any other mod switch my hotbar, I turn onn the hand restock and tried again: then my hotbar is still in the 1st slot.
I also tested by lava and fish bucket(fish buckets are copied by creative mode so the fish bucket have same nbt), also have this issue. but the power snow buckets are working, it switched the hotbar but not swap the item: