Compare commits

..
Author SHA1 Message Date
SlaveOfMagicbot 86062cf712 fix: null-safe upgradeDateTime conversion in BuildingManager.setUpgradeDateTime
Placing a banestone (and other callers) pass null to clear a fresh
building's upgrade timer, but the inline .atZone(...).toInstant() NPE'd
on null. Convert only when non-null; the DB layer already handles null.
2026-10-12 16:47:26 -05:00
SlaveOfMagicbot 85cd4e0c14 fix: use LocalDateTime for mine late-window calc in ArcMineWindowAvailableTimeMsg
Instant has no hour-of-day field, so .with(HOUR_OF_DAY, ...) threw
UnsupportedTemporalTypeException. Switch lateTime to LocalDateTime so the
late-window (midnight) time can be set and the seconds-remaining computed.
2026-10-12 12:44:27 -05:00
2 changed files with 9 additions and 8 deletions

No files matched your search

+3 -1
View File
@@ -25,6 +25,7 @@ import engine.objects.*;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
@@ -274,7 +275,8 @@ public enum BuildingManager {
if (building == null)
return;
if (!DbManager.BuildingQueries.updateBuildingUpgradeTime(upgradeDateTime.atZone(ZoneId.systemDefault()).toInstant(), building, rankCost)) {
Instant instant = (upgradeDateTime == null) ? null : upgradeDateTime.atZone(ZoneId.systemDefault()).toInstant();
if (!DbManager.BuildingQueries.updateBuildingUpgradeTime(instant, building, rankCost)) {
Logger.error("Failed to set upgradeTime for building " + building.getObjectUUID());
return;
}
@@ -17,9 +17,8 @@ import engine.net.Protocol;
import engine.objects.Building;
import engine.objects.Guild;
import engine.server.MBServerStatics;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Duration;
import java.time.temporal.ChronoField;
public class ArcMineWindowAvailableTimeMsg extends ClientNetMsg {
@@ -28,7 +27,7 @@ public class ArcMineWindowAvailableTimeMsg extends ClientNetMsg {
private int currentMineHour;
private Duration secondsLeft;
private Instant lateTime;
private LocalDateTime lateTime;
private int late;
/**
@@ -73,15 +72,15 @@ public class ArcMineWindowAvailableTimeMsg extends ClientNetMsg {
currentMineHour = guild.getMineTime();
late = MBServerStatics.MINE_LATE_WINDOW;
lateTime = Instant.now();
lateTime = LocalDateTime.now();
if (late == 0)
lateTime = lateTime.plus(Duration.ofDays(1));
lateTime = lateTime.plusDays(1);
lateTime = lateTime.with(ChronoField.HOUR_OF_DAY, late);
lateTime = lateTime.withHour(late);
late = ((late > 23) ? (late - 24) : late);
secondsLeft = Duration.between(Instant.now(), lateTime);
secondsLeft = Duration.between(LocalDateTime.now(), lateTime);
}
/**