Fixed dummy blocks not being removed from registry on dedicated server correctly. Closes #2487

Also added some more debug logs!
This commit is contained in:
LexManos 2016-02-24 16:56:20 -08:00
parent 0dd796fb16
commit ecfb9accaa
2 changed files with 21 additions and 3 deletions

View file

@ -10,6 +10,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.google.common.base.Joiner;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.collect.BiMap; import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
@ -463,7 +464,11 @@ public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaul
{ {
getExistingDelegate(thing).setResourceName(name); getExistingDelegate(thing).setResourceName(name);
} }
this.dummiedLocations.remove(name);
if (this.dummiedLocations.remove(name) && DEBUG)
{
FMLLog.fine("Registry Dummy Remove: %s", name);
}
if (DEBUG) if (DEBUG)
{ {
@ -474,6 +479,10 @@ public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaul
void markDummy(ResourceLocation rl, Integer id, I thing) 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.dummiedLocations.add(rl);
this.addObjectRaw(id, rl, thing); this.addObjectRaw(id, rl, thing);
} }
@ -705,6 +714,10 @@ public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaul
public void loadDummied(Set<ResourceLocation> dummied) public void loadDummied(Set<ResourceLocation> dummied)
{ {
if (DEBUG && dummied.size() > 0)
{
FMLLog.fine("Registry Dummy Load: [%s]", Joiner.on(", ").join(dummied));
}
this.dummiedLocations.addAll(dummied); this.dummiedLocations.addAll(dummied);
} }

View file

@ -174,6 +174,10 @@ public class PersistentRegistryManager
else if (isLocalWorld) else if (isLocalWorld)
{ {
// Carry on, we resuscitated the block // Carry on, we resuscitated the block
if (FMLControlledNamespacedRegistry.DEBUG)
{
FMLLog.log(Level.DEBUG, "Registry: Resuscitating dummy block %s", dummy);
}
} }
else else
{ {
@ -324,10 +328,11 @@ public class PersistentRegistryManager
newRegistry.loadBlocked(snapshotEntry.blocked); newRegistry.loadBlocked(snapshotEntry.blocked);
missing.put(registryName, Maps.<ResourceLocation, Integer>newLinkedHashMap()); missing.put(registryName, Maps.<ResourceLocation, Integer>newLinkedHashMap());
remaps.put(registryName, Maps.<ResourceLocation, Integer[]>newHashMap()); remaps.put(registryName, Maps.<ResourceLocation, Integer[]>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.loadIds(snapshotEntry.ids, missing.get(registryName), remaps.get(registryName), currentRegistry, registryName);
newRegistry.loadSubstitutions(substitutions); newRegistry.loadSubstitutions(substitutions);
// Load current dummies AFTER the snapshot is loaded
newRegistry.loadDummied(snapshotEntry.dummied);
} }
public static boolean isFrozen(FMLControlledNamespacedRegistry<?> registry) public static boolean isFrozen(FMLControlledNamespacedRegistry<?> registry)