diff --git a/src/main/java/dev/micle/totemofreviving/network/ChargeTotemPacket.java b/src/main/java/dev/micle/totemofreviving/network/ChargeTotemPacket.java new file mode 100644 index 0000000..8194758 --- /dev/null +++ b/src/main/java/dev/micle/totemofreviving/network/ChargeTotemPacket.java @@ -0,0 +1,54 @@ +package dev.micle.totemofreviving.network; + +import dev.micle.totemofreviving.item.StrawTotemItem; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.Hand; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.function.Supplier; + +import static dev.micle.totemofreviving.item.StrawTotemItem.TAG_CHARGE; + +public class ChargeTotemPacket { + private final Hand hand; + + public ChargeTotemPacket(final Hand hand) { + this.hand = hand; + } + + public static void encode(final ChargeTotemPacket packet, final PacketBuffer buffer) { + Network.writeVersionInfo(buffer); + buffer.writeEnum(packet.hand); + } + + public static ChargeTotemPacket decode(final PacketBuffer buffer) { + Network.checkVersion(buffer); + return new ChargeTotemPacket(buffer.readEnum(Hand.class)); + } + + public static void handle(final ChargeTotemPacket packet, final Supplier contextSupplier) { + final NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> { + ServerPlayerEntity sender = context.getSender(); + if (sender == null) { return; } + ItemStack totem = sender.getMainHandItem(); + ItemStack charge = sender.getOffhandItem(); + if (!packet.hand.equals(Hand.MAIN_HAND)) { + totem = sender.getOffhandItem(); + charge = sender.getMainHandItem(); + } + + if (totem.getItem() instanceof StrawTotemItem) { + if (totem.getOrCreateTag().getInt(TAG_CHARGE) >= StrawTotemItem.getMaxCharge()) { + return; + } + } + + totem.getOrCreateTag().putInt(TAG_CHARGE, totem.getOrCreateTag().getInt(TAG_CHARGE) + 1); + charge.setCount(charge.getCount() - 1); + }); + context.setPacketHandled(true); + } +} diff --git a/src/main/java/dev/micle/totemofreviving/network/Network.java b/src/main/java/dev/micle/totemofreviving/network/Network.java index 0dfb373..7fcdca7 100644 --- a/src/main/java/dev/micle/totemofreviving/network/Network.java +++ b/src/main/java/dev/micle/totemofreviving/network/Network.java @@ -29,6 +29,11 @@ public class Network { .decoder(ChangeTargetPacket::decode) .consumer(ChangeTargetPacket::handle) .add(); + channel.messageBuilder(ChargeTotemPacket.class, id++) + .encoder(ChargeTotemPacket::encode) + .decoder(ChargeTotemPacket::decode) + .consumer(ChargeTotemPacket::handle) + .add(); } public static void writeVersionInfo(PacketBuffer buffer) {