From 264236f98f199e50f5d1df00e27523f75c455050 Mon Sep 17 00:00:00 2001 From: Technus Date: Wed, 13 Sep 2017 19:49:05 +0200 Subject: [PATCH 1/4] Minor change, can catch potential errors when the extraction val per tick is insane --- src/main/java/gregtech/common/GT_UndergroundOil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/GT_UndergroundOil.java b/src/main/java/gregtech/common/GT_UndergroundOil.java index d9eda954..3e9ca2a3 100644 --- a/src/main/java/gregtech/common/GT_UndergroundOil.java +++ b/src/main/java/gregtech/common/GT_UndergroundOil.java @@ -72,7 +72,7 @@ public class GT_UndergroundOil { //do stuff on it if needed if(drainSpeedCoefficient>=0){ - if(fluidInChunk.amount Date: Wed, 13 Sep 2017 20:49:37 +0200 Subject: [PATCH 2/4] cherrypick --- .../java/gregtech/api/util/GT_Utility.java | 4 +- .../gregtech/common/GT_UndergroundOil.java | 25 ++- ...T_MetaTileEntity_AdvSeismicProspector.java | 2 +- .../GT_MetaTileEntity_SeismicProspector.java | 2 +- .../multi/GT_MetaTileEntity_OilDrillBase.java | 175 +++++++++--------- 5 files changed, 111 insertions(+), 97 deletions(-) diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index d31a2529..fb89cbba 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -69,7 +69,7 @@ import java.util.Map.Entry; import static gregtech.api.enums.GT_Values.*; import static gregtech.common.GT_Proxy.GTPOLLUTION; -import static gregtech.common.GT_UndergroundOil.undergroundOil; +import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation; /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! @@ -1802,7 +1802,7 @@ public class GT_Utility { } if (aPlayer.capabilities.isCreativeMode && GT_Values.D1) { - FluidStack tFluid = undergroundOil(aWorld.getChunkFromBlockCoords(aX,aZ),-1);//-# to only read + FluidStack tFluid = undergroundOilReadInformation(aWorld.getChunkFromBlockCoords(aX,aZ)); if (tFluid!=null) tList.add(EnumChatFormatting.GOLD+tFluid.getLocalizedName()+EnumChatFormatting.RESET+": " +EnumChatFormatting.YELLOW+ tFluid.amount +EnumChatFormatting.RESET+trans("200"," L")); else diff --git a/src/main/java/gregtech/common/GT_UndergroundOil.java b/src/main/java/gregtech/common/GT_UndergroundOil.java index 3e9ca2a3..05bb338d 100644 --- a/src/main/java/gregtech/common/GT_UndergroundOil.java +++ b/src/main/java/gregtech/common/GT_UndergroundOil.java @@ -19,6 +19,15 @@ import static gregtech.common.GT_Proxy.*; */ public class GT_UndergroundOil { public static final short DIVIDER=5000; + private static final XSTR random=new XSTR(); + + public static FluidStack undergroundOilReadInformation(IGregTechTileEntity te){ + return undergroundOil(te.getWorld().getChunkFromBlockCoords(te.getXCoord(),te.getZCoord()),-1); + } + + public static FluidStack undergroundOilReadInformation(Chunk chunk) { + return undergroundOil(chunk,-1); + } public static FluidStack undergroundOil(IGregTechTileEntity te, float drainSpeedCoefficient){ return undergroundOil(te.getWorld().getChunkFromBlockCoords(te.getXCoord(),te.getZCoord()),drainSpeedCoefficient); @@ -46,7 +55,9 @@ public class GT_UndergroundOil { } //GEN IT TO GET OBJECT... - XSTR tRandom = new XSTR( (aWorld.getSeed() + aWorld.provider.dimensionId * 2 + ((int)Math.floor((double)chunk.getChunkCoordIntPair().chunkXPos/(double)6)) + (7 * ((int)Math.floor((double)chunk.getChunkCoordIntPair().chunkZPos/6))))); + final XSTR tRandom = new XSTR(aWorld.getSeed() + aWorld.provider.dimensionId * 2 + + (chunk.getChunkCoordIntPair().chunkXPos>>3) + + 8267 * (chunk.getChunkCoordIntPair().chunkZPos>>3)); GT_UO_Fluid uoFluid = GT_Mod.gregtechproxy.mUndergroundOil.GetDimension(aWorld.provider.dimensionId).getRandomFluid(tRandom); //Fluid stack holder @@ -63,8 +74,7 @@ public class GT_UndergroundOil { fluidInChunk = new FluidStack(uoFluid.getFluid(),tInts[GTOIL]); }else{ fluidInChunk = new FluidStack(uoFluid.getFluid(), uoFluid.getRandomAmount(tRandom)); - tRandom=new XSTR(); - fluidInChunk.amount=(int)((float)fluidInChunk.amount*(0.75f+(tRandom.nextFloat()/2f)));//Randomly change amounts by +/- 25% + fluidInChunk.amount=(int)((float)fluidInChunk.amount*(0.75f+(random.nextFloat()/2f)));//Randomly change amounts by +/- 25% } tInts[GTOIL]=fluidInChunk.amount; tInts[GTOILFLUID]=fluidInChunk.getFluidID(); @@ -72,15 +82,18 @@ public class GT_UndergroundOil { //do stuff on it if needed if(drainSpeedCoefficient>=0){ - if(fluidInChunk.amount mOilFieldChunks = new ArrayList(); private int mOilId = 0; @@ -33,18 +34,18 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D @Override public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mOilId", mOilId); + super.saveNBTData(aNBT); + aNBT.setInteger("mOilId", mOilId); } - + @Override public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mOilId = aNBT.getInteger("mOilId"); + super.loadNBTData(aNBT); + mOilId = aNBT.getInteger("mOilId"); } - + protected String[] getDescriptionInternal(String tierSuffix) { - String casings = getCasingBlockItem().get(0).getDisplayName(); + String casings = getCasingBlockItem().get(0).getDisplayName(); return new String[]{ "Controller Block for the Oil Drilling Rig " + (tierSuffix != null ? tierSuffix : ""), "Size(WxHxD): 3x7x3", "Controller (Front middle at bottom)", @@ -59,23 +60,23 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D } - @Override - public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "DrillingRig.png"); - } + @Override + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "DrillingRig.png"); + } - protected int getRangeInChunks(){ - return 0; - } - - @Override - protected boolean checkHatches() { - return !mMaintenanceHatches.isEmpty() && !mOutputHatches.isEmpty() && !mEnergyHatches.isEmpty(); - } + protected int getRangeInChunks(){ + return 0; + } - @Override - protected void setElectricityStats() { - this.mEfficiency = getCurrentEfficiency(null); + @Override + protected boolean checkHatches() { + return !mMaintenanceHatches.isEmpty() && !mOutputHatches.isEmpty() && !mEnergyHatches.isEmpty(); + } + + @Override + protected void setElectricityStats() { + this.mEfficiency = getCurrentEfficiency(null); this.mEfficiencyIncrease = 10000; //T1 = 24; T2 = 96; T3 = 384 this.mEUt = 6 * (1 << (getMinTier() << 1)); @@ -91,62 +92,62 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D this.mEUt = -this.mEUt; this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime); - } - - @Override - protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, int yHead, int oldYHead){ - if (!tryLowerPipe()){ - if (waitForPipes()) return false; - if (tryFillChunkList()) { - float speed = .5F+(GT_Utility.getTier(getMaxInputVoltage()) - getMinTier()) *.25F; - FluidStack tFluid = pumpOil(speed); - if (tFluid != null && tFluid.amount > getTotalConfigValue()){ - this.mOutputFluids = new FluidStack[]{tFluid}; - return true; - } - } - isPickingPipes = true; - return true; - } - return true; - } + } - private boolean tryFillChunkList(){ - FluidStack tFluid, tOil; - if (mOilId <= 0) { - tFluid = undergroundOil(getBaseMetaTileEntity(), -1); - if (tFluid == null) return false; - mOilId = tFluid.getFluidID(); - } - tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); - - if (mOilFieldChunks.isEmpty()) { - Chunk tChunk = getBaseMetaTileEntity().getWorld().getChunkFromBlockCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()); - int range = getRangeInChunks(); - int xChunk = (tChunk.xPosition / range) * range, zChunk = (tChunk.zPosition / range) * range; - int xDir = tChunk.xPosition < 0 ? -1 : 1, zDir = tChunk.zPosition < 0 ? -1 : 1; - for (int i = 0; i < range; i++) { - for (int j = 0; j < range; j++) { - tChunk = getBaseMetaTileEntity().getWorld().getChunkFromChunkCoords(xChunk + i * xDir, zChunk + j * zDir); - tFluid = undergroundOil(tChunk, -1); - if (tOil.isFluidEqual(tFluid)) - mOilFieldChunks.add(tChunk); - } - } - } - if (mOilFieldChunks.isEmpty()) return false; - return true; - } - - private FluidStack pumpOil(float speed){ - if (mOilId <= 0) return null; - FluidStack tFluid, tOil; - tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); - for (Chunk tChunk : mOilFieldChunks) { - tFluid = undergroundOil(getBaseMetaTileEntity(),speed); - if (tFluid == null) mOilFieldChunks.remove(tChunk); - if (tOil.isFluidEqual(tFluid)) tOil.amount += tFluid.amount; - } - return tOil.amount == 0 ? null : tOil; - } -} + @Override + protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, int yHead, int oldYHead){ + if (!tryLowerPipe()){ + if (waitForPipes()) return false; + if (tryFillChunkList()) { + float speed = .5F+(GT_Utility.getTier(getMaxInputVoltage()) - getMinTier()) *.25F; + FluidStack tFluid = pumpOil(speed); + if (tFluid != null && tFluid.amount > getTotalConfigValue()){ + this.mOutputFluids = new FluidStack[]{tFluid}; + return true; + } + } + isPickingPipes = true; + return true; + } + return true; + } + + private boolean tryFillChunkList(){ + FluidStack tFluid, tOil; + if (mOilId <= 0) { + tFluid = undergroundOilReadInformation(getBaseMetaTileEntity()); + if (tFluid == null) return false; + mOilId = tFluid.getFluidID(); + } + tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); + + if (mOilFieldChunks.isEmpty()) { + Chunk tChunk = getBaseMetaTileEntity().getWorld().getChunkFromBlockCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()); + int range = getRangeInChunks(); + int xChunk = (tChunk.xPosition / range) * range, zChunk = (tChunk.zPosition / range) * range; + int xDir = tChunk.xPosition < 0 ? -1 : 1, zDir = tChunk.zPosition < 0 ? -1 : 1; + for (int i = 0; i < range; i++) { + for (int j = 0; j < range; j++) { + tChunk = getBaseMetaTileEntity().getWorld().getChunkFromChunkCoords(xChunk + i * xDir, zChunk + j * zDir); + tFluid = undergroundOilReadInformation(tChunk); + if (tOil.isFluidEqual(tFluid)) + mOilFieldChunks.add(tChunk); + } + } + } + if (mOilFieldChunks.isEmpty()) return false; + return true; + } + + private FluidStack pumpOil(float speed){ + if (mOilId <= 0) return null; + FluidStack tFluid, tOil; + tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); + for (Chunk tChunk : mOilFieldChunks) { + tFluid = undergroundOil(getBaseMetaTileEntity(),speed); + if (tFluid == null) mOilFieldChunks.remove(tChunk); + if (tOil.isFluidEqual(tFluid)) tOil.amount += tFluid.amount; + } + return tOil.amount == 0 ? null : tOil; + } +} \ No newline at end of file From d111a4f1306d2f2b2c9d7f14e8f44d9ea1e32e3b Mon Sep 17 00:00:00 2001 From: Technus Date: Wed, 13 Sep 2017 21:25:48 +0200 Subject: [PATCH 3/4] Optimize a bit --- .../gregtech/common/GT_UndergroundOil.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/GT_UndergroundOil.java b/src/main/java/gregtech/common/GT_UndergroundOil.java index 05bb338d..cb51098b 100644 --- a/src/main/java/gregtech/common/GT_UndergroundOil.java +++ b/src/main/java/gregtech/common/GT_UndergroundOil.java @@ -82,18 +82,24 @@ public class GT_UndergroundOil { //do stuff on it if needed if(drainSpeedCoefficient>=0){ - if(fluidInChunk.amount chance to subtract 1 + // if random is < chance then subtract 1 + tInts[GTOIL]-=decrease;//diminish amount, "randomly" adjusted to double value (averageDecrease) } }else{//just get info - if(fluidInChunk.amount Date: Wed, 13 Sep 2017 21:35:44 +0200 Subject: [PATCH 4/4] more descriptive argument name --- .../java/gregtech/common/GT_UndergroundOil.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/GT_UndergroundOil.java b/src/main/java/gregtech/common/GT_UndergroundOil.java index cb51098b..f090498a 100644 --- a/src/main/java/gregtech/common/GT_UndergroundOil.java +++ b/src/main/java/gregtech/common/GT_UndergroundOil.java @@ -29,13 +29,13 @@ public class GT_UndergroundOil { return undergroundOil(chunk,-1); } - public static FluidStack undergroundOil(IGregTechTileEntity te, float drainSpeedCoefficient){ - return undergroundOil(te.getWorld().getChunkFromBlockCoords(te.getXCoord(),te.getZCoord()),drainSpeedCoefficient); + public static FluidStack undergroundOil(IGregTechTileEntity te, float readOrDrainCoefficient){ + return undergroundOil(te.getWorld().getChunkFromBlockCoords(te.getXCoord(),te.getZCoord()),readOrDrainCoefficient); } //Returns whole content for information purposes -> when drainSpeedCoeff < 0 //Else returns extracted fluidStack if amount > 0, or null otherwise - public static FluidStack undergroundOil(Chunk chunk, float drainSpeedCoefficient) { + public static FluidStack undergroundOil(Chunk chunk, float readOrDrainCoefficient) { if (GT_Mod.gregtechproxy.mUndergroundOil.CheckBlackList(chunk.worldObj.provider.dimensionId)) return null; World aWorld = chunk.worldObj; @@ -51,7 +51,7 @@ public class GT_UndergroundOil { if(tInts==null) tInts=getDefaultChunkDataOnCreation();//init if null else if(tInts[GTOIL]==0){//FAST stop //can return 0 amount stack for info :D - return drainSpeedCoefficient>=0 ? null : new FluidStack(FluidRegistry.getFluid(tInts[GTOILFLUID]),0); + return readOrDrainCoefficient>=0 ? null : new FluidStack(FluidRegistry.getFluid(tInts[GTOILFLUID]),0); } //GEN IT TO GET OBJECT... @@ -81,9 +81,9 @@ public class GT_UndergroundOil { } //do stuff on it if needed - if(drainSpeedCoefficient>=0){ - int fluidExtracted=(int)Math.floor(fluidInChunk.amount * (double) drainSpeedCoefficient / DIVIDER); - double averageDecrease=uoFluid.DecreasePerOperationAmount * (double)drainSpeedCoefficient; + if(readOrDrainCoefficient>=0){ + int fluidExtracted=(int)Math.floor(fluidInChunk.amount * (double) readOrDrainCoefficient / DIVIDER); + double averageDecrease=uoFluid.DecreasePerOperationAmount * (double)readOrDrainCoefficient; int decrease=(int)Math.ceil(averageDecrease); if(fluidExtracted<=0 || fluidInChunk.amount<=decrease){//decrease - here it is max value of extraction for easy check fluidInChunk=null;