diff --git a/src/main/java/net/minecraftforge/fluids/FluidRegistry.java b/src/main/java/net/minecraftforge/fluids/FluidRegistry.java index d4a7f57..a127b8c 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidRegistry.java +++ b/src/main/java/net/minecraftforge/fluids/FluidRegistry.java @@ -79,25 +79,21 @@ public static void initFluidIDs(BiMap newfluidIDs, Set defaultNames) { maxID = newfluidIDs.size(); - fluidIDs.clear(); - fluidIDs.putAll(newfluidIDs); - fluidNames.clear(); - for (Entry e : fluidIDs.entrySet()) { - fluidNames.put(e.getValue(), e.getKey().getName()); - } - loadFluidDefaults(defaultNames); + loadFluidDefaults(newfluidIDs, defaultNames); } /** * Called by forge to load default fluid IDs from the world or from server -> client for syncing * DO NOT call this and expect useful behaviour. + * @param newfluidIDs */ - private static void loadFluidDefaults(Set defaultNames) + private static void loadFluidDefaults(BiMap localFluidIDs, Set defaultNames) { // If there's an empty set of default names, use the defaults as defined locally if (defaultNames.isEmpty()) { defaultNames.addAll(defaultFluidName.values()); } + BiMap localFluids = HashBiMap.create(fluids); for (String defaultName : defaultNames) { Fluid fluid = masterFluidReference.get(defaultName); @@ -112,10 +108,17 @@ FMLLog.getLogger().log(Level.ERROR, "The fluid {} specified as default is not present - it will be reverted to default {}", defaultName, localDefault); } FMLLog.getLogger().log(Level.DEBUG, "The fluid {} has been selected as the default fluid for {}", defaultName, fluid.getName()); - Fluid oldFluid = fluids.put(fluid.getName(), fluid); - Integer id = fluidIDs.remove(oldFluid); - fluidIDs.put(fluid, id); + Fluid oldFluid = localFluids.put(fluid.getName(), fluid); + Integer id = localFluidIDs.remove(oldFluid); + localFluidIDs.put(fluid, id); } + BiMap localFluidNames = fluidNames; + for (Entry e : localFluidIDs.entrySet()) { + localFluidNames.put(e.getValue(), e.getKey().getName()); + } + fluidIDs = localFluidIDs; + fluids = localFluids; + fluidNames = localFluidNames; fluidBlocks = null; for (FluidDelegate fd : delegates.values()) { @@ -312,7 +315,7 @@ { FMLLog.getLogger().log(Level.DEBUG, "World is missing persistent fluid defaults - using local defaults"); } - loadFluidDefaults(defaults); + loadFluidDefaults(HashBiMap.create(fluidIDs), defaults); } public static void writeDefaultFluidList(NBTTagCompound forgeData)