diff options
author | Draknyte1 <Draknyte1@hotmail.com> | 2017-01-17 19:41:46 +1000 |
---|---|---|
committer | Draknyte1 <Draknyte1@hotmail.com> | 2017-01-17 19:41:46 +1000 |
commit | 5834a266fdf425ad56558db71691f9b3b0df5e31 (patch) | |
tree | eb2123fde62da27795417fbe9b6afcd31b383adf /src/Java/gtPlusPlus/xmod/forestry/trees | |
parent | 289e41515842ec89d01bfa593504163f75d0950c (diff) | |
download | GT5-Unofficial-5834a266fdf425ad56558db71691f9b3b0df5e31.tar.gz GT5-Unofficial-5834a266fdf425ad56558db71691f9b3b0df5e31.tar.bz2 GT5-Unofficial-5834a266fdf425ad56558db71691f9b3b0df5e31.zip |
% Tried to improve the logic for the Tree Farmer, to support Forestry 4.
% Moved COFH API related files.
+ Added a child mod, for misc handling.
$$ Borrowed some code from MFR, to attempt forestry support. (Credit left, will re-do if I even get it working).
Diffstat (limited to 'src/Java/gtPlusPlus/xmod/forestry/trees')
3 files changed, 233 insertions, 2 deletions
diff --git a/src/Java/gtPlusPlus/xmod/forestry/trees/ForestryLeaf.java b/src/Java/gtPlusPlus/xmod/forestry/trees/ForestryLeaf.java new file mode 100644 index 0000000000..e2550f4643 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/forestry/trees/ForestryLeaf.java @@ -0,0 +1,160 @@ +package gtPlusPlus.xmod.forestry.trees; + +import java.util.*; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import powercrystals.minefactoryreloaded.api.*; +import powercrystals.minefactoryreloaded.farmables.harvestables.HarvestableTreeLeaves; +import forestry.api.arboriculture.*; +import forestry.api.genetics.*; + + +public class ForestryLeaf extends HarvestableTreeLeaves implements IFactoryFruit +{ + private ITreeRoot root; + private ReplacementBlock repl; + protected Item _item; + + public ForestryLeaf(Block block) + { + super(block); + root = (ITreeRoot)AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees"); + repl = EmptyReplacement.INSTANCE; + _item = Item.getItemFromBlock(block); + } + + @Override + public boolean canBePicked(World world, int x, int y, int z) + { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof IFruitBearer) + { + IFruitBearer fruit = (IFruitBearer)te; + return fruit.getRipeness() >= 0.99f; + } + return false; + } + + public boolean canFertilize(World world, int x, int y, int z) + { + return !canBePicked(world, x, y, z); + } + + public boolean fertilize(World world, Random rand, int x, int y, int z) + { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof IFruitBearer) + { + IFruitBearer fruit = (IFruitBearer)te; + fruit.addRipeness(1f); + return true; + } + return false; + } + + @Override + public ReplacementBlock getReplacementBlock(World world, int x, int y, int z) + { + return repl; + } + + @Override + public void prePick(World world, int x, int y, int z) + { + } + + @Override // HARVESTER + public List<ItemStack> getDrops(World world, Random rand, Map<String, Boolean> settings, int x, int y, int z) + { + ITree tree = getTree(world, x, y, z); + if (tree == null) + return null; + + ArrayList<ItemStack> prod = new ArrayList<ItemStack>(); + + float modifier = 1f; + if (settings.get("silkTouch") == Boolean.TRUE) + { + ItemStack item = new ItemStack(_item); + NBTTagCompound tag = new NBTTagCompound(); + tree.writeToNBT(tag); + item.setTagCompound(tag); + prod.add(item); + } + else + { + boolean hasMate = tree.getMate() != null; + for (ITree s : getSaplings(tree, world, x, y, z, modifier)) + if (s != null) { + if ((hasMate && !s.isGeneticEqual(tree)) || rand.nextInt(32) == 0) + if (rand.nextBoolean()) + prod.add(root.getMemberStack(s, EnumGermlingType.POLLEN.ordinal())); + + prod.add(root.getMemberStack(s, EnumGermlingType.SAPLING.ordinal())); + } + + getFruits(world, x, y, z, tree, prod); + } + + return prod; + } + + + private static ITree[] getSaplings(ITree tree, World world, int x, int y, int z, float modifier) { + return tree.getSaplings(world, null, x, y, z, modifier); + } + + @Override // FRUIT PICKER + public List<ItemStack> getDrops(World world, Random rand, int x, int y, int z) + { + ITree tree = getTree(world, x, y, z); + if (tree == null) + return null; + + ArrayList<ItemStack> prod = new ArrayList<ItemStack>(); + getFruits(world, x, y, z, tree, prod); + return prod; + } + + private ITree getTree(World world, int x, int y, int z) + { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof IPollinatable) { + IIndividual t = ((IPollinatable)te).getPollen(); + if (t instanceof ITree) + return (ITree)t; + } + return null; + } + + private void getFruits(World world, int x, int y, int z, ITree tree, ArrayList<ItemStack> prod) + { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof IFruitBearer) + { + IFruitBearer fruit = (IFruitBearer)te; + if (fruit.hasFruit()) + { + //int period = tree.getGenome().getFruitProvider().getRipeningPeriod(); + //ItemStack[] o = tree.produceStacks(world, x, y, z, (int)(fruit.getRipeness() * period + 0.1f)); + prod.addAll(fruit.pickFruit(null)); + } + } + } + + @Override + public void postPick(World world, int x, int y, int z) + { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof IFruitBearer) + { + IFruitBearer fruit = (IFruitBearer)te; + fruit.addRipeness(-fruit.getRipeness()); + } + } +} diff --git a/src/Java/gtPlusPlus/xmod/forestry/trees/ForestrySapling.java b/src/Java/gtPlusPlus/xmod/forestry/trees/ForestrySapling.java new file mode 100644 index 0000000000..7c81ea0928 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/forestry/trees/ForestrySapling.java @@ -0,0 +1,55 @@ +package gtPlusPlus.xmod.forestry.trees; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import powercrystals.minefactoryreloaded.api.ReplacementBlock; +import powercrystals.minefactoryreloaded.farmables.plantables.PlantableStandard; +import forestry.api.arboriculture.ITreeRoot; +import forestry.api.genetics.AlleleManager; + +public class ForestrySapling extends PlantableStandard +{ + private ITreeRoot root; + + public ForestrySapling(Item item, Block block) + { + super(item, block, WILDCARD, null); + root = (ITreeRoot)AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees"); + _plantedBlock = new ReplacementBlock((Block)null) { + @Override + public boolean replaceBlock(World world, int x, int y, int z, ItemStack stack) { + return root.plantSapling(world, root.getMember(stack), null, x, y, z); + } + }; + } + + public Block getPlant() + { + return _block; + } + + @Override + public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack) + { + if (!world.isAirBlock(x, y, z)) + return false; + + return root.getMember(stack).canStay(world, x, y, z); + } + + public boolean canFertilize(World world, int x, int y, int z) + { + return true; + } + + public boolean fertilize(World world, Random rand, int x, int y, int z) + { + Block block = world.getBlock(x, y, z); + root.getTree(world, x, y, z).getTreeGenerator(world, x, y, z, true).generate(world, rand, x, y, z); + return world.getBlock(x, y, z) != block; + } +} diff --git a/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java b/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java index ba8ffd8284..8fe3f62f23 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java +++ b/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java @@ -63,7 +63,17 @@ public class TreefarmManager { public static boolean isWoodLog(Block log){ String tTool = log.getHarvestTool(0); - return OrePrefixes.log.contains(new ItemStack(log, 1))&& ((tTool != null) && (tTool.equals("axe"))) || (log.getMaterial() == Material.wood); + + if (log == Blocks.log || log == Blocks.log2){ + return true; + } + + //IC2 Rubber Tree Compat + if (log.getClass().getName().toLowerCase().contains("rubwood")){ + return true; + } + + return OrePrefixes.log.contains(new ItemStack(log, 1))&& ((tTool != null) && (tTool.equals("axe"))) || (log.getMaterial() != Material.wood) ? false : (OrePrefixes.fence.contains(new ItemStack(log, 1)) ? false : true); } public static boolean isLeaves(Block log){ @@ -88,7 +98,7 @@ public class TreefarmManager { } public static boolean isFenceBlock(Block fence){ - return (fence == Blocks.fence ? true : (fence == Blocks.fence_gate ? true : (fence == Blocks.nether_brick_fence ? true : false))); + return (fence == Blocks.fence ? true : (fence == Blocks.fence_gate ? true : (fence == Blocks.nether_brick_fence ? true : (OrePrefixes.fence.contains(new ItemStack(fence, 1)) ? true : false)))); } public static boolean isAirBlock(Block air){ @@ -96,6 +106,12 @@ public class TreefarmManager { if (air.getLocalizedName().toLowerCase().contains("air")){ return true; } + + if (air.getClass().getName().toLowerCase().contains("residual") || air.getClass().getName().toLowerCase().contains("heat")){ + return true; + } + + //Utils.LOG_INFO("Found "+air.getLocalizedName()); return (air == Blocks.air ? true : (air instanceof BlockAir ? true : false)); } |