diff options
author | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2019-04-26 00:37:36 +1000 |
---|---|---|
committer | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2019-04-26 00:37:36 +1000 |
commit | 866b2aee8b00f39c30728612dcdf3f10722e57f1 (patch) | |
tree | ca06770214724bf410ede0b12dfc7959c360310b /src | |
parent | e9f05b60123ad5f5a855c1896e4e5a120e55d8c9 (diff) | |
download | GT5-Unofficial-866b2aee8b00f39c30728612dcdf3f10722e57f1.tar.gz GT5-Unofficial-866b2aee8b00f39c30728612dcdf3f10722e57f1.tar.bz2 GT5-Unofficial-866b2aee8b00f39c30728612dcdf3f10722e57f1.zip |
$ Fixed the Tree Farm.
Diffstat (limited to 'src')
4 files changed, 210 insertions, 39 deletions
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/FakeWorld.java b/src/Java/gtPlusPlus/api/objects/minecraft/FakeWorld.java index 21e7a7d331..800d8afaa4 100644 --- a/src/Java/gtPlusPlus/api/objects/minecraft/FakeWorld.java +++ b/src/Java/gtPlusPlus/api/objects/minecraft/FakeWorld.java @@ -18,6 +18,8 @@ import net.minecraftforge.common.util.ForgeDirection; public class FakeWorld implements IBlockAccess { + public static HashMap<String, FakeBlockPos> mStaticFakeWorldData; + public HashMap<String, FakeBlockPos> mFakeWorldData = new HashMap<String, FakeBlockPos>(); /** @@ -45,22 +47,36 @@ public class FakeWorld implements IBlockAccess { init(); } - private void init() { - Logger.INFO("Setting all Blocks in Fake World to Air."); - for (int y=0;y<=aWorldHeight;y++) { - for (int x=-aDistanceFromOrigin;x<=aDistanceFromOrigin;x++) { - for (int z=-aDistanceFromOrigin;z<=aDistanceFromOrigin;z++) { - FakeBlockPos aTempPos = new FakeBlockPos(x, y, z, Blocks.air, 0); - mFakeWorldData.put(aTempPos.getLocationString(), aTempPos); + public void init() { + + /*if (mStaticFakeWorldData == null) { + Logger.INFO("Setting all Blocks in Fake World to Air."); + mStaticFakeWorldData = new HashMap<String, FakeBlockPos>(); + for (int y=0;y<=aWorldHeight;y++) { + for (int x=-aDistanceFromOrigin;x<=aDistanceFromOrigin;x++) { + for (int z=-aDistanceFromOrigin;z<=aDistanceFromOrigin;z++) { + FakeBlockPos aTempPos = new FakeBlockPos(x, y, z, Blocks.air, 0); + mStaticFakeWorldData.put(aTempPos.getLocationString(), aTempPos); + } } } - } - Logger.INFO("Initialisation of FakeWorld is now complete."); + }*/ + //if (mStaticFakeWorldData != null) { + //Logger.INFO(" Instancing static air world."); + mFakeWorldData = new HashMap<String, FakeBlockPos>(); + //mFakeWorldData = (HashMap<String, FakeBlockPos>) mStaticFakeWorldData.clone(); + //} + + + //Logger.INFO("Initialisation of FakeWorld is now complete."); } public FakeBlockPos getBlockAtCoords(int x, int y, int z) { String S = ""+x+"@"+y+"@"+z; - FakeBlockPos aBlock = mFakeWorldData.get(S); + FakeBlockPos aBlock = mFakeWorldData.get(S); + if (aBlock == null) { + return new FakeBlockPos(x, y, z, Blocks.air, 0); + } return aBlock; } @@ -73,12 +89,13 @@ public class FakeWorld implements IBlockAccess { public AutoMap<ItemStack> getAllBlocksStoredInFakeWorld(){ AutoMap<ItemStack> aOutput = new AutoMap<ItemStack>(); for (FakeBlockPos aPos : mFakeWorldData.values()) { - if (aPos.getBlockAtPos() == Blocks.air) { + if (aPos == null || aPos.getBlockAtPos() == Blocks.air) { continue; } else { ItemStack aTempStack = ItemUtils.simpleMetaStack(aPos.getBlockAtPos(), aPos.getMetaAtPos(), 1); if (ItemUtils.checkForInvalidItems(aTempStack)) { + //Logger.INFO("Output: "+aTempStack.getDisplayName()); aOutput.put(aTempStack); } } diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java new file mode 100644 index 0000000000..393d3260b5 --- /dev/null +++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java @@ -0,0 +1,61 @@ +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"); + run(); + } + + 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/treefarm/TreeGenerator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java index a8603849b8..6093909167 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java @@ -20,11 +20,15 @@ import net.minecraftforge.common.util.ForgeDirection; public class TreeGenerator { - private final FakeTreeInFakeWorldGenerator mTreeData; + private static final FakeTreeInFakeWorldGenerator mTreeData; + + static { + Logger.INFO("Created Fake Tree Generator."); + mTreeData = new FakeTreeInFakeWorldGenerator(); + } + public TreeGenerator() { - Logger.INFO("Created Fake Tree Generator."); - mTreeData = new FakeTreeInFakeWorldGenerator(); if (!mTreeData.hasGenerated) { mTreeData.generate(null, CORE.RANDOM, 0, 0, 0); } @@ -34,12 +38,14 @@ public class TreeGenerator { AutoMap<ItemStack> aTemp = new AutoMap<ItemStack>(); AutoMap<ItemStack> aOutputMap = mTreeData.getOutputFromTree(); if (aOutputMap != null && aOutputMap.size() > 0) { + Logger.INFO("Valid tree data output"); return aOutputMap; } + Logger.INFO("Invalid tree data output"); return aTemp; } - public class FakeTreeInFakeWorldGenerator extends WorldGenAbstractTree + public static class FakeTreeInFakeWorldGenerator extends WorldGenAbstractTree { /** The minimum height of a generated tree. */ private final int minTreeHeight; @@ -78,12 +84,14 @@ public class TreeGenerator { public AutoMap<ItemStack> getOutputFromTree(){ if (!hasGenerated) { + Logger.INFO("Generating Tree sample data"); generate(null, CORE.RANDOM, 0, 0, 0); } AutoMap<ItemStack> aOutputMap = new AutoMap<ItemStack>(); int aRandomTreeID = MathUtils.randInt(0, this.mFakeWorld.size()-1); FakeWorld aWorld = this.mFakeWorld.get(aRandomTreeID); if (aWorld != null) { + Logger.INFO("Getting all block data from fake world"); aOutputMap = aWorld.getAllBlocksStoredInFakeWorld(); } return aOutputMap; @@ -130,6 +138,8 @@ public class TreeGenerator { } } + private FakeWorld aFakeWorld; + public FakeWorld getWorld() { FakeWorld aWorld = this.mFakeWorld.get(mCurrentGeneratorIteration); if (aWorld == null) { @@ -143,7 +153,8 @@ public class TreeGenerator { FakeWorld aWorld = getWorld(); //Set some static values - + + Logger.INFO("Stepping through generateTree [0]"); //Dummy Value int aWorldY = 10; @@ -152,6 +163,7 @@ public class TreeGenerator { if (aWorldY >= 1 && aWorldY + l + 1 <= 256) { + Logger.INFO("Stepping through generateTree [1]"); byte b0; int k1; Block block; @@ -193,16 +205,19 @@ public class TreeGenerator { if (!flag) { + Logger.INFO("Stepping through generateTree [2]"); return false; } else { + Logger.INFO("Stepping through generateTree [3]"); Block block2 = aWorld.getBlock(aWorldX, aWorldY - 1, aWorldZ); FakeBlockPos aBlockToGrowPlantOn = aWorld.getBlockAtCoords(aWorldX, aWorldY-1, aWorldZ); boolean isSoil = block2.canSustainPlant(aWorld, aWorldX, aWorldY - 1, aWorldZ, ForgeDirection.UP, (BlockSapling)Blocks.sapling); - if (isSoil && aWorldY < 256 - l - 1) + if (/*isSoil &&*/ aWorldY < 256 - l - 1) { + Logger.INFO("Stepping through generateTree [4]"); aBlockToGrowPlantOn.onPlantGrow(aWorld, aWorldX, aWorldY - 1, aWorldZ, aWorldX, aWorldY, aWorldZ); b0 = 3; byte b1 = 0; @@ -236,6 +251,7 @@ public class TreeGenerator { } } } + Logger.INFO("Stepping through generateTree [5]"); for (k1 = 0; k1 < l; ++k1) { @@ -269,9 +285,11 @@ public class TreeGenerator { } } } + Logger.INFO("Stepping through generateTree [6]"); if (this.vinesGrow) { + Logger.INFO("Stepping through generateTree [7]"); for (k1 = aWorldY - 3 + l; k1 <= aWorldY + l; ++k1) { i3 = k1 - (aWorldY + l); @@ -306,6 +324,7 @@ public class TreeGenerator { } } } + Logger.INFO("Stepping through generateTree [8]"); if (CORE.RANDOM.nextInt(5) == 0 && l > 5) { @@ -322,16 +341,19 @@ public class TreeGenerator { } } } + Logger.INFO("Stepping through generateTree [9]"); return true; } else { + Logger.INFO("Stepping through generateTree [10]"); return false; } } } else { + Logger.INFO("Stepping through generateTree [11]"); return false; } } @@ -354,6 +376,7 @@ public class TreeGenerator { protected void setBlockAndNotifyAdequately(FakeWorld aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) { if (aBlock != null && (aMeta >= 0 && aMeta <= Short.MAX_VALUE)) { + Logger.INFO("Setting block "+aX+", "+aY+", "+aZ+" | "+aBlock.getLocalizedName()+" | "+aMeta); aWorld.setBlockAtCoords(aX, aY, aZ, aBlock, aMeta); //aOutputsFromGenerator.put(ItemUtils.simpleMetaStack(aBlock, aMeta, 1)); } 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 23ab9afd61..2ee2acd726 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,5 +1,9 @@ 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 gregtech.api.GregTech_API; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; @@ -9,8 +13,10 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.minecraft.ThreadFakeWorldGenerator; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -20,6 +26,7 @@ import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import gtPlusPlus.xmod.gregtech.common.helpers.TreeFarmHelper; import gtPlusPlus.xmod.gregtech.common.helpers.treefarm.TreeGenerator; import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; @@ -42,6 +49,16 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase mHatchName = ItemUtils.getLocalizedNameOfBlock(GregTech_API.sBlockMachines, 967); } + + + /* + * Static thread for Fake World Handling + */ + + + private static ScheduledExecutorService executor; + private static ThreadFakeWorldGenerator aThread; + public GregtechMetaTileEntityTreeFarm(final String aName) { super(aName); mFuelStack = FluidUtils.getFluidStack("cryotheum", 1); @@ -50,9 +67,32 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase mCasingName = ItemUtils.getLocalizedNameOfBlock(ModBlocks.blockCasings2Misc, 15); mHatchName = ItemUtils.getLocalizedNameOfBlock(GregTech_API.sBlockMachines, 967); + /*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; + } + } + } + }*/ + if (mTreeData == null) { - mTreeData = new TreeGenerator(); + mTreeData = new TreeGenerator(); } + + + } @@ -117,7 +157,8 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase } public boolean isCorrectMachinePart(final ItemStack aStack) { - return TreeFarmHelper.isCorrectPart(aStack); + //return TreeFarmHelper.isCorrectPart(aStack); + return true; } public boolean isFacingValid(final byte aFacing) { @@ -125,42 +166,71 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase } public boolean checkRecipe(final ItemStack aStack) { - Logger.INFO("Trying to process virtual tree farming"); + //Logger.INFO("Trying to process virtual tree farming"); if (mTreeData != null) { - Logger.INFO("Tree Data is valid"); - this.getBaseMetaTileEntity().enableWorking(); + //Logger.INFO("Tree Data is valid"); + + long tVoltage = getMaxInputVoltage(); + byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage)); + this.mMaxProgresstime = 100; - this.mEUt = -500; + this.mEUt = 500; + + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); this.mEfficiencyIncrease = 10000; + + // Overclock + if (this.mEUt <= 16) { + this.mEUt = (this.mEUt * (1 << tTier - 1) * (1 << tTier - 1)); + this.mMaxProgresstime = (this.mMaxProgresstime / (1 << tTier - 1)); + } else { + while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)]) { + this.mEUt *= 4; + this.mMaxProgresstime /= 2; + } + } + + if (this.mEUt > 0) { + this.mEUt = (-this.mEUt); + } + + - int aChance = MathUtils.randInt(0, 10000); + int aChance = MathUtils.randInt(0, 10); AutoMap<ItemStack> aOutputs = new AutoMap<ItemStack>(); try { - Logger.INFO("Output Chance - "+aChance+" | Valid number? "+(aChance < 100)); - if (aChance < 100) { - //1% Chance per Tick - aOutputs = mTreeData.generateOutput(0); - if (aOutputs.size() > 0) { - Logger.INFO("Generated some Loot, adding it to the output busses"); - for (ItemStack aOutputItemStack : aOutputs) { - this.addOutput(aOutputItemStack); - } - Logger.INFO("Updating Slots"); - this.updateSlots(); - } + //Logger.INFO("Output Chance - "+aChance+" | Valid number? "+(aChance < 1000)); + if (aChance < 8) { + //1% Chance per Tick + for (int u=0; u<(Math.max(1, (MathUtils.randInt((3*tTier), 100)*tTier*tTier)/8));u++) { + aOutputs = mTreeData.generateOutput(0); + if (aOutputs.size() > 0) { + Logger.INFO("Generated some Loot, adding it to the output busses"); + + ItemStack aLeaves = ItemUtils.getSimpleStack(Blocks.leaves); + + for (ItemStack aOutputItemStack : aOutputs) { + if (!GT_Utility.areStacksEqual(aLeaves, aOutputItemStack)) { + this.addOutput(aOutputItemStack); + } + } + Logger.INFO("Updating Slots"); + this.updateSlots(); + } + } + } } catch (Throwable t) { t.printStackTrace(); } - Logger.INFO("Valid Recipe"); + //Logger.INFO("Valid Recipe"); return true; } else { - Logger.INFO("Invalid Recipe"); - this.getBaseMetaTileEntity().disableWorking(); + //Logger.INFO("Invalid Recipe"); return false; } //return this.checkRecipeGeneric(4, 100, 100); |