diff options
| author | Draknyte1 <Draknyte1@hotmail.com> | 2017-01-12 00:14:34 +1000 | 
|---|---|---|
| committer | Draknyte1 <Draknyte1@hotmail.com> | 2017-01-12 00:14:34 +1000 | 
| commit | 9649317bee1a0621cd4a7ea0e9295571832d629d (patch) | |
| tree | 2b6965deb9d8dda60378886155546e370b0d24da /src | |
| parent | 8d3d640b9e4f52a81f11255c89f201db80e7a9d4 (diff) | |
| download | GT5-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')
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++) { | 
