Implemented totem charging.

This commit is contained in:
2022-01-16 19:45:46 +00:00
parent 1067cb3a9a
commit 3395810362
2 changed files with 59 additions and 0 deletions

View File

@ -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<NetworkEvent.Context> 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);
}
}

View File

@ -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) {