Syncing Issues

This commit is contained in:
Kam committed 2025-11-05 17:33:24 -05:00
1 parent 3009c97bc9
commit 082d22ba6e
2 files changed
+23 -58

No files matched your search

@@ -53,22 +53,9 @@ public class SyncController {
public static boolean DEBUG_SYNC_LOGGING = false;
private static final SyncController SERVER = new SyncController();
private static final EnumMap<EnumSyncType, SyncCacheEntry> cacheEntries = new EnumMap<>(EnumSyncType.class);
private static final ConcurrentHashMap<UUID, PlayerSyncState> playerSyncState = new ConcurrentHashMap<>();
private final EnumMap<EnumSyncType, SyncCacheEntry> cacheEntries = new EnumMap<>(EnumSyncType.class);
private final ConcurrentHashMap<UUID, PlayerSyncState> playerSyncState = new ConcurrentHashMap<>();
private SyncController() {
registerCache(EnumSyncType.FACTION, SyncController::factionsNBT);
registerCache(EnumSyncType.DIALOG_CATEGORY, SyncController::dialogCategoriesNBT);
registerCache(EnumSyncType.QUEST_CATEGORY, SyncController::questCategoriesNBT);
registerCache(EnumSyncType.WORKBENCH_RECIPES, SyncController::workbenchNBT);
registerCache(EnumSyncType.CARPENTRY_RECIPES, SyncController::carpentryNBT);
registerCache(EnumSyncType.ANVIL_RECIPES, SyncController::anvilNBT);
registerCache(EnumSyncType.CUSTOM_EFFECTS, SyncController::customEffectsNBT);
registerCache(EnumSyncType.MAGIC, SyncController::magicsNBT);
registerCache(EnumSyncType.MAGIC_CYCLE, SyncController::magicCyclesNBT);
}
private static void debug(String message, Object... args) {
if (DEBUG_SYNC_LOGGING) {
@@ -89,46 +76,25 @@ public class SyncController {
};
public static void load() {
SERVER.loadInternal();
}
@Deprecated
public static void rebuildAllCaches() {
load();
}
public static void resetServerState() {
SERVER.resetState();
}
private void loadInternal() {
resetState();
rebuildAllCachesInternal();
}
private void resetState() {
for (SyncCacheEntry entry : cacheEntries.values()) {
if (entry != null) {
entry.reset();
}
}
cacheEntries.clear();
playerSyncState.clear();
}
private void rebuildAllCachesInternal() {
for (EnumSyncType type : EnumSyncType.values()) {
SyncCacheEntry entry = cacheEntries.get(type);
if (entry != null) {
entry.getPayload(type);
}
}
registerCache(EnumSyncType.FACTION, SyncController::factionsNBT);
registerCache(EnumSyncType.DIALOG_CATEGORY, SyncController::dialogCategoriesNBT);
registerCache(EnumSyncType.QUEST_CATEGORY, SyncController::questCategoriesNBT);
registerCache(EnumSyncType.WORKBENCH_RECIPES, SyncController::workbenchNBT);
registerCache(EnumSyncType.CARPENTRY_RECIPES, SyncController::carpentryNBT);
registerCache(EnumSyncType.ANVIL_RECIPES, SyncController::anvilNBT);
registerCache(EnumSyncType.CUSTOM_EFFECTS, SyncController::customEffectsNBT);
registerCache(EnumSyncType.MAGIC, SyncController::magicsNBT);
registerCache(EnumSyncType.MAGIC_CYCLE, SyncController::magicCyclesNBT);
}
public static void syncPlayer(EntityPlayerMP player) {
SERVER.syncPlayerInternal(player, true);
SyncController.syncPlayerInternal(player, true);
}
private void syncPlayerInternal(EntityPlayerMP player, boolean includePostPackets) {
private static void syncPlayerInternal(EntityPlayerMP player, boolean includePostPackets) {
PlayerSyncState state = playerSyncState.computeIfAbsent(player.getUniqueID(), PlayerSyncState::new);
for (EnumSyncType type : LOGIN_SYNC_TYPES) {
@@ -161,7 +127,7 @@ public class SyncController {
}
public static void beginLogin(EntityPlayerMP player) {
SERVER.playerSyncState.computeIfAbsent(player.getUniqueID(), PlayerSyncState::new);
playerSyncState.computeIfAbsent(player.getUniqueID(), PlayerSyncState::new);
PacketHandler.Instance.sendToPlayer(
new LoginPacket(getServerCacheKey(), getServerRevisionSnapshot()),
player
@@ -175,7 +141,7 @@ public class SyncController {
Map<EnumSyncType, Integer> clientRevisions
) {
String currentServerKey = getServerCacheKey();
PlayerSyncState state = SERVER.playerSyncState.computeIfAbsent(player.getUniqueID(), PlayerSyncState::new);
PlayerSyncState state = playerSyncState.computeIfAbsent(player.getUniqueID(), PlayerSyncState::new);
if (!currentServerKey.equals(serverKey)) {
state.reset();
@@ -213,7 +179,7 @@ public class SyncController {
private static EnumMap<EnumSyncType, Integer> getServerRevisionSnapshot() {
EnumMap<EnumSyncType, Integer> snapshot = new EnumMap<>(EnumSyncType.class);
for (EnumSyncType type : LOGIN_SYNC_TYPES) {
SyncCacheEntry entry = SERVER.cacheEntries.get(type);
SyncCacheEntry entry = cacheEntries.get(type);
if (entry != null) {
snapshot.put(type, entry.getRevisionValue());
}
@@ -237,7 +203,7 @@ public class SyncController {
}
public static int getCurrentRevision(EnumSyncType type) {
SyncCacheEntry entry = SERVER.cacheEntries.get(type);
SyncCacheEntry entry = cacheEntries.get(type);
return entry == null ? -1 : entry.getRevisionValue();
}
@@ -829,12 +795,12 @@ public class SyncController {
}
}
private void registerCache(EnumSyncType type, Supplier<NBTTagCompound> supplier) {
private static void registerCache(EnumSyncType type, Supplier<NBTTagCompound> supplier) {
cacheEntries.put(type, new SyncCacheEntry(type, supplier));
}
private static CachedSyncPayload rebuildNow(EnumSyncType type) {
SyncCacheEntry entry = SERVER.cacheEntries.get(type);
SyncCacheEntry entry = cacheEntries.get(type);
if (entry == null) {
return null;
}
@@ -846,7 +812,7 @@ public class SyncController {
EnumSet<EnumSyncType> targets = getInvalidationTargets(type);
EnumMap<EnumSyncType, Integer> revisions = new EnumMap<>(EnumSyncType.class);
for (EnumSyncType target : targets) {
SyncCacheEntry entry = SERVER.cacheEntries.get(target);
SyncCacheEntry entry = cacheEntries.get(target);
if (entry != null) {
int newRevision = entry.invalidate();
revisions.put(target, newRevision);
@@ -886,7 +852,7 @@ public class SyncController {
if (revision < 0) {
return;
}
for (PlayerSyncState state : SERVER.playerSyncState.values()) {
for (PlayerSyncState state : playerSyncState.values()) {
state.updateRevision(type, revision);
}
}
@@ -895,7 +861,7 @@ public class SyncController {
if (revisions.isEmpty()) {
return;
}
for (PlayerSyncState state : SERVER.playerSyncState.values()) {
for (PlayerSyncState state : playerSyncState.values()) {
for (Map.Entry<EnumSyncType, Integer> entry : revisions.entrySet()) {
state.updateRevision(entry.getKey(), entry.getValue());
}
@@ -317,7 +317,6 @@ public class CustomNpcs {
@EventHandler
public void stopped(FMLServerStoppedEvent event) {
SyncController.resetServerState();
ServerCloneController.Instance = null;
GlobalDataController.Instance.saveData();
ScriptController.Instance.saveForgeScripts();