From ecfb9accaae8102856cc1a4faff083a4d4a491fd Mon Sep 17 00:00:00 2001 From: LexManos Date: Wed, 24 Feb 2016 16:56:20 -0800 Subject: [PATCH] Fixed dummy blocks not being removed from registry on dedicated server correctly. Closes #2487 Also added some more debug logs! --- .../registry/FMLControlledNamespacedRegistry.java | 15 ++++++++++++++- .../registry/PersistentRegistryManager.java | 9 +++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java b/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java index 3e2a5c669f..d2385f314f 100644 --- a/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java +++ b/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.google.common.base.Joiner; import com.google.common.base.Throwables; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; @@ -463,7 +464,11 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespacedDefaul { getExistingDelegate(thing).setResourceName(name); } - this.dummiedLocations.remove(name); + + if (this.dummiedLocations.remove(name) && DEBUG) + { + FMLLog.fine("Registry Dummy Remove: %s", name); + } if (DEBUG) { @@ -474,6 +479,10 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespacedDefaul void markDummy(ResourceLocation rl, Integer id, I thing) { + if (DEBUG) + { + FMLLog.finer("Registry Dummy Add: %s %d -> %s", rl, id, thing); + } this.dummiedLocations.add(rl); this.addObjectRaw(id, rl, thing); } @@ -705,6 +714,10 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespacedDefaul public void loadDummied(Set dummied) { + if (DEBUG && dummied.size() > 0) + { + FMLLog.fine("Registry Dummy Load: [%s]", Joiner.on(", ").join(dummied)); + } this.dummiedLocations.addAll(dummied); } diff --git a/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java b/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java index 3085cc0c48..8e8c4f7051 100644 --- a/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java +++ b/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java @@ -174,6 +174,10 @@ public class PersistentRegistryManager else if (isLocalWorld) { // Carry on, we resuscitated the block + if (FMLControlledNamespacedRegistry.DEBUG) + { + FMLLog.log(Level.DEBUG, "Registry: Resuscitating dummy block %s", dummy); + } } else { @@ -324,10 +328,11 @@ public class PersistentRegistryManager newRegistry.loadBlocked(snapshotEntry.blocked); missing.put(registryName, Maps.newLinkedHashMap()); remaps.put(registryName, Maps.newHashMap()); + // Load current dummies BEFORE the snapshot is loaded so that add() will remove from the list. + // Potentially causes issues from cpw's previous comment. Must keep eye on. + newRegistry.loadDummied(snapshotEntry.dummied); newRegistry.loadIds(snapshotEntry.ids, missing.get(registryName), remaps.get(registryName), currentRegistry, registryName); newRegistry.loadSubstitutions(substitutions); - // Load current dummies AFTER the snapshot is loaded - newRegistry.loadDummied(snapshotEntry.dummied); } public static boolean isFrozen(FMLControlledNamespacedRegistry registry)