Commit Graph

154 Commits

Author SHA1 Message Date
laforetbrut
5576d7f7e2 Add anti-duplication locks, shutdown save, and security hardening
- Per-player ReentrantLock prevents concurrent save/restore operations,
  eliminating race conditions that could cause item duplication
- Save ALL online players on ServerStoppingEvent (before disconnect) to
  prevent data loss from server shutdowns/restarts
- Lock acquired before restore on join, released in finally block
- Lock acquired before save on logout, cleaned up after completion
- Verified compatibility with 430-mod Arcadia V2 modpack:
  - All item DataComponents from all mods preserved via BNBT serialization
  - Curios items (Artifacts, Elytra Slot, Charm of Undying, etc.) synced
  - Accessories items (Aether, Deep Aether) synced
  - Server-specific data (FTB Quests/Chunks, Waystones, Lootr) correctly
    NOT synced as intended

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:39:44 +01:00
laforetbrut
c63d5849a3 Add mod compatibility: Accessories (Aether), Cosmetic Armor, Apotheosis
- Add Accessories API sync for Aether mod accessory slots (pendant, cape,
  gloves, rings, shield, misc). Uses same pattern as Curios: validate data
  before clearing slots, PreparedStatements for DB operations
- Add Cosmetic Armor Reworked sync for 4 cosmetic armor slots via
  InventoryManager/CosArmorAPI
- Add Apotheosis + Placebo as compileOnly deps. Apotheosis item data
  (affixes, gems, sockets, rarity) travels with items via DataComponents
  and is already synced by the inventory sync
- New generic mod_player_data DB table with composite key (uuid, mod_id)
  for extensible mod-specific data storage
- Integrated save/restore in join, logout, and auto-save pipelines

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:21:09 +01:00
laforetbrut
03b57c3e6b Fix critical sync bugs, security, and add Sophisticated Storage support
- Fix advancements disappearing: use PreparedStatements for all SQL with
  user data (advancement JSON contains chars that broke string-concat SQL),
  add null safety for advancement file
- Fix multi-server kick: run doPlayerConnect synchronously instead of async
  (players could join before the duplicate check completed)
- Fix Curios disappearing: clear slots AFTER validating data exists (not
  before), use CuriosCache for dead players on logout instead of empty API
- Fix Sophisticated Storage items: add storeSophisticatedStorageItems() and
  restoreSophisticatedStorageItems() to sync packed barrels/shulkers/chests
- Anti-duplication: clear all inventories before restoring from DB on join
- Fix tick counter: remove LevelTickEvent (fired per dimension = 3x too
  fast), merge heartbeat into ServerTickEvent
- Fix connection leaks: use try-with-resources for all QueryResult
- Fix logout order: save data BEFORE marking player offline
- Skip auto-save for dead/unsynced players to prevent saving empty data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:04:00 +01:00
mlus
148ac4db9b Revert "fallback BNBT, Compat with codec"
This reverts commit ce7004dba0.
2026-02-24 10:24:13 +08:00
mlus
ce7004dba0 fallback BNBT, Compat with codec 2026-02-24 10:20:27 +08:00
mlus
201e63a322 Fix SQL syntax by adding backticks around database and table names 2026-02-24 00:11:06 +08:00
mlus
4b39d52c12 Add binary NBT serialization and deserialization support to improve data handling 2026-02-23 23:53:41 +08:00
mlus
b6da709393 curios snbt clean 2026-02-23 22:33:13 +08:00
mlus
bc71c59a45
Change pokedex column type to MEDIUMBLOB 2026-02-21 16:14:56 +08:00
mlus
d0044fa824 snbt structure clean 2026-02-17 19:08:34 +08:00
mlus
d8c3bac31f new nbt serializer 2026-02-17 15:41:45 +08:00
mlus
0c51ad8eb7 try to fix component parse error 2026-02-17 14:27:45 +08:00
mlus
d4a2568f16 fix crash with too many cobblemon in pc 2026-02-08 22:21:37 +08:00
mlus
38c88a95f9 fix #151
fix #160
2026-01-14 20:26:26 +08:00
mlus
e373b8c226 add cobblemon support(in test) 2025-12-15 22:47:47 +08:00
mlus
72d0255d48 fix advancements sync 2025-11-30 01:57:26 +08:00
mlus
90742aafa0 fix backpack didn't sync 2025-11-30 00:50:55 +08:00
mlus
733f37cbb3 supplement 2025-11-28 22:15:29 +08:00
mlus
29da0f28ad recently commit port 2025-11-28 21:00:25 +08:00
mlus
b5e5f9fb65 line 155 make method return so curios data won't save at the first time 2025-10-14 16:56:47 +08:00
mlus
260b24975c heartbeat 2025-10-14 16:56:25 +08:00
mlus
62b0cf15bc chat sync reconnect system 2025-10-14 16:55:24 +08:00
mlus
07709ad792 may fix #111 2025-09-25 23:03:17 +08:00
mlus
fc043e1e03 half done, noticed about advancement can't store normally 2025-06-07 00:55:30 +08:00
mlus
3b442fbee1 not done yet 2025-06-06 21:17:22 +08:00
mlus
79e0e2cbe4 Fix error when no player in server 2025-06-06 13:09:32 +08:00
mlus
0562b01138 Full tested ChatSync Feature 2025-06-05 12:43:41 +08:00
EoD
22b628bdcb fix sophisticated backpack integration for 1.20.4 2025-05-04 18:43:11 +00:00
EoD
9eb8bdc4a0 add support for Minecraft 1.20.4 with ModDevGradle 2025-05-04 18:43:11 +00:00
EoD
bcb55c5a67 Revert "register JDBC driver to work around Forge bug"
This reverts commit ce0e173a9e.
2025-05-04 18:21:32 +00:00
EoD
6ac6f297af encode unknown items using Paper
This allows using PlayerSync with different minecraft versions and
even different sets of mods.

All unknown items are replaced by Paper with its original NBT data
encoded into the paper item.
2025-05-04 16:48:57 +00:00
mlus
ba879dabdb
Merge pull request #63 from EoD/disable-chat-sync-by-default
disable chat sync by default
2025-05-04 20:29:22 +08:00
mlus
39b69424e8 so it is 2.0.0 release 2025-05-04 18:40:39 +08:00
EoD
14ea54fcf3 disable chat sync by default 2025-05-03 21:50:17 +00:00
mlus
a9c4df2a61
Merge pull request #58 from EoD/migrate-to-moddevgradle
Migrate to ModDevGradle legacy to embed JDCB driver
2025-05-04 00:05:26 +08:00
mlus
162df73189
Merge pull request #57 from EoD/fix-advancements-on-brand-new-server
fix advancement restore on brand new servers
2025-05-03 11:17:18 +08:00
mlus
19559bf9e2
Merge pull request #55 from EoD/fix-chat-config-being-ignored
fix chat sync always being enabled
2025-05-03 11:15:59 +08:00
EoD
ce0e173a9e register JDBC driver to work around Forge bug 2025-05-02 22:40:39 +00:00
EoD
284a1caf44 remove NotNull annotations 2025-05-02 22:38:36 +00:00
EoD
ba33d5271b fix advancement restore on brand new servers
On a brand new server, there is no advancements directory throwing an
IOException if we try to write a file to it.
2025-05-02 21:19:34 +00:00
EoD
5a3e157879 fix chat sync always being enabled
reading CHAT_SYNC immediately within FMLCommonSetupEvent can lead to
timing issues that the default value instead of the real config value is
being returned.

Moving them within event.enqueueWork() fixes the timing issue.
2025-05-02 20:32:29 +00:00
EoD
0cbca7cfd8 add logging for chat server 2025-05-02 20:32:29 +00:00
EoD
a1d1737d04 fix advancement sync for new players 2025-05-02 19:16:58 +00:00
EoD
44eb3321b4 make advancement sync optional 2025-05-02 17:40:26 +00:00
EoD
7ece814357 fix advancement json restore
Previously, the json was written too late and never reloaded.
This commit moves the advancement restoration from the PlayerLoggedInEvent
to the earlier onDatapackSyncEvent.
At the same time, it forces a reload of the json files, making sure the
client is informed about the update advancements.
2025-05-01 17:05:03 +00:00
EoD
37d0eb2931 fix storing advancement json on dedicated servers 2025-05-01 17:05:03 +00:00
EoD
94433229b7 read level-name for servers from WorldData 2025-05-01 17:05:02 +00:00
EoD
63ff76353d add docker compose file for MySQL database 2025-05-01 16:58:37 +00:00
mlus
c1778a956c fix error symbol 2025-05-02 00:35:47 +08:00
mlus
b6f76a6af2
Merge pull request #39 from EoD/add-database-compat-flag
add configuration for legacy serialization
2025-05-02 00:28:27 +08:00
mlus
4b7a5dfc1c
Merge pull request #38 from EoD/fix-sophisticated-table-creation
fix database setup without sophisticated backpack
2025-05-02 00:25:57 +08:00
mlus
08e73d00da
Merge pull request #37 from EoD/fix-sophisticated-backpack
fix hidden NoClassDefFoundError
2025-05-02 00:25:03 +08:00
EoD
32856ccd67 fix hidden NoClassDefFoundError
net.p3pp3rf1y.sophisticatedbackpacks throws a NoClassDefFoundError when
sophisticated backpacks is not installed.
This exception never reaches the logs for unknown reasons.

Checking explicitly for ModList.get().isLoaded() ensures that the mod is
loaded.

Fixes regression of 439c7ee5bb
2025-05-01 16:16:42 +00:00
EoD
a2f7d13877 closes connection on sophisticated backpack 2025-05-01 16:15:54 +00:00
EoD
e8abf6a360 fix database setup without sophisticated backpack
Fixes SQLException:
java.sql.SQLSyntaxErrorException: Table 'playersync.backpack_data' doesn't exist

Fixes regression of 9ee7f9a95a
2025-05-01 16:15:54 +00:00
EoD
0fb6bb81e1 fix armor dupe bug
The continue "skipped" the armor entries in the database instead of
writing an explicit "air" item into the slot.

When restoring, only existing entries are being restored, all other
items are left untouched. Allowing to dupe items in armor slots.
2025-05-01 16:14:46 +00:00
mlus
92e95a94a4
Merge pull request #36 from EoD/trace-logs
add trace logs for all SQL queries
2025-05-01 21:04:11 +08:00
EoD
44a3e9ca8c add configuration for legacy serialization 2025-04-25 23:31:43 +00:00
EoD
a510b091db add trace logs for all SQL queries
Can be enabled by starting minecraft with
-Dforge.logging.console.level=trace
2025-04-25 20:40:16 +00:00
EoD
85707a0854 fix FMLJavaModLoadingContext deprecations 2025-04-23 22:39:44 +00:00
mchivelli
5d1a166dcf
Merge branch '1.20.1' into 1.20.1 2025-03-21 23:49:31 +01:00
paulm
9ee7f9a95a Fixed Curios problems 2025-03-21 20:03:42 +01:00
mlus
a7f1373713 1.3.5 release 2025-03-21 19:42:08 +08:00
paulm
439c7ee5bb Addeed Sophisticated Backpack Mod compatibility 2025-03-20 05:26:15 +01:00
mlus
244e764c74 1.3.4 release 2024-10-11 17:20:46 +08:00
mlus
721e013473 missing s 2024-10-11 13:57:28 +08:00
mlus
e22b21c826 Update left_hand and cursor stack sync 2024-10-11 13:25:33 +08:00
mlus
a77fc52da9 fix #23 2024-10-10 18:44:36 +08:00
mlus
9332ac6353 try to fix #23 2024-10-10 13:07:58 +08:00
mlus
bb45488186 fix #22 2024-09-24 21:46:12 +08:00
mlus
1ec9be4e5a reduce frequency of updating server info 2024-08-05 02:24:04 +08:00
mlus
053758e6cc And for update 2024-08-04 17:51:07 +08:00
mlus
bd4694e44b DataBase Fixed 2024-08-04 17:46:38 +08:00
mlus
14686a930f build fix 2024-08-04 14:26:01 +08:00
mlus
50e146d7fe Chat Sync performance enhancement 2024-08-04 14:20:25 +08:00
mlus
201bf95ff5 security vulnerability fix 2024-05-19 12:39:11 +08:00
mlus
37218c4c58 fixed #16 2024-05-03 16:14:21 +08:00
mlus
41298da321 fixed #15 2024-05-02 20:17:15 +08:00
mlus
17ad40f693 code refactor 2024-05-02 16:47:08 +08:00
mlus
0dfab35b25 fix curios inventory replicate bug 2024-04-23 21:27:02 +08:00
mlus
50648a217d fix curios inventory missing bug 2024-04-20 21:19:19 +08:00
mlus
d02232ca2d update curios API X2 2024-04-17 21:57:53 +08:00
mlus
6e6326bbbc trying to fix sql issue 2024-02-19 17:17:32 +08:00
mlus
b3352fde51 1.3.0 update 2024-02-11 17:34:19 +08:00
mlus-Asuka
da99e59d0a wtf 2023-09-29 17:07:25 +08:00
mlus-Asuka
d32ae52537 update 1.2.1 2023-09-29 16:50:26 +08:00
mlus-Asuka
5de0fdcff6 update 1.20.1 2023-09-22 12:07:58 +08:00
mlus-Asuka
45e13f1199 1.2.0 release 2023-08-09 16:08:23 +08:00
mlus-Asuka
5ef817a9b7 Use HikariPool instead of original driver.Merge Fork from KK1ve. 2023-08-03 22:05:43 +08:00
mlus-Asuka
93404dcdb5 change wrong file path 2023-06-20 15:55:04 +08:00
mlus-Asuka
2496383c71 debug 2023-04-06 16:49:48 +08:00
mlus-Asuka
91add1b627 add datapack support. 2023-03-31 19:13:06 +08:00
mlus-Asuka
8940c8be8d fix curios bugs. 2023-03-31 13:18:36 +08:00
mlus-Asuka
dbe90ecd25 fix armor bugs. 2023-03-31 12:11:35 +08:00
mlus-Asuka
30b1690a73 fix chat and effects bugs. 2023-02-16 14:26:24 +08:00
mlus-Asuka
d2921adc88 change data type. 2023-02-16 13:00:18 +08:00
mlus-Asuka
029789ccd1 fix server bug. 2023-02-15 16:06:54 +08:00
mlus-Asuka
0437374dee fix server bug. 2023-02-15 00:42:26 +08:00
mlus-Asuka
34e16313b6 fix chat message sync 2023-01-10 13:49:02 +08:00
mlus-Asuka
89e74813e2 Add chat message sync 2022-12-21 19:42:56 +08:00