aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2017-01-12 00:14:34 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2017-01-12 00:14:34 +1000
commit9649317bee1a0621cd4a7ea0e9295571832d629d (patch)
tree2b6965deb9d8dda60378886155546e370b0d24da /src/Java/gtPlusPlus
parent8d3d640b9e4f52a81f11255c89f201db80e7a9d4 (diff)
downloadGT5-Unofficial-9649317bee1a0621cd4a7ea0e9295571832d629d.tar.gz
GT5-Unofficial-9649317bee1a0621cd4a7ea0e9295571832d629d.tar.bz2
GT5-Unofficial-9649317bee1a0621cd4a7ea0e9295571832d629d.zip
$ Tree Farmer now grows saplings and has a particle effect. (This is configurable).
+ Added a getSimpleStack method for blocks, to simplify life.
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r--src/Java/gtPlusPlus/core/lib/CORE.java3
-rw-r--r--src/Java/gtPlusPlus/core/util/item/ItemUtils.java4
-rw-r--r--src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java57
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntityTreeFarm.java143
4 files changed, 140 insertions, 67 deletions
diff --git a/src/Java/gtPlusPlus/core/lib/CORE.java b/src/Java/gtPlusPlus/core/lib/CORE.java
index dbc7cde09d..f4d70b79c8 100644
--- a/src/Java/gtPlusPlus/core/lib/CORE.java
+++ b/src/Java/gtPlusPlus/core/lib/CORE.java
@@ -122,9 +122,10 @@ public class CORE {
public static boolean enableMultiblock_PowerSubstation = true;
public static boolean enableMultiblock_LiquidFluorideThoriumReactor = true;
public static boolean enableMultiblock_NuclearFuelRefinery = true;
-
public static boolean enableMultiblock_TreeFarmer = true;
+ public static boolean enableTreeFarmerParticles = true;
+
}
}
diff --git a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
index 2595f88fec..03d512d359 100644
--- a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
@@ -23,6 +23,7 @@ import gtPlusPlus.core.util.wrapper.var;
import java.util.ArrayList;
import java.util.List;
+import net.minecraft.block.Block;
import net.minecraft.item.*;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraftforge.fluids.FluidStack;
@@ -34,6 +35,9 @@ public class ItemUtils {
public static ItemStack getSimpleStack(Item x){
return getSimpleStack(x, 1);
}
+ public static ItemStack getSimpleStack(Block x){
+ return getSimpleStack(Item.getItemFromBlock(x), 1);
+ }
public static ItemStack getSimpleStack(Item x, int i){
try {
ItemStack r = new ItemStack(x, i);
diff --git a/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java b/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java
index 65bc3231aa..ba8ffd8284 100644
--- a/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java
+++ b/src/Java/gtPlusPlus/xmod/forestry/trees/TreefarmManager.java
@@ -2,6 +2,7 @@ package gtPlusPlus.xmod.forestry.trees;
import gregtech.api.enums.OrePrefixes;
import gtPlusPlus.core.lib.LoadedMods;
+import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import net.minecraft.block.Block;
@@ -41,35 +42,47 @@ public class TreefarmManager {
}
return true;
}
-
+
@Optional.Method(modid = "Forestry")
public static Block getHumus(){
- if(blockHumus != null){
- return blockHumus;
- }
- else if (ReflectionUtils.doesClassExist("forestry.core.blocks.BlockSoil")){
- try {
- Class<?> humusClass = Class.forName("forestry.core.blocks.BlockSoil");
- ItemStack humusStack = ItemUtils.getCorrectStacktype("Forestry:soil", 1);
- if (humusClass != null){
- blockHumus = Block.getBlockFromItem(humusStack.getItem());
- return Block.getBlockFromItem(humusStack.getItem());
- }
- } catch (ClassNotFoundException e) {}
+ if(blockHumus != null){
+ return blockHumus;
+ }
+ else if (ReflectionUtils.doesClassExist("forestry.core.blocks.BlockSoil")){
+ try {
+ Class<?> humusClass = Class.forName("forestry.core.blocks.BlockSoil");
+ ItemStack humusStack = ItemUtils.getCorrectStacktype("Forestry:soil", 1);
+ if (humusClass != null){
+ blockHumus = Block.getBlockFromItem(humusStack.getItem());
+ return Block.getBlockFromItem(humusStack.getItem());
+ }
+ } catch (ClassNotFoundException e) {}
+ }
+ return null;
}
- return null;
-}
-
+
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);
}
-
+
public static boolean isLeaves(Block log){
- String tTool = log.getHarvestTool(0);
return OrePrefixes.leaves.contains(new ItemStack(log, 1)) || (log.getMaterial() == Material.leaves);
}
+ public static boolean isSapling(Block log){
+ if (log != null){
+ if (OrePrefixes.sapling.contains(new ItemStack(log, 1))){
+ Utils.LOG_INFO(""+log.getLocalizedName());
+ }
+ if (log.getLocalizedName().toLowerCase().contains("sapling")){
+ Utils.LOG_INFO(""+log.getLocalizedName());
+ return true;
+ }
+ }
+ return OrePrefixes.sapling.contains(new ItemStack(log, 1));
+ }
+
public static boolean isDirtBlock(Block dirt){
return (dirt == Blocks.dirt ? true : (dirt == Blocks.grass ? true : (getHumus() == null ? false : (dirt == blockHumus ? true : false))));
}
@@ -77,16 +90,16 @@ 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)));
}
-
+
public static boolean isAirBlock(Block air){
-
+
if (air.getLocalizedName().toLowerCase().contains("air")){
return true;
}
-
+
return (air == Blocks.air ? true : (air instanceof BlockAir ? true : false));
}
-
+
/*public static boolean isSaplingBlock(Block sapling){
return (sapling == Blocks.sapling ? true : (sapling == Blocks.))
}*/
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntityTreeFarm.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntityTreeFarm.java
index 4eea109600..8b9ad13212 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntityTreeFarm.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntityTreeFarm.java
@@ -1,5 +1,6 @@
package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi;
+import static gtPlusPlus.core.lib.CORE.configSwitches.enableTreeFarmerParticles;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
@@ -10,22 +11,29 @@ import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_Recipe;
import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.xmod.forestry.trees.TreefarmManager;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
import java.util.ArrayList;
import net.minecraft.block.Block;
+import net.minecraft.block.IGrowable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
+import net.minecraft.world.WorldServer;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.FakePlayerFactory;
+import net.minecraftforge.event.entity.player.BonemealEvent;
+import cpw.mods.fml.common.eventhandler.Event.Result;
public class GregtechMetaTileEntityTreeFarm extends GT_MetaTileEntity_MultiBlockBase {
public ArrayList<GT_MetaTileEntity_TieredMachineBlock> mCasings = new ArrayList();
- /* private */ private int treeCheckTicks = 0;
+ /* private */ private int treeCheckTicks = 0;
public GregtechMetaTileEntityTreeFarm(final int aID, final String aName, final String aNameRegional) {
super(aID, aName, aNameRegional);
@@ -293,9 +301,10 @@ public class GregtechMetaTileEntityTreeFarm extends GT_MetaTileEntity_MultiBlock
Utils.LOG_INFO("Looking For Trees - Serverside | "+treeCheckTicks);
final boolean b = findLogs(aBaseMetaTileEntity);
Utils.LOG_INFO("Did I manage to find/cut logs? "+b);
- if (b){
- cleanUp(aBaseMetaTileEntity);
- }
+
+ cleanUp(aBaseMetaTileEntity);
+
+ findSaplings(aBaseMetaTileEntity);
}
}
@@ -322,33 +331,15 @@ public class GregtechMetaTileEntityTreeFarm extends GT_MetaTileEntity_MultiBlock
if ((i != -7 && i != 7) && (j != -7 && j != 7)) {
//Farm Inner 13*13
-
- //Make sure it's not logs and return.
- if (!TreefarmManager.isWoodLog(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j)) || !TreefarmManager.isAirBlock(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j)) || !aBaseMetaTileEntity.getAirOffset(xDir+i, h, zDir+j)) {
- //Utils.LOG_INFO("Wood like block missing from inner 14x14, layer 2."); //TODO
- //Utils.LOG_INFO("Instead, found "+aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j).getLocalizedName());
- //Utils.LOG_INFO("Found at x:"+(xDir+i)+" y:"+h+" z:"+(zDir+j));
- //return false;
- }
-
- if (TreefarmManager.isLeaves(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))){
- int posiX, posiY, posiZ;
- posiX = aBaseMetaTileEntity.getXCoord()+xDir+i;
- posiY = aBaseMetaTileEntity.getYCoord()+h;
- posiZ = aBaseMetaTileEntity.getZCoord()+zDir+j;
- Utils.LOG_INFO("Cleaning Up some leaves.");
- aBaseMetaTileEntity.getWorld().setBlockToAir(posiX, posiY, posiZ);
- }
-
if (TreefarmManager.isWoodLog(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j)) || TreefarmManager.isWoodLog(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))){
- Utils.LOG_INFO("Found A log of some kind I can chop.");
+ //Utils.LOG_INFO("Found A log of some kind I can chop.");
if (this.mEnergyHatches != null) {
for (final GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches){
if (isValidMetaTileEntity(tHatch)) {
//Utils.LOG_INFO("Hatch ["+"]| can hold:"+maxEUStore()+" | holding:"+tHatch.getEUVar());
if (tHatch.getEUVar() >= 128) {
- Utils.LOG_INFO("I should cut wood instead of print messages.");
- Utils.LOG_INFO("Found at x:"+(xDir+i)+" y:"+h+" z:"+(zDir+j));
+ //Utils.LOG_INFO("I should cut wood instead of print messages.");
+ //Utils.LOG_INFO("Found at x:"+(xDir+i)+" y:"+h+" z:"+(zDir+j));
logsCut++;
//tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(128 * 1, false);
@@ -384,11 +375,12 @@ public class GregtechMetaTileEntityTreeFarm extends GT_MetaTileEntity_MultiBlock
}
}
}
- cleanUp(aBaseMetaTileEntity);
- Utils.LOG_INFO("general failure | maybe there is no logs, not an error. | cut:"+logsCut );
+ if (logsCut > 0)
+ cleanUp(aBaseMetaTileEntity);
+ //Utils.LOG_INFO("general failure | maybe there is no logs, not an error. | cut:"+logsCut );
return false;
}
-
+
private static boolean cleanUp(final IGregTechTileEntity aBaseMetaTileEntity){
Utils.LOG_INFO("called cleanUp()");
int cleanedUp = 0;
@@ -396,38 +388,101 @@ public class GregtechMetaTileEntityTreeFarm extends GT_MetaTileEntity_MultiBlock
final int zDir = net.minecraftforge.common.util.ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ * 7;
for (int i = -10; i <= 10; i++) {
for (int j = -10; j <= 10; j++) {
- for (int h=3;h<175;h++){
- if (TreefarmManager.isLeaves(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j)) || TreefarmManager.isWoodLog(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))){
- int posiX, posiY, posiZ;
- posiX = aBaseMetaTileEntity.getXCoord()+xDir+i;
- posiY = aBaseMetaTileEntity.getYCoord()+h;
- posiZ = aBaseMetaTileEntity.getZCoord()+zDir+j;
- Utils.LOG_INFO("Cleaning Up some leftovers.");
- cleanedUp++;
- aBaseMetaTileEntity.getWorld().setBlockToAir(posiX, posiY, posiZ);
- }
-
+ for (int h=2;h<175;h++){
+ if (TreefarmManager.isLeaves(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j)) || TreefarmManager.isWoodLog(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))){
+ int posiX, posiY, posiZ;
+ posiX = aBaseMetaTileEntity.getXCoord()+xDir+i;
+ posiY = aBaseMetaTileEntity.getYCoord()+h;
+ posiZ = aBaseMetaTileEntity.getZCoord()+zDir+j;
+ Utils.LOG_INFO("Cleaning Up some leftovers.");
+ cleanedUp++;
+ aBaseMetaTileEntity.getWorld().setBlockToAir(posiX, posiY, posiZ);
}
-
+
+ }
+
}
}
Utils.LOG_INFO("cleaning up | "+cleanedUp );
return true;
}
+ private static boolean findSaplings(final IGregTechTileEntity aBaseMetaTileEntity){
+ Utils.LOG_INFO("called findSaplings()");
+ int saplings = 0;
+ final int xDir = net.minecraftforge.common.util.ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX * 7;
+ final int zDir = net.minecraftforge.common.util.ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ * 7;
+ for (int i = -7; i <= 7; i++) {
+ for (int j = -7; j <= 7; j++) {
+ int h = 1;
+ //Utils.LOG_INFO("Looking for saplings.");
+ if (TreefarmManager.isSapling(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))){
+ int posiX, posiY, posiZ;
+ posiX = aBaseMetaTileEntity.getXCoord()+xDir+i;
+ posiY = aBaseMetaTileEntity.getYCoord()+h;
+ posiZ = aBaseMetaTileEntity.getZCoord()+zDir+j;
+ Utils.LOG_INFO("Found a sapling to grow.");
+ saplings++;
+ applyBonemeal(aBaseMetaTileEntity.getWorld(), posiX, posiY, posiZ);
+ }
+ }
+ }
+ Utils.LOG_INFO("Tried to grow saplings: | "+saplings );
+ return true;
+ }
+
- private static boolean cutLog (final World world, final int x, final int y, final int z){
+ private boolean cutLog(final World world, final int x, final int y, final int z){
Utils.LOG_INFO("Cutting Log");
try {
- final Block block = world.getBlock(x, y, z);
- Utils.LOG_INFO(block.toString());
- block.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
+ //Get Log.
+ final Block block = world.getBlock(x, y, z);
+ //Make a valid itemstack to add to the output bus.
+ ItemStack logStack[] = {ItemUtils.getSimpleStack(block)};
+ //Add the stack to the bus.
+ this.mOutputItems = logStack;
+ //Update bus contents.
+ updateSlots();
+ //Remove drop that was added to the bus.
world.setBlockToAir(x, y, z);
return true;
} catch (NullPointerException e){}
return false;
}
+ public static boolean applyBonemeal(World world, int intX, int intY, int intZ){
+ Block block = world.getBlock(intX, intY, intZ);
+ EntityPlayer player = FakePlayerFactory.getMinecraft((WorldServer)world);
+ if (!world.isRemote){
+ if (enableTreeFarmerParticles){
+ world.playAuxSFX(2005, intX, intY, intZ, 0);
+ }
+ }
+ BonemealEvent event = new BonemealEvent(player, world, block, intX, intY, intZ);
+ if (MinecraftForge.EVENT_BUS.post(event)){
+ Utils.LOG_INFO("Not sure why this returned false");
+ return false;
+ }
+ if (event.getResult() == Result.ALLOW){
+ if (!world.isRemote){
+ world.playAuxSFX(2005, intX, intY, intZ, 0);
+ }
+ return true;
+ }
+ if (block instanceof IGrowable){
+ IGrowable igrowable = (IGrowable)block;
+ if (igrowable.func_149851_a(world, intX, intY, intZ, world.isRemote)){
+ if (!world.isRemote){
+ if (igrowable.func_149852_a(world, world.rand, intX, intY, intZ)){
+ igrowable.func_149853_b(world, world.rand, intX, intY, intZ);
+ }
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
public static ITexture[][][] getTextureSet() {
ITexture[][][] rTextures = new ITexture[10][17][];
for (byte i = -1; i < 16; i++) {