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)
|
.decoder(ChangeTargetPacket::decode)
|
||||||
.consumer(ChangeTargetPacket::handle)
|
.consumer(ChangeTargetPacket::handle)
|
||||||
.add();
|
.add();
|
||||||
|
channel.messageBuilder(ChargeTotemPacket.class, id++)
|
||||||
|
.encoder(ChargeTotemPacket::encode)
|
||||||
|
.decoder(ChargeTotemPacket::decode)
|
||||||
|
.consumer(ChargeTotemPacket::handle)
|
||||||
|
.add();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeVersionInfo(PacketBuffer buffer) {
|
public static void writeVersionInfo(PacketBuffer buffer) {
|
||||||
|
Reference in New Issue
Block a user