2013-05-23 05:01:19 +00:00
|
|
|
package net.minecraftforge.fluids;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import net.minecraft.block.Block;
|
2014-01-30 02:34:23 +00:00
|
|
|
import net.minecraft.init.Blocks;
|
2013-11-12 09:05:13 +00:00
|
|
|
import net.minecraft.util.StatCollector;
|
2013-05-23 05:01:19 +00:00
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
|
|
|
|
import com.google.common.collect.BiMap;
|
|
|
|
import com.google.common.collect.HashBiMap;
|
|
|
|
import com.google.common.collect.ImmutableMap;
|
2014-01-30 02:34:23 +00:00
|
|
|
import com.google.common.collect.Maps;
|
2013-05-23 05:01:19 +00:00
|
|
|
|
Initial update to 1.8, Super beta. Most rendering related hooks are out due to major changes in 1.8.
Some notes:
Almost all int x, int y, int z parameters have been changed to BlockPos class
ForgeDirection has been removed, replaced by net.minecraft.util.EnumFacing.
All FML classes have moved from packet cpw.mods.fml to net.minecraftforge.fml
Fluid Rendering has been disabled for the time being, to be re-evaulated and a test mod created for it.
Minecraft now uses a Model based system for rendering blocks and Items. The intention is to expand the model format to better suit modder's needed once it is evaulated.
As such, The model loaders from Forge have been removed, to be replaced by expanding vanilla's model format.
Metadata has been extracted out in Minecraft to IBlockState, which holds a list of properties instead of magic number metadata. DO NOT listen to the fearmongering, you can do EVERYTHING with block states you could previously with metadata.
Stencil Bits are disabled entirely by for the main Display, Modders must enable and recreate the FrameBuffer if they wish to use Stencil Bits.
2014-11-26 03:56:35 +00:00
|
|
|
import net.minecraftforge.fml.common.eventhandler.Event;
|
2013-12-17 01:18:48 +00:00
|
|
|
|
2013-05-23 05:01:19 +00:00
|
|
|
/**
|
|
|
|
* Handles Fluid registrations. Fluids MUST be registered in order to function.
|
2013-07-27 21:36:27 +00:00
|
|
|
*
|
2013-05-23 05:01:19 +00:00
|
|
|
* @author King Lemming, CovertJaguar (LiquidDictionary)
|
2013-07-27 21:36:27 +00:00
|
|
|
*
|
2013-05-23 05:01:19 +00:00
|
|
|
*/
|
2013-07-17 04:40:49 +00:00
|
|
|
public abstract class FluidRegistry
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
static int maxID = 0;
|
|
|
|
|
2014-01-30 02:34:23 +00:00
|
|
|
static HashMap<String, Fluid> fluids = Maps.newHashMap();
|
2013-05-23 05:01:19 +00:00
|
|
|
static BiMap<String, Integer> fluidIDs = HashBiMap.create();
|
2013-09-05 16:08:16 +00:00
|
|
|
static BiMap<Block, Fluid> fluidBlocks;
|
|
|
|
|
2013-11-12 09:05:13 +00:00
|
|
|
public static final Fluid WATER = new Fluid("water") {
|
|
|
|
@Override
|
|
|
|
public String getLocalizedName() {
|
|
|
|
return StatCollector.translateToLocal("tile.water.name");
|
|
|
|
}
|
2014-02-05 08:05:37 +00:00
|
|
|
}.setBlock(Blocks.water).setUnlocalizedName(Blocks.water.getUnlocalizedName());
|
2013-11-12 09:05:13 +00:00
|
|
|
|
|
|
|
public static final Fluid LAVA = new Fluid("lava") {
|
|
|
|
@Override
|
|
|
|
public String getLocalizedName() {
|
|
|
|
return StatCollector.translateToLocal("tile.lava.name");
|
|
|
|
}
|
2014-02-05 08:05:37 +00:00
|
|
|
}.setBlock(Blocks.lava).setLuminosity(15).setDensity(3000).setViscosity(6000).setTemperature(1300).setUnlocalizedName(Blocks.lava.getUnlocalizedName());
|
2013-05-23 05:01:19 +00:00
|
|
|
|
|
|
|
public static int renderIdFluid = -1;
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
static
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
registerFluid(WATER);
|
|
|
|
registerFluid(LAVA);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
private FluidRegistry(){}
|
2013-05-23 05:01:19 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Called by Forge to prepare the ID map for server -> client sync.
|
2014-01-30 02:34:23 +00:00
|
|
|
* Modders, DO NOT call this.
|
|
|
|
*/
|
|
|
|
public static void initFluidIDs(BiMap<String, Integer> newfluidIDs)
|
2013-07-17 04:40:49 +00:00
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
maxID = newfluidIDs.size();
|
|
|
|
fluidIDs.clear();
|
|
|
|
fluidIDs.putAll(newfluidIDs);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Register a new Fluid. If a fluid with the same name already exists, registration is denied.
|
2013-07-27 21:36:27 +00:00
|
|
|
*
|
2013-05-23 05:01:19 +00:00
|
|
|
* @param fluid
|
|
|
|
* The fluid to register.
|
|
|
|
* @return True if the fluid was successfully registered; false if there is a name clash.
|
2014-01-30 02:34:23 +00:00
|
|
|
*/
|
2013-07-17 04:40:49 +00:00
|
|
|
public static boolean registerFluid(Fluid fluid)
|
|
|
|
{
|
|
|
|
if (fluidIDs.containsKey(fluid.getName()))
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
fluids.put(fluid.getName(), fluid);
|
|
|
|
fluidIDs.put(fluid.getName(), ++maxID);
|
|
|
|
|
|
|
|
MinecraftForge.EVENT_BUS.post(new FluidRegisterEvent(fluid.getName(), maxID));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static boolean isFluidRegistered(Fluid fluid)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return fluidIDs.containsKey(fluid.getName());
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static boolean isFluidRegistered(String fluidName)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return fluidIDs.containsKey(fluidName);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static Fluid getFluid(String fluidName)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return fluids.get(fluidName);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static Fluid getFluid(int fluidID)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return fluids.get(getFluidName(fluidID));
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static String getFluidName(int fluidID)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return fluidIDs.inverse().get(fluidID);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static String getFluidName(FluidStack stack)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return getFluidName(stack.fluidID);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static int getFluidID(String fluidName)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return fluidIDs.get(fluidName);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static FluidStack getFluidStack(String fluidName, int amount)
|
|
|
|
{
|
|
|
|
if (!fluidIDs.containsKey(fluidName))
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return new FluidStack(getFluidID(fluidName), amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a read-only map containing Fluid Names and their associated Fluids.
|
2014-01-30 02:34:23 +00:00
|
|
|
*/
|
2013-07-17 04:40:49 +00:00
|
|
|
public static Map<String, Fluid> getRegisteredFluids()
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return ImmutableMap.copyOf(fluids);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a read-only map containing Fluid Names and their associated IDs.
|
2014-01-30 02:34:23 +00:00
|
|
|
*/
|
2013-07-17 04:40:49 +00:00
|
|
|
public static Map<String, Integer> getRegisteredFluidIDs()
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
return ImmutableMap.copyOf(fluidIDs);
|
|
|
|
}
|
|
|
|
|
2013-09-05 16:08:16 +00:00
|
|
|
public static Fluid lookupFluidForBlock(Block block)
|
|
|
|
{
|
|
|
|
if (fluidBlocks == null)
|
|
|
|
{
|
2014-04-03 06:53:05 +00:00
|
|
|
BiMap<Block, Fluid> tmp = HashBiMap.create();
|
2013-09-05 16:08:16 +00:00
|
|
|
for (Fluid fluid : fluids.values())
|
|
|
|
{
|
2014-01-30 02:34:23 +00:00
|
|
|
if (fluid.canBePlacedInWorld() && fluid.getBlock() != null)
|
2013-09-05 16:08:16 +00:00
|
|
|
{
|
2014-04-03 06:53:05 +00:00
|
|
|
tmp.put(fluid.getBlock(), fluid);
|
2013-09-05 16:08:16 +00:00
|
|
|
}
|
|
|
|
}
|
2014-04-03 06:53:05 +00:00
|
|
|
fluidBlocks = tmp;
|
2013-09-05 16:08:16 +00:00
|
|
|
}
|
|
|
|
return fluidBlocks.get(block);
|
|
|
|
}
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public static class FluidRegisterEvent extends Event
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
public final String fluidName;
|
|
|
|
public final int fluidID;
|
|
|
|
|
2013-07-17 04:40:49 +00:00
|
|
|
public FluidRegisterEvent(String fluidName, int fluidID)
|
|
|
|
{
|
2013-05-23 05:01:19 +00:00
|
|
|
this.fluidName = fluidName;
|
|
|
|
this.fluidID = fluidID;
|
|
|
|
}
|
|
|
|
}
|
2014-01-30 02:34:23 +00:00
|
|
|
|
|
|
|
public static int getMaxID()
|
|
|
|
{
|
|
|
|
return maxID;
|
|
|
|
}
|
2013-05-23 05:01:19 +00:00
|
|
|
}
|