diff --git a/src/main/java/vazkii/botania/client/core/handler/ClientTickHandler.java b/src/main/java/vazkii/botania/client/core/handler/ClientTickHandler.java index 6c2586908..c19eadee6 100644 --- a/src/main/java/vazkii/botania/client/core/handler/ClientTickHandler.java +++ b/src/main/java/vazkii/botania/client/core/handler/ClientTickHandler.java @@ -39,6 +39,7 @@ public class ClientTickHandler { public void clientTickEnd(ClientTickEvent event) { if(event.phase == Phase.END) { LightningBolt.update(); + RedStringRenderer.tick(); if(Minecraft.getMinecraft().theWorld == null) ManaNetworkHandler.instance.clear(); diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index 8468a8649..73be3c273 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -71,6 +71,7 @@ import vazkii.botania.common.block.decor.stairs.prismarine.BlockPrismarineStairs import vazkii.botania.common.block.dispenser.BehaviourSeeds; import vazkii.botania.common.block.dispenser.BehaviourWand; import vazkii.botania.common.block.string.BlockRedStringContainer; +import vazkii.botania.common.block.string.BlockRedStringDispenser; import vazkii.botania.common.block.subtile.SubTileManastar; import vazkii.botania.common.block.subtile.SubTilePureDaisy; import vazkii.botania.common.block.subtile.functional.SubTileAgricarnation; @@ -130,6 +131,7 @@ import vazkii.botania.common.block.tile.mana.TileRFGenerator; import vazkii.botania.common.block.tile.mana.TileSpreader; import vazkii.botania.common.block.tile.mana.TileTurntable; import vazkii.botania.common.block.tile.string.TileRedStringContainer; +import vazkii.botania.common.block.tile.string.TileRedStringDispenser; import vazkii.botania.common.core.handler.ConfigHandler; import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lib.LibBlockNames; @@ -185,6 +187,7 @@ public final class ModBlocks { public static Block manaGlass; public static Block terraPlate; public static Block redStringContainer; + public static Block redStringDispenser; public static Block livingwoodStairs; public static Block livingwoodSlab; @@ -308,6 +311,7 @@ public final class ModBlocks { manaGlass = new BlockManaGlass(); terraPlate = new BlockTerraPlate(); redStringContainer = new BlockRedStringContainer(); + redStringDispenser = new BlockRedStringDispenser(); livingwoodStairs = new BlockLivingwoodStairs(); livingwoodSlab = new BlockLivingwoodSlab(false); @@ -489,6 +493,7 @@ public final class ModBlocks { registerTile(TileBrewery.class, LibBlockNames.BREWERY); registerTile(TileTerraPlate.class, LibBlockNames.TERRA_PLATE); registerTile(TileRedStringContainer.class, LibBlockNames.RED_STRING_CONTAINER); + registerTile(TileRedStringDispenser.class, LibBlockNames.RED_STRING_DISPENSER); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_PUREDAISY, SubTilePureDaisy.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_MANASTAR, SubTileManastar.class); diff --git a/src/main/java/vazkii/botania/common/block/string/BlockRedStringDispenser.java b/src/main/java/vazkii/botania/common/block/string/BlockRedStringDispenser.java new file mode 100644 index 000000000..42723f47a --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/string/BlockRedStringDispenser.java @@ -0,0 +1,45 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Nov 14, 2014, 10:59:20 PM (GMT)] + */ +package vazkii.botania.common.block.string; + +import net.minecraft.block.Block; +import net.minecraft.world.World; +import vazkii.botania.common.block.tile.string.TileRedString; +import vazkii.botania.common.block.tile.string.TileRedStringContainer; +import vazkii.botania.common.block.tile.string.TileRedStringDispenser; +import vazkii.botania.common.lib.LibBlockNames; + +public class BlockRedStringDispenser extends BlockRedString { + + public BlockRedStringDispenser() { + super(LibBlockNames.RED_STRING_DISPENSER); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + boolean power = world.isBlockIndirectlyGettingPowered(x, y, z) || world.isBlockIndirectlyGettingPowered(x, y + 1, z); + int meta = world.getBlockMetadata(x, y, z); + boolean powered = (meta & 8) != 0; + + if(power && !powered) { + ((TileRedStringDispenser) world.getTileEntity(x, y, z)).tickDispenser(); + world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4); + } else if(!power && powered) + world.setBlockMetadataWithNotify(x, y, z, meta & -9, 4); + } + + @Override + public TileRedString createNewTileEntity(World world, int meta) { + return new TileRedStringDispenser(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringDispenser.java b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringDispenser.java new file mode 100644 index 000000000..e0e54ae55 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringDispenser.java @@ -0,0 +1,36 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Nov 14, 2014, 11:00:16 PM (GMT)] + */ +package vazkii.botania.common.block.tile.string; + +import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.util.ChunkCoordinates; + +public class TileRedStringDispenser extends TileRedStringContainer { + + @Override + public boolean acceptBlock(int x, int y, int z) { + TileEntity tile = worldObj.getTileEntity(x, y, z); + return tile != null && tile instanceof TileEntityDispenser; + } + + public void tickDispenser() { + ChunkCoordinates bind = getBinding(); + if(bind != null) { + TileEntity tile = worldObj.getTileEntity(bind.posX, bind.posY, bind.posZ); + if(tile instanceof TileEntityDispenser) + worldObj.scheduleBlockUpdate(bind.posX, bind.posY, bind.posZ, tile.getBlockType(), tile.getBlockType().tickRate(worldObj)); + } + } + +} diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index 2ed123c55..917ea33f4 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -112,6 +112,7 @@ public final class BotaniaCreativeTab extends CreativeTabs { addBlock(ModBlocks.pistonRelay); addBlock(ModBlocks.redStringContainer); + addBlock(ModBlocks.redStringDispenser); addBlock(ModBlocks.shinyFlower); addBlock(ModBlocks.miniIsland); diff --git a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java index bc2292599..dc4690172 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -62,6 +62,7 @@ public final class LibBlockNames { public static final String MANA_GLASS = "manaGlass"; public static final String TERRA_PLATE = "terraPlate"; public static final String RED_STRING_CONTAINER = "redStringContainer"; + public static final String RED_STRING_DISPENSER = "redStringDispenser"; public static final String SUBTILE_PUREDAISY = "puredaisy"; public static final String SUBTILE_MANASTAR = "manastar";