diff --git a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java index 694600c5d..9be654d22 100644 --- a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java @@ -140,6 +140,11 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid return ItemBlockSpecialFlower.ofType(name); } + @Override + protected boolean canPlaceBlockOn(Block block) { + return super.canPlaceBlockOn(block) || block == ModBlocks.redStringRelay; + } + @Override public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, EntityPlayer par6EntityPlayer) { if(!par6EntityPlayer.capabilities.isCreativeMode) diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index 996eb651e..5197d10a9 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -70,9 +70,11 @@ import vazkii.botania.common.block.decor.stairs.prismarine.BlockPrismarineBrickS 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.BlockRedStringComparator; import vazkii.botania.common.block.string.BlockRedStringContainer; import vazkii.botania.common.block.string.BlockRedStringDispenser; import vazkii.botania.common.block.string.BlockRedStringFertilizer; +import vazkii.botania.common.block.string.BlockRedStringRelay; import vazkii.botania.common.block.subtile.SubTileManastar; import vazkii.botania.common.block.subtile.SubTilePureDaisy; import vazkii.botania.common.block.subtile.functional.SubTileAgricarnation; @@ -131,9 +133,11 @@ import vazkii.botania.common.block.tile.mana.TilePool; 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.TileRedStringComparator; import vazkii.botania.common.block.tile.string.TileRedStringContainer; import vazkii.botania.common.block.tile.string.TileRedStringDispenser; import vazkii.botania.common.block.tile.string.TileRedStringFertilizer; +import vazkii.botania.common.block.tile.string.TileRedStringRelay; import vazkii.botania.common.core.handler.ConfigHandler; import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lib.LibBlockNames; @@ -191,6 +195,8 @@ public final class ModBlocks { public static Block redStringContainer; public static Block redStringDispenser; public static Block redStringFertilizer; + public static Block redStringComparator; + public static Block redStringRelay; public static Block livingwoodStairs; public static Block livingwoodSlab; @@ -316,6 +322,8 @@ public final class ModBlocks { redStringContainer = new BlockRedStringContainer(); redStringDispenser = new BlockRedStringDispenser(); redStringFertilizer = new BlockRedStringFertilizer(); + redStringComparator = new BlockRedStringComparator(); + redStringRelay = new BlockRedStringRelay(); livingwoodStairs = new BlockLivingwoodStairs(); livingwoodSlab = new BlockLivingwoodSlab(false); @@ -499,6 +507,8 @@ public final class ModBlocks { registerTile(TileRedStringContainer.class, LibBlockNames.RED_STRING_CONTAINER); registerTile(TileRedStringDispenser.class, LibBlockNames.RED_STRING_DISPENSER); registerTile(TileRedStringFertilizer.class, LibBlockNames.RED_STRING_FERTILIZER); + registerTile(TileRedStringComparator.class, LibBlockNames.RED_STRING_COMPARATOR); + registerTile(TileRedStringRelay.class, LibBlockNames.RED_STRING_RELAY); 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/BlockRedStringComparator.java b/src/main/java/vazkii/botania/common/block/string/BlockRedStringComparator.java new file mode 100644 index 000000000..0a582e04d --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/string/BlockRedStringComparator.java @@ -0,0 +1,40 @@ +/** + * 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 16, 2014, 10:19:28 PM (GMT)] + */ +package vazkii.botania.common.block.string; + +import net.minecraft.world.World; +import vazkii.botania.common.block.tile.string.TileRedString; +import vazkii.botania.common.block.tile.string.TileRedStringComparator; +import vazkii.botania.common.lib.LibBlockNames; + +public class BlockRedStringComparator extends BlockRedString { + + public BlockRedStringComparator() { + super(LibBlockNames.RED_STRING_COMPARATOR); + } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int side) { + return ((TileRedStringComparator) world.getTileEntity(x, y, z)).getComparatorValue(); + } + + @Override + public TileRedString createNewTileEntity(World world, int meta) { + return new TileRedStringComparator(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/string/BlockRedStringRelay.java b/src/main/java/vazkii/botania/common/block/string/BlockRedStringRelay.java new file mode 100644 index 000000000..83ced69de --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/string/BlockRedStringRelay.java @@ -0,0 +1,33 @@ +/** + * 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 16, 2014, 10:46:48 PM (GMT)] + */ +package vazkii.botania.common.block.string; + +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.ForgeDirection; +import vazkii.botania.common.block.tile.string.TileRedString; +import vazkii.botania.common.block.tile.string.TileRedStringRelay; +import vazkii.botania.common.lib.LibBlockNames; + +public class BlockRedStringRelay extends BlockRedString { + + public BlockRedStringRelay() { + super(LibBlockNames.RED_STRING_RELAY); + } + + @Override + public TileRedString createNewTileEntity(World world, int meta) { + return new TileRedStringRelay(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java b/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java index 65c1f51e3..7604bc857 100644 --- a/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java @@ -17,6 +17,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.IIcon; import vazkii.botania.api.BotaniaAPI; @@ -24,6 +25,7 @@ import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.subtile.ISubTileContainer; import vazkii.botania.api.subtile.SubTileEntity; import vazkii.botania.api.wand.IWandBindable; +import vazkii.botania.common.block.tile.string.TileRedStringRelay; public class TileSpecialFlower extends TileMod implements IWandBindable, ISubTileContainer { @@ -63,8 +65,28 @@ public class TileSpecialFlower extends TileMod implements IWandBindable, ISubTil @Override public void updateEntity() { - if(subTile != null) + if(subTile != null) { + TileEntity tileBelow = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); + if(tileBelow instanceof TileRedStringRelay) { + ChunkCoordinates coords = ((TileRedStringRelay) tileBelow).getBinding(); + if(coords != null) { + int currX = xCoord; + int currY = yCoord; + int currZ = zCoord; + xCoord = coords.posX; + yCoord = coords.posY; + zCoord = coords.posZ; + subTile.onUpdate(); + xCoord = currX; + yCoord = currY; + zCoord = currZ; + + return; + } + } + subTile.onUpdate(); + } } @Override diff --git a/src/main/java/vazkii/botania/common/block/tile/string/TileRedString.java b/src/main/java/vazkii/botania/common/block/tile/string/TileRedString.java index bca6651d2..0ee9a1b82 100644 --- a/src/main/java/vazkii/botania/common/block/tile/string/TileRedString.java +++ b/src/main/java/vazkii/botania/common/block/tile/string/TileRedString.java @@ -26,7 +26,7 @@ public abstract class TileRedString extends TileMod implements ITileBound { @Override public void updateEntity() { - ForgeDirection dir = ForgeDirection.getOrientation(getBlockMetadata()); + ForgeDirection dir = getOrientation(); int x = xCoord; int y = yCoord; int z = zCoord; @@ -78,6 +78,10 @@ public abstract class TileRedString extends TileMod implements ITileBound { this.binding = binding; } + public ForgeDirection getOrientation() { + return ForgeDirection.getOrientation(getBlockMetadata()); + } + public TileEntity getTileAtBinding() { ChunkCoordinates binding = getBinding(); return binding == null ? null : worldObj.getTileEntity(binding.posX, binding.posY, binding.posZ); diff --git a/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringComparator.java b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringComparator.java new file mode 100644 index 000000000..c61df4c8a --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringComparator.java @@ -0,0 +1,50 @@ +/** + * 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 16, 2014, 10:22:01 PM (GMT)] + */ +package vazkii.botania.common.block.tile.string; + +import net.minecraft.block.Block; +import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileRedStringComparator extends TileRedString { + + int comparatorValue = 0; + + @Override + public void updateEntity() { + super.updateEntity(); + + ChunkCoordinates binding = getBinding(); + ForgeDirection dir = getOrientation(); + Block block = getBlockAtBinding(); + int origVal = comparatorValue; + + if(block.hasComparatorInputOverride()) { + int val = block.getComparatorInputOverride(worldObj, binding.posX, binding.posY, binding.posZ, dir.getOpposite().ordinal()); + comparatorValue = val; + } else comparatorValue = 0; + + if(origVal != comparatorValue) + worldObj.func_147453_f(xCoord, yCoord, zCoord, worldObj.getBlock(xCoord, yCoord, zCoord)); + } + + public int getComparatorValue() { + return comparatorValue; + } + + @Override + public boolean acceptBlock(int x, int y, int z) { + Block block = worldObj.getBlock(x, y, z); + return block.hasComparatorInputOverride(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringRelay.java b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringRelay.java new file mode 100644 index 000000000..21e4c14ac --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringRelay.java @@ -0,0 +1,28 @@ +/** + * 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 16, 2014, 10:52:21 PM (GMT)] + */ +package vazkii.botania.common.block.tile.string; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFlower; + +public class TileRedStringRelay extends TileRedString { + + @Override + public boolean acceptBlock(int x, int y, int z) { + if(x == xCoord && y == yCoord + 1 && z == zCoord) + return false; + + Block block = worldObj.getBlock(x, y, z); + return block instanceof BlockFlower; + } + +} diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index d00ebe584..a6539dc84 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -114,6 +114,7 @@ public final class BotaniaCreativeTab extends CreativeTabs { addBlock(ModBlocks.redStringContainer); addBlock(ModBlocks.redStringDispenser); addBlock(ModBlocks.redStringFertilizer); + addBlock(ModBlocks.redStringComparator); 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 be38f8b84..cbb2d1a65 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -64,6 +64,8 @@ public final class LibBlockNames { public static final String RED_STRING_CONTAINER = "redStringContainer"; public static final String RED_STRING_DISPENSER = "redStringDispenser"; public static final String RED_STRING_FERTILIZER = "redStringFertilizer"; + public static final String RED_STRING_COMPARATOR = "redStringComparator"; + public static final String RED_STRING_RELAY = "redStringRelay"; public static final String SUBTILE_PUREDAISY = "puredaisy"; public static final String SUBTILE_MANASTAR = "manastar"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 3049a40ad..3106a51b8 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -497,7 +497,7 @@ tile.botania:redStringContainer.name=Red Stringed Container tile.botania:redStringDispenser.name=Red Stringed Dispenser tile.botania:redStringFertilizer.name=Red Stringed Nutrifier tile.botania:redStringComparator.name=Red Stringed Comparator -tile.botania:redStringRelay.name=Red Stringed Effector +tile.botania:redStringRelay.name=Red Stringed Spoofer # FLOWER NAMES tile.botania:flower..name=Botania Flower