diff --git a/JodaTime_Migration_Plan_ArcMineWindowMsg.pdf b/JodaTime_Migration_Plan_ArcMineWindowMsg.pdf deleted file mode 100644 index 3a201fe3..00000000 --- a/JodaTime_Migration_Plan_ArcMineWindowMsg.pdf +++ /dev/null @@ -1,93 +0,0 @@ -%PDF-1.4 -%“Œ‹ž ReportLab Generated PDF document (opensource) -1 0 obj -<< -/F1 2 0 R /F2 3 0 R ->> -endobj -2 0 obj -<< -/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font ->> -endobj -3 0 obj -<< -/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font ->> -endobj -4 0 obj -<< -/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] ->> /Rotate 0 /Trans << - ->> - /Type /Page ->> -endobj -5 0 obj -<< -/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] ->> /Rotate 0 /Trans << - ->> - /Type /Page ->> -endobj -6 0 obj -<< -/PageMode /UseNone /Pages 8 0 R /Type /Catalog ->> -endobj -7 0 obj -<< -/Author (\(anonymous\)) /CreationDate (D:20261002192444-05'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20261002192444-05'00') /Producer (ReportLab PDF Library - \(opensource\)) - /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False ->> -endobj -8 0 obj -<< -/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages ->> -endobj -9 0 obj -<< -/Filter [ /ASCII85Decode /FlateDecode ] /Length 941 ->> -stream -GatUr>Aoub'S,*3Tc8b\HlXgC`s?!-jL(Y>1->Hk)D''8#s-F]g]87dYk"`lBT3Tm^l!8i6Wp6SbZmo,V/"V??KXrni.Jb0?*VACm%_*0WB_)-/JG0FmF<.87/$][#s;b/E#9aJSZ9bW8!Os#RoH'6hOBa1>.18?;%&=,F[e8QkpCIn\g0-PaqoErUce;Ja\%pp`nj8sgNOibjW9mK;P96:guFagtKR$BAg<#u>Y;4_##8/)UJT;t+&]+cfCjE7T^a9](jOG]:\rKJ/Lr)-hepCkkd&:Sp,<;SdjoS(qsK+f*K$hV)"^'D0:QL>TZG2ZIQ0Rh_k7_4md"VY*Udb?$t+?#i?iLrXF',n>!4#L$@cXVd3P\%'*T<;MK.h#].""@#s946\VD!)/,TLC)Vf;(G4pX57RqN5DGeQAt]\7N0^;`bI,`BjMR==YA%]dfoHkkC@2VZ4S%DdDW.Ic,"E)8RUNtlI[B,+5"P8#>r/FYU:)VO^hde>Q'0[sJ[RuDo(6pa=dRnh)'nr_U?i0E$+YK7:"DemIP2TuX&;GXpS-h.30M$GJE_aP%o;J;Z\DXZ#em3JK#E"WTmr#QS[D*aiJ8G-f2b+?u\P>uHk*dPlP[[/<*ZC1muX<,9]cusD]gP"?[@njM7"t6ROh$,9;NI--J!X5-tqh&.gV^695^F?+4h"hM]7PG'9?"JP%W9nb]C5l@<1gGfa2a]f(dkE,9j)@Nho$FudAM2H7aq:=2iLJiT'endstream -endobj -10 0 obj -<< -/Filter [ /ASCII85Decode /FlateDecode ] /Length 702 ->> -stream -Gau1+?#Q2d'Sc)J/']H/)@mMQOmZs]W>939[`,dEWZ5s`Ohha%FoD%j+$j+B;$C[>KYZMe*rC@m0\C^0p)<)oCC2.*0jk7M&MQKRkZ8&Sm!4?_0Dtm`Q(pRpF*9WHV),dn&!cdU>ZYnF#>GrRBklQ@=qP,VV$U8Y/?P;^A-(SU;S4Je!Qecp$N>_oM;T+0ZX4-Xh^gDaT*%4Yr;_bjCM9ReHMktJPD8DjX>`c;FL6A?G.Zq'etON%q*8*VPXd0UI&TE&Gg2p_]WCS*F@ID)1BA).3tOmNPF$m?*4!5AQ$TA"1,*io]\>M$i3AI@IGYfNQ(kTY(fFM^d0!=;lC1SE0TL"%Z%FJZ<":=98NMf);(G\GE=1GT:q/%QFp\Jj^.e1M+m8,9'<&7E@-UY[EE1f0A5LmM@*kr(jlIVj(_0FNc3i3XoP+:">PLTFgG#q9npllbY3mD_'Z?Dch=!95d`>ft1=ni[(XMZ;VYhkCl5[=,i=fT10L$n6\5X/+bS:5R;'3WeHr@KG?$k>6B&sQpniu]Dc0%ciNIf$Km\`YBT>un[[@\0h)p\6\>CA[1?jkW#hhdh+AjmFAUJ6,hM!,$,[gendstream -endobj -xref -0 11 -0000000000 65535 f -0000000061 00000 n -0000000102 00000 n -0000000209 00000 n -0000000321 00000 n -0000000514 00000 n -0000000708 00000 n -0000000776 00000 n -0000001056 00000 n -0000001121 00000 n -0000002152 00000 n -trailer -<< -/ID -[<823ed1f68bcfbaecab7b5c501b924b32><823ed1f68bcfbaecab7b5c501b924b32>] -% ReportLab generated PDF document -- digest (opensource) - -/Info 7 0 R -/Root 6 0 R -/Size 11 ->> -startxref -2945 -%%EOF diff --git a/JodaTime_Migration_Plan_dbWarehouseHandler.md b/JodaTime_Migration_Plan_dbWarehouseHandler.md deleted file mode 100644 index c689dab6..00000000 --- a/JodaTime_Migration_Plan_dbWarehouseHandler.md +++ /dev/null @@ -1,86 +0,0 @@ -# JodaTime to java.time.* Migration Plan: dbWarehouseHandler.java - -## Overview -This document outlines the migration of JodaTime references in `dbWarehouseHandler.java` from `org.joda.time.DateTime` to `java.time.Instant`. - -## Files to be Modified -- `src/engine/db/handlers/dbWarehouseHandler.java` - -## JodaTime References Found -1. Import statement: `import org.joda.time.DateTime;` -2. Method parameter: `DateTime upgradeDate` in method signature (line 58) -3. Method parameter: `DateTime date` in method signature (line 490) -4. Usage of getMillis() method: `upgradeDate.getMillis()` (line 79) -5. Usage of getMillis() method: `date.getMillis()` (line 501) - -## Migration Strategy - -### Step 1: Update Import Statement -Replace: -```java -import org.joda.time.DateTime; -``` -With: -```java -import java.time.Instant; -``` - -### Step 2: Update Method Signatures -Replace: -```java -DateTime upgradeDate -``` -With: -```java -Instant upgradeDate -``` - -Replace: -```java -DateTime date -``` -With: -```java -Instant date -``` - -### Step 3: Update Method Calls -Replace: -```java -upgradeDate.getMillis() -``` -With: -```java -upgradeDate.toEpochMilli() -``` - -Replace: -```java -date.getMillis() -``` -With: -```java -date.toEpochMilli() -``` - -### Step 4: Database Timestamp Handling -The database timestamp handling remains the same as `java.sql.Timestamp` constructor accepts long values (milliseconds since epoch), which can be obtained from `Instant.toEpochMilli()`. - -## Implementation Plan - -1. Update import statement from `org.joda.time.DateTime` to `java.time.Instant` -2. Update method signature for `upgradeDate` parameter from `DateTime` to `Instant` -3. Update method signature for `date` parameter from `DateTime` to `Instant` -4. Replace `upgradeDate.getMillis()` with `upgradeDate.toEpochMilli()` -5. Replace `date.getMillis()` with `date.toEpochMilli()` - -## Testing Considerations -- Ensure the network packet serialization format remains unchanged -- Verify database operations work correctly with Instant values -- Test warehouse creation and transaction creation functionality -- Confirm that all existing functionality continues to work as expected - -## Compatibility Notes -- The migration maintains backward compatibility with database operations since `java.sql.Timestamp` constructor accepts milliseconds -- Network packet structure remains the same (no serialization changes needed) -- Thread safety improvements from using java.time.* classes \ No newline at end of file diff --git a/JodaTime_References_Tracking.txt b/JodaTime_References_Tracking.txt deleted file mode 100644 index 5dbca63c..00000000 --- a/JodaTime_References_Tracking.txt +++ /dev/null @@ -1,67 +0,0 @@ -# JodaTime to java.time.* Migration Tracking - -## Overview -This file tracks the remaining JodaTime references that need to be migrated to java.time.* in the Magicbane Server codebase. - -## Current Status (as of 2026-10-02) -Branch: ai-refactor-jodatimeFull - -## Files with JodaTime References (Total: 30 files) - -### Files Already Migrated or Partially Migrated -1. ArcMineWindowAvailableTimeMsg.java - ✅ COMPLETE (already using java.time.*) - -### Files to be Migrated -1. BaneRecord.java - ✅ COMPLETE -2. dbBaneHandler.java - ✅ COMPLETE -3. dbBuildingHandler.java - ✅ COMPLETE -4. dbGuildHandler.java - ✅ COMPLETE -5. dbMobHandler.java - ✅ COMPLETE -6. dbNPCHandler.java - ✅ COMPLETE -7. dbShrineHandler.java - ✅ COMPLETE -8. dbWarehouseHandler.java - ✅ COMPLETE (2026-10-02) -9. GuildManager.java - ✅ COMPLETE (2026-10-02) -10. BaneDefaultTimeJob.java - [ ] -11. ByteBufferWriter.java - [ ] -12. AcceptInviteToGuildHandler.java - [ ] -13. BanishUnbanishHandler.java - [ ] -14. ManageCityAssetMsgHandler.java - [ ] -15. PlaceAssetMsgHandler.java - [ ] -16. GuildInfoMsg.java - [ ] -17. ManageCityAssetsMsg.java - [ ] -18. ManageNPCMsg.java - [ ] -19. NetMsgFactory.java - [ ] -20. Bane.java - [ ] -21. Guild.java - [ ] -22. GuildHistory.java - [ ] -23. ItemFactory.java - [ ] -24. Mob.java - [ ] -25. NPC.java - [ ] -26. PlayerCharacter.java - [ ] -27. ProducedItem.java - [ ] -28. Transaction.java - [ ] -29. Warehouse.java - [ ] - -## Migration Strategy -1. Analyze each file to understand JodaTime usage patterns -2. Replace imports with java.time equivalents -3. Update variable declarations and method calls -4. Ensure network packet compatibility is maintained -5. Test functionality after each change - -## Progress Tracking Template -For each file, mark as complete when migration is finished: -- [x] File name - Status: COMPLETED (Date: YYYY-MM-DD) -- [ ] File name - Status: PENDING - -## Migration Notes -- Focus on minimal changes to maintain compatibility -- Preserve existing network packet serialization format -- Use java.time classes for better performance and thread safety -- Test each migration in a controlled environment - -## Next Steps -1. Start with files that have minimal dependencies (like ArcMineWindowAvailableTimeMsg) -2. Proceed systematically through the list -3. Create detailed migration plans for complex files -4. Test changes in-game after each migration \ No newline at end of file diff --git a/src/engine/db/archive/BaneRecord.java b/src/engine/db/archive/BaneRecord.java index 6cd4cdae..1701bbba 100644 --- a/src/engine/db/archive/BaneRecord.java +++ b/src/engine/db/archive/BaneRecord.java @@ -14,7 +14,6 @@ import engine.gameManager.DbManager; import engine.objects.Bane; import engine.objects.City; import engine.workthreads.WarehousePushThread; -import java.time.Instant; import org.pmw.tinylog.Logger; import java.sql.*; @@ -34,8 +33,8 @@ public class BaneRecord extends DataRecord { private String baneDropperHash; private String baneGuildHash; private String baneNationHash; - private Instant baneLiveTime; - private Instant baneDropTime; + private LocalDateTime baneLiveTime; + private LocalDateTime baneDropTime; private BaneRecord(Bane bane) { this.recordType = Enum.DataRecordType.BANE; @@ -129,9 +128,9 @@ public class BaneRecord extends DataRecord { return outStatement; } - public static Instant getLastBaneDateTime(City city) { + public static LocalDateTime getLastBaneDateTime(City city) { - Instant outDateTime = null; + LocalDateTime outDateTime = null; try (Connection connection = DbManager.getConnection(); PreparedStatement statement = buildDateTimeQueryStatement(connection, city); @@ -139,7 +138,7 @@ public class BaneRecord extends DataRecord { while (rs.next()) { - outDateTime = rs.getTimestamp("endDatetime").toInstant(); + outDateTime = rs.getTimestamp("endDatetime").toLocalDateTime(); } @@ -160,7 +159,7 @@ public class BaneRecord extends DataRecord { } - public static void updateLiveDate(Bane bane, Instant dateTime) { + public static void updateLiveDate(Bane bane, LocalDateTime dateTime) { if (bane == null) return; @@ -175,13 +174,13 @@ public class BaneRecord extends DataRecord { } } - private static PreparedStatement buildUpdateLiveDateStatement(Connection connection, Bane bane, Instant dateTime) throws SQLException { + private static PreparedStatement buildUpdateLiveDateStatement(Connection connection, Bane bane, LocalDateTime dateTime) throws SQLException { PreparedStatement outStatement = null; String queryString = "UPDATE `warehouse_banehistory` SET `liveDatetime` = ?, `dirty` = 1 WHERE `city_id` = ? AND `resolution` = 'PENDING'"; outStatement = connection.prepareStatement(queryString); - outStatement.setTimestamp(1, new java.sql.Timestamp(dateTime.toEpochMilli())); + outStatement.setTimestamp(1, Timestamp.valueOf(dateTime)); outStatement.setString(2, bane.getCity().getHash()); return outStatement; @@ -366,12 +365,12 @@ public class BaneRecord extends DataRecord { if (this.baneDropTime == null) outStatement.setNull(8, java.sql.Types.DATE); else - outStatement.setTimestamp(8, new java.sql.Timestamp(this.baneDropTime.getMillis())); + outStatement.setTimestamp(8, Timestamp.valueOf(this.baneDropTime)); if (this.baneLiveTime == null) outStatement.setNull(9, java.sql.Types.DATE); else - outStatement.setTimestamp(9, new java.sql.Timestamp(this.baneLiveTime.getMillis())); + outStatement.setTimestamp(9, Timestamp.valueOf(this.baneLiveTime)); outStatement.setString(10, this.eventType.name()); diff --git a/src/engine/db/handlers/dbBaneHandler.java b/src/engine/db/handlers/dbBaneHandler.java index ab2be067..cda88d59 100644 --- a/src/engine/db/handlers/dbBaneHandler.java +++ b/src/engine/db/handlers/dbBaneHandler.java @@ -14,7 +14,7 @@ import engine.objects.Bane; import engine.objects.Building; import engine.objects.City; import engine.objects.PlayerCharacter; -import java.time.Instant; +import java.time.LocalDateTime; import org.pmw.tinylog.Logger; import java.sql.Connection; @@ -71,12 +71,12 @@ public class dbBaneHandler extends dbHandlerBase { } - public boolean SET_BANE_TIME(Instant toSet, int cityUUID) { + public boolean SET_BANE_TIME(LocalDateTime toSet, int cityUUID) { try (Connection connection = DbManager.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `liveDate`=? WHERE `cityUUID`=?")) { - preparedStatement.setTimestamp(1, java.sql.Timestamp.from(toSet)); + preparedStatement.setTimestamp(1, java.sql.Timestamp.valueOf(toSet)); preparedStatement.setLong(2, cityUUID); preparedStatement.execute(); diff --git a/src/engine/db/handlers/dbNPCHandler.java b/src/engine/db/handlers/dbNPCHandler.java index f246ded4..27d26f7a 100644 --- a/src/engine/db/handlers/dbNPCHandler.java +++ b/src/engine/db/handlers/dbNPCHandler.java @@ -308,7 +308,7 @@ public class dbNPCHandler extends dbHandlerBase { + NPC._pirateNames.size() + " mobBases"); } - public boolean ADD_TO_PRODUCTION_LIST(final long ID, final long npcUID, final long itemBaseID, Instant dateTime, String prefix, String suffix, String name, boolean isRandom, int playerID) { + public boolean ADD_TO_PRODUCTION_LIST(final long ID, final long npcUID, final long itemBaseID, long dateTime, String prefix, String suffix, String name, boolean isRandom, int playerID) { try (Connection connection = DbManager.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_npc_production` (`ID`,`npcUID`, `itemBaseID`,`dateToUpgrade`, `isRandom`, `prefix`, `suffix`, `name`,`playerID`) VALUES (?,?,?,?,?,?,?,?,?)")) { @@ -316,7 +316,7 @@ public class dbNPCHandler extends dbHandlerBase { preparedStatement.setLong(1, ID); preparedStatement.setLong(2, npcUID); preparedStatement.setLong(3, itemBaseID); - preparedStatement.setTimestamp(4, java.sql.Timestamp.from(dateTime)); + preparedStatement.setTimestamp(4, new java.sql.Timestamp(dateTime)); preparedStatement.setBoolean(5, isRandom); preparedStatement.setString(6, prefix); preparedStatement.setString(7, suffix); diff --git a/src/engine/jobs/BaneDefaultTimeJob.java b/src/engine/jobs/BaneDefaultTimeJob.java index 54f8e162..0e9034e1 100644 --- a/src/engine/jobs/BaneDefaultTimeJob.java +++ b/src/engine/jobs/BaneDefaultTimeJob.java @@ -11,7 +11,7 @@ package engine.jobs; import engine.job.AbstractScheduleJob; import engine.objects.Bane; -import org.joda.time.DateTime; +import java.time.LocalDateTime; public class BaneDefaultTimeJob extends AbstractScheduleJob { @@ -31,11 +31,8 @@ public class BaneDefaultTimeJob extends AbstractScheduleJob { return; } - DateTime defaultTime = new DateTime(this.bane.getPlacementDate()); - defaultTime = defaultTime.plusDays(2); - defaultTime = defaultTime.hourOfDay().setCopy(22); - defaultTime = defaultTime.minuteOfHour().setCopy(0); - defaultTime = defaultTime.secondOfMinute().setCopy(0); + LocalDateTime defaultTime = this.bane.getPlacementDate() + .plusDays(2).withHour(22).withMinute(0).withSecond(0).withNano(0); this.bane.setLiveDate(defaultTime); } diff --git a/src/engine/net/ByteBufferWriter.java b/src/engine/net/ByteBufferWriter.java index bf55460b..60714e9c 100644 --- a/src/engine/net/ByteBufferWriter.java +++ b/src/engine/net/ByteBufferWriter.java @@ -12,7 +12,7 @@ package engine.net; import engine.math.Vector3f; import engine.math.Vector3fImmutable; import engine.util.ByteBufferUtils; -import org.joda.time.DateTime; +import java.time.Instant; import java.nio.ByteBuffer; import java.time.LocalDateTime; @@ -57,13 +57,13 @@ public class ByteBufferWriter { this.bb.putLong(x); } - public synchronized void putDateTime(DateTime dateTime) { - this.put((byte) dateTime.getDayOfMonth()); - this.put((byte) ((byte) dateTime.getMonthOfYear() - 1)); - this.putInt(dateTime.getYear() - 1900); - this.put((byte) dateTime.getHourOfDay()); - this.put((byte) dateTime.getMinuteOfHour()); - this.put((byte) dateTime.getSecondOfDay()); + public synchronized void putDateTime(Instant dateTime) { + this.put((byte) dateTime.atZone(ZoneId.systemDefault()).toLocalDate().getDayOfMonth()); + this.put((byte) ((byte) dateTime.atZone(ZoneId.systemDefault()).toLocalDate().getMonthValue() - 1)); + this.putInt(dateTime.atZone(ZoneId.systemDefault()).toLocalDate().getYear() - 1900); + this.put((byte) dateTime.atZone(ZoneId.systemDefault()).toLocalTime().getHour()); + this.put((byte) dateTime.atZone(ZoneId.systemDefault()).toLocalTime().getMinute()); + this.put((byte) dateTime.atZone(ZoneId.systemDefault()).toLocalTime().getSecond()); } public synchronized void putLocalDateTime(LocalDateTime dateTime) { diff --git a/src/engine/net/NetMsgFactory.java b/src/engine/net/NetMsgFactory.java index c1cbba91..45c15df3 100644 --- a/src/engine/net/NetMsgFactory.java +++ b/src/engine/net/NetMsgFactory.java @@ -15,7 +15,7 @@ import engine.net.client.ClientConnection; import engine.net.client.Protocol; import engine.objects.PlayerCharacter; import engine.server.MBServerStatics; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.lang.reflect.Constructor; @@ -86,7 +86,7 @@ public class NetMsgFactory { if (protocolMsg == Protocol.NONE) { - String errorString = DateTime.now().toString() + origin.lastProtocol.name(); + String errorString = Instant.now().toString() + origin.lastProtocol.name(); int errorCode = errorString.hashCode(); diff --git a/src/engine/net/client/handlers/AcceptInviteToGuildHandler.java b/src/engine/net/client/handlers/AcceptInviteToGuildHandler.java index a0269277..720aefe3 100644 --- a/src/engine/net/client/handlers/AcceptInviteToGuildHandler.java +++ b/src/engine/net/client/handlers/AcceptInviteToGuildHandler.java @@ -27,7 +27,7 @@ import engine.net.client.msg.guild.GuildInfoMsg; import engine.objects.Guild; import engine.objects.GuildHistory; import engine.objects.PlayerCharacter; -import org.joda.time.DateTime; +import java.time.Instant; public class AcceptInviteToGuildHandler extends AbstractClientMsgHandler { @@ -95,8 +95,8 @@ public class AcceptInviteToGuildHandler extends AbstractClientMsgHandler { //Add to guild History if (player.getGuild() != null) { - if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(player.getGuildUUID(), player, DateTime.now(), GuildHistoryType.JOIN)) { - GuildHistory guildHistory = new GuildHistory(player.getGuildUUID(), player.getGuild().getName(), DateTime.now(), GuildHistoryType.JOIN); + if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(player.getGuildUUID(), player, Instant.now(), GuildHistoryType.JOIN)) { + GuildHistory guildHistory = new GuildHistory(player.getGuildUUID(), player.getGuild().getName(), Instant.now(), GuildHistoryType.JOIN); player.getGuildHistory().add(guildHistory); } } diff --git a/src/engine/net/client/handlers/BanishUnbanishHandler.java b/src/engine/net/client/handlers/BanishUnbanishHandler.java index e2a88482..737d983d 100644 --- a/src/engine/net/client/handlers/BanishUnbanishHandler.java +++ b/src/engine/net/client/handlers/BanishUnbanishHandler.java @@ -26,7 +26,7 @@ import engine.objects.Guild; import engine.objects.GuildHistory; import engine.objects.GuildStatusController; import engine.objects.PlayerCharacter; -import org.joda.time.DateTime; +import java.time.Instant; public class BanishUnbanishHandler extends AbstractClientMsgHandler { @@ -96,8 +96,8 @@ public class BanishUnbanishHandler extends AbstractClientMsgHandler { //Set guild history - if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(guild.getObjectUUID(), toBanish, DateTime.now(), GuildHistoryType.BANISHED)) { - GuildHistory guildHistory = new GuildHistory(toBanish.getGuildUUID(), toBanish.getGuild().getName(), DateTime.now(), GuildHistoryType.BANISHED); + if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(guild.getObjectUUID(), toBanish, Instant.now(), GuildHistoryType.BANISHED)) { + GuildHistory guildHistory = new GuildHistory(toBanish.getGuildUUID(), toBanish.getGuild().getName(), Instant.now(), GuildHistoryType.BANISHED); toBanish.getGuildHistory().add(guildHistory); } } diff --git a/src/engine/net/client/handlers/ManageCityAssetMsgHandler.java b/src/engine/net/client/handlers/ManageCityAssetMsgHandler.java index e2b0af01..b01afd7f 100644 --- a/src/engine/net/client/handlers/ManageCityAssetMsgHandler.java +++ b/src/engine/net/client/handlers/ManageCityAssetMsgHandler.java @@ -16,7 +16,7 @@ import engine.net.client.msg.ErrorPopupMsg; import engine.net.client.msg.ManageCityAssetsMsg; import engine.net.client.msg.PlaceAssetMsg; import engine.objects.*; -import org.joda.time.DateTime; +import java.time.LocalDateTime; /* * @Author: @@ -271,11 +271,10 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler { return true; } - DateTime baneLive = new DateTime(bane.getPlacementDate()); + LocalDateTime baneLive = bane.getPlacementDate(); baneLive = baneHour == 24 ? baneLive.plusDays(3) : baneLive.plusDays(2); - baneLive = baneHour == 24 ? baneLive.hourOfDay().setCopy(0) : baneLive.hourOfDay().setCopy(baneHour); - baneLive = baneLive.minuteOfHour().setCopy(0); - baneLive = baneLive.secondOfMinute().setCopy(1); + baneLive = baneHour == 24 ? baneLive.withHour(0) : baneLive.withHour(baneHour); + baneLive = baneLive.withMinute(0).withSecond(1).withNano(0); bane.setLiveDate(baneLive); outMsg.actionType = 18; diff --git a/src/engine/net/client/handlers/PlaceAssetMsgHandler.java b/src/engine/net/client/handlers/PlaceAssetMsgHandler.java index 382b6547..33e0c523 100644 --- a/src/engine/net/client/handlers/PlaceAssetMsgHandler.java +++ b/src/engine/net/client/handlers/PlaceAssetMsgHandler.java @@ -22,7 +22,7 @@ import engine.net.client.msg.PlaceAssetMsg; import engine.net.client.msg.PlaceAssetMsg.PlacementInfo; import engine.objects.*; import engine.server.MBServerStatics; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.time.LocalDateTime; @@ -1160,7 +1160,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { Blueprint blueprint; Building newMesh; - DateTime completionDate; + Instant completionDate; float vendorRotation; float buildingRotation; @@ -1174,9 +1174,9 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { // All siege buildings build in 15 minutes if ((blueprint.getBuildingGroup().equals(BuildingGroup.SIEGETENT)) || (blueprint.getBuildingGroup().equals(BuildingGroup.BULWARK))) - completionDate = DateTime.now().plusMinutes(15); + completionDate = Instant.now().plusSeconds(15 * 60); else - completionDate = DateTime.now().plusHours(blueprint.getRankTime(1)); + completionDate = Instant.now().plusSeconds(blueprint.getRankTime(1) * 3600); Vector3fImmutable localLoc = new Vector3fImmutable(ZoneManager.worldToLocal(buildingInfo.getLoc(), currentZone)); @@ -1244,7 +1244,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { ArrayList shrineObjects = DbManager.ShrineQueries.CREATE_SHRINE( currentZone.getObjectUUID(), player.getObjectUUID(), blueprint.getName(), blueprint.getMeshForRank(0), localLoc, 1.0f, blueprint.getMaxHealth(0), ProtectionState.PROTECTED, 0, 0, - DateTime.now().plusHours(blueprint.getRankTime(1)), blueprint.getMeshForRank(0), vendorRotation, buildingRotation, shrineType.name()); + Instant.now().plusSeconds(blueprint.getRankTime(1) * 3600), blueprint.getMeshForRank(0), vendorRotation, buildingRotation, shrineType.name()); if (shrineObjects == null) { PlaceAssetMsg.sendPlaceAssetError(player.getClientConnection(), 1, "A Serious error has occurred. Please post details for to ensure transaction integrity"); @@ -1304,7 +1304,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { float buildingRotation = buildingInfo.getRot().y; float vendorRotation = buildingInfo.getW(); - DateTime completionDate = DateTime.now().plusHours(blueprint.getRankTime(1)); + Instant completionDate = Instant.now().plusSeconds(blueprint.getRankTime(1) * 3600); newMesh = DbManager.BuildingQueries.CREATE_BUILDING( @@ -1347,7 +1347,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { warehouseObjects = DbManager.WarehouseQueries.CREATE_WAREHOUSE( currentZone.getObjectUUID(), player.getObjectUUID(), blueprint.getName(), blueprint.getMeshForRank(0), localLoc, 1.0f, blueprint.getMaxHealth(0), ProtectionState.NONE, 0, 0, - DateTime.now().plusHours(blueprint.getRankTime(1)), blueprint.getMeshForRank(0), vendorRotation, buildingRotation); + Instant.now().plusSeconds(blueprint.getRankTime(1) * 3600), blueprint.getMeshForRank(0), vendorRotation, buildingRotation); if (warehouseObjects == null) { PlaceAssetMsg.sendPlaceAssetError(player.getClientConnection(), 1, "A Serious error has occurred. Please post details for to ensure transaction integrity"); diff --git a/src/engine/net/client/msg/ManageCityAssetsMsg.java b/src/engine/net/client/msg/ManageCityAssetsMsg.java index 473082b2..ce07117e 100644 --- a/src/engine/net/client/msg/ManageCityAssetsMsg.java +++ b/src/engine/net/client/msg/ManageCityAssetsMsg.java @@ -18,9 +18,6 @@ import engine.net.ByteBufferReader; import engine.net.ByteBufferWriter; import engine.net.client.Protocol; import engine.objects.*; -import org.joda.time.DateTime; -import org.joda.time.Period; - import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Set; @@ -397,37 +394,33 @@ public class ManageCityAssetsMsg extends ClientNetMsg { else writer.put((byte) 0); - DateTime placedOn = bane.getLiveDate(); + LocalDateTime placedOn = bane.getLiveDate(); if (placedOn == null) - placedOn = new DateTime(DateTime.now()); + placedOn = LocalDateTime.now(); //set Calander to date of bane live. - DateTime now = DateTime.now(); - DateTime defaultTime = new DateTime(bane.getPlacementDate()); - DateTime playerEnterWorldTime = new DateTime(this.assetManager.getTimeStamp("EnterWorld")); - Period period = new Period(playerEnterWorldTime.getMillis(), now.getMillis()); - int hoursLoggedIn = period.getHours(); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime defaultTime = bane.getPlacementDate(); + LocalDateTime playerEnterWorldTime = LocalDateTime.ofInstant(java.time.Instant.ofEpochMilli(this.assetManager.getTimeStamp("EnterWorld")), ZoneId.systemDefault()); + int hoursLoggedIn = (int) java.time.Duration.between(playerEnterWorldTime, now).toHours(); hoursLoggedIn = hoursLoggedIn < 0 ? 0 : hoursLoggedIn; - defaultTime = defaultTime.plusDays(2); - defaultTime = defaultTime.hourOfDay().setCopy(22); - defaultTime = defaultTime.minuteOfHour().setCopy(0); - defaultTime = defaultTime.secondOfMinute().setCopy(0); + defaultTime = defaultTime.plusDays(2).withHour(22).withMinute(0).withSecond(0).withNano(0); - long curTime = now.getMillis(); + long curTime = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); long timeLeft = 0; if (bane.getLiveDate() != null) - timeLeft = bane.getLiveDate().getMillis() - curTime; + timeLeft = bane.getLiveDate().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - curTime; else - timeLeft = defaultTime.getMillis() - curTime + 1000; + timeLeft = defaultTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - curTime + 1000; //DO not touch these. They are static formula's until i get the correct converter for SB Time. - writer.put((byte) placedOn.dayOfMonth().get()); - writer.put((byte) placedOn.monthOfYear().get()); - writer.putInt(placedOn.year().get() - 1900); + writer.put((byte) placedOn.getDayOfMonth()); + writer.put((byte) placedOn.getMonthValue()); + writer.putInt(placedOn.getYear() - 1900); writer.put((byte) 0); writer.put((byte) 0); writer.put((byte) 0); diff --git a/src/engine/net/client/msg/ManageNPCMsg.java b/src/engine/net/client/msg/ManageNPCMsg.java index 8772b7c0..b3c67dd3 100644 --- a/src/engine/net/client/msg/ManageNPCMsg.java +++ b/src/engine/net/client/msg/ManageNPCMsg.java @@ -19,9 +19,6 @@ import engine.net.ByteBufferWriter; import engine.net.client.Protocol; import engine.objects.*; import engine.powers.EffectsBase; -import org.joda.time.DateTime; -import org.joda.time.Period; -import org.joda.time.Seconds; import org.pmw.tinylog.Logger; import java.util.ArrayList; @@ -140,7 +137,7 @@ public class ManageNPCMsg extends ClientNetMsg { @Override protected void _serialize(ByteBufferWriter writer) { - Period upgradePeriod; + java.time.Duration upgradePeriod; int upgradePeriodInSeconds; try { @@ -202,21 +199,22 @@ public class ManageNPCMsg extends ClientNetMsg { writer.putInt(npc.getUpgradeCost()); - if (npc.isRanking() && npc.getUpgradeDateTime().isAfter(DateTime.now())) - upgradePeriod = new Period(DateTime.now(), npc.getUpgradeDateTime()); + if (npc.isRanking() && npc.getUpgradeDateTime().isAfter(java.time.Instant.now())) + upgradePeriod = java.time.Duration.between(java.time.Instant.now(), npc.getUpgradeDateTime()); else - upgradePeriod = new Period(0); + upgradePeriod = java.time.Duration.ZERO; - writer.put((byte) upgradePeriod.getDays()); //for timer + long npcUpgradeSec = Math.max(0L, upgradePeriod.getSeconds()); + writer.put((byte) (int) (npcUpgradeSec / 86400)); //for timer writer.put((byte) unknown26);//unknown writer.putInt(100); //unknown - writer.put((byte) upgradePeriod.getHours()); //for timer - writer.put((byte) upgradePeriod.getMinutes()); //for timer - writer.put((byte) upgradePeriod.getSeconds()); //for timer + writer.put((byte) (int) ((npcUpgradeSec % 86400) / 3600)); //for timer + writer.put((byte) (int) ((npcUpgradeSec % 3600) / 60)); //for timer + writer.put((byte) (int) (npcUpgradeSec % 60); //for timer - if (npc.isRanking() && npc.getUpgradeDateTime().isAfter(DateTime.now())) - upgradePeriodInSeconds = Seconds.secondsBetween(DateTime.now(), npc.getUpgradeDateTime()).getSeconds(); + if (npc.isRanking() && npc.getUpgradeDateTime().isAfter(java.time.Instant.now())) + upgradePeriodInSeconds = (int) npcUpgradeSec; else upgradePeriodInSeconds = 0; @@ -610,21 +608,22 @@ public class ManageNPCMsg extends ClientNetMsg { writer.putInt(Mob.getUpgradeCost(mobA)); - if (mobA.isRanking() && mobA.getUpgradeDateTime().isAfter(DateTime.now())) - upgradePeriod = new Period(DateTime.now(), mobA.getUpgradeDateTime()); + if (mobA.isRanking() && mobA.getUpgradeDateTime().isAfter(java.time.Instant.now())) + upgradePeriod = java.time.Duration.between(java.time.Instant.now(), mobA.getUpgradeDateTime()); else - upgradePeriod = new Period(0); + upgradePeriod = java.time.Duration.ZERO; - writer.put((byte) upgradePeriod.getDays()); //for timer + long mobUpgradeSec = Math.max(0L, upgradePeriod.getSeconds()); + writer.put((byte) (int) (mobUpgradeSec / 86400)); //for timer writer.put((byte) unknown26);//unknown writer.putInt(100); //unknown - writer.put((byte) upgradePeriod.getHours()); //for timer - writer.put((byte) upgradePeriod.getMinutes()); //for timer - writer.put((byte) upgradePeriod.getSeconds()); //for timer + writer.put((byte) (int) ((mobUpgradeSec % 86400) / 3600)); //for timer + writer.put((byte) (int) ((mobUpgradeSec % 3600) / 60)); //for timer + writer.put((byte) (int) (mobUpgradeSec % 60); //for timer - if (mobA.isRanking() && mobA.getUpgradeDateTime().isAfter(DateTime.now())) - upgradePeriodInSeconds = Seconds.secondsBetween(DateTime.now(), mobA.getUpgradeDateTime()).getSeconds(); + if (mobA.isRanking() && mobA.getUpgradeDateTime().isAfter(java.time.Instant.now())) + upgradePeriodInSeconds = (int) mobUpgradeSec; else upgradePeriodInSeconds = 0; diff --git a/src/engine/net/client/msg/guild/GuildInfoMsg.java b/src/engine/net/client/msg/guild/GuildInfoMsg.java index aea3c464..0de31df9 100644 --- a/src/engine/net/client/msg/guild/GuildInfoMsg.java +++ b/src/engine/net/client/msg/guild/GuildInfoMsg.java @@ -17,7 +17,7 @@ import engine.net.ByteBufferWriter; import engine.net.client.Protocol; import engine.net.client.msg.ClientNetMsg; import engine.objects.*; -import org.joda.time.DateTime; +import java.time.Instant; public class GuildInfoMsg extends ClientNetMsg { @@ -306,7 +306,7 @@ class GuildInfoMessageType4 extends GuildInfoMessageType { writer.putString(guildLeaderName); writer.putString(pc.getName()); - writer.putDateTime(DateTime.now()); + writer.putDateTime(Instant.now()); writer.put((byte) 1); writer.put((byte) 1); writer.put((byte) 1); @@ -401,7 +401,7 @@ class GuildInfoMessageType5 extends GuildInfoMessageType { writer.putString("Guild Leader"); writer.putString(""); //Nation Leader - I believe - DateTime now = DateTime.now(); + Instant now = Instant.now(); writer.putDateTime(now); writer.put((byte) 1); diff --git a/src/engine/objects/Bane.java b/src/engine/objects/Bane.java index 5b98aaa4..13e087dd 100644 --- a/src/engine/objects/Bane.java +++ b/src/engine/objects/Bane.java @@ -30,7 +30,8 @@ import engine.net.client.ClientConnection; import engine.net.client.msg.PlaceAssetMsg; import engine.net.client.msg.chat.ChatSystemMsg; import engine.server.MBServerStatics; -import org.joda.time.DateTime; +import java.time.LocalDateTime; +import java.time.ZoneId; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -45,8 +46,8 @@ public final class Bane { private final int cityUUID; private final int stoneUUID; private int ownerUUID; - private DateTime placementDate = null; - private DateTime liveDate = null; + private LocalDateTime placementDate = null; + private LocalDateTime liveDate = null; private BaneDefaultTimeJob defaultTimeJob; // Internal cache for banes @@ -67,12 +68,12 @@ public final class Bane { sqlDateTime = rs.getTimestamp("placementDate"); if (sqlDateTime != null) - this.placementDate = new DateTime(sqlDateTime); + this.placementDate = sqlDateTime.toLocalDateTime(); sqlDateTime = rs.getTimestamp("liveDate"); if (sqlDateTime != null) - this.liveDate = new DateTime(sqlDateTime); + this.liveDate = sqlDateTime.toLocalDateTime(); switch (this.getSiegePhase()) { @@ -86,7 +87,7 @@ public final class Bane { this.activateBaneJob.cancelJob(); abtj = new ActivateBaneJob(cityUUID); - JobScheduler.getInstance().scheduleJob(abtj, this.liveDate.getMillis()); + JobScheduler.getInstance().scheduleJob(abtj, toEpochMillis(this.liveDate)); this.activateBaneJob = abtj; break; @@ -98,7 +99,7 @@ public final class Bane { this.activateBaneJob.cancelJob(); abtj = new ActivateBaneJob(cityUUID); - JobScheduler.getInstance().scheduleJob(abtj, this.liveDate.getMillis()); + JobScheduler.getInstance().scheduleJob(abtj, toEpochMillis(this.liveDate)); this.activateBaneJob = abtj; break; @@ -356,7 +357,7 @@ public final class Bane { return phase; } - if (DateTime.now().isAfter(this.liveDate)) { + if (LocalDateTime.now().isAfter(this.liveDate)) { phase = SiegePhase.WAR; //war return phase; } @@ -371,15 +372,10 @@ public final class Bane { private void setDefaultTime() { - DateTime timeToSetDefault = new DateTime(this.placementDate); - timeToSetDefault = timeToSetDefault.plusDays(1); - - DateTime currentTime = DateTime.now(); - DateTime defaultTime = new DateTime(this.placementDate); - defaultTime = defaultTime.plusDays(2); - defaultTime = defaultTime.hourOfDay().setCopy(22); - defaultTime = defaultTime.minuteOfHour().setCopy(0); - defaultTime = defaultTime.secondOfMinute().setCopy(0); + LocalDateTime timeToSetDefault = this.placementDate.plusDays(1); + LocalDateTime currentTime = LocalDateTime.now(); + LocalDateTime defaultTime = this.placementDate.plusDays(2) + .withHour(22).withMinute(0).withSecond(0).withNano(0); if (currentTime.isAfter(timeToSetDefault)) this.setLiveDate(defaultTime); @@ -389,7 +385,7 @@ public final class Bane { this.defaultTimeJob.cancelJob(); BaneDefaultTimeJob bdtj = new BaneDefaultTimeJob(this); - JobScheduler.getInstance().scheduleJob(bdtj, timeToSetDefault.getMillis()); + JobScheduler.getInstance().scheduleJob(bdtj, toEpochMillis(timeToSetDefault)); this.defaultTimeJob = bdtj; } } @@ -456,7 +452,7 @@ public final class Bane { return true; } - public final DateTime getPlacementDate() { + public final LocalDateTime getPlacementDate() { return placementDate; } @@ -465,14 +461,14 @@ public final class Bane { return (this.getSiegePhase() != SiegePhase.CHALLENGE); } - public final DateTime getLiveDate() { + public final LocalDateTime getLiveDate() { return liveDate; } - public void setLiveDate(DateTime baneTime) { + public void setLiveDate(LocalDateTime baneTime) { if (DbManager.BaneQueries.SET_BANE_TIME(baneTime, this.getCity().getObjectUUID())) { - this.liveDate = new DateTime(baneTime); + this.liveDate = baneTime; // Push event to warehouse @@ -514,7 +510,7 @@ public final class Bane { ActivateBaneJob abtj = new ActivateBaneJob(cityUUID); - JobScheduler.getInstance().scheduleJob(abtj, this.liveDate.getMillis()); + JobScheduler.getInstance().scheduleJob(abtj, toEpochMillis(this.liveDate)); this.activateBaneJob = abtj; } else { Logger.debug("error with city " + this.getCity().getName()); @@ -644,4 +640,8 @@ public final class Bane { return cityUUID; } + private static long toEpochMillis(LocalDateTime ldt) { + return ldt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + } + } diff --git a/src/engine/objects/Guild.java b/src/engine/objects/Guild.java index 154e286a..a0b5ff04 100644 --- a/src/engine/objects/Guild.java +++ b/src/engine/objects/Guild.java @@ -23,7 +23,7 @@ import engine.net.client.msg.ErrorPopupMsg; import engine.net.client.msg.UpdateClientAlliancesMsg; import engine.net.client.msg.guild.GuildInfoMsg; import engine.server.world.WorldServer; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -654,8 +654,8 @@ public class Guild extends AbstractWorldObject { //Add to Guild History if (pc.getGuild() != null) { - if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(pc.getGuildUUID(), pc, DateTime.now(), historyType)) { - GuildHistory guildHistory = new GuildHistory(pc.getGuildUUID(), pc.getGuild().name, DateTime.now(), historyType); + if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(pc.getGuildUUID(), pc, Instant.now(), historyType)) { + GuildHistory guildHistory = new GuildHistory(pc.getGuildUUID(), pc.getGuild().name, Instant.now(), historyType); pc.getGuildHistory().add(guildHistory); } } diff --git a/src/engine/objects/GuildHistory.java b/src/engine/objects/GuildHistory.java index 6c29820a..811c5594 100644 --- a/src/engine/objects/GuildHistory.java +++ b/src/engine/objects/GuildHistory.java @@ -13,10 +13,11 @@ package engine.objects; import engine.Enum.GameObjectType; import engine.Enum.GuildHistoryType; import engine.net.ByteBufferWriter; -import org.joda.time.DateTime; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.Instant; +import java.time.temporal.ChronoUnit; public class GuildHistory { @@ -24,12 +25,12 @@ public class GuildHistory { private int guildID; private String guildName; - private DateTime time; + private Instant time; private GuildHistoryType historyType; public GuildHistory(int guildID, String guildName, - DateTime dateTime, GuildHistoryType historyType) { + Instant dateTime, GuildHistoryType historyType) { super(); this.guildID = guildID; this.guildName = guildName; @@ -49,9 +50,9 @@ public class GuildHistory { sqlDateTime = rs.getTimestamp("historyDate"); if (sqlDateTime != null) - this.time = new DateTime(sqlDateTime); + this.time = sqlDateTime.toInstant(); else - this.time = DateTime.now().minusYears(1); + this.time = Instant.now().minus(1, ChronoUnit.YEARS); this.historyType = GuildHistoryType.valueOf(rs.getString("historyType")); } @@ -77,11 +78,11 @@ public class GuildHistory { writer.putDateTime(this.time); } - public DateTime getTime() { + public Instant getTime() { return time; } - public void setTime(DateTime time) { + public void setTime(Instant time) { this.time = time; } diff --git a/src/engine/objects/ItemFactory.java b/src/engine/objects/ItemFactory.java index 34b06cb0..13ce98a5 100644 --- a/src/engine/objects/ItemFactory.java +++ b/src/engine/objects/ItemFactory.java @@ -22,7 +22,6 @@ import engine.net.client.ClientConnection; import engine.net.client.msg.ErrorPopupMsg; import engine.powers.EffectsBase; import engine.server.MBServerStatics; -import org.joda.time.DateTime; import org.pmw.tinylog.Logger; import java.util.ArrayList; @@ -199,8 +198,6 @@ public class ItemFactory { // to this, not when 'compelte' is pressed. long upgradeTime = System.currentTimeMillis() + (long) (time * Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue())); - DateTime dateTime = new DateTime(); - dateTime = dateTime.withMillis(upgradeTime); ml.setDateToUpgrade(upgradeTime); npc.addItemToForge(ml); @@ -209,8 +206,8 @@ public class ItemFactory { if (pc != null) playerID = pc.getObjectUUID(); - DbManager.NPCQueries.ADD_TO_PRODUCTION_LIST(ml.getObjectUUID(), npc.getObjectUUID(), ml.getItemBaseID(), dateTime, "", "", "", false, playerID); - ProducedItem pi = new ProducedItem(ml.getObjectUUID(), npc.getObjectUUID(), ml.getItemBaseID(), dateTime, false, "", "", "", playerID); + DbManager.NPCQueries.ADD_TO_PRODUCTION_LIST(ml.getObjectUUID(), npc.getObjectUUID(), ml.getItemBaseID(), upgradeTime, "", "", "", false, playerID); + ProducedItem pi = new ProducedItem(ml.getObjectUUID(), npc.getObjectUUID(), ml.getItemBaseID(), upgradeTime, false, "", "", "", playerID); pi.setProducedItemID(ml.getObjectUUID()); pi.setAmount(itemsToRoll); pi.setRandom(false); @@ -616,8 +613,6 @@ public class ItemFactory { // to this, not when 'compelte' is pressed. long upgradeTime = System.currentTimeMillis() + (long) (time * Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue())); - DateTime dateTime = new DateTime(); - dateTime = dateTime.withMillis(upgradeTime); ml.setDateToUpgrade(upgradeTime); npc.addItemToForge(ml); @@ -626,8 +621,8 @@ public class ItemFactory { if (pc != null) playerID = pc.getObjectUUID(); - DbManager.NPCQueries.ADD_TO_PRODUCTION_LIST(ml.getObjectUUID(), npc.getObjectUUID(), ml.getItemBaseID(), dateTime, prefixString, suffixString, ml.getCustomName(), false, playerID); - ProducedItem pi = new ProducedItem(npc.getRolling().size(), npc.getObjectUUID(), ml.getItemBaseID(), dateTime, false, prefixString, suffixString, ml.getCustomName(), playerID); + DbManager.NPCQueries.ADD_TO_PRODUCTION_LIST(ml.getObjectUUID(), npc.getObjectUUID(), ml.getItemBaseID(), upgradeTime, prefixString, suffixString, ml.getCustomName(), false, playerID); + ProducedItem pi = new ProducedItem(npc.getRolling().size(), npc.getObjectUUID(), ml.getItemBaseID(), upgradeTime, false, prefixString, suffixString, ml.getCustomName(), playerID); pi.setProducedItemID(ml.getObjectUUID()); pi.setAmount(itemsToRoll); @@ -754,8 +749,6 @@ public class ItemFactory { long upgradeTime = System.currentTimeMillis() + (long) (time * Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue())); - DateTime dateTime = new DateTime(); - dateTime = dateTime.withMillis(upgradeTime); toRoll.setDateToUpgrade(upgradeTime); int playerID = 0; @@ -763,9 +756,9 @@ public class ItemFactory { if (playerCharacter != null) playerID = playerCharacter.getObjectUUID(); - DbManager.NPCQueries.ADD_TO_PRODUCTION_LIST(toRoll.getObjectUUID(), vendor.getObjectUUID(), toRoll.getItemBaseID(), dateTime, prefix, suffix, toRoll.getCustomName(), true, playerID); + DbManager.NPCQueries.ADD_TO_PRODUCTION_LIST(toRoll.getObjectUUID(), vendor.getObjectUUID(), toRoll.getItemBaseID(), upgradeTime, prefix, suffix, toRoll.getCustomName(), true, playerID); - ProducedItem pi = new ProducedItem(toRoll.getObjectUUID(), vendor.getObjectUUID(), toRoll.getItemBaseID(), dateTime, true, prefix, suffix, toRoll.getCustomName(), playerID); + ProducedItem pi = new ProducedItem(toRoll.getObjectUUID(), vendor.getObjectUUID(), toRoll.getItemBaseID(), upgradeTime, true, prefix, suffix, toRoll.getCustomName(), playerID); pi.setProducedItemID(toRoll.getObjectUUID()); pi.setAmount(itemsToRoll); ItemQueue produced = ItemQueue.borrow(pi, (long) (time * Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue()))); diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index 70602b02..52a8e8c3 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -31,7 +31,7 @@ import engine.net.client.msg.PlaceAssetMsg; import engine.powers.EffectsBase; import engine.powers.MobPowerEntry; import engine.server.MBServerStatics; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -98,7 +98,7 @@ public class Mob extends AbstractIntelligenceAgent { private int lastMobPowerToken = 0; private HashMap equip = null; private DeferredPowerJob weaponPower; - private DateTime upgradeDateTime = null; + private Instant upgradeDateTime = null; private boolean lootSync = false; @@ -240,7 +240,7 @@ public class Mob extends AbstractIntelligenceAgent { sqlDateTime = rs.getTimestamp("upgradeDate"); if (sqlDateTime != null) - upgradeDateTime = new DateTime(sqlDateTime); + upgradeDateTime = sqlDateTime.toInstant(); else upgradeDateTime = null; @@ -654,8 +654,8 @@ public class Mob extends AbstractIntelligenceAgent { // Submit upgrade job for future date or current instant - if (mob.getUpgradeDateTime().isAfter(DateTime.now())) - JobScheduler.getInstance().scheduleJob(new UpgradeNPCJob(mob), mob.getUpgradeDateTime().getMillis()); + if (mob.getUpgradeDateTime().isAfter(Instant.now())) + JobScheduler.getInstance().scheduleJob(new UpgradeNPCJob(mob), mob.getUpgradeDateTime().toEpochMilli()); else JobScheduler.getInstance().scheduleJob(new UpgradeNPCJob(mob), 0); @@ -681,7 +681,7 @@ public class Mob extends AbstractIntelligenceAgent { return upgradeCost; } - public static void setUpgradeDateTime(Mob mob, DateTime upgradeDateTime) { + public static void setUpgradeDateTime(Mob mob, Instant upgradeDateTime) { if (!DbManager.MobQueries.updateUpgradeTime(mob, upgradeDateTime)) { Logger.error("Failed to set upgradeTime for building " + mob.currentID); @@ -2118,7 +2118,7 @@ public class Mob extends AbstractIntelligenceAgent { return siegeMinionMap; } - public DateTime getUpgradeDateTime() { + public Instant getUpgradeDateTime() { lock.readLock().lock(); @@ -2208,7 +2208,7 @@ public class Mob extends AbstractIntelligenceAgent { if (!building.transferGold(-rankCost, false)) return; - DateTime dateToUpgrade = DateTime.now().plusHours(Mob.getUpgradeTime(this)); + Instant dateToUpgrade = Instant.now().plusSeconds(Mob.getUpgradeTime(this) * 3600); Mob.setUpgradeDateTime(this, dateToUpgrade); // Schedule upgrade job diff --git a/src/engine/objects/NPC.java b/src/engine/objects/NPC.java index 1e6d2f83..b5e667d3 100644 --- a/src/engine/objects/NPC.java +++ b/src/engine/objects/NPC.java @@ -28,7 +28,7 @@ import engine.net.client.msg.ItemProductionMsg; import engine.net.client.msg.PetMsg; import engine.net.client.msg.PlaceAssetMsg; import engine.server.MBServerStatics; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -75,7 +75,7 @@ public class NPC extends AbstractCharacter { protected int symbol; // Variables NOT to be stored in db protected boolean isStatic = false; - private DateTime upgradeDateTime = null; + private Instant upgradeDateTime = null; private HashSet canRoll = null; public int parentZoneUUID; public int equipmentSetID = 0; @@ -132,13 +132,13 @@ public class NPC extends AbstractCharacter { this.guildUUID = rs.getInt("npc_guildID"); - // Set upgrade date JodaTime DateTime object + // Set upgrade date (java.time.Instant) object // if one exists in the database. sqlDateTime = rs.getTimestamp("upgradeDate"); if (sqlDateTime != null) - upgradeDateTime = new DateTime(sqlDateTime); + upgradeDateTime = sqlDateTime.toInstant(); else upgradeDateTime = null; @@ -554,9 +554,9 @@ public class NPC extends AbstractCharacter { // Submit upgrade job for future date or current instant - if (this.getUpgradeDateTime().isAfter(DateTime.now())) + if (this.getUpgradeDateTime().isAfter(Instant.now())) jc = JobScheduler.getInstance().scheduleJob(new UpgradeNPCJob(this), - this.getUpgradeDateTime().getMillis()); + this.getUpgradeDateTime().toEpochMilli()); else JobScheduler.getInstance().scheduleJob(new UpgradeNPCJob(this), 0); @@ -939,7 +939,7 @@ public class NPC extends AbstractCharacter { ml.loadEnchantments(); ml.setValue(producedItem.getValue()); - ml.setDateToUpgrade(producedItem.getDateToUpgrade().getMillis()); + ml.setDateToUpgrade(producedItem.getDateToUpgrade()); ml.containerType = Enum.ItemContainerType.FORGE; this.addItemToForge(ml); @@ -955,7 +955,7 @@ public class NPC extends AbstractCharacter { ml.setSuffix(producedItem.getSuffix()); } - ml.setDateToUpgrade(producedItem.getDateToUpgrade().getMillis()); + ml.setDateToUpgrade(producedItem.getDateToUpgrade()); ml.containerType = Enum.ItemContainerType.INVENTORY; ml.setIsID(true); @@ -982,7 +982,7 @@ public class NPC extends AbstractCharacter { return new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); } - public DateTime getUpgradeDateTime() { + public Instant getUpgradeDateTime() { lock.readLock().lock(); try { return upgradeDateTime; @@ -991,7 +991,7 @@ public class NPC extends AbstractCharacter { } } - public void setUpgradeDateTime(DateTime upgradeDateTime) { + public void setUpgradeDateTime(Instant upgradeDateTime) { if (!DbManager.NPCQueries.updateUpgradeTime(this, upgradeDateTime)) { Logger.error("Failed to set upgradeTime for building " + currentID); @@ -1286,7 +1286,7 @@ public class NPC extends AbstractCharacter { int rankCost; Building building; - DateTime dateToUpgrade; + Instant dateToUpgrade; this.lock.writeLock().lock(); @@ -1329,7 +1329,7 @@ public class NPC extends AbstractCharacter { if (!building.transferGold(-rankCost, false)) return; - dateToUpgrade = DateTime.now().plusHours(this.getUpgradeTime()); + dateToUpgrade = Instant.now().plusSeconds(this.getUpgradeTime() * 3600); this.setUpgradeDateTime(dateToUpgrade); diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java index 35dd8c5a..9ecb2757 100644 --- a/src/engine/objects/PlayerCharacter.java +++ b/src/engine/objects/PlayerCharacter.java @@ -41,7 +41,7 @@ import engine.server.login.LoginServer; import engine.server.login.LoginServerMsgHandler; import engine.server.world.WorldServer; import engine.util.MiscUtils; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -718,11 +718,11 @@ public class PlayerCharacter extends AbstractCharacter { writer.putInt(token); writer.putInt((int) timeLeft / 1000); } - DateTime enterWorld = new DateTime(playerCharacter.timestamps.get("EnterWorld")); + Instant enterWorld = playerCharacter.timestamps.get("EnterWorld").toInstant(); writer.putDateTime(enterWorld); writer.putInt(0x49EF1E98); //DUnno what playerCharacter is. - writer.putFloat(DateTime.now().hourOfDay().get()); //daylight in float. + writer.putFloat(Instant.now().atZone(ZoneId.systemDefault()).toLocalTime().getHour()); //daylight in float. writer.putFloat(6); //interval of light to change per game hour //float //writer.putInt(1637194901); //playerCharacter is actually an opcode taht is in recordings, no clue what it is, dumped it and it changes nothing } else { @@ -4872,7 +4872,7 @@ public class PlayerCharacter extends AbstractCharacter { } if (count > 0) { - this.timestamps.put("RealmClaim", DateTime.now().plusMinutes(3).getMillis()); + this.timestamps.put("RealmClaim", Instant.now().plusSeconds(180).toEpochMilli()); for (PlayerCharacter toSend : SessionManager.getAllActivePlayerCharacters()) { ChatManager.chatSystemInfo(toSend, this.getCombinedName() + " is seeking to claim a realm and already has " + count + " blessngs!"); } diff --git a/src/engine/objects/ProducedItem.java b/src/engine/objects/ProducedItem.java index 3e3caafb..4c2f9255 100644 --- a/src/engine/objects/ProducedItem.java +++ b/src/engine/objects/ProducedItem.java @@ -14,7 +14,6 @@ import engine.gameManager.PowersManager; import engine.net.DispatchMessage; import engine.net.client.msg.ItemProductionMsg; import engine.powers.EffectsBase; -import org.joda.time.DateTime; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -26,7 +25,7 @@ public class ProducedItem { private int ID; private int npcUID; private int itemBaseID; - private DateTime dateToUpgrade; + private long dateToUpgrade; private boolean isRandom; private String prefix; @@ -52,9 +51,9 @@ public class ProducedItem { Date sqlDateTime = rs.getTimestamp("dateToUpgrade"); if (sqlDateTime != null) - this.dateToUpgrade = new DateTime(sqlDateTime); + this.dateToUpgrade = sqlDateTime.getTime(); else - dateToUpgrade = null; + dateToUpgrade = 0; this.isRandom = rs.getBoolean("isRandom"); this.prefix = rs.getString("prefix"); this.suffix = rs.getString("suffix"); @@ -64,7 +63,7 @@ public class ProducedItem { this.playerID = rs.getInt("playerID"); } - public ProducedItem(int ID, int npcUID, int itemBaseID, DateTime dateToUpgrade, boolean isRandom, String prefix, String suffix, String name, int playerID) { + public ProducedItem(int ID, int npcUID, int itemBaseID, long dateToUpgrade, boolean isRandom, String prefix, String suffix, String name, int playerID) { super(); this.ID = ID; this.npcUID = npcUID; @@ -84,7 +83,7 @@ public class ProducedItem { return npcUID; } - public DateTime getDateToUpgrade() { + public long getDateToUpgrade() { return dateToUpgrade; } diff --git a/src/engine/objects/Transaction.java b/src/engine/objects/Transaction.java index 1e282195..11ad7ffa 100644 --- a/src/engine/objects/Transaction.java +++ b/src/engine/objects/Transaction.java @@ -11,7 +11,7 @@ package engine.objects; import engine.Enum.GameObjectType; import engine.Enum.TransactionType; -import org.joda.time.DateTime; +import java.time.Instant; import java.sql.ResultSet; import java.sql.SQLException; @@ -23,7 +23,7 @@ public class Transaction implements Comparable { private final int warehouseUUID; private final int targetUUID; private final Resource resource; - private final DateTime date; + private final Instant date; private final int amount; private final TransactionType transactionType; private GameObjectType targetType; @@ -40,15 +40,15 @@ public class Transaction implements Comparable { Date sqlDateTime = rs.getTimestamp("date"); if (sqlDateTime != null) - this.date = new DateTime(sqlDateTime); + this.date = sqlDateTime.toInstant(); else - this.date = DateTime.now(); + this.date = Instant.now(); } public Transaction(int warehouseUUID, GameObjectType targetType, int targetUUID, TransactionType transactionType, Resource resource, int amount, - DateTime date) { + Instant date) { this.warehouseUUID = warehouseUUID; this.targetUUID = targetUUID; this.resource = resource; @@ -74,7 +74,7 @@ public class Transaction implements Comparable { } - public DateTime getDate() { + public Instant getDate() { return date; } diff --git a/src/engine/objects/Warehouse.java b/src/engine/objects/Warehouse.java index f96a5fcb..ec741699 100644 --- a/src/engine/objects/Warehouse.java +++ b/src/engine/objects/Warehouse.java @@ -20,7 +20,7 @@ import engine.net.DispatchMessage; import engine.net.client.ClientConnection; import engine.net.client.msg.*; import engine.server.MBServerStatics; -import org.joda.time.DateTime; +import java.time.Instant; import org.pmw.tinylog.Logger; import java.sql.ResultSet; @@ -1308,10 +1308,10 @@ public class Warehouse extends AbstractWorldObject { public boolean AddTransactionToWarehouse(GameObjectType targetType, int targetUUID, TransactionType transactionType, Resource resource, int amount) { - if (!DbManager.WarehouseQueries.CREATE_TRANSACTION(this.buildingUID, targetType, targetUUID, transactionType, resource, amount, DateTime.now())) + if (!DbManager.WarehouseQueries.CREATE_TRANSACTION(this.buildingUID, targetType, targetUUID, transactionType, resource, amount, Instant.now())) return false; - Transaction transaction = new Transaction(this.buildingUID, targetType, targetUUID, transactionType, resource, amount, DateTime.now()); + Transaction transaction = new Transaction(this.buildingUID, targetType, targetUUID, transactionType, resource, amount, Instant.now()); this.transactions.add(transaction); return true; }