Change universal bucket support to use fluid names instead of instances (#5031)

This commit is contained in:
Ben Staddon authored and LexManos committed 2018-10-04 00:20:44 -07:00
1 parent ee0d43bbde
commit 82262e462e
3 files changed
+26 -13

No files matched your search

@@ -25,7 +25,6 @@ import java.util.Map.Entry;
import java.util.Set;
import net.minecraftforge.fml.common.LoaderState;
import org.apache.logging.log4j.Level;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
@@ -39,8 +38,6 @@ import net.minecraftforge.common.MinecraftForge;
import com.google.common.base.Strings;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -70,7 +67,8 @@ public abstract class FluidRegistry
static Map<Fluid,FluidDelegate> delegates = Maps.newHashMap();
static boolean universalBucketEnabled = false;
static Set<Fluid> bucketFluids = Sets.newHashSet();
static Set<String> bucketFluids = Sets.newHashSet();
static Set<Fluid> currentBucketFluids;
public static final Fluid WATER = new Fluid("water", new ResourceLocation("blocks/water_still"), new ResourceLocation("blocks/water_flow"), new ResourceLocation("blocks/water_overlay")) {
@Override
@@ -143,6 +141,7 @@ public abstract class FluidRegistry
fluids = localFluids;
fluidNames = localFluidNames;
fluidBlocks = null;
currentBucketFluids = null;
for (FluidDelegate fd : delegates.values())
{
fd.rebind();
@@ -237,7 +236,7 @@ public abstract class FluidRegistry
*/
public static Map<String, Fluid> getRegisteredFluids()
{
return ImmutableMap.copyOf(fluids);
return Maps.unmodifiableBiMap(fluids);
}
/**
@@ -247,7 +246,7 @@ public abstract class FluidRegistry
@Deprecated
public static Map<Fluid, Integer> getRegisteredFluidIDs()
{
return ImmutableMap.copyOf(fluidIDs);
return Maps.unmodifiableBiMap(fluidIDs);
}
/**
@@ -290,18 +289,31 @@ public abstract class FluidRegistry
{
registerFluid(fluid);
}
return bucketFluids.add(fluid);
return bucketFluids.add(fluid.getName());
}
/**
* All fluids registered with the universal bucket
* @return An immutable set containing the fluids
* @return A read-only set containing the fluids
*/
public static Set<Fluid> getBucketFluids()
{
return Collections.unmodifiableSet(bucketFluids);
if (currentBucketFluids == null)
{
Set<Fluid> tmp = Sets.newHashSet();
for (String fluidName : bucketFluids)
{
tmp.add(getFluid(fluidName));
}
currentBucketFluids = Collections.unmodifiableSet(tmp);
}
return currentBucketFluids;
}
public static boolean hasBucket(Fluid fluid)
{
return bucketFluids.contains(fluid.getName());
}
public static Fluid lookupFluidForBlock(Block block)
{
@@ -740,7 +740,7 @@ public class FluidUtil
}
}
if (FluidRegistry.isUniversalBucketEnabled() && FluidRegistry.getBucketFluids().contains(fluid))
if (FluidRegistry.isUniversalBucketEnabled() && FluidRegistry.hasBucket(fluid))
{
UniversalBucket bucket = ForgeModContainer.getInstance().universalBucket;
ItemStack filledBucket = new ItemStack(bucket);
@@ -60,13 +60,14 @@ public class FluidBucketWrapper implements IFluidHandlerItem, ICapabilityProvide
return container;
}
public boolean canFillFluidType(FluidStack fluid)
public boolean canFillFluidType(FluidStack fluidStack)
{
if (fluid.getFluid() == FluidRegistry.WATER || fluid.getFluid() == FluidRegistry.LAVA || fluid.getFluid().getName().equals("milk"))
Fluid fluid = fluidStack.getFluid();
if (fluid == FluidRegistry.WATER || fluid == FluidRegistry.LAVA || fluid.getName().equals("milk"))
{
return true;
}
return FluidRegistry.isUniversalBucketEnabled() && FluidRegistry.getBucketFluids().contains(fluid.getFluid());
return FluidRegistry.isUniversalBucketEnabled() && FluidRegistry.hasBucket(fluid);
}
@Nullable