From 82262e462e5ea8ff3a368ffce7d0edfd301dfeb0 Mon Sep 17 00:00:00 2001 From: Ben Staddon Date: Thu, 4 Oct 2018 08:20:44 +0100 Subject: [PATCH] Change universal bucket support to use fluid names instead of instances (#5031) --- .../minecraftforge/fluids/FluidRegistry.java | 30 +++++++++++++------ .../net/minecraftforge/fluids/FluidUtil.java | 2 +- .../wrappers/FluidBucketWrapper.java | 7 +++-- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minecraftforge/fluids/FluidRegistry.java b/src/main/java/net/minecraftforge/fluids/FluidRegistry.java index aa65e13d86..4217d45e5c 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidRegistry.java +++ b/src/main/java/net/minecraftforge/fluids/FluidRegistry.java @@ -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 delegates = Maps.newHashMap(); static boolean universalBucketEnabled = false; - static Set bucketFluids = Sets.newHashSet(); + static Set bucketFluids = Sets.newHashSet(); + static Set 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 getRegisteredFluids() { - return ImmutableMap.copyOf(fluids); + return Maps.unmodifiableBiMap(fluids); } /** @@ -247,7 +246,7 @@ public abstract class FluidRegistry @Deprecated public static Map 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 getBucketFluids() { - return Collections.unmodifiableSet(bucketFluids); + if (currentBucketFluids == null) + { + Set 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) { diff --git a/src/main/java/net/minecraftforge/fluids/FluidUtil.java b/src/main/java/net/minecraftforge/fluids/FluidUtil.java index 0285136c52..740aad3354 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidUtil.java +++ b/src/main/java/net/minecraftforge/fluids/FluidUtil.java @@ -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); diff --git a/src/main/java/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.java b/src/main/java/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.java index 024e9bc914..51f642991e 100644 --- a/src/main/java/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.java +++ b/src/main/java/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.java @@ -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