diff options
author | Glease <4586901+Glease@users.noreply.github.com> | 2021-12-06 11:44:26 +0800 |
---|---|---|
committer | Glease <4586901+Glease@users.noreply.github.com> | 2021-12-06 11:44:26 +0800 |
commit | 6bc0843aa1b5936a5aac21cbd8c1cad57d549aa5 (patch) | |
tree | 959b4bd7036197d3c36357243066909a19b686ab | |
parent | f9d9756430ace11f3d9f519bd3e6fd26a21eadc2 (diff) | |
download | GT5-Unofficial-6bc0843aa1b5936a5aac21cbd8c1cad57d549aa5.tar.gz GT5-Unofficial-6bc0843aa1b5936a5aac21cbd8c1cad57d549aa5.tar.bz2 GT5-Unofficial-6bc0843aa1b5936a5aac21cbd8c1cad57d549aa5.zip |
Refactored tree farm
4 files changed, 80 insertions, 201 deletions
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java deleted file mode 100644 index b7462250b1..0000000000 --- a/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java +++ /dev/null @@ -1,61 +0,0 @@ -package gtPlusPlus.api.objects.minecraft; - -import gtPlusPlus.xmod.gregtech.common.helpers.treefarm.TreeGenerator; - -public class ThreadFakeWorldGenerator extends Thread { - - public boolean canRun = true; - public boolean isRunning = false; - - private static final long INIT_TIME; - private static long internalTickCounter = 0; - - public TreeGenerator mGenerator; - - private static final ThreadFakeWorldGenerator mThread; - - static { - mThread = new ThreadFakeWorldGenerator(); - INIT_TIME = (System.currentTimeMillis()); - } - - public ThreadFakeWorldGenerator() { - setName("gtpp.handler.fakeworldtrees"); - start(); - } - - public static ThreadFakeWorldGenerator getInstance() { - return mThread; - } - - public static void stopThread() { - mThread.canRun = false; - } - - - @Override - public void run() { - - if (!isRunning) { - isRunning = true; - } - else { - return; - } - - if (canRun){ - if (mGenerator == null) { - mGenerator = new TreeGenerator(); - } - } - - while (mGenerator == null) { - if (mGenerator != null) { - break; - } - } - stopThread(); - } - - -} diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java index c728c5d8e8..2ff2712952 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java @@ -15,6 +15,7 @@ import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; +import gregtech.api.enums.*; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; import net.minecraft.block.IGrowable; @@ -28,8 +29,6 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.ChunkPosition; import net.minecraft.world.World; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.items.GT_MetaGenerated_Tool; @@ -54,12 +53,14 @@ 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; 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][]; @@ -287,73 +288,26 @@ public class TreeFarmHelper { return SAWTOOL.NONE; } - public static boolean isCorrectPart(final ItemStack aStack) { + public static ToolType getPartType(final ItemStack aStack) { if (aStack != null){ //Utils.LOG_WARNING("Found "+aStack.getDisplayName()+" in the GUI slot."); - if (aStack.getItem() instanceof MetaGeneratedGregtechItems) { + if (aStack.getItem() == MetaGeneratedGregtechItems.INSTANCE) { int aDmg = aStack.getItemDamage(); if (aDmg >= 32120 && aDmg <= 32128) { - return true; - } - else if (aStack.getUnlocalizedName().toLowerCase().contains("mu-metaitem")) { - String[] aData = aStack.getUnlocalizedName().toLowerCase().split("//."); - if (aData != null && aData.length > 0) { - for (String s : aData) { - if (s.contains("32120")) { - return true; - } - else if (s.contains("32122")) { - return true; - } - else if (s.contains("32124")) { - return true; - } - else if (s.contains("32126")) { - return true; - } - else if (s.contains("32128")) { - return true; - } - else { - Logger.INFO("bad Tool in Slot 1"); - return false; - } - } - } + return ToolType.Unbreakable; } Logger.INFO("bad Tool in Slot 2 | "+aStack.getUnlocalizedName().toLowerCase() + " | "+aDmg); - return false; + return null; } - if ((aStack.getItem() instanceof GT_MetaGenerated_Item_02) || (aStack.getItem() instanceof GT_MetaGenerated_Tool)){ - if (OrePrefixes.craftingTool.contains(aStack)){ - if (aStack.getDisplayName().toLowerCase().contains("saw") || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01")){ - if (aStack.getItemDamage() == 10){ - return true; - } - else if (aStack.getItemDamage() == 140 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.140")){ - return true; - } - else if (aStack.getItemDamage() == 110 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.110")){ - return true; - } - else if (aStack.getItemDamage() == 112 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.112")){ - return true; - } - else if (aStack.getItemDamage() == 114 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.114")){ - return true; - } - else { - Logger.INFO("bad Tool in Slot 3"); - return false; - } - } - } + 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 false; + return null; } public static boolean isHumusLoaded = false; @@ -716,7 +670,10 @@ public class TreeFarmHelper { } - + public enum ToolType { + Unbreakable, + Breakable + } /** diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java index b94ebf2918..bb40c9b379 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java @@ -35,14 +35,13 @@ public class TreeGenerator { } public AutoMap<ItemStack> generateOutput(int aTreeSize){ - AutoMap<ItemStack> aTemp = new AutoMap<ItemStack>(); AutoMap<ItemStack> aOutputMap = mTreeData.getOutputFromTree(); if (aOutputMap != null && aOutputMap.size() > 0) { Logger.WARNING("Valid tree data output"); return aOutputMap; } Logger.WARNING("Invalid tree data output"); - return aTemp; + return new AutoMap<ItemStack>(); } public static class FakeTreeInFakeWorldGenerator extends WorldGenAbstractTree diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java index 8ab6aa5472..4fd39740a1 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java @@ -1,28 +1,20 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - +import codechicken.nei.ItemStackMap; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.StructureDefinition; import gregtech.api.enums.Materials; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.*; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.metatileentity.implementations.*; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.*; import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.minecraft.ThreadFakeWorldGenerator; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.math.MathUtils; @@ -46,51 +38,30 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase private IStructureDefinition<GregtechMetaTileEntityTreeFarm> STRUCTURE_DEFINITION = null; static { - mTreeData = new TreeGenerator(); + new Thread("GTPP-TreeDataWorker") { + @Override + public void run() { + mTreeData = new TreeGenerator(); + } + }.start(); } + private static ItemStack aLeaves; + public GregtechMetaTileEntityTreeFarm(final int aID, final String aName, final String aNameRegional) { super(aID, aName, aNameRegional); CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15); mCasingName = ItemUtils.getLocalizedNameOfBlock(ModBlocks.blockCasings2Misc, 15); } - /* - * Static thread for Fake World Handling - */ - - - private static ScheduledExecutorService executor; - private static ThreadFakeWorldGenerator aThread; - public GregtechMetaTileEntityTreeFarm(final String aName) { super(aName); CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15); mCasingName = ItemUtils.getLocalizedNameOfBlock(ModBlocks.blockCasings2Misc, 15); - - if (executor == null || mTreeData == null) { - if (executor == null) { - executor = Executors.newScheduledThreadPool(10); - } - if (executor != null) { - if (aThread == null) { - aThread = new ThreadFakeWorldGenerator(); - executor.scheduleAtFixedRate(aThread, 0, 1, TimeUnit.SECONDS); - while (aThread.mGenerator == null) { - if (aThread.mGenerator != null) { - break; - } - } - if (aThread.mGenerator != null) { - mTreeData = aThread.mGenerator; - } - } - } - } } public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return (IMetaTileEntity) new GregtechMetaTileEntityTreeFarm(this.mName); + return new GregtechMetaTileEntityTreeFarm(this.mName); } @Override @@ -126,7 +97,7 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase final byte aColorIndex, final boolean aActive, final boolean aRedstone) { if (aSide == aFacing) { return new ITexture[]{Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), - new GT_RenderedTexture((IIconContainer) (aActive ? TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active : TexturesGtBlock.Overlay_Machine_Controller_Advanced))}; + TextureFactory.of(aActive ? TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active : TexturesGtBlock.Overlay_Machine_Controller_Advanced)}; } return new ITexture[]{Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID)}; } @@ -151,16 +122,20 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase } public boolean isCorrectMachinePart(final ItemStack aStack) { - return TreeFarmHelper.isCorrectPart(aStack); - //return true; + // is correct part && either not powered tool or have enough power + return TreeFarmHelper.getPartType(aStack) != null && !GT_ModHandler.isElectricItem(aStack) || GT_ModHandler.canUseElectricItem(aStack, 1); } -// public boolean isFacingValid(final byte aFacing) { -// return aFacing > 1; -// } - public boolean checkRecipe(final ItemStack aStack) { - + if (mTreeData == null) + // not finished somehow + return false; + if (aStack == null && !replaceTool()) + // no tool + return false; + if (!isCorrectMachinePart(aStack)) + // not a tool + return false; if (mTreeData != null) { long tVoltage = getMaxInputVoltage(); @@ -189,35 +164,44 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase int aChance = MathUtils.randInt(0, 10); - AutoMap<ItemStack> aOutputs = new AutoMap<ItemStack>(); try { if (aChance < 8) { + ItemStackMap<Integer> allOutputs = new ItemStackMap<>(); + if (aLeaves == null) + aLeaves = ItemUtils.getSimpleStack(Blocks.leaves); //1% Chance per Tick for (int u = 0; u < (Math.max(4, (MathUtils.randInt((3 * tTier), 100) * tTier * tTier) / 14)); u++) { - aOutputs = mTreeData.generateOutput(0); + AutoMap<ItemStack> aOutputs = mTreeData.generateOutput(0); if (aOutputs.size() > 0) { - - ItemStack aLeaves = ItemUtils.getSimpleStack(Blocks.leaves); - for (ItemStack aOutputItemStack : aOutputs) { if (!GT_Utility.areStacksEqual(aLeaves, aOutputItemStack)) { - this.addOutput(aOutputItemStack); + Integer oldStackSize = allOutputs.get(aOutputItemStack); + int oldStackSizeUnboxed = oldStackSize == null ? 0 : oldStackSize; + allOutputs.put(aOutputItemStack, oldStackSizeUnboxed + aOutputItemStack.stackSize); } } - this.updateSlots(); } } + mOutputItems = allOutputs.entries().stream() + .map(e -> { + e.key.stackSize = e.value; + return e.key; + }).toArray(ItemStack[]::new); } } catch (Throwable t) { - t.printStackTrace(); + t.printStackTrace(GT_Log.err); } return true; } else { return false; } - //return this.checkRecipeGeneric(4, 100, 100); + } + + @Override + public boolean checkHatch() { + return super.checkHatch() && mEnergyHatches.size() == 1; } @Override @@ -294,7 +278,7 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase for (GT_MetaTileEntity_Hatch_InputBus mInputBus : this.mInputBusses) { for (int i = 0; i < mInputBus.mInventory.length; i++) { ItemStack uStack = mInputBus.mInventory[i]; - if (uStack != null && TreeFarmHelper.isCorrectPart(uStack)) { + if (uStack != null && TreeFarmHelper.getPartType(uStack) != null) { this.setGUIItemStack(uStack); return true; } @@ -316,29 +300,29 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase } @Override + public boolean doRandomMaintenanceDamage() { + ItemStack tSaw = mInventory[1]; + if (!isCorrectMachinePart(tSaw) || getRepairStatus() == 0) { + stopMachine(); + return false; + } + if (CORE.RANDOM.nextInt(200) == 0) { + if (!tryDamageTool(tSaw)) { + if (tSaw.getItem().isDamageable()) + addOutput(tSaw); + this.mInventory[1] = null; + if (!replaceTool()) + this.getBaseMetaTileEntity().disableWorking(); + tryDamageTool(tSaw); + } + } + return super.doRandomMaintenanceDamage(); + } + + @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); replaceTool(); - ItemStack invItem = this.mInventory[1]; - if (invItem != null && aTick % 200 == 0 && this.getBaseMetaTileEntity().isServerSide() && isCorrectMachinePart(invItem)) { - - if (!tryDamageTool(invItem)) { - if (!invItem.getItem().isDamageable()) { //item durability is <= 0 - this.mInventory[1] = null; - if (!replaceTool()) { - this.getBaseMetaTileEntity().disableWorking(); - } - tryDamageTool(invItem); - } else { - addOutput(invItem); - this.mInventory[1] = null; - if (!replaceTool()) { - this.getBaseMetaTileEntity().disableWorking(); - } - tryDamageTool(invItem); - } - } - } } @Override |