diff --git a/java/net/universe_factory/minecraft/test/LiquidLight.java b/java/net/universe_factory/minecraft/test/LiquidLight.java new file mode 100644 index 0000000..537d365 --- /dev/null +++ b/java/net/universe_factory/minecraft/test/LiquidLight.java @@ -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 buckets = new HashMap(); + + 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); + } +} diff --git a/java/net/universe_factory/minecraft/test/Test.java b/java/net/universe_factory/minecraft/test/Test.java index 3fad78e..8dfe613 100644 --- a/java/net/universe_factory/minecraft/test/Test.java +++ b/java/net/universe_factory/minecraft/test/Test.java @@ -184,6 +184,8 @@ public class Test { public static final ExtensibleBiomeDecorator biomeDecorator = new ExtensibleBiomeDecorator(); + public static final LiquidLight liquidLight = new LiquidLight(); + @EventHandler public void preInit(FMLInitializationEvent event) { 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', Blocks.redstone_block); + liquidLight.register(); + biomeDecorator.registerTree(new ExtensibleBiomeDecorator.Tree() { @Override public Entry replaceTree(World world, BiomeGenBase biome, Random random, int x, int y, int z, diff --git a/resources/assets/neoraider_test/lang/en_US.lang b/resources/assets/neoraider_test/lang/en_US.lang index ac39b16..9c3e858 100644 --- a/resources/assets/neoraider_test/lang/en_US.lang +++ b/resources/assets/neoraider_test/lang/en_US.lang @@ -40,4 +40,7 @@ tile.glowfoo.yellow.name=Yellow Light tile.glowfoo.lightBlue.name=Light Blue Light tile.glowfoo.magenta.name=Magenta Light tile.glowfoo.orange.name=Orange Light -tile.glowfoo.white.name=White Light \ No newline at end of file + + +tile.liquid_light.name=Liquid Light +item.bucket_light.name=Light Bucket \ No newline at end of file diff --git a/resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png b/resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png new file mode 100644 index 0000000..64ab95a Binary files /dev/null and b/resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png differ diff --git a/resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png.mcmeta b/resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/resources/assets/neoraider_test/textures/blocks/liquid_light_still.png b/resources/assets/neoraider_test/textures/blocks/liquid_light_still.png new file mode 100644 index 0000000..bfae8aa Binary files /dev/null and b/resources/assets/neoraider_test/textures/blocks/liquid_light_still.png differ diff --git a/resources/assets/neoraider_test/textures/blocks/liquid_light_still.png.mcmeta b/resources/assets/neoraider_test/textures/blocks/liquid_light_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/resources/assets/neoraider_test/textures/blocks/liquid_light_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/resources/assets/neoraider_test/textures/items/bucket_light.png b/resources/assets/neoraider_test/textures/items/bucket_light.png new file mode 100644 index 0000000..714389c Binary files /dev/null and b/resources/assets/neoraider_test/textures/items/bucket_light.png differ diff --git a/resources/assets/neoraider_test/textures/items/bucket_light.xcf b/resources/assets/neoraider_test/textures/items/bucket_light.xcf new file mode 100644 index 0000000..61d7e8d Binary files /dev/null and b/resources/assets/neoraider_test/textures/items/bucket_light.xcf differ