From 57ca9427f25d935e7902dda6b8daa752977a9741 Mon Sep 17 00:00:00 2001 From: Girafi Date: Wed, 24 Aug 2016 20:50:55 +0200 Subject: [PATCH] Added support for Botanias horn of the wild to BoP flowers & plants, Closes #804 (#848) * Added support for Botanias horn of the wild to BoP flowers & plants * Made IHornHarvestable optional inferface --- build.properties | 2 +- .../botania/api/item/IHornHarvestable.java | 65 +++++++++++++++++++ .../common/block/BlockBOPFlower.java | 41 +++++++++--- .../common/block/BlockBOPPlant.java | 46 +++++++++++-- 4 files changed, 138 insertions(+), 16 deletions(-) create mode 100644 src/api/java/vazkii/botania/api/item/IHornHarvestable.java diff --git a/build.properties b/build.properties index 40adf927b..af70b510b 100644 --- a/build.properties +++ b/build.properties @@ -1,4 +1,4 @@ minecraft_version=1.10.2 -forge_version=12.18.1.2046 +forge_version=12.18.1.2073 mod_version=5.0.0 mappings_version=snapshot_nodoc_20160808 diff --git a/src/api/java/vazkii/botania/api/item/IHornHarvestable.java b/src/api/java/vazkii/botania/api/item/IHornHarvestable.java new file mode 100644 index 000000000..a6ef982fc --- /dev/null +++ b/src/api/java/vazkii/botania/api/item/IHornHarvestable.java @@ -0,0 +1,65 @@ +/** + * 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 the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Oct 24, 2015, 11:16:00 PM (GMT)] + */ +package vazkii.botania.api.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * A Block that implements this can be uprooted by the various horns in Botania. + */ +public interface IHornHarvestable { + + /** + * Returns true if this block can be uprooted. + * Note that the stack param can be null if it's a drum breaking it. + */ + public boolean canHornHarvest(World world, BlockPos pos, ItemStack stack, EnumHornType hornType); + + /** + * Returns true if harvestByHorn() should be called. If false it just uses the normal + * block breaking method. + * Note that the stack param can be null if it's a drum breaking it. + */ + public boolean hasSpecialHornHarvest(World world, BlockPos pos, ItemStack stack, EnumHornType hornType); + + /** + * Called to harvest by a horn. + * Note that the stack param can be null if it's a drum breaking it. + */ + public void harvestByHorn(World world, BlockPos pos, ItemStack stack, EnumHornType hornType); + + public static enum EnumHornType { + + /** + * Horn of the Wild, for grass and crops + */ + WILD, + + /** + * Horn of the Canopy, for leaves + */ + CANOPY, + + /** + * Horn of the Covering, for snow + */ + COVERING; + + public static EnumHornType getTypeForMeta(int meta) { + EnumHornType[] values = EnumHornType.values(); + return values[Math.min(values.length - 1, meta)]; + } + + }; + +} diff --git a/src/main/java/biomesoplenty/common/block/BlockBOPFlower.java b/src/main/java/biomesoplenty/common/block/BlockBOPFlower.java index 3f5466f86..9ec6165e9 100644 --- a/src/main/java/biomesoplenty/common/block/BlockBOPFlower.java +++ b/src/main/java/biomesoplenty/common/block/BlockBOPFlower.java @@ -8,10 +8,6 @@ package biomesoplenty.common.block; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - import biomesoplenty.api.block.BOPBlocks; import biomesoplenty.api.enums.BOPFlowers; import biomesoplenty.common.config.GameplayConfigurationHandler; @@ -39,10 +35,17 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.IShearable; +import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import vazkii.botania.api.item.IHornHarvestable; -public class BlockBOPFlower extends BlockBOPDecoration implements IShearable +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@Optional.Interface(iface = "vazkii.botania.api.item.IHornHarvestable", modid = "Botania") +public class BlockBOPFlower extends BlockBOPDecoration implements IShearable, IHornHarvestable { // setup paged variant property @@ -342,8 +345,30 @@ public class BlockBOPFlower extends BlockBOPDecoration implements IShearable @Override public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) { return new ArrayList(); } - - - + @Override + @Optional.Method(modid = "Botania") + public boolean canHornHarvest(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) + { + if (hornType != EnumHornType.WILD) return false; + BOPFlowers flower = ((BOPFlowers) world.getBlockState(pos).getValue(this.variantProperty)); + switch (flower) + { + default: + return true; + } + } + + @Override + @Optional.Method(modid = "Botania") + public boolean hasSpecialHornHarvest(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) + { + return false; + } + + @Override + @Optional.Method(modid = "Botania") + public void harvestByHorn(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) + { + } } \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/block/BlockBOPPlant.java b/src/main/java/biomesoplenty/common/block/BlockBOPPlant.java index fa1a337c9..717bd74e2 100644 --- a/src/main/java/biomesoplenty/common/block/BlockBOPPlant.java +++ b/src/main/java/biomesoplenty/common/block/BlockBOPPlant.java @@ -8,9 +8,6 @@ package biomesoplenty.common.block; -import java.util.List; -import java.util.Random; - import biomesoplenty.api.block.BlockQueries; import biomesoplenty.api.enums.BOPPlants; import biomesoplenty.api.item.BOPItems; @@ -50,12 +47,18 @@ import net.minecraft.world.biome.BiomeColorHelper; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IShearable; import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import vazkii.botania.api.item.IHornHarvestable; + +import java.util.List; +import java.util.Random; // TODO: pick block? -public class BlockBOPPlant extends BlockBOPDecoration implements IShearable +@Optional.Interface(iface = "vazkii.botania.api.item.IHornHarvestable", modid = "Botania") +public class BlockBOPPlant extends BlockBOPDecoration implements IShearable, IHornHarvestable { // setup paged variant property @@ -569,8 +572,37 @@ public class BlockBOPPlant extends BlockBOPDecoration implements IShearable return Blocks.TALLGRASS.getFireSpreadSpeed(world, pos, face); } } - - - // TODO: pickblock on carrot? + + @Override + @Optional.Method(modid = "Botania") + public boolean canHornHarvest(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) + { + if (hornType != EnumHornType.WILD) return false; + BOPPlants plant = ((BOPPlants) world.getBlockState(pos).getValue(this.variantProperty)); + switch (plant) + { + case BUSH: + case BERRYBUSH: + case RIVERCANE: + case TINYCACTUS: + case WITHERWART: + return false; + default: + return true; + } + } + + @Override + @Optional.Method(modid = "Botania") + public boolean hasSpecialHornHarvest(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) + { + return false; + } + + @Override + @Optional.Method(modid = "Botania") + public void harvestByHorn(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) + { + } }