Add liquid light

This commit is contained in:
Matthias Schiffer 2015-03-28 01:38:22 +01:00
parent ea34f55a12
commit a6d21ce33a
9 changed files with 151 additions and 1 deletions

View file

@ -0,0 +1,135 @@
package net.universe_factory.minecraft.test;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBucket;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.FillBucketEvent;
import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class LiquidLight extends Fluid {
private class BlockLiquidLight extends BlockFluidClassic {
@SideOnly(Side.CLIENT)
protected IIcon stillIcon;
@SideOnly(Side.CLIENT)
protected IIcon flowingIcon;
public BlockLiquidLight() {
super(LiquidLight.this, Material.water);
setCreativeTab(CreativeTabs.tabMisc);
}
@Override
public IIcon getIcon(int side, int meta) {
return (side == 0 || side == 1) ? stillIcon : flowingIcon;
}
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister register) {
stillIcon = register.registerIcon(Test.MODID + ":liquid_light_still");
flowingIcon = register.registerIcon(Test.MODID + ":liquid_light_flow");
}
@Override
public boolean canDisplace(IBlockAccess world, int x, int y, int z) {
if (world.getBlock(x, y, z).getMaterial().isLiquid())
return false;
return super.canDisplace(world, x, y, z);
}
@Override
public boolean displaceIfPossible(World world, int x, int y, int z) {
if (world.getBlock(x, y, z).getMaterial().isLiquid())
return false;
return super.displaceIfPossible(world, x, y, z);
}
}
private class ItemBucketLight extends ItemBucket {
public ItemBucketLight(Block block) {
super(block);
setUnlocalizedName("bucket_light");
setContainerItem(Items.bucket);
setTextureName(Test.MODID + ":bucket_light");
}
}
public static class BucketHandler {
public static BucketHandler INSTANCE = new BucketHandler();
public Map<Block, Item> buckets = new HashMap<Block, Item>();
public BucketHandler() {
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void onBucketFill(FillBucketEvent event) {
ItemStack result = fillCustomBucket(event.world, event.target);
if (result == null)
return;
event.result = result;
event.setResult(Result.ALLOW);
}
private ItemStack fillCustomBucket(World world, MovingObjectPosition pos) {
Block block = world.getBlock(pos.blockX, pos.blockY, pos.blockZ);
Item bucket = buckets.get(block);
if (bucket != null && world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ) == 0) {
world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ);
return new ItemStack(bucket);
} else
return null;
}
}
public LiquidLight() {
super("liquid_light");
setDensity(1);
setLuminosity(15);
setViscosity(1000);
}
public void register() {
FluidRegistry.registerFluid(this);
BlockLiquidLight block = new BlockLiquidLight();
GameRegistry.registerBlock(block, "liquid_light");
setUnlocalizedName(block.getUnlocalizedName());
ItemBucketLight bucket = new ItemBucketLight(block);
GameRegistry.registerItem(bucket, "bucket_light");
FluidContainerRegistry.registerFluidContainer(this, new ItemStack(bucket), new ItemStack(Items.bucket));
BucketHandler.INSTANCE.buckets.put(block, bucket);
}
}

View file

@ -184,6 +184,8 @@ public class Test {
public static final ExtensibleBiomeDecorator biomeDecorator = new ExtensibleBiomeDecorator(); public static final ExtensibleBiomeDecorator biomeDecorator = new ExtensibleBiomeDecorator();
public static final LiquidLight liquidLight = new LiquidLight();
@EventHandler @EventHandler
public void preInit(FMLInitializationEvent event) { public void preInit(FMLInitializationEvent event) {
MinecraftForge.TERRAIN_GEN_BUS.register(new TerrainGenHandler()); MinecraftForge.TERRAIN_GEN_BUS.register(new TerrainGenHandler());
@ -211,6 +213,8 @@ public class Test {
GameRegistry.addRecipe(new ItemStack(glowfoo, 4, i), "###", "#X#", "###", '#', new ItemStack(Blocks.stained_glass_pane, 1, i), 'X', GameRegistry.addRecipe(new ItemStack(glowfoo, 4, i), "###", "#X#", "###", '#', new ItemStack(Blocks.stained_glass_pane, 1, i), 'X',
Blocks.redstone_block); Blocks.redstone_block);
liquidLight.register();
biomeDecorator.registerTree(new ExtensibleBiomeDecorator.Tree() { biomeDecorator.registerTree(new ExtensibleBiomeDecorator.Tree() {
@Override @Override
public Entry<WorldGenAbstractTree, Float> replaceTree(World world, BiomeGenBase biome, Random random, int x, int y, int z, public Entry<WorldGenAbstractTree, Float> replaceTree(World world, BiomeGenBase biome, Random random, int x, int y, int z,

View file

@ -40,4 +40,7 @@ tile.glowfoo.yellow.name=Yellow Light
tile.glowfoo.lightBlue.name=Light Blue Light tile.glowfoo.lightBlue.name=Light Blue Light
tile.glowfoo.magenta.name=Magenta Light tile.glowfoo.magenta.name=Magenta Light
tile.glowfoo.orange.name=Orange Light tile.glowfoo.orange.name=Orange Light
tile.glowfoo.white.name=White Light
tile.liquid_light.name=Liquid Light
item.bucket_light.name=Light Bucket

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

@ -0,0 +1,3 @@
{
"animation": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View file

@ -0,0 +1,5 @@
{
"animation": {
"frametime": 2
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B