import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketBattleInfo;
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketBattleMessage;
+import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketBattlePing;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
private ResourceKey<Level> dimension;
- private long infoNanos;
+ private long pingTimerNanos;
public enum State {
DECISION(0),
undecidedCount = new AtomicInteger(0);
random = new Random();
this.dimension = dimension;
- infoNanos = 0;
+ pingTimerNanos = 0;
if (sideA != null) {
for (Entity e : sideA) {
EntityInfo entityInfo;
}
}
+ protected void notifyPlayersBattlePing() {
+ if (!isServer) {
+ return;
+ }
+ PacketBattlePing pingPacket = new PacketBattlePing(getId());
+ for (Combatant p : players.values()) {
+ PacketDistributor.sendToPlayer((ServerPlayer)p.entity, pingPacket);
+ }
+ }
+
protected void sendMessageToAllPlayers(PacketBattleMessage.MessageType type, int from, int to, int amount) {
sendMessageToAllPlayers(type, from, to, amount, new String());
}
}
private boolean update(final long dt) {
- infoNanos += dt;
- if (infoNanos >= 4000000000L) {
- infoNanos = 0;
- notifyPlayersBattleInfo();
+ pingTimerNanos += dt;
+ if (pingTimerNanos >= 4000000000L) {
+ pingTimerNanos = 0;
+ notifyPlayersBattlePing();
}
if (battleEnded) {
Collection<Combatant> combatants = new ArrayList<Combatant>();
registrar.playToClient(PacketClientGUI.TYPE, PacketClientGUI.STREAM_CODEC, new PacketClientGUI.PayloadHandler());
+ registrar.playToClient(PacketBattlePing.TYPE, PacketBattlePing.STREAM_CODEC, new PacketBattlePing.PayloadHandler());
+
logger.debug("Register packets com_burnedkirby_turnbasedminecraft");
}
--- /dev/null
+package com.burnedkirby.TurnBasedMinecraft.common.networking;
+
+import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.codec.ByteBufCodecs;
+import net.minecraft.network.codec.StreamCodec;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+import net.minecraft.resources.ResourceLocation;
+import net.neoforged.neoforge.network.handling.IPayloadContext;
+import net.neoforged.neoforge.network.handling.IPayloadHandler;
+import org.jetbrains.annotations.NotNull;
+
+public record PacketBattlePing(int battleID) implements CustomPacketPayload {
+ public static final CustomPacketPayload.Type<PacketBattlePing> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattleping"));
+
+ public static final StreamCodec<ByteBuf, PacketBattlePing> STREAM_CODEC = StreamCodec.composite(
+ ByteBufCodecs.VAR_INT,
+ PacketBattlePing::battleID,
+ PacketBattlePing::new
+ );
+
+ @Override
+ public Type<? extends CustomPacketPayload> type() {
+ return TYPE;
+ }
+
+ public static class PayloadHandler implements IPayloadHandler<PacketBattlePing> {
+ @Override
+ public void handle(final @NotNull PacketBattlePing pkt, IPayloadContext ctx) {
+ ctx.enqueueWork(() -> {
+ if (TurnBasedMinecraftMod.proxy.getLocalBattle() == null) {
+ TurnBasedMinecraftMod.proxy.createLocalBattle(pkt.battleID);
+ }
+ TurnBasedMinecraftMod.proxy.setBattleGuiAsGui();
+ TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
+ }).exceptionally(e -> {
+ ctx.disconnect(Component.literal("Exception handling PacketBattlePing! " + e.getMessage()));
+ return null;
+ });
+ }
+ }
+}