Implemented totem charging.
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user