aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/forestry/trees
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2017-01-17 19:41:46 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2017-01-17 19:41:46 +1000
commit5834a266fdf425ad56558db71691f9b3b0df5e31 (patch)
treeeb2123fde62da27795417fbe9b6afcd31b383adf /src/Java/gtPlusPlus/xmod/forestry/trees
parent289e41515842ec89d01bfa593504163f75d0950c (diff)
downloadGT5-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')
-rw-r--r--src/Java/gtPlusPlus/xmod/forestry/trees/ForestryLeaf.java160
-rw-r--r--src/Java/gtPlusPlus/xmod/forestry/trees/ForestrySapling.java55
-rw-r--r--src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java20
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));
}