diff options
author | miozune <miozune@gmail.com> | 2023-05-26 14:41:09 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-26 07:41:09 +0200 |
commit | 67b48690b1078b489bcb017e8db9200f26b77a0c (patch) | |
tree | 83cd38af2a564a016680652327623748a73f2bf5 /src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java | |
parent | 69791bd5a4e5fc5ff6d79b0510c572612ce8bae8 (diff) | |
download | GT5-Unofficial-67b48690b1078b489bcb017e8db9200f26b77a0c.tar.gz GT5-Unofficial-67b48690b1078b489bcb017e8db9200f26b77a0c.tar.bz2 GT5-Unofficial-67b48690b1078b489bcb017e8db9200f26b77a0c.zip |
Deprecation cleanup (#637)
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java')
-rw-r--r-- | src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java | 1015 |
1 files changed, 0 insertions, 1015 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java index bb88429645..6ed8c7ed0a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java @@ -1,280 +1,12 @@ package gtPlusPlus.xmod.gregtech.common.helpers; -import static gregtech.api.enums.Mods.Forestry; -import static gtPlusPlus.core.lib.CORE.ConfigSwitches.enableTreeFarmerParticles; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Queue; -import java.util.Set; -import java.util.Stack; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockAir; -import net.minecraft.block.IGrowable; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraft.network.play.server.S23PacketBlockChange; -import net.minecraft.server.MinecraftServer; -import net.minecraft.world.ChunkPosition; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.BonemealEvent; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; -import com.google.common.collect.Lists; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.eventhandler.Event.Result; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import gnu.trove.set.hash.THashSet; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.players.FakeFarmer; import gtPlusPlus.core.slots.SlotBuzzSaw.SAWTOOL; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.particles.BlockBreakParticles; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechItems; public class TreeFarmHelper { - public static final FluidStack fertT1 = FluidUtils.getFluidStack("fluid.fertiliser", 3); - public static final FluidStack fertT2 = FluidUtils.getFluidStack("fluid.un18fertiliser", 2); - public static final FluidStack fertT3 = FluidUtils.getFluidStack("fluid.un32fertiliser", 1); - private static final int sawOreId = OreDictionary.getOreID(ToolDictNames.craftingToolSaw.name()); - - public static ITexture[][][] getTextureSet() { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = TreeFarmHelper.getFront(i); - rTextures[1][i + 1] = TreeFarmHelper.getBack(i); - rTextures[2][i + 1] = TreeFarmHelper.getBottom(i); - rTextures[3][i + 1] = TreeFarmHelper.getTop(i); - rTextures[4][i + 1] = TreeFarmHelper.getSides(i); - rTextures[5][i + 1] = TreeFarmHelper.getFrontActive(i); - rTextures[6][i + 1] = TreeFarmHelper.getBackActive(i); - rTextures[7][i + 1] = TreeFarmHelper.getBottomActive(i); - rTextures[8][i + 1] = TreeFarmHelper.getTopActive(i); - rTextures[9][i + 1] = TreeFarmHelper.getSidesActive(i); - } - return rTextures; - } - - public static ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][aColor + 1] }; - } - - public static ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][aColor + 1] }; - } - - public static ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][aColor + 1] }; - } - - public static ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][aColor + 1] }; - } - - public static ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][aColor + 1] }; - } - - public static ITexture[] getFrontActive(final byte aColor) { - return getFront(aColor); - } - - public static ITexture[] getBackActive(final byte aColor) { - return getBack(aColor); - } - - public static ITexture[] getBottomActive(final byte aColor) { - return getBottom(aColor); - } - - public static ITexture[] getTopActive(final byte aColor) { - return getTop(aColor); - } - - public static ITexture[] getSidesActive(final byte aColor) { - return getSides(aColor); - } - - public static boolean applyBonemeal(final EntityPlayer player, final World world, final int intX, final int intY, - final int intZ, final short multiplier) { - final Block block = world.getBlock(intX, intY, intZ); - - int roll; - int rollNeeded; - - if (multiplier == 1) { - roll = MathUtils.randInt(1, 15); - rollNeeded = 15; - } else if (multiplier == 2) { - roll = MathUtils.randInt(1, 10); - rollNeeded = 10; - } else { - roll = MathUtils.randInt(1, 5); - rollNeeded = 5; - } - - if (roll != rollNeeded) { - return false; - } - - // EntityPlayer player = FakePlayerFactory.getMinecraft((WorldServer)world); - if (!world.isRemote) { - if (enableTreeFarmerParticles) { - world.playAuxSFX(2005, intX, intY, intZ, 0); - } - } - final BonemealEvent event = new BonemealEvent(player, world, block, intX, intY, intZ); - if (MinecraftForge.EVENT_BUS.post(event)) { - Logger.MACHINE_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) { - final IGrowable igrowable = (IGrowable) block; - if (igrowable.func_149851_a(world, intX, intY, intZ, world.isRemote)) { - if (!world.isRemote) { - if (igrowable.func_149852_a(world, CORE.RANDOM, intX, intY, intZ)) { - igrowable.func_149853_b(world, CORE.RANDOM, intX, intY, intZ); - } - } - return true; - } - } - return false; - } - - public static boolean cleanUp(final IGregTechTileEntity aBaseMetaTileEntity) { - Logger.MACHINE_INFO("called cleanUp()"); - int cleanedUp = 0; - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * 11; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * 11; - - for (int h = 1; h < 175; h++) { - for (int i = -11; i <= 11; i++) { - for (int j = -11; j <= 11; j++) { - - final Block testBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); - - if ((((i == -8) || (i == 8)) || ((i == -9) || (i == 9)) - || ((i == -10) || (i == 10)) - || ((i == -11) || (i == 11))) - && (((j == -8) || (j == 8)) || ((j == -9) || (j == 9)) - || ((j == -10) || (j == 10)) - || ((j == -11) || (j == 11)))) { - - if (!testBlock.getUnlocalizedName().toLowerCase().contains("air") - || !testBlock.getUnlocalizedName().toLowerCase().contains("pumpkin")) { - // Logger.WARNING("5:"+testBlock.getUnlocalizedName()); - } else { - aBaseMetaTileEntity.getWorld().setBlock( - aBaseMetaTileEntity.getXCoord() + xDir + i, - aBaseMetaTileEntity.getYCoord() + h, - aBaseMetaTileEntity.getZCoord() + zDir + j, - Blocks.bookshelf); - } - } - - // If not in the middle - don't know how else to check this one without lots of != - if ((i != 7) && (i != -7) - && (j != 7) - && (j != -7) - && (i != 6) - && (i != -6) - && (j != 6) - && (j != -6) - && (i != 5) - && (i != -5) - && (j != 5) - && (j != -5) - && (i != 4) - && (i != -4) - && (j != 4) - && (j != -4) - && (i != 3) - && (i != -3) - && (j != 3) - && (j != -3) - && (i != 2) - && (i != -2) - && (j != 2) - && (j != -2) - && (i != 1) - && (i != -1) - && (j != 1) - && (j != -1) - && (i != 0) - && (j != 0)) { - - if (!testBlock.getUnlocalizedName().toLowerCase().contains("air") - || !testBlock.getUnlocalizedName().toLowerCase().contains("pumpkin")) { - // Logger.WARNING("0:"+testBlock.getUnlocalizedName()); - } else { - aBaseMetaTileEntity.getWorld().setBlock( - aBaseMetaTileEntity.getXCoord() + xDir + i, - aBaseMetaTileEntity.getYCoord() + h, - aBaseMetaTileEntity.getZCoord() + zDir + j, - Blocks.melon_block); - } - - if (isLeaves(testBlock) || isWoodLog(testBlock)) { - // Logger.WARNING("1:"+testBlock.getUnlocalizedName()); - int posiX, posiY, posiZ; - posiX = aBaseMetaTileEntity.getXCoord() + xDir + i; - posiY = aBaseMetaTileEntity.getYCoord() + h; - posiZ = aBaseMetaTileEntity.getZCoord() + zDir + j; - // Utils.LOG_MACHINE_INFO("Cleaning Up some leftovers."); - cleanedUp++; - aBaseMetaTileEntity.getWorld().setBlockToAir(posiX, posiY, posiZ); - new BlockBreakParticles(aBaseMetaTileEntity.getWorld(), posiX, posiY, posiZ, Blocks.dirt); - } else { - // Utils.LOG_WARNING("2:"+testBlock.getUnlocalizedName()); - } - } else { - // Utils.LOG_WARNING("1"); - } - } - } - } - Logger.MACHINE_INFO("cleaning up | " + cleanedUp); - return true; - } - public static boolean isValidForGUI(final ItemStack aStack) { return isCorrectMachinePart(aStack) != SAWTOOL.NONE; } @@ -297,751 +29,4 @@ public class TreeFarmHelper { return SAWTOOL.NONE; } - public static ToolType getPartType(final ItemStack aStack) { - if (aStack != null) { - // Utils.LOG_WARNING("Found "+aStack.getDisplayName()+" in the GUI slot."); - - if (aStack.getItem() == MetaGeneratedGregtechItems.INSTANCE) { - int aDmg = aStack.getItemDamage(); - if (aDmg >= 32120 && aDmg <= 32128) { - return ToolType.Unbreakable; - } - Logger.INFO("bad Tool in Slot 2 | " + aStack.getUnlocalizedName().toLowerCase() + " | " + aDmg); - return null; - } - - if (aStack.getItem() instanceof GT_MetaGenerated_Tool) { - if (Arrays.stream(OreDictionary.getOreIDs(aStack)).anyMatch(i -> i == sawOreId)) - return ToolType.Breakable; - } - } - Logger.INFO("bad Tool in Slot 4"); - return null; - } - - public static boolean isHumusLoaded = false; - public static boolean isForestryLogsLoaded = false; - public static boolean isForestryFenceLoaded = false; - public static boolean isForestrySaplingsLoaded = false; - public static boolean isForestryLeavesLoaded = false; - public static Block blockHumus; - - public static boolean isForestryValid() { - if (!Forestry.isModLoaded()) { - return false; - } - if (ReflectionUtils.doesClassExist("forestry.core.blocks.BlockSoil")) { - isHumusLoaded = true; - } - if (ReflectionUtils.doesClassExist("forestry.arboriculture.blocks.BlockLog")) { - isForestryLogsLoaded = true; - } - if (ReflectionUtils.doesClassExist("forestry.arboriculture.blocks.BlockArbFence")) { - isForestryFenceLoaded = true; - } - if (ReflectionUtils.doesClassExist("forestry.arboriculture.blocks.BlockSapling")) { - isForestrySaplingsLoaded = true; - } - if (ReflectionUtils.doesClassExist("forestry.arboriculture.blocks.BlockForestryLeaves")) { - isForestryLeavesLoaded = true; - } - return true; - } - - @Optional.Method(modid = Mods.Names.FORESTRY) - public static Block getHumus() { - if (blockHumus != null) { - return blockHumus; - } else if (isHumusLoaded) { - final Class<?> humusClass = ReflectionUtils.getClass("forestry.core.blocks.BlockSoil"); - final ItemStack humusStack = ItemUtils.getCorrectStacktype("Forestry:soil", 1); - if (humusClass != null) { - blockHumus = Block.getBlockFromItem(humusStack.getItem()); - return Block.getBlockFromItem(humusStack.getItem()); - } - } - return null; - } - - public static boolean isWoodLog(final Block log) { - final String tTool = log.getHarvestTool(0); - - if ((log == Blocks.log) || (log == Blocks.log2)) { - return true; - } - - // Forestry/General Compat - if (log.getClass().getName().toLowerCase().contains("blocklog")) { - return true; - } - - // IC2 Rubber Tree Compat - if (log.getClass().getName().toLowerCase().contains("rubwood") - || log.getClass().getName().toLowerCase().contains("rubleaves")) { - 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(final Block log) { - if (log.getUnlocalizedName().toLowerCase().contains("leaf")) { - return true; - } - if (log.getUnlocalizedName().toLowerCase().contains("leaves")) { - return true; - } - if (log.getLocalizedName().toLowerCase().contains("leaf")) { - return true; - } - if (log.getLocalizedName().toLowerCase().contains("leaves")) { - return true; - } - return OrePrefixes.leaves.contains(new ItemStack(log, 1)) || log.getMaterial() == Material.leaves - || OrePrefixes.treeLeaves.contains(new ItemStack(log, 1)) - || log.getMaterial() == Material.vine - || OrePrefixes.mushroom.contains(new ItemStack(log, 1)) - || log.getMaterial() == Material.cactus; - } - - public static boolean isSapling(final Block log) { - if (log != null) { - if (OrePrefixes.sapling.contains(new ItemStack(log, 1))) { - // Logger.WARNING(""+log.getLocalizedName()); - } - if (log.getLocalizedName().toLowerCase().contains("sapling")) { - // Logger.WARNING(""+log.getLocalizedName()); - return true; - } - } - return OrePrefixes.sapling.contains(new ItemStack(log, 1)); - } - - public static boolean isDirtBlock(final Block dirt) { - return (dirt == Blocks.dirt ? true - : (dirt == Blocks.grass ? true : (getHumus() == null ? false : (dirt == blockHumus ? true : false)))); - } - - public static boolean isFenceBlock(final Block fence) { - 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(final Block air) { - if (air.getLocalizedName().toLowerCase().contains("air")) { - return true; - } - if (air.getClass().getName().toLowerCase().contains("residual") - || air.getClass().getName().toLowerCase().contains("heat")) { - 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.)) } - */ - - public static BlockPos checkForLogsInGrowArea(final IGregTechTileEntity aBaseMetaTileEntity) { - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * 7; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * 7; - for (int i = -7; i <= 7; i++) { - for (int j = -7; j <= 7; j++) { - for (int h = 0; h <= 1; h++) { - // Farm Floor inner 14x14 - if (((i != -7) && (i != 7)) && ((j != -7) && (j != 7))) { - if (h == 1) { - if (TreeFarmHelper.isWoodLog(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))) { - Logger.INFO("Found a Log"); - return new BlockPos( - aBaseMetaTileEntity.getXCoord() + xDir + i, - aBaseMetaTileEntity.getYCoord() + h, - aBaseMetaTileEntity.getZCoord() + zDir + j, - aBaseMetaTileEntity.getWorld()); - } - } - } - } - } - } - return null; - } - - public static ItemStack[] findTreeFromBase(World world, BlockPos h) { - int HARD_LIMIT = 10000; - int mCount = 0; - Logger.INFO("Finding Rest of Tree."); - BlockPos mFirstSpot = h; - Set<BlockPos> mSearchedSpaces = new HashSet<BlockPos>(); - Set<BlockPos> mTreeSet = getConnectedBlocks(world, mFirstSpot, mSearchedSpaces); - Set<Set<BlockPos>> mTreeSet2 = new HashSet<Set<BlockPos>>(); - Set<BlockPos> mFinalTree = new HashSet<BlockPos>(); - Iterator<BlockPos> it = mTreeSet.iterator(); - - Logger.INFO("Running first iteration."); - while (it.hasNext()) { - BlockPos G = it.next(); - mSearchedSpaces.add(G); - mTreeSet2.add(getConnectedBlocks(world, G, mSearchedSpaces)); - mCount++; - Logger.INFO("First Search: " + G.getLocationString()); - if (mCount > HARD_LIMIT) { - break; - } - } - - mCount = 0; - Iterator<Set<BlockPos>> it2 = mTreeSet2.iterator(); - Iterator<BlockPos> it3; - Logger.INFO("Running second iteration."); - while (it2.hasNext()) { - Set<BlockPos> G = it2.next(); - it3 = G.iterator(); - while (it3.hasNext()) { - BlockPos G2 = it3.next(); - mSearchedSpaces.add(G2); - mFinalTree.add(G2); - mCount++; - Logger.INFO("Second Search: " + G2.getLocationString()); - if (mCount > HARD_LIMIT) { - break; - } - } - if (mCount > HARD_LIMIT) { - break; - } - } - - if (mFinalTree.size() > 0) { - Logger.INFO("Queuing " + mFinalTree.size() + " to Harvest Manager."); - TreeCutter harvestManager = new TreeCutter(world); - - Iterator<BlockPos> ith = mFinalTree.iterator(); - while (ith.hasNext()) { - BlockPos G = ith.next(); - harvestManager.queue(G); - mCount++; - Logger.INFO("Queued: " + G.getLocationString()); - if (mCount > HARD_LIMIT) { - break; - } - } - - if (harvestManager.isValid) { - ItemStack[] loot = harvestManager.getDrops(); - if (loot.length > 0) { - // Logger.INFO("Returning Drops from harvestManager Queue."); - return loot; - } - } - } - return new ItemStack[] {}; - } - - public static Set<BlockPos> getConnectedBlocks(World W, BlockPos P, Set<BlockPos> checkedSpaces) { - int HARD_LIMIT = 1000; - int mCount = 0; - Logger.INFO("Finding blocks connected to " + P.getLocationString() + "."); - Set<BlockPos> mCheckedSpaces = checkedSpaces; - Set<BlockPos> mStartSearch = searchSixFaces(W, P, mCheckedSpaces, false); - Set<BlockPos> mSecondSearch = new HashSet<BlockPos>(); - Set<BlockPos> mThirdSearch = new HashSet<BlockPos>(); - Iterator<BlockPos> it = mStartSearch.iterator(); - while (it.hasNext()) { - Logger.INFO("Running first iteration. [II]"); - BlockPos G = it.next(); - mCheckedSpaces.add(G); - Set<BlockPos> mBranchSearch = searchSixFaces(W, G, mCheckedSpaces, true); - Iterator<BlockPos> it2 = mBranchSearch.iterator(); - while (it2.hasNext()) { - Logger.INFO("Running second iteration. [II]"); - BlockPos G2 = it2.next(); - mCheckedSpaces.add(G2); - mSecondSearch.add(G2); - mCount++; - if (mCount > HARD_LIMIT) { - break; - } - } - if (mCount > HARD_LIMIT) { - break; - } - } - mCount = 0; - Iterator<BlockPos> itx = mSecondSearch.iterator(); - while (itx.hasNext()) { - BlockPos G = itx.next(); - mCheckedSpaces.add(G); - Set<BlockPos> mBranchSearch = searchSixFaces(W, G, mCheckedSpaces, true); - Iterator<BlockPos> it2 = mBranchSearch.iterator(); - while (it2.hasNext()) { - BlockPos G2 = it2.next(); - mCheckedSpaces.add(G2); - mThirdSearch.add(G2); - mCount++; - if (mCount > HARD_LIMIT) { - break; - } - } - if (mCount > HARD_LIMIT) { - break; - } - } - return mThirdSearch; - } - - public static Set<BlockPos> searchSixFaces(World W, BlockPos P, Set<BlockPos> checkedSpaces, boolean checkLeaves) { - Set<BlockPos> mConnected = new HashSet<BlockPos>(); - int x = P.xPos; - int y = P.yPos; - int z = P.zPos; - if (checkLeaves) { - if (isWoodLog(W.getBlock(x - 1, y, z)) || isLeaves(W.getBlock(x - 1, y, z))) { - BlockPos L = new BlockPos(x - 1, y, z, W); - if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - } - } - if (isWoodLog(W.getBlock(x + 1, y, z)) || isLeaves(W.getBlock(x + 1, y, z))) { - BlockPos L = new BlockPos(x + 1, y, z, W); - if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - } - } - if (isWoodLog(W.getBlock(x, y - 1, z)) || isLeaves(W.getBlock(x, y - 1, z))) { - BlockPos L = new BlockPos(x, y - 1, z, W); - if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - } - } - if (isWoodLog(W.getBlock(x, y + 1, z)) || isLeaves(W.getBlock(x, y + 1, z))) { - BlockPos L = new BlockPos(x, y + 1, z, W); - if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - } - } - if (isWoodLog(W.getBlock(x, y, z - 1)) || isLeaves(W.getBlock(x, y, z - 1))) { - BlockPos L = new BlockPos(x, y, z - 1, W); - if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - } - } - if (isWoodLog(W.getBlock(x, y, z + 1)) || isLeaves(W.getBlock(x, y, z + 1))) { - BlockPos L = new BlockPos(x, y, z + 1, W); - if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - } - } - } else { - if (isWoodLog(W.getBlock(x - 1, y, z))) { - BlockPos L = new BlockPos(x - 1, y, z, W); - // if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - // } - } - if (isWoodLog(W.getBlock(x + 1, y, z))) { - BlockPos L = new BlockPos(x + 1, y, z, W); - // if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - // } - } - if (isWoodLog(W.getBlock(x, y - 1, z))) { - BlockPos L = new BlockPos(x, y - 1, z, W); - // if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - // } - } - if (isWoodLog(W.getBlock(x, y + 1, z))) { - BlockPos L = new BlockPos(x, y + 1, z, W); - // if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - // } - } - if (isWoodLog(W.getBlock(x, y, z - 1))) { - BlockPos L = new BlockPos(x, y, z - 1, W); - // if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - // } - } - if (isWoodLog(W.getBlock(x, y, z + 1))) { - BlockPos L = new BlockPos(x, y, z + 1, W); - // if (!checkedSpaces.contains(L)) { - mConnected.add(L); - Logger.INFO("Found Connected. [III]"); - // } - } - } - return mConnected; - } - - public enum ToolType { - Unbreakable, - Breakable - } - - /** - * Tree Cutting - */ - public static class TreeCutter { - - private final World mWorld; - private Map<String, BlockPos> mQueue = new ConcurrentHashMap<String, BlockPos>(); - private AutoMap<ItemStack[]> mDrops = new AutoMap<ItemStack[]>(); - private boolean isValid = true; - - public TreeCutter(World world) { - this.mWorld = world; - } - - public boolean queue(BlockPos pos) { - if (isValid && pos != null) { - // Logger.INFO("Queued: "+pos.getLocationString()); - String hash = Utils.calculateChecksumMD5(pos); - if (hash != null && !mQueue.containsKey(hash)) { - mQueue.put(hash, pos); - return true; - } - } - return false; - } - - private boolean emptyQueue() { - if (isValid) { - Logger.INFO("Emptying Queue."); - if (this.mQueue.size() > 0) { - int totalRemoved = 0; - for (BlockPos h : mQueue.values()) { - final Block block = mWorld.getBlock(h.xPos, h.yPos, h.zPos); - if (block != null) { - final int dropMeta = mWorld.getBlockMetadata(h.xPos, h.yPos, h.zPos); - final ArrayList<ItemStack> blockDrops = block - .getDrops(mWorld, h.xPos, h.yPos, h.zPos, dropMeta, 0); - final ItemStack[] drops = ItemUtils.getBlockDrops(blockDrops); - mDrops.put(drops); - // Remove drop that was added to the bus. - mWorld.setBlockToAir(h.xPos, h.yPos, h.zPos); - // new BlockBreakParticles(mWorld, h.xPos, h.yPos, h.zPos, block); - totalRemoved++; - } - } - if (totalRemoved > 0 && mDrops.size() > 0) { - return true; - } - } - } - return false; - } - - public ItemStack[] getDrops() { - // If Queue is successfully cleared and drops are created, let us continue. - if (isValid && emptyQueue()) { - AutoMap<ItemStack> mCollective = new AutoMap<ItemStack>(); - // Iterate ALL of the arrays, add output to a collective. - for (ItemStack[] i : this.mDrops) { - // Array is not null. - if (i != null) { - // Iterate this array. - for (int d = 0; d < i.length; d++) { - // Put Output into collective if valid - if (i[d] != null && i[d].stackSize > 0) { - mCollective.put(i[d]); - } - } - } - } - // Build an ItemStack array. - ItemStack[] drops = new ItemStack[mCollective.size()]; - for (int m = 0; m < drops.length; m++) { - drops[m] = mCollective.get(m); - } - // Return drops array if it's valid. - if (drops.length > 0) { - isValid = false; - return drops; - } - } - // Invalid or no drops, return empty array. - isValid = false; - return new ItemStack[] {}; - } - } - - /** - * Farm AI - */ - private static EntityPlayerMP farmerAI; - - public EntityPlayerMP getFakePlayer(World world) { - return farmerAI = checkFakePlayer(world); - } - - public static EntityPlayerMP checkFakePlayer(World world) { - if (farmerAI == null) { - return new FakeFarmer(MinecraftServer.getServer().worldServerForDimension(world.provider.dimensionId)); - } - return farmerAI; - } - - public static boolean onBlockStartBreak(int x, int y, int z, World world) { - final Block wood = world.getBlock(x, y, z); - if (wood == null) { - return false; - } - if (wood.isWood(world, x, y, z) || wood.getMaterial() == Material.sponge) if (detectTree(world, x, y, z)) { - TreeChopTask chopper = new TreeChopTask(new ChunkPosition(x, y, z), checkFakePlayer(world), 128); - FMLCommonHandler.instance().bus().register(chopper); - // custom block breaking code, don't call vanilla code - return true; - } - // return onBlockStartBreak(stack, x, y, z, player); - return false; - } - - public static boolean detectTree(World world, int pX, int pY, int pZ) { - ChunkPosition pos = null; - Stack<ChunkPosition> candidates = new Stack<>(); - candidates.add(new ChunkPosition(pX, pY, pZ)); - - while (!candidates.isEmpty()) { - ChunkPosition candidate = candidates.pop(); - int curX = candidate.chunkPosX, curY = candidate.chunkPosY, curZ = candidate.chunkPosZ; - - Block block = world.getBlock(curX, curY, curZ); - if ((pos == null || candidate.chunkPosY > pos.chunkPosY) && block.isWood(world, curX, curY, curZ)) { - pos = new ChunkPosition(curX, candidate.chunkPosY + 1, curZ); - // go up - while (world.getBlock(curX, pos.chunkPosY, curZ).isWood(world, curX, pos.chunkPosY, curZ)) { - pos = new ChunkPosition(curX, pos.chunkPosY + 1, curZ); - } - // check if we still have a way diagonally up - candidates.add(new ChunkPosition(curX + 1, pos.chunkPosY + 1, curZ)); - candidates.add(new ChunkPosition(curX, pos.chunkPosY + 1, curZ + 1)); - candidates.add(new ChunkPosition(curX - 1, pos.chunkPosY + 1, curZ)); - candidates.add(new ChunkPosition(curX, pos.chunkPosY + 1, curZ - 1)); - } - } - - // not even one match, so there were no logs. - if (pos == null) { - return false; - } - - // check if there were enough leaves around the last position - // pos now contains the block above the topmost log - // we want at least 5 leaves in the surrounding 26 blocks - int d = 3; - int leaves = 0; - for (int offX = 0; offX < d; offX++) { - for (int offY = 0; offY < d; offY++) { - for (int offZ = 0; offZ < d; offZ++) { - int xPos = pos.chunkPosX - 1 + offX, yPos = pos.chunkPosY - 1 + offY, - zPos = pos.chunkPosZ - 1 + offZ; - Block leaf = world.getBlock(xPos, yPos, zPos); - if (leaf != null && leaf.isLeaves(world, xPos, yPos, zPos)) { - if (++leaves >= 5) { - return true; - } - } - } - } - } - - // not enough leaves. sorreh - return false; - } - - public static class TreeChopTask { - - public final World world; - public final EntityPlayer player; - public final int blocksPerTick; - - public Queue<ChunkPosition> blocks = Lists.newLinkedList(); - public Set<ChunkPosition> visited = new THashSet<>(); - - public TreeChopTask(ChunkPosition start, EntityPlayer player, int blocksPerTick) { - this.world = player.getEntityWorld(); - this.player = player; - this.blocksPerTick = blocksPerTick; - - this.blocks.add(start); - } - - private void queueCoordinate(int x, int y, int z) { - ChunkPosition pos = new ChunkPosition(x, y, z); - if (!visited.contains(pos)) { - blocks.add(pos); - } - } - - @SubscribeEvent - public void onWorldTick(TickEvent.WorldTickEvent event) { - if (event.side.isClient()) { - finish(); - return; - } - // only if same dimension - if (event.world.provider.dimensionId != world.provider.dimensionId) { - return; - } - - // setup - int left = blocksPerTick; - // NBTTagCompound tags = stack.getTagCompound().getCompoundTag("InfiTool"); - - // continue running - ChunkPosition pos; - while (left > 0) { - // completely done or can't do our job anymore?! - if (blocks.isEmpty() /* || tags.getBoolean("Broken") */) { - finish(); - return; - } - - pos = blocks.remove(); - if (!visited.add(pos)) { - continue; - } - int x = pos.chunkPosX, y = pos.chunkPosY, z = pos.chunkPosZ; - - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - // can we harvest the block and is effective? - if (!block.isWood(world, x, y, z) || !isWoodLog(block)) { - continue; - } - - // save its neighbors - queueCoordinate(x + 1, y, z); - queueCoordinate(x, y, z + 1); - queueCoordinate(x - 1, y, z); - queueCoordinate(x, y, z - 1); - - // also add the layer above.. stupid acacia trees - for (int offX = 0; offX < 3; offX++) { - for (int offZ = 0; offZ < 3; offZ++) { - queueCoordinate(x - 1 + offX, y + 1, z - 1 + offZ); - } - } - - // break it, wooo! - breakExtraBlock(player.worldObj, x, y, z, 0, player, x, y, z); - left--; - } - } - - private void finish() { - // goodbye cruel world - FMLCommonHandler.instance().bus().unregister(this); - } - } - - public static void breakExtraBlock(World world, int x, int y, int z, int sidehit, EntityPlayer playerEntity, - int refX, int refY, int refZ) { - // prevent calling that stuff for air blocks, could lead to unexpected behaviour since it fires events - if (world.isAirBlock(x, y, z)) return; - - // what? - if (!(playerEntity instanceof EntityPlayerMP)) return; - EntityPlayerMP player = (EntityPlayerMP) playerEntity; - - // check if the block can be broken, since extra block breaks shouldn't instantly break stuff like obsidian - // or precious ores you can't harvest while mining stone - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - // only effective materials - if (!isWoodLog(block)) return; - - Block refBlock = world.getBlock(refX, refY, refZ); - float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); - float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); - - // only harvestable blocks that aren't impossibly slow to harvest - if (!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f) return; - - // send the blockbreak event - BlockEvent.BreakEvent event = ForgeHooks - .onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z); - if (event.isCanceled()) return; - - if (player.capabilities.isCreativeMode) { - block.onBlockHarvested(world, x, y, z, meta, player); - if (block.removedByPlayer(world, player, x, y, z, false)) - block.onBlockDestroyedByPlayer(world, x, y, z, meta); - - // send update to client - if (!world.isRemote) { - player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); - } - return; - } - - // callback to the tool the player uses. Called on both sides. This damages the tool n stuff. - player.getCurrentEquippedItem().func_150999_a(world, block, x, y, z, player); - - // server sided handling - if (!world.isRemote) { - // serverside we reproduce ItemInWorldManager.tryHarvestBlock - - // ItemInWorldManager.removeBlock - block.onBlockHarvested(world, x, y, z, meta, player); - - if (block.removedByPlayer(world, player, x, y, z, true)) // boolean is if block can be harvested, checked - // above - { - block.onBlockDestroyedByPlayer(world, x, y, z, meta); - block.harvestBlock(world, player, x, y, z, meta); - block.dropXpOnBlockBreak(world, x, y, z, event.getExpToDrop()); - } - - // always send block update to client - player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); - } - // client sided handling - else { - // PlayerControllerMP pcmp = Minecraft.getMinecraft().playerController; - // clientside we do a "this clock has been clicked on long enough to be broken" call. This should not send - // any new packets - // the code above, executed on the server, sends a block-updates that give us the correct state of the block - // we destroy. - - // following code can be found in PlayerControllerMP.onPlayerDestroyBlock - world.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + (meta << 12)); - if (block.removedByPlayer(world, player, x, y, z, true)) { - block.onBlockDestroyedByPlayer(world, x, y, z, meta); - } - // callback to the tool - ItemStack itemstack = player.getCurrentEquippedItem(); - if (itemstack != null) { - itemstack.func_150999_a(world, block, x, y, z, player); - - if (itemstack.stackSize == 0) { - player.destroyCurrentEquippedItem(); - } - } - - // send an update to the server, so we get an update back - // if(PHConstruct.extraBlockUpdates) - // Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C07PacketPlayerDigging(2, x,y,z, - // Minecraft.getMinecraft().objectMouseOver.sideHit)); - } - } } |