aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2019-04-26 00:37:36 +1000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2019-04-26 00:37:36 +1000
commit866b2aee8b00f39c30728612dcdf3f10722e57f1 (patch)
treeca06770214724bf410ede0b12dfc7959c360310b /src
parente9f05b60123ad5f5a855c1896e4e5a120e55d8c9 (diff)
downloadGT5-Unofficial-866b2aee8b00f39c30728612dcdf3f10722e57f1.tar.gz
GT5-Unofficial-866b2aee8b00f39c30728612dcdf3f10722e57f1.tar.bz2
GT5-Unofficial-866b2aee8b00f39c30728612dcdf3f10722e57f1.zip
$ Fixed the Tree Farm.
Diffstat (limited to 'src')
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/FakeWorld.java39
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java61
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java35
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java114
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);