inline fluid registry

This commit is contained in:
Sen 2025-06-22 18:03:33 +02:00
parent 039a7d7d9e
commit eb5c03dda3
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
12 changed files with 105 additions and 175 deletions

View file

@ -16,14 +16,16 @@ import client.renderer.texture.TextureMap;
import client.renderer.tileentity.TileEntityItemStackRenderer; import client.renderer.tileentity.TileEntityItemStackRenderer;
import common.block.Block; import common.block.Block;
import common.block.Material; import common.block.Material;
import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockLiquid; import common.block.liquid.BlockLiquid;
import common.block.liquid.BlockStaticLiquid;
import common.collect.Maps; import common.collect.Maps;
import common.init.BlockRegistry; import common.init.BlockRegistry;
import common.init.FluidRegistry;
import common.item.ItemStack; import common.item.ItemStack;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.util.Pair;
import common.util.Vec3i; import common.util.Vec3i;
import common.world.IBlockAccess; import common.world.IBlockAccess;
import common.world.IWorldAccess; import common.world.IWorldAccess;
@ -406,12 +408,11 @@ public class BlockRenderer
private void initAtlasSprites() private void initAtlasSprites()
{ {
TextureMap texturemap = Client.CLIENT.getTextureMapBlocks(); TextureMap texturemap = Client.CLIENT.getTextureMapBlocks();
for(int z = 0; z < FluidRegistry.getNumFluids(); z++) { for(Pair<BlockStaticLiquid, BlockDynamicLiquid> liquid : BlockLiquid.LIQUIDS) {
BlockLiquid block = FluidRegistry.getStaticBlock(z); String name = BlockRegistry.getNameFromBlock(liquid.first());
String name = BlockRegistry.getNameFromBlock(block).toString();
TextureAtlasSprite[] sprites = new TextureAtlasSprite[] {texturemap.getAtlasSprite("blocks/" + name + "_still"), texturemap.getAtlasSprite("blocks/" + name + "_flow")}; TextureAtlasSprite[] sprites = new TextureAtlasSprite[] {texturemap.getAtlasSprite("blocks/" + name + "_still"), texturemap.getAtlasSprite("blocks/" + name + "_flow")};
this.fluids.put(FluidRegistry.getFluidBlock(z), sprites); this.fluids.put(liquid.second(), sprites);
this.fluids.put(block, sprites); this.fluids.put(liquid.first(), sprites);
} }
} }

View file

@ -9,16 +9,19 @@ import java.util.Set;
import client.renderer.texture.TextureAtlasSprite; import client.renderer.texture.TextureAtlasSprite;
import client.renderer.texture.TextureMap; import client.renderer.texture.TextureMap;
import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockLiquid;
import common.block.liquid.BlockStaticLiquid;
import common.collect.Lists; import common.collect.Lists;
import common.collect.Maps; import common.collect.Maps;
import common.collect.Sets; import common.collect.Sets;
import common.init.BlockRegistry; import common.init.BlockRegistry;
import common.init.FluidRegistry;
import common.init.ItemRegistry; import common.init.ItemRegistry;
import common.item.Item; import common.item.Item;
import common.model.ModelRotation; import common.model.ModelRotation;
import common.util.Facing; import common.util.Facing;
import common.util.IRegistry; import common.util.IRegistry;
import common.util.Pair;
import common.util.RegistrySimple; import common.util.RegistrySimple;
import common.world.State; import common.world.State;
@ -37,8 +40,8 @@ public abstract class ModelBakery
public static final ModelBlock MODEL_ENTITY = (ModelBlock)new ModelBlock(null).add().d(""); public static final ModelBlock MODEL_ENTITY = (ModelBlock)new ModelBlock(null).add().d("");
static { static {
for(int z = 0; z < FluidRegistry.getNumFluids(); z++) { for(Pair<BlockStaticLiquid, BlockDynamicLiquid> liquid : BlockLiquid.LIQUIDS) {
String name = BlockRegistry.getNameFromBlock(FluidRegistry.getStaticBlock(z)).toString(); String name = BlockRegistry.getNameFromBlock(liquid.first());
BUILTINS.add("blocks/" + name + "_flow"); BUILTINS.add("blocks/" + name + "_flow");
BUILTINS.add("blocks/" + name + "_still"); BUILTINS.add("blocks/" + name + "_still");
} }

View file

@ -12,7 +12,6 @@ import common.block.liquid.BlockLiquid;
import common.collect.Maps; import common.collect.Maps;
import common.init.BlockRegistry; import common.init.BlockRegistry;
import common.init.Blocks; import common.init.Blocks;
import common.init.FluidRegistry;
import common.properties.Property; import common.properties.Property;
import common.util.IRegistry; import common.util.IRegistry;
import common.world.State; import common.world.State;
@ -94,7 +93,7 @@ public class ModelManager
{ {
String texture = this.liquidMap.get(block); String texture = this.liquidMap.get(block);
if(texture == null) if(texture == null)
this.liquidMap.put(block, texture = "blocks/" + BlockRegistry.getNameFromBlock(FluidRegistry.getStaticBlock(FluidRegistry.getFluidMeta((BlockLiquid)block))) + "_still"); this.liquidMap.put(block, texture = "blocks/" + BlockRegistry.getNameFromFluid((BlockLiquid)block) + "_still");
return this.texMap.getAtlasSprite(texture); return this.texMap.getAtlasSprite(texture);
} }
} }

View file

@ -15,7 +15,6 @@ import common.block.Block;
import common.collect.Lists; import common.collect.Lists;
import common.collect.Maps; import common.collect.Maps;
import common.init.BlockRegistry; import common.init.BlockRegistry;
import common.init.FluidRegistry;
import common.log.Log; import common.log.Log;
import common.model.TextureAnimation; import common.model.TextureAnimation;
@ -45,12 +44,6 @@ public class TextureMap extends Texture
for(Block block : BlockRegistry.REGISTRY) { for(Block block : BlockRegistry.REGISTRY) {
block.getAnimatedTextures(map); block.getAnimatedTextures(map);
} }
for(int z = 0; z < FluidRegistry.getNumFluids(); z++) {
map.put("blocks/" + BlockRegistry.getNameFromBlock(FluidRegistry.getStaticBlock(z)) + "_still",
FluidRegistry.getStaticAnim(z));
map.put("blocks/" + BlockRegistry.getNameFromBlock(FluidRegistry.getStaticBlock(z)) + "_flow",
FluidRegistry.getFluidAnim(z));
}
for(Entry<String, Object> entry : map.entrySet()) { for(Entry<String, Object> entry : map.entrySet()) {
if(entry.getValue() instanceof Integer) { if(entry.getValue() instanceof Integer) {
this.animTextures.put(entry.getKey(), (Integer)entry.getValue()); this.animTextures.put(entry.getKey(), (Integer)entry.getValue());

View file

@ -1,11 +1,13 @@
package common.block.liquid; package common.block.liquid;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map;
import java.util.Set; import java.util.Set;
import common.block.Block; import common.block.Block;
import common.block.Material; import common.block.Material;
import common.block.artificial.BlockDoor; import common.block.artificial.BlockDoor;
import common.init.BlockRegistry;
import common.init.Blocks; import common.init.Blocks;
import common.rng.Random; import common.rng.Random;
import common.util.BlockPos; import common.util.BlockPos;
@ -19,16 +21,25 @@ public class BlockDynamicLiquid extends BlockLiquid
{ {
private final boolean infinite; private final boolean infinite;
int adjacentSourceBlocks; int adjacentSourceBlocks;
private BlockStaticLiquid staticBlock;
public BlockDynamicLiquid(Material materialIn, boolean infinite, boolean opaque, int rate) public BlockDynamicLiquid(Material materialIn, boolean infinite, boolean opaque, int rate, Object animation)
{ {
super(materialIn, true, opaque, rate); super(materialIn, true, opaque, rate, animation);
this.infinite = infinite; this.infinite = infinite;
} }
void setStaticBlock(BlockStaticLiquid block) {
this.staticBlock = block;
}
public BlockStaticLiquid getStaticBlock() {
return this.staticBlock;
}
private void placeStaticBlock(World worldIn, BlockPos pos, State currentState) private void placeStaticBlock(World worldIn, BlockPos pos, State currentState)
{ {
worldIn.setState(pos, getStaticBlock(this).getState().withProperty(LEVEL, currentState.getValue(LEVEL)), 2); worldIn.setState(pos, this.staticBlock.getState().withProperty(LEVEL, currentState.getValue(LEVEL)), 2);
} }
public void updateTick(AWorldServer worldIn, BlockPos pos, State state, Random rand) public void updateTick(AWorldServer worldIn, BlockPos pos, State state, Random rand)
@ -292,7 +303,7 @@ public class BlockDynamicLiquid extends BlockLiquid
private boolean canFlowInto(World worldIn, BlockPos pos, State state) private boolean canFlowInto(World worldIn, BlockPos pos, State state)
{ {
Material material = state.getBlock().getMaterial(); Material material = state.getBlock().getMaterial();
return (this.material == Material.LAVA || !(state.getBlock() instanceof BlockLiquid) || (state.getBlock() instanceof BlockStaticLiquid ? BlockLiquid.getFlowingBlock((BlockStaticLiquid)state.getBlock()) : state.getBlock()) == this) && material != this.material && material != Material.LAVA && !this.isBlocked(worldIn, pos, state); return (this.material == Material.LAVA || !(state.getBlock() instanceof BlockLiquid) || (state.getBlock() instanceof BlockStaticLiquid ? ((BlockStaticLiquid)state.getBlock()).getFlowingBlock() : state.getBlock()) == this) && material != this.material && material != Material.LAVA && !this.isBlocked(worldIn, pos, state);
} }
public void onBlockAdded(AWorldServer worldIn, BlockPos pos, State state) public void onBlockAdded(AWorldServer worldIn, BlockPos pos, State state)
@ -302,4 +313,8 @@ public class BlockDynamicLiquid extends BlockLiquid
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn, pos)); worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn, pos));
} }
} }
public void getAnimatedTextures(Map<String, Object> map) {
map.put("blocks/" + BlockRegistry.getNameFromBlock(this.staticBlock) + "_flow", this.animation);
}
} }

View file

@ -1,11 +1,13 @@
package common.block.liquid; package common.block.liquid;
import java.util.List;
import common.block.Block; import common.block.Block;
import common.block.Material; import common.block.Material;
import common.collect.Lists;
import common.color.Colorizer; import common.color.Colorizer;
import common.entity.Entity; import common.entity.Entity;
import common.init.Blocks; import common.init.Blocks;
import common.init.FluidRegistry;
import common.init.SoundEvent; import common.init.SoundEvent;
import common.item.Item; import common.item.Item;
import common.model.BlockLayer; import common.model.BlockLayer;
@ -17,6 +19,7 @@ import common.util.BlockPos;
import common.util.BoundingBox; import common.util.BoundingBox;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.util.Pair;
import common.util.Vec3; import common.util.Vec3;
import common.vars.Vars; import common.vars.Vars;
import common.world.IBlockAccess; import common.world.IBlockAccess;
@ -29,11 +32,13 @@ import common.world.AWorldServer;
public abstract class BlockLiquid extends Block public abstract class BlockLiquid extends Block
{ {
public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 15); public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 15);
public static final List<Pair<BlockStaticLiquid, BlockDynamicLiquid>> LIQUIDS = Lists.newArrayList();
protected final boolean opaque; protected final boolean opaque;
protected final int flowRate; protected final int flowRate;
protected final Object animation;
public BlockLiquid(Material materialIn, boolean tick, boolean opaque, int rate) public BlockLiquid(Material materialIn, boolean tick, boolean opaque, int rate, Object animation)
{ {
super(materialIn); super(materialIn);
this.setDefaultState(this.getBaseState().withProperty(LEVEL, Integer.valueOf(0))); this.setDefaultState(this.getBaseState().withProperty(LEVEL, Integer.valueOf(0)));
@ -42,6 +47,11 @@ public abstract class BlockLiquid extends Block
this.setTickRandomly(); this.setTickRandomly();
this.opaque = opaque; this.opaque = opaque;
this.flowRate = rate; this.flowRate = rate;
this.animation = animation;
}
public Object getAnimation() {
return this.animation;
} }
public boolean isPassable(IBlockAccess worldIn, BlockPos pos) public boolean isPassable(IBlockAccess worldIn, BlockPos pos)
@ -296,7 +306,7 @@ public abstract class BlockLiquid extends Block
public static double getFlowDirection(IBlockAccess worldIn, BlockPos pos, BlockLiquid block) public static double getFlowDirection(IBlockAccess worldIn, BlockPos pos, BlockLiquid block)
{ {
Vec3 vec3 = (block instanceof BlockStaticLiquid ? getFlowingBlock((BlockStaticLiquid)block) : block).getFlowVector(worldIn, pos); Vec3 vec3 = (block instanceof BlockStaticLiquid ? ((BlockStaticLiquid)block).getFlowingBlock() : block).getFlowVector(worldIn, pos);
return vec3.xCoord == 0.0D && vec3.zCoord == 0.0D ? -1000.0D : ExtMath.atan2(vec3.zCoord, vec3.xCoord) - (Math.PI / 2D); return vec3.xCoord == 0.0D && vec3.zCoord == 0.0D ? -1000.0D : ExtMath.atan2(vec3.zCoord, vec3.xCoord) - (Math.PI / 2D);
} }
@ -391,36 +401,4 @@ public abstract class BlockLiquid extends Block
{ {
return true; return true;
} }
public static BlockDynamicLiquid getFlowingBlock(BlockStaticLiquid block)
{
if (block.getMaterial() == Material.WATER)
{
return Blocks.flowing_water;
}
else if (block.getMaterial() == Material.LAVA)
{
return Blocks.flowing_lava;
}
else
{
return FluidRegistry.getDynamicBlock(block);
}
}
public static BlockStaticLiquid getStaticBlock(BlockDynamicLiquid block)
{
if (block.getMaterial() == Material.WATER)
{
return Blocks.water;
}
else if (block.getMaterial() == Material.LAVA)
{
return Blocks.lava;
}
else
{
return FluidRegistry.getStaticBlock(block);
}
}
} }

View file

@ -1,11 +1,15 @@
package common.block.liquid; package common.block.liquid;
import java.util.Map;
import common.block.Block; import common.block.Block;
import common.block.Material; import common.block.Material;
import common.init.BlockRegistry;
import common.init.Blocks; import common.init.Blocks;
import common.rng.Random; import common.rng.Random;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.Facing; import common.util.Facing;
import common.util.Pair;
import common.vars.Vars; import common.vars.Vars;
import common.world.State; import common.world.State;
import common.world.World; import common.world.World;
@ -13,15 +17,18 @@ import common.world.AWorldServer;
public class BlockStaticLiquid extends BlockLiquid public class BlockStaticLiquid extends BlockLiquid
{ {
public BlockStaticLiquid(Material materialIn, boolean opaque, int rate) private final BlockDynamicLiquid dynamicBlock;
public BlockStaticLiquid(Material materialIn, boolean opaque, int rate, Object animation, BlockDynamicLiquid flowing)
{ {
super(materialIn, materialIn == Material.LAVA, opaque, rate); super(materialIn, materialIn == Material.LAVA, opaque, rate, animation);
// this.setTickRandomly(false); this.dynamicBlock = flowing;
// flowing.setStaticBlock(this);
// if (materialIn == Material.lava) LIQUIDS.add(new Pair<BlockStaticLiquid, BlockDynamicLiquid>(this, flowing));
// { }
// this.setTickRandomly(true);
// } public BlockDynamicLiquid getFlowingBlock() {
return this.dynamicBlock;
} }
/** /**
@ -37,9 +44,8 @@ public class BlockStaticLiquid extends BlockLiquid
private void updateLiquid(World worldIn, BlockPos pos, State state) private void updateLiquid(World worldIn, BlockPos pos, State state)
{ {
BlockDynamicLiquid blockdynamicliquid = getFlowingBlock(this); worldIn.setState(pos, this.dynamicBlock.getState().withProperty(LEVEL, state.getValue(LEVEL)), 2);
worldIn.setState(pos, blockdynamicliquid.getState().withProperty(LEVEL, state.getValue(LEVEL)), 2); worldIn.scheduleUpdate(pos, this.dynamicBlock, this.tickRate(worldIn, pos));
worldIn.scheduleUpdate(pos, blockdynamicliquid, this.tickRate(worldIn, pos));
} }
public void updateTick(AWorldServer worldIn, BlockPos pos, State state, Random rand) public void updateTick(AWorldServer worldIn, BlockPos pos, State state, Random rand)
@ -106,4 +112,8 @@ public class BlockStaticLiquid extends BlockLiquid
{ {
return worldIn.getState(pos).getBlock().getMaterial().getCanBurn(); return worldIn.getState(pos).getBlock().getMaterial().getCanBurn();
} }
public void getAnimatedTextures(Map<String, Object> map) {
map.put("blocks/" + BlockRegistry.getNameFromBlock(this) + "_still", this.animation);
}
} }

View file

@ -58,6 +58,7 @@ import common.block.foliage.BlockVine;
import common.block.foliage.BlockWart; import common.block.foliage.BlockWart;
import common.block.foliage.LeavesType; import common.block.foliage.LeavesType;
import common.block.liquid.BlockDynamicLiquid; import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockLiquid;
import common.block.liquid.BlockStaticLiquid; import common.block.liquid.BlockStaticLiquid;
import common.block.natural.BlockBedrock; import common.block.natural.BlockBedrock;
import common.block.natural.BlockBlackenedDirt; import common.block.natural.BlockBlackenedDirt;
@ -127,7 +128,6 @@ import common.block.tile.BlockBannerStanding;
import common.block.tile.BlockStandingSign; import common.block.tile.BlockStandingSign;
import common.block.tile.BlockWallSign; import common.block.tile.BlockWallSign;
import common.color.DyeColor; import common.color.DyeColor;
import common.init.FluidRegistry.LiquidType;
import common.item.CheatTab; import common.item.CheatTab;
import common.log.Log; import common.log.Log;
import common.model.TextureAnimation; import common.model.TextureAnimation;
@ -151,6 +151,10 @@ public abstract class BlockRegistry {
return REGISTRY.getNameForObject(block); return REGISTRY.getNameForObject(block);
} }
public static String getNameFromFluid(BlockLiquid block) {
return REGISTRY.getNameForObject(block instanceof BlockDynamicLiquid dy ? dy.getStaticBlock() : block);
}
public static int getStateId(State state) { public static int getStateId(State state) {
Block block = state.getBlock(); Block block = state.getBlock();
return getIdFromBlock(block) + (block.getMetaFromState(state) << 12); return getIdFromBlock(block) + (block.getMetaFromState(state) << 12);
@ -225,15 +229,14 @@ public abstract class BlockRegistry {
private static void registerFluid(String name, String display, boolean infinite, LiquidType type, boolean opaque, int light, int rate, private static void registerFluid(String name, String display, boolean infinite, LiquidType type, boolean opaque, int light, int rate,
float radiation, Object still, Object flowing) { float radiation, Object still, Object flowing) {
BlockDynamicLiquid dy = (BlockDynamicLiquid)(new BlockDynamicLiquid(type.material, infinite, opaque, rate)).setHardness(100.0F) BlockDynamicLiquid dy = (BlockDynamicLiquid)(new BlockDynamicLiquid(type.material, infinite, opaque, rate, flowing)).setHardness(100.0F)
.setLightOpacity(opaque ? 0 : 3).setLightLevel((float)light / 15.0f).setDisplay(display)
.setRadiation(radiation);
BlockStaticLiquid st = (BlockStaticLiquid)(new BlockStaticLiquid(type.material, opaque, rate, still, dy)).setHardness(100.0F)
.setLightOpacity(opaque ? 0 : 3).setLightLevel((float)light / 15.0f).setDisplay(display) .setLightOpacity(opaque ? 0 : 3).setLightLevel((float)light / 15.0f).setDisplay(display)
.setRadiation(radiation); .setRadiation(radiation);
registerBlock("flowing_" + name, dy); registerBlock("flowing_" + name, dy);
BlockStaticLiquid st = (BlockStaticLiquid)(new BlockStaticLiquid(type.material, opaque, rate)).setHardness(100.0F)
.setLightOpacity(opaque ? 0 : 3).setLightLevel((float)light / 15.0f).setDisplay(display)
.setRadiation(radiation);
registerBlock(name, st); registerBlock(name, st);
FluidRegistry.registerFluid(st, dy, still, flowing);
} }
private static void registerBlocks() { private static void registerBlocks() {

View file

@ -1,84 +0,0 @@
package common.init;
import java.util.List;
import java.util.Map;
import common.block.Block;
import common.block.Material;
import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockLiquid;
import common.block.liquid.BlockStaticLiquid;
import common.collect.Lists;
import common.collect.Maps;
public abstract class FluidRegistry {
public static enum LiquidType {
COLD(Material.COLD), HOT(Material.HOT), WATER(Material.WATER), LAVA(Material.LAVA);
public final Material material;
private LiquidType(Material material) {
this.material = material;
}
}
static class FluidInfo {
private final int id;
private final BlockStaticLiquid stBlock;
private final BlockDynamicLiquid dyBlock;
private final Object stAnim;
private final Object dyAnim;
private FluidInfo(int id, BlockStaticLiquid stBlock, BlockDynamicLiquid dyBlock, Object stAnim, Object dyAnim) {
this.id = id;
this.stBlock = stBlock;
this.dyBlock = dyBlock;
this.stAnim = stAnim;
this.dyAnim = dyAnim;
}
}
private static int currentId;
private static final List<FluidInfo> FLUIDS = Lists.newArrayList();
private static final Map<Block, Integer> ID_MAP = Maps.newHashMap();
public static int getFluidMeta(BlockLiquid block) {
return ID_MAP.get(block).intValue();
}
public static BlockDynamicLiquid getFluidBlock(int meta) {
return meta < 0 || meta >= currentId ? Blocks.flowing_water : FLUIDS.get(meta).dyBlock;
}
public static BlockStaticLiquid getStaticBlock(int meta) {
return meta < 0 || meta >= currentId ? Blocks.water : FLUIDS.get(meta).stBlock;
}
public static Object getFluidAnim(int meta) {
return FLUIDS.get(meta).dyAnim;
}
public static Object getStaticAnim(int meta) {
return FLUIDS.get(meta).stAnim;
}
public static int getNumFluids() {
return currentId;
}
public static BlockStaticLiquid getStaticBlock(BlockDynamicLiquid dy) {
return FLUIDS.get(ID_MAP.get(dy).intValue()).stBlock;
}
public static BlockDynamicLiquid getDynamicBlock(BlockStaticLiquid st) {
return FLUIDS.get(ID_MAP.get(st).intValue()).dyBlock;
}
static void registerFluid(BlockStaticLiquid stBlock, BlockDynamicLiquid dyBlock, Object stAnim, Object dyAnim) {
FluidInfo info = new FluidInfo(currentId++, stBlock, dyBlock, stAnim, dyAnim);
FLUIDS.add(info);
ID_MAP.put(stBlock, info.id);
ID_MAP.put(dyBlock, info.id);
}
}

View file

@ -15,6 +15,9 @@ import common.block.foliage.BlockFlower;
import common.block.foliage.BlockLeaves; import common.block.foliage.BlockLeaves;
import common.block.foliage.BlockSapling; import common.block.foliage.BlockSapling;
import common.block.foliage.BlockTallGrass; import common.block.foliage.BlockTallGrass;
import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockLiquid;
import common.block.liquid.BlockStaticLiquid;
import common.block.natural.BlockOre; import common.block.natural.BlockOre;
import common.block.tech.BlockButton; import common.block.tech.BlockButton;
import common.block.tech.BlockTNT; import common.block.tech.BlockTNT;
@ -289,15 +292,15 @@ public abstract class ItemRegistry {
Item bucket = (new ItemBucket(null, false)).setDisplay("Eimer"); Item bucket = (new ItemBucket(null, false)).setDisplay("Eimer");
registerItem("bucket", bucket); registerItem("bucket", bucket);
for(int z = 0; z < FluidRegistry.getNumFluids(); z++) { for(Pair<BlockStaticLiquid, BlockDynamicLiquid> liquid : BlockLiquid.LIQUIDS) {
registerItem(BlockRegistry.getNameFromBlock(FluidRegistry.getStaticBlock(z)) + registerItem(BlockRegistry.getNameFromBlock(liquid.first()) +
"_bucket", new ItemBucket(FluidRegistry.getFluidBlock(z), false).setDisplay("Eimer") "_bucket", new ItemBucket(liquid.second(), false).setDisplay("Eimer")
.setContainerItem(bucket)); .setContainerItem(bucket));
} }
registerItem("recursive_bucket", (new ItemBucket(null, true)).setDisplay("Unendlicher Eimer")); registerItem("recursive_bucket", (new ItemBucket(null, true)).setDisplay("Unendlicher Eimer"));
for(int z = 0; z < FluidRegistry.getNumFluids(); z++) { for(Pair<BlockStaticLiquid, BlockDynamicLiquid> liquid : BlockLiquid.LIQUIDS) {
registerItem("recursive_" + BlockRegistry.getNameFromBlock(FluidRegistry.getStaticBlock(z)) + registerItem("recursive_" + BlockRegistry.getNameFromBlock(liquid.first()) +
"_bucket", new ItemBucket(FluidRegistry.getFluidBlock(z), true).setDisplay("Flutender Eimer")); "_bucket", new ItemBucket(liquid.second(), true).setDisplay("Flutender Eimer"));
} }
registerItem("milk_bucket", (new ItemBucketMilk()).setDisplay("Milch").setContainerItem(bucket)); registerItem("milk_bucket", (new ItemBucketMilk()).setDisplay("Milch").setContainerItem(bucket));
@ -520,9 +523,9 @@ public abstract class ItemRegistry {
((BlockOre)BlockRegistry.getRegisteredBlock("black_quartz_ore")).setDropItem(new ItemStack(bquartz), 3); ((BlockOre)BlockRegistry.getRegisteredBlock("black_quartz_ore")).setDropItem(new ItemStack(bquartz), 3);
for(int z = 0; z < FluidRegistry.getNumFluids(); z++) { for(Pair<BlockStaticLiquid, BlockDynamicLiquid> liquid : BlockLiquid.LIQUIDS) {
registerSpecial(FluidRegistry.getFluidBlock(z)); registerSpecial(liquid.second());
registerSpecial(FluidRegistry.getStaticBlock(z)); registerSpecial(liquid.first());
} }
registerSpecial(Blocks.air); registerSpecial(Blocks.air);
registerSpecial(Blocks.cocoa); registerSpecial(Blocks.cocoa);

View file

@ -0,0 +1,13 @@
package common.init;
import common.block.Material;
public enum LiquidType {
COLD(Material.COLD), HOT(Material.HOT), WATER(Material.WATER), LAVA(Material.LAVA);
public final Material material;
private LiquidType(Material material) {
this.material = material;
}
}

View file

@ -16,7 +16,6 @@ import common.collect.Sets;
import common.entity.npc.EntityNPC; import common.entity.npc.EntityNPC;
import common.init.BlockRegistry; import common.init.BlockRegistry;
import common.init.Blocks; import common.init.Blocks;
import common.init.FluidRegistry;
import common.init.ItemRegistry; import common.init.ItemRegistry;
import common.init.Items; import common.init.Items;
import common.init.SoundEvent; import common.init.SoundEvent;
@ -56,7 +55,7 @@ public class ItemBucket extends Item
Queue<BlockPos> queue = new ArrayDeque<BlockPos>(); Queue<BlockPos> queue = new ArrayDeque<BlockPos>();
Set<BlockPos> visited = new HashSet<BlockPos>(); Set<BlockPos> visited = new HashSet<BlockPos>();
List<Vec3i> dirs = new ArrayList<Vec3i>(); List<Vec3i> dirs = new ArrayList<Vec3i>();
Set<Block> blocks = liquid == null ? null : Sets.newHashSet(FluidRegistry.getDynamicBlock(liquid), liquid, Blocks.air); Set<Block> blocks = liquid == null ? null : Sets.newHashSet(liquid.getFlowingBlock(), liquid, Blocks.air);
State state = (liquid == null ? Blocks.air : liquid).getState(); State state = (liquid == null ? Blocks.air : liquid).getState();
int max = World.MAX_SIZE_Y - 1; int max = World.MAX_SIZE_Y - 1;
@ -180,8 +179,7 @@ public class ItemBucket extends Item
// playerIn.triggerAchievement(StatRegistry.objectUseStats[ItemRegistry.getIdFromItem(this)]); // playerIn.triggerAchievement(StatRegistry.objectUseStats[ItemRegistry.getIdFromItem(this)]);
Block block = iblockstate.getBlock(); Block block = iblockstate.getBlock();
return this.fillBucket(itemStackIn, playerIn, new ItemStack( return this.fillBucket(itemStackIn, playerIn, new ItemStack(
ItemRegistry.getRegisteredItem(BlockRegistry.getNameFromBlock(block instanceof BlockDynamicLiquid ItemRegistry.getRegisteredItem(BlockRegistry.getNameFromFluid((BlockLiquid)block) +
? FluidRegistry.getStaticBlock((BlockDynamicLiquid)block) : block) +
"_bucket"))); "_bucket")));
} }
} }
@ -276,7 +274,7 @@ public class ItemBucket extends Item
if(this.recursive) { if(this.recursive) {
if(!worldIn.client) if(!worldIn.client)
setRecursive((AWorldServer)worldIn, pos, 4, FluidRegistry.getStaticBlock(this.liquid)); setRecursive((AWorldServer)worldIn, pos, 4, this.liquid.getStaticBlock());
} }
else { else {
worldIn.setState(pos, this.liquid.getState(), 3); worldIn.setState(pos, this.liquid.getState(), 3);
@ -335,9 +333,7 @@ public class ItemBucket extends Item
Item item; Item item;
if (material.isLiquid() && block instanceof BlockLiquid && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0) if (material.isLiquid() && block instanceof BlockLiquid && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0)
{ {
item = ItemRegistry.getRegisteredItem(BlockRegistry.getNameFromBlock(block instanceof BlockDynamicLiquid item = ItemRegistry.getRegisteredItem(BlockRegistry.getNameFromFluid((BlockLiquid)block) + "_bucket");
? FluidRegistry.getStaticBlock((BlockDynamicLiquid)block) : block) +
"_bucket");
} }
else else
{ {