mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 04:57:27 +00:00
Syncing Issues
This commit is contained in:
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();
|
||||
|
||||
Reference in new issue
Block a user