Merge pull request #1214 from GTNewHorizons/updateUO

Update UO
This commit is contained in:
Blood-Asp 2017-09-13 22:12:18 +02:00 committed by GitHub
commit 86e1ee61c8
5 changed files with 123 additions and 103 deletions

View file

@ -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

View file

@ -19,14 +19,23 @@ 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 undergroundOil(IGregTechTileEntity te, float drainSpeedCoefficient){
return undergroundOil(te.getWorld().getChunkFromBlockCoords(te.getXCoord(),te.getZCoord()),drainSpeedCoefficient);
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 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;
@ -42,11 +51,13 @@ 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...
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,24 +74,32 @@ 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();
}
//do stuff on it if needed
if(drainSpeedCoefficient>=0){
if(fluidInChunk.amount<DIVIDER){
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;
tInts[GTOIL]=0;//so in next access it will stop way above
}else{
fluidInChunk.amount = (int)(fluidInChunk.amount*(double)drainSpeedCoefficient/DIVIDER);//give appropriate amount
tInts[GTOIL]-=uoFluid.DecreasePerOperationAmount;//diminish amount
fluidInChunk.amount = fluidExtracted;//give appropriate amount
if(random.nextFloat()<(decrease-averageDecrease)) decrease--;//use random to "subtract double from int"
//ex.
// averageDecrease=3.9
// decrease= ceil from 3.9 = 4
// decrease-averageDecrease=0.1 -> 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<DIVIDER){
if(fluidInChunk.amount<=DIVIDER){
fluidInChunk.amount=0;//return informative stack
tInts[GTOIL]=0;//so in next access it will stop way above
}else{

View file

@ -144,7 +144,7 @@ public class GT_MetaTileEntity_AdvSeismicProspector extends GT_MetaTileEntity_Ba
{
ChunkPosition tPos = new ChunkPosition(GT_Utility.getScaleCoordinates(x*16,96), 0, GT_Utility.getScaleCoordinates(z*16,96));
ChunkCoordIntPair cInts = getBaseMetaTileEntity().getWorld().getChunkFromChunkCoords(tPos.chunkPosX,tPos.chunkPosZ).getChunkCoordIntPair();
FluidStack tFluid = GT_UndergroundOil.undergroundOil(getBaseMetaTileEntity().getWorld().getChunkFromChunkCoords(tPos.chunkPosX,tPos.chunkPosZ),-1);
FluidStack tFluid = GT_UndergroundOil.undergroundOilReadInformation(getBaseMetaTileEntity().getWorld().getChunkFromChunkCoords(tPos.chunkPosX,tPos.chunkPosZ));
if (tFluid != null)
if (tFluids.containsKey(cInts)) {
if (tFluids.get(cInts).amount<tFluid.amount)

View file

@ -103,7 +103,7 @@ public class GT_MetaTileEntity_SeismicProspector extends GT_MetaTileEntity_Basic
}
}
if(tStringList.size()<1){tStringList.add("No Ores found.");}
FluidStack tFluid = GT_UndergroundOil.undergroundOil(getBaseMetaTileEntity(),-1);
FluidStack tFluid = GT_UndergroundOil.undergroundOilReadInformation(getBaseMetaTileEntity());
String[] tStringArray = new String[tStringList.size()];
{
for (int i = 0; i < tStringArray.length; i++) {

View file

@ -1,11 +1,5 @@
package gregtech.common.tileentities.machines.multi;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.VN;
import static gregtech.common.GT_UndergroundOil.undergroundOil;
import java.util.ArrayList;
import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Utility;
@ -16,10 +10,17 @@ import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.VN;
import static gregtech.common.GT_UndergroundOil.undergroundOil;
import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation;
public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_DrillerBase {
private boolean completedCycle = false;
private ArrayList<Chunk> mOilFieldChunks = new ArrayList<Chunk>();
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;
}
}