diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index c1d23ca96..8468a8649 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -70,6 +70,7 @@ 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.BlockRedStringContainer; import vazkii.botania.common.block.subtile.SubTileManastar; import vazkii.botania.common.block.subtile.SubTilePureDaisy; import vazkii.botania.common.block.subtile.functional.SubTileAgricarnation; @@ -128,6 +129,7 @@ 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.TileRedStringContainer; import vazkii.botania.common.core.handler.ConfigHandler; import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lib.LibBlockNames; @@ -182,6 +184,7 @@ public final class ModBlocks { public static Block brewery; public static Block manaGlass; public static Block terraPlate; + public static Block redStringContainer; public static Block livingwoodStairs; public static Block livingwoodSlab; @@ -304,6 +307,7 @@ public final class ModBlocks { brewery = new BlockBrewery(); manaGlass = new BlockManaGlass(); terraPlate = new BlockTerraPlate(); + redStringContainer = new BlockRedStringContainer(); livingwoodStairs = new BlockLivingwoodStairs(); livingwoodSlab = new BlockLivingwoodSlab(false); @@ -484,6 +488,7 @@ public final class ModBlocks { registerTile(TileRFGenerator.class, LibBlockNames.RF_GENERATOR); registerTile(TileBrewery.class, LibBlockNames.BREWERY); registerTile(TileTerraPlate.class, LibBlockNames.TERRA_PLATE); + registerTile(TileRedStringContainer.class, LibBlockNames.RED_STRING_CONTAINER); 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/BlockRedString.java b/src/main/java/vazkii/botania/common/block/string/BlockRedString.java new file mode 100644 index 000000000..feec9d981 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/string/BlockRedString.java @@ -0,0 +1,60 @@ +/** + * 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, 4:43:14 PM (GMT)] + */ +package vazkii.botania.common.block.string; + +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import vazkii.botania.client.core.helper.IconHelper; +import vazkii.botania.common.block.BlockModContainer; +import vazkii.botania.common.block.tile.mana.TileSpreader; +import vazkii.botania.common.block.tile.string.TileRedString; + +public abstract class BlockRedString extends BlockModContainer { + + IIcon senderIcon; + IIcon sideIcon; + + public BlockRedString(String name) { + super(Material.rock); + setHardness(2.0F); + setResistance(10.0F); + setStepSound(soundTypeStone); + setBlockName(name); + } + + @Override + public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack) { + int orientation = BlockPistonBase.determineOrientation(par1World, par2, par3, par4, par5EntityLivingBase); + par1World.setBlockMetadataWithNotify(par2, par3, par4, orientation, 1 | 2); + } + + @Override + public void registerBlockIcons(IIconRegister par1IconRegister) { + senderIcon = IconHelper.forName(par1IconRegister, "redStringSender"); + sideIcon = registerSideIcon(par1IconRegister); + } + + public IIcon registerSideIcon(IIconRegister register) { + return IconHelper.forBlock(register, this); + } + + @Override + public IIcon getIcon(int side, int meta) { + return side == meta ? senderIcon : sideIcon; + } + +} diff --git a/src/main/java/vazkii/botania/common/block/string/BlockRedStringContainer.java b/src/main/java/vazkii/botania/common/block/string/BlockRedStringContainer.java new file mode 100644 index 000000000..235087648 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/string/BlockRedStringContainer.java @@ -0,0 +1,30 @@ +/** + * 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, 5:29:56 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.TileRedStringContainer; +import vazkii.botania.common.lib.LibBlockNames; + +public class BlockRedStringContainer extends BlockRedString { + + public BlockRedStringContainer() { + super(LibBlockNames.RED_STRING_CONTAINER); + } + + @Override + public TileRedString createNewTileEntity(World world, int meta) { + return new TileRedStringContainer(); + } + +} 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 new file mode 100644 index 000000000..c02a6aa40 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/string/TileRedString.java @@ -0,0 +1,64 @@ +/** + * 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, 5:04:22 PM (GMT)] + */ +package vazkii.botania.common.block.tile.string; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; +import vazkii.botania.api.wand.ITileBound; +import vazkii.botania.common.block.tile.TileMod; + +public abstract class TileRedString extends TileMod implements ITileBound { + + private ChunkCoordinates binding; + + @Override + public void updateEntity() { + ForgeDirection dir = ForgeDirection.getOrientation(getBlockMetadata()); + int x = xCoord; + int y = yCoord; + int z = zCoord; + int range = getRange(); + for(int i = 0; i < range; i++) { + x += dir.offsetX; + y += dir.offsetY; + z += dir.offsetZ; + if(worldObj.isAirBlock(x, y, z)) + continue; + + TileEntity tile = worldObj.getTileEntity(x, y, z); + if(tile instanceof TileRedString) + continue; + + if(acceptBlock(x, y, z) && (binding == null || binding.posX != x || binding.posY != y || binding.posZ != z)) { + binding = new ChunkCoordinates(x, y, z); + onBound(x, y, z); + } + } + } + + public int getRange() { + return 8; + } + + public abstract boolean acceptBlock(int x, int y, int z); + + public void onBound(int x, int y, int z) { + // NO-OP + } + + @Override + public ChunkCoordinates getBinding() { + return binding; + } + +} diff --git a/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringContainer.java b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringContainer.java new file mode 100644 index 000000000..cbdea4133 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/string/TileRedStringContainer.java @@ -0,0 +1,25 @@ +/** + * 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, 5:26:39 PM (GMT)] + */ +package vazkii.botania.common.block.tile.string; + +import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntity; + +public class TileRedStringContainer extends TileRedString { + + @Override + public boolean acceptBlock(int x, int y, int z) { + TileEntity tile = worldObj.getTileEntity(x, y, z); + return tile != null && tile instanceof IInventory; + } + +} diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index 9fe579848..2ed123c55 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -110,6 +110,9 @@ public final class BotaniaCreativeTab extends CreativeTabs { addItem(ModItems.bloodPendant); addBlock(ModBlocks.pylon); addBlock(ModBlocks.pistonRelay); + + addBlock(ModBlocks.redStringContainer); + addBlock(ModBlocks.shinyFlower); addBlock(ModBlocks.miniIsland); addBlock(ModBlocks.tinyPotato); diff --git a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java index 36df7b6ed..bc2292599 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -61,6 +61,7 @@ public final class LibBlockNames { public static final String BREWERY = "brewery"; 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 SUBTILE_PUREDAISY = "puredaisy"; public static final String SUBTILE_MANASTAR = "manastar"; diff --git a/src/main/resources/assets/botania/textures/blocks/redStringComparator.png b/src/main/resources/assets/botania/textures/blocks/redStringComparator.png new file mode 100644 index 000000000..787a17ba6 Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringComparator.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringContainer.png b/src/main/resources/assets/botania/textures/blocks/redStringContainer.png new file mode 100644 index 000000000..9d16f1a45 Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringContainer.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringDetonator.png b/src/main/resources/assets/botania/textures/blocks/redStringDetonator.png new file mode 100644 index 000000000..8b951f304 Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringDetonator.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringDispenser.png b/src/main/resources/assets/botania/textures/blocks/redStringDispenser.png new file mode 100644 index 000000000..865e7e2ac Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringDispenser.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringFertilizer.png b/src/main/resources/assets/botania/textures/blocks/redStringFertilizer.png new file mode 100644 index 000000000..728c4cdb2 Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringFertilizer.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringRelay.png b/src/main/resources/assets/botania/textures/blocks/redStringRelay.png new file mode 100644 index 000000000..4d743e0c0 Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringRelay.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringSender.png b/src/main/resources/assets/botania/textures/blocks/redStringSender.png new file mode 100644 index 000000000..f5dce4dab Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringSender.png differ diff --git a/src/main/resources/assets/botania/textures/blocks/redStringWander.png b/src/main/resources/assets/botania/textures/blocks/redStringWander.png new file mode 100644 index 000000000..35ba41c65 Binary files /dev/null and b/src/main/resources/assets/botania/textures/blocks/redStringWander.png differ diff --git a/src/main/resources/assets/botania/textures/items/redString.png b/src/main/resources/assets/botania/textures/items/redString.png new file mode 100644 index 000000000..cab4c0515 Binary files /dev/null and b/src/main/resources/assets/botania/textures/items/redString.png differ