Fix turn-timer not matching server-side's value

This commit is contained in:
Stephen Seo 2022-07-21 14:01:34 +09:00
parent e8f3c0cd52
commit a9d2b11f65
6 changed files with 26 additions and 5 deletions

View file

@ -18,6 +18,8 @@ import java.util.concurrent.atomic.AtomicInteger;
public class BattleGui extends Screen { public class BattleGui extends Screen {
private AtomicInteger timeRemaining; private AtomicInteger timeRemaining;
private int timerMax;
private boolean turnTimerEnabled; private boolean turnTimerEnabled;
private long lastInstant; private long lastInstant;
private long elapsedTime; private long elapsedTime;
@ -82,6 +84,7 @@ public class BattleGui extends Screen {
public BattleGui() { public BattleGui() {
super(new TextComponent("Battle Gui")); super(new TextComponent("Battle Gui"));
timeRemaining = new AtomicInteger((int) (Config.BATTLE_DECISION_DURATION_NANO_DEFAULT / 1000000000L)); timeRemaining = new AtomicInteger((int) (Config.BATTLE_DECISION_DURATION_NANO_DEFAULT / 1000000000L));
timerMax = timeRemaining.get();
lastInstant = System.nanoTime(); lastInstant = System.nanoTime();
elapsedTime = 0; elapsedTime = 0;
state = MenuState.MAIN_MENU; state = MenuState.MAIN_MENU;
@ -104,7 +107,7 @@ public class BattleGui extends Screen {
if (TurnBasedMinecraftMod.proxy.getLocalBattle() != null) { if (TurnBasedMinecraftMod.proxy.getLocalBattle() != null) {
TurnBasedMinecraftMod.proxy.getLocalBattle().setState(Battle.State.DECISION); TurnBasedMinecraftMod.proxy.getLocalBattle().setState(Battle.State.DECISION);
} }
timeRemaining.set(TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationSeconds()); timeRemaining.set(timerMax);
elapsedTime = 0; elapsedTime = 0;
lastInstant = System.nanoTime(); lastInstant = System.nanoTime();
setState(MenuState.MAIN_MENU); setState(MenuState.MAIN_MENU);
@ -359,4 +362,8 @@ public class BattleGui extends Screen {
public void setTurnTimerEnabled(boolean enabled) { public void setTurnTimerEnabled(boolean enabled) {
turnTimerEnabled = enabled; turnTimerEnabled = enabled;
} }
public void setTurnTimerMax(int timerMax) {
this.timerMax = timerMax;
}
} }

View file

@ -60,6 +60,11 @@ public class ClientProxy extends CommonProxy {
battleGui.setTurnTimerEnabled(enabled); battleGui.setTurnTimerEnabled(enabled);
} }
@Override
public void setBattleGuiTurnTimerMax(int timeMax) {
battleGui.setTurnTimerMax(timeMax);
}
@Override @Override
public void battleGuiTurnBegin() { public void battleGuiTurnBegin() {
battleGui.turnBegin(); battleGui.turnBegin();

View file

@ -445,7 +445,7 @@ public class Battle {
if (!isServer) { if (!isServer) {
return; return;
} }
PacketBattleInfo infoPacket = new PacketBattleInfo(getSideAIDs(), getSideBIDs(), timer, !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()); PacketBattleInfo infoPacket = new PacketBattleInfo(getSideAIDs(), getSideBIDs(), timer, TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever());
for (Combatant p : players.values()) { for (Combatant p : players.values()) {
TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) p.entity), infoPacket); TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) p.entity), infoPacket);
} }

View file

@ -64,6 +64,8 @@ public class CommonProxy
public void setBattleGuiTurnTimerEnabled(boolean enabled) {} public void setBattleGuiTurnTimerEnabled(boolean enabled) {}
public void setBattleGuiTurnTimerMax(int timeMax) {}
public void battleGuiTurnBegin() {} public void battleGuiTurnBegin() {}
public void battleGuiTurnEnd() {} public void battleGuiTurnEnd() {}

View file

@ -16,6 +16,8 @@ public class PacketBattleInfo
private Collection<Integer> sideA; private Collection<Integer> sideA;
private Collection<Integer> sideB; private Collection<Integer> sideB;
private long decisionNanos; private long decisionNanos;
private long maxDecisionNanos;
private boolean turnTimerEnabled; private boolean turnTimerEnabled;
public PacketBattleInfo() public PacketBattleInfo()
@ -23,14 +25,16 @@ public class PacketBattleInfo
sideA = new ArrayList<Integer>(); sideA = new ArrayList<Integer>();
sideB = new ArrayList<Integer>(); sideB = new ArrayList<Integer>();
decisionNanos = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(); decisionNanos = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos();
maxDecisionNanos = decisionNanos;
turnTimerEnabled = false; turnTimerEnabled = false;
} }
public PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, boolean turnTimerEnabled) public PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled)
{ {
this.sideA = sideA; this.sideA = sideA;
this.sideB = sideB; this.sideB = sideB;
this.decisionNanos = decisionNanos; this.decisionNanos = decisionNanos;
this.maxDecisionNanos = maxDecisionNanos;
this.turnTimerEnabled = turnTimerEnabled; this.turnTimerEnabled = turnTimerEnabled;
} }
@ -44,6 +48,7 @@ public class PacketBattleInfo
buf.writeInt(id); buf.writeInt(id);
} }
buf.writeLong(msg.decisionNanos); buf.writeLong(msg.decisionNanos);
buf.writeLong(msg.maxDecisionNanos);
buf.writeBoolean(msg.turnTimerEnabled); buf.writeBoolean(msg.turnTimerEnabled);
} }
@ -59,8 +64,9 @@ public class PacketBattleInfo
sideB.add(buf.readInt()); sideB.add(buf.readInt());
} }
long decisionNanos = buf.readLong(); long decisionNanos = buf.readLong();
long maxDecisionNanos = buf.readLong();
boolean turnTimerEnabled = buf.readBoolean(); boolean turnTimerEnabled = buf.readBoolean();
return new PacketBattleInfo(sideA, sideB, decisionNanos, turnTimerEnabled); return new PacketBattleInfo(sideA, sideB, decisionNanos, maxDecisionNanos, turnTimerEnabled);
} }
public static void handle(final PacketBattleInfo pkt, Supplier<NetworkEvent.Context> ctx) { public static void handle(final PacketBattleInfo pkt, Supplier<NetworkEvent.Context> ctx) {
@ -89,6 +95,7 @@ public class PacketBattleInfo
TurnBasedMinecraftMod.proxy.setBattleGuiTime((int)(pkt.decisionNanos / 1000000000L)); TurnBasedMinecraftMod.proxy.setBattleGuiTime((int)(pkt.decisionNanos / 1000000000L));
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged(); TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled); TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled);
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerMax((int)(pkt.maxDecisionNanos / 1000000000L));
}); });
ctx.get().setPacketHandled(true); ctx.get().setPacketHandled(true);
} }

View file

@ -34,7 +34,7 @@ public class PacketBattleRequestInfo
if(b == null) { if(b == null) {
return; return;
} }
TurnBasedMinecraftMod.getHandler().reply(new PacketBattleInfo(b.getSideAIDs(), b.getSideBIDs(), b.getTimerNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()), ctx.get()); TurnBasedMinecraftMod.getHandler().reply(new PacketBattleInfo(b.getSideAIDs(), b.getSideBIDs(), b.getTimerNanos(), TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()), ctx.get());
}); });
ctx.get().setPacketHandled(true); ctx.get().setPacketHandled(true);
} }