From 50d8cf55876f181ad3bea4422baeb30069c293f0 Mon Sep 17 00:00:00 2001 From: LiamEarle Date: Thu, 11 Dec 2014 12:55:49 +1000 Subject: [PATCH] Add flower interaction methods - Add onBlockPlacedBy() - Add onBlockActivated() - Add onBlockAdded() - Add onBlockHarvested() - Add getDrops() --- .../botania/api/subtile/SubTileEntity.java | 41 ++++++++++++++++++- .../block/BlockFloatingSpecialFlower.java | 21 +++++++++- .../common/block/BlockSpecialFlower.java | 21 +++++++++- .../common/block/tile/TileSpecialFlower.java | 30 ++++++++++++++ .../item/block/ItemBlockSpecialFlower.java | 2 + 5 files changed, 111 insertions(+), 4 deletions(-) diff --git a/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java b/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java index e907e0191..853b5a7b5 100644 --- a/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java +++ b/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java @@ -11,19 +11,23 @@ */ package vazkii.botania.api.subtile; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; 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 net.minecraft.world.World; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.wand.IWandBindable; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; + +import java.util.ArrayList; /** * A Sub-TileEntity, this is used for the flower system. Make sure to map subclasses @@ -101,6 +105,39 @@ public class SubTileEntity { return false; } + /** + * Called when this sub tile is placed in the world (by an entity). + */ + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { + // NO-OP + } + + /** + * Called when a player right clicks this sub tile. + */ + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { return false; } + + /** + * Called when this sub tile is added to the world. + */ + public void onBlockAdded(World world, int x, int y, int z) { + //NO-OP + } + + /** + * Called when this sub tile is harvested + */ + public void onBlockHarvested(World world, int x, int y, int z, int side, EntityPlayer player) { + //NO-OP + } + + /** + * Allows additional processing of sub tile drops + */ + public ArrayList getDrops(ArrayList list) { + return list; + } + /** * Gets which Lexicon Entry to open when this sub tile is right clicked with a lexicon. */ diff --git a/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java index 583809913..2de6a33f4 100644 --- a/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java @@ -18,6 +18,7 @@ import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.passive.EntitySheep; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -71,8 +72,10 @@ public class BlockFloatingSpecialFlower extends BlockFloatingFlower implements I @Override public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, EntityPlayer par6EntityPlayer) { - if(!par6EntityPlayer.capabilities.isCreativeMode) + if(!par6EntityPlayer.capabilities.isCreativeMode) { dropBlockAsItem(par1World, par2, par3, par4, par5, 0); + ((TileSpecialFlower) par1World.getTileEntity(par2, par3, par4)).onBlockHarvested(par1World, par2, par3, par4, par5, par6EntityPlayer); + } } @Override @@ -83,6 +86,7 @@ public class BlockFloatingSpecialFlower extends BlockFloatingFlower implements I if(tile != null) { String name = ((TileSpecialFlower) tile).subTileName; list.add(ItemBlockSpecialFlower.ofType(new ItemStack(world.getBlock(x, y, z)), name)); + ((TileSpecialFlower) tile).getDrops(list); } return list; @@ -100,6 +104,21 @@ public class BlockFloatingSpecialFlower extends BlockFloatingFlower implements I return ((TileSpecialFlower) world.getTileEntity(x, y, z)).onWanded(stack, player); } + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { + ((TileSpecialFlower) world.getTileEntity(x, y, z)).onBlockPlacedBy(world, x, y, z, entity, stack); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return ((TileSpecialFlower) world.getTileEntity(x, y, z)).onBlockActivated(world, x, y, z, player, side, hitX, hitY, hitZ); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + ((TileSpecialFlower) world.getTileEntity(x, y, z)).onBlockAdded(world, x, y, z); + } + @Override public void renderHUD(Minecraft mc, ScaledResolution res, World world, int x, int y, int z) { ((TileSpecialFlower) world.getTileEntity(x, y, z)).renderHUD(mc, res); diff --git a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java index 9be654d22..c37301165 100644 --- a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java @@ -24,6 +24,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -147,8 +148,10 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid @Override public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, EntityPlayer par6EntityPlayer) { - if(!par6EntityPlayer.capabilities.isCreativeMode) + if(!par6EntityPlayer.capabilities.isCreativeMode) { dropBlockAsItem(par1World, par2, par3, par4, par5, 0); + ((TileSpecialFlower) par1World.getTileEntity(par2, par3, par4)).onBlockHarvested(par1World, par2, par3, par4, par5, par6EntityPlayer); + } } @Override @@ -159,6 +162,7 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid if(tile != null) { String name = ((TileSpecialFlower) tile).subTileName; list.add(ItemBlockSpecialFlower.ofType(name)); + ((TileSpecialFlower) tile).getDrops(list); } return list; @@ -186,6 +190,21 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid return ((TileSpecialFlower) world.getTileEntity(x, y, z)).onWanded(stack, player); } + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { + ((TileSpecialFlower) world.getTileEntity(x, y, z)).onBlockPlacedBy(world, x, y, z, entity, stack); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + ((TileSpecialFlower) world.getTileEntity(x, y, z)).onBlockAdded(world, x, y, z); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return ((TileSpecialFlower) world.getTileEntity(x, y, z)).onBlockActivated(world, x, y, z, player, side, hitX, hitY, hitZ); + } + @Override public void renderHUD(Minecraft mc, ScaledResolution res, World world, int x, int y, int z) { ((TileSpecialFlower) world.getTileEntity(x, y, z)).renderHUD(mc, res); 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 1f369a62e..07df6d804 100644 --- a/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java @@ -13,6 +13,7 @@ package vazkii.botania.common.block.tile; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; @@ -20,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.IIcon; +import net.minecraft.world.World; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.subtile.ISubTileContainer; @@ -27,6 +29,8 @@ import vazkii.botania.api.subtile.SubTileEntity; import vazkii.botania.api.wand.IWandBindable; import vazkii.botania.common.block.tile.string.TileRedStringRelay; +import java.util.ArrayList; + public class TileSpecialFlower extends TileMod implements IWandBindable, ISubTileContainer { private static final String TAG_SUBTILE_NAME = "subTileName"; @@ -132,6 +136,32 @@ public class TileSpecialFlower extends TileMod implements IWandBindable, ISubTil return subTile == null ? false : subTile.onWanded(player, wand); } + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { + if (subTile != null) + subTile.onBlockPlacedBy(world, x, y, z, entity, stack); + } + + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return subTile == null ? false : subTile.onBlockActivated(world, x, y, z, player, side, hitX, hitY, hitZ); + } + + public void onBlockAdded(World world, int x, int y, int z) { + if (subTile != null) + subTile.onBlockAdded(world, x, y, z); + } + + public void onBlockHarvested(World world, int x, int y, int z, int side, EntityPlayer player) { + if (subTile != null) + subTile.onBlockHarvested(world, x, y, z, side, player); + } + + public ArrayList getDrops(ArrayList list) { + if (subTile != null) + subTile.getDrops(list); + + return list; + } + public void renderHUD(Minecraft mc, ScaledResolution res) { if(subTile != null) subTile.renderHUD(mc, res); diff --git a/src/main/java/vazkii/botania/common/item/block/ItemBlockSpecialFlower.java b/src/main/java/vazkii/botania/common/item/block/ItemBlockSpecialFlower.java index 9461b6e2e..4cd014942 100644 --- a/src/main/java/vazkii/botania/common/item/block/ItemBlockSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/item/block/ItemBlockSpecialFlower.java @@ -54,6 +54,8 @@ public class ItemBlockSpecialFlower extends ItemBlockMod implements IRecipeKeyPr if(te instanceof TileSpecialFlower) { TileSpecialFlower tile = (TileSpecialFlower) te; tile.setSubTile(type); + tile.onBlockAdded(world, x, y, z); + tile.onBlockPlacedBy(world, x, y, z, player, stack); if(!world.isRemote) world.markBlockForUpdate(x, y, z); }