From a6d21ce33a28e6ee334120a91ffa4fc8d3d6d10f Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 28 Mar 2015 01:38:22 +0100 Subject: [PATCH] Add liquid light --- .../minecraft/test/LiquidLight.java | 135 ++++++++++++++++++ .../universe_factory/minecraft/test/Test.java | 4 + .../assets/neoraider_test/lang/en_US.lang | 5 +- .../textures/blocks/liquid_light_flow.png | Bin 0 -> 8516 bytes .../blocks/liquid_light_flow.png.mcmeta | 3 + .../textures/blocks/liquid_light_still.png | Bin 0 -> 10093 bytes .../blocks/liquid_light_still.png.mcmeta | 5 + .../textures/items/bucket_light.png | Bin 0 -> 569 bytes .../textures/items/bucket_light.xcf | Bin 0 -> 2494 bytes 9 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 java/net/universe_factory/minecraft/test/LiquidLight.java create mode 100644 resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png create mode 100644 resources/assets/neoraider_test/textures/blocks/liquid_light_flow.png.mcmeta create mode 100644 resources/assets/neoraider_test/textures/blocks/liquid_light_still.png create mode 100644 resources/assets/neoraider_test/textures/blocks/liquid_light_still.png.mcmeta create mode 100644 resources/assets/neoraider_test/textures/items/bucket_light.png create mode 100644 resources/assets/neoraider_test/textures/items/bucket_light.xcf 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 0000000000000000000000000000000000000000..64ab95a0b62fadd2d1e5928305f49595cbdb2ecd GIT binary patch literal 8516 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 BDv