aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gtPlusPlus')
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/api/gui/hatches/CONTAINER_1by1_Turbine.java15
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java204
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java155
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java2
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java2
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java47
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java22
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java16
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java20
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java635
10 files changed, 764 insertions, 354 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/hatches/CONTAINER_1by1_Turbine.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/hatches/CONTAINER_1by1_Turbine.java
index e6203823b6..606880d6e9 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/hatches/CONTAINER_1by1_Turbine.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/hatches/CONTAINER_1by1_Turbine.java
@@ -3,6 +3,7 @@ package gtPlusPlus.xmod.gregtech.api.gui.hatches;
import gregtech.api.gui.GT_Container_1by1;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
+import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GregtechMetaTileEntity_LargerTurbineBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
@@ -36,12 +37,7 @@ public class CONTAINER_1by1_Turbine extends GT_Container_1by1 {
}
@Override
public boolean isItemValid(final ItemStack itemstack) {
- if (itemstack.getItem() instanceof GT_MetaGenerated_Tool) {
- if (itemstack.getItemDamage() >= 170 && itemstack.getItemDamage() <= 176) {
- return true;
- }
- }
- return false;
+ return GregtechMetaTileEntity_LargerTurbineBase.isValidTurbine(itemstack);
}
@Override
public int getSlotStackLimit() {
@@ -52,9 +48,10 @@ public class CONTAINER_1by1_Turbine extends GT_Container_1by1 {
return false;
}
@Override
- public void putStack(ItemStack p_75215_1_) {
- // TODO Auto-generated method stub
- super.putStack(p_75215_1_);
+ public void putStack(ItemStack aStack) {
+ if (isItemValid(aStack)) {
+ this.inventory.setInventorySlotContents(0, aStack);
+ }
}
}
}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java
index 3ece45cf78..a4040c1c5e 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java
@@ -1,16 +1,21 @@
package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.minecraft.BlockPos;
+import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
import gtPlusPlus.xmod.gregtech.api.gui.hatches.CONTAINER_1by1_Turbine;
import gtPlusPlus.xmod.gregtech.api.gui.hatches.GUI_1by1_Turbine;
@@ -28,6 +33,7 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
public boolean mHasController = false;
public boolean mUsingAnimation = true;
private String mControllerLocation;
+ public int mEUt = 0;
public GT_MetaTileEntity_Hatch_Turbine(int aID, String aName, String aNameRegional, int aTier) {
super(aID, aName, aNameRegional, aTier, 16, "Turbine Rotor holder for XL Turbines");
@@ -40,6 +46,18 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
public GT_MetaTileEntity_Hatch_Turbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
super(aName, aTier, 1, aDescription[0], aTextures);
}
+
+ @Override
+ public String[] getDescription() {
+ return new String[]{
+ this.mDescription,
+ "Right Click with a soldering iron to reset controller link",
+ "Right Click with a wrench to remove turbine",
+ "Right Click with a screwdriver for technical information",
+ "Sneak + Right Click with a wrench to rotate",
+ "Sneak + Right Click with a screwdriver to disable animations",
+ CORE.GT_Tooltip};
+ }
@Override
public ITexture[] getTexturesActive(ITexture aBaseTexture) {
@@ -51,6 +69,14 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
return new ITexture[]{aBaseTexture, getFrontFacingTurbineTexture()};
}
+ public int getEU() {
+ return this.mEUt;
+ }
+
+ public void setEU(int aEU) {
+ this.mEUt = aEU;
+ }
+
@Override
public boolean isSimpleMachine() {
return true;
@@ -70,15 +96,24 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
public boolean isValidSlot(int aIndex) {
return false;
}
-
+
public boolean hasTurbine() {
- return GregtechMetaTileEntity_LargerTurbineBase.isValidTurbine(this.mInventory[0]);
+ ItemStack aStack = this.mInventory[0];
+ boolean aIsValid = GregtechMetaTileEntity_LargerTurbineBase.isValidTurbine(aStack);
+ return aIsValid;
}
-
+
+ public ItemStack getTurbine() {
+ if (hasTurbine()) {
+ return this.mInventory[0];
+ }
+ return null;
+ }
+
public boolean canWork() {
return hasTurbine();
}
-
+
public boolean insertTurbine(ItemStack aTurbine) {
if (GregtechMetaTileEntity_LargerTurbineBase.isValidTurbine(aTurbine)) {
this.mInventory[0] = aTurbine;
@@ -94,33 +129,23 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (aBaseMetaTileEntity.isClientSide()) return true;
- //aBaseMetaTileEntity.openGUI(aPlayer);
- PlayerUtils.messagePlayer(aPlayer, "[Turbine Assembly Data] Using Animations? "+usingAnimations());
- PlayerUtils.messagePlayer(aPlayer, "[Turbine Assembly Data] Has Controller? "+this.mHasController);
- if (mHasController) {
- PlayerUtils.messagePlayer(aPlayer, "[Turbine Assembly Data] Controller Location: "+BlockPos.generateBlockPos(mControllerLocation).getLocationString());
- PlayerUtils.messagePlayer(aPlayer, "[Turbine Assembly Data] Controller Active? "+this.isControllerActive());
+ if (aBaseMetaTileEntity.isClientSide()) {
+ return true;
+ }
+ else {
+ aBaseMetaTileEntity.openGUI(aPlayer);
}
- PlayerUtils.messagePlayer(aPlayer, "[Turbine Assembly Data] Is Active? "+this.getBaseMetaTileEntity().isActive());
- PlayerUtils.messagePlayer(aPlayer, "[Turbine Assembly Data] Has Turbine inserted? "+this.hasTurbine());
return true;
}
@Override
public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- switch (mTier) {
- default:
- return new CONTAINER_1by1_Turbine(aPlayerInventory, aBaseMetaTileEntity);
- }
+ return new CONTAINER_1by1_Turbine(aPlayerInventory, aBaseMetaTileEntity);
}
@Override
public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- switch (mTier) {
- default:
- return new GUI_1by1_Turbine(aPlayerInventory, aBaseMetaTileEntity, "Turbine Rotor Hatch");
- }
+ return new GUI_1by1_Turbine(aPlayerInventory, aBaseMetaTileEntity, "Turbine Rotor Hatch");
}
@Override
@@ -137,6 +162,20 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
public int getInventoryStackLimit() {
return 1;
}
+
+ public void damageTurbine(int aEUt, int damageFactorLow, float damageFactorHigh) {
+ if (hasTurbine() && MathUtils.randInt(0, 1) == 0) {
+ ItemStack aTurbine = getTurbine();
+ ((GT_MetaGenerated_Tool) aTurbine.getItem()).doDamage(aTurbine, (long)getDamageToComponent(aTurbine) * (long) Math.min(aEUt / damageFactorLow, Math.pow(aEUt, damageFactorHigh)));
+ if (aTurbine.stackSize == 0) {
+ aTurbine = null;
+ }
+ }
+ }
+
+ private final int getDamageToComponent(ItemStack aStack) {
+ return 1;
+ }
@Override
public void saveNBTData(NBTTagCompound aNBT) {
@@ -153,22 +192,6 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
}
@Override
- public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- super.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ);
- this.mUsingAnimation = Utils.invertBoolean(mUsingAnimation);
- if (this.mUsingAnimation) {
- PlayerUtils.messagePlayer(aPlayer, "Using Animated Turbine Texture.");
- }
- else {
- PlayerUtils.messagePlayer(aPlayer, "Using Static Turbine Texture.");
- }
- PlayerUtils.messagePlayer(aPlayer, "Has Controller: "+this.mHasController);
- if (mHasController) {
- PlayerUtils.messagePlayer(aPlayer, "Controller Location: "+this.mControllerLocation);
- }
- }
-
- @Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
super.onPostTick(aBaseMetaTileEntity, aTick);
if (this.mHasController) {
@@ -195,8 +218,8 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
public boolean isControllerActive() {
GregtechMetaTileEntity_LargerTurbineBase x = getController();
if (x != null) {
- //Logger.INFO("Checking Status of Controller.");
- return x.isMachineRunning();
+ //Logger.INFO("Checking Status of Controller. Running? "+(x.mEUt > 0));
+ return x.mEUt > 0;
}
//Logger.INFO("Status of Controller failed, controller is null.");
return false;
@@ -286,41 +309,98 @@ public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch {
return false;
}
+ public void setActive(boolean b) {
+ this.getBaseMetaTileEntity().setActive(b);
+ }
+
+ @Override
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (!aPlayer.isSneaking()) {
+ PlayerUtils.messagePlayer(aPlayer, "Using Animations? "+usingAnimations());
+ PlayerUtils.messagePlayer(aPlayer, "Has Controller? "+this.mHasController);
+ if (mHasController) {
+ PlayerUtils.messagePlayer(aPlayer, "Controller Location: "+BlockPos.generateBlockPos(mControllerLocation).getLocationString());
+ PlayerUtils.messagePlayer(aPlayer, "Controller Active? "+this.isControllerActive());
+ }
+ PlayerUtils.messagePlayer(aPlayer, "Active? "+this.getBaseMetaTileEntity().isActive());
+ PlayerUtils.messagePlayer(aPlayer, "Has Turbine inserted? "+this.hasTurbine());
+ if (this.hasTurbine()) {
+ Materials aMat = GT_MetaGenerated_Tool.getPrimaryMaterial(getTurbine());
+ String aSize = GregtechMetaTileEntity_LargerTurbineBase.getTurbineSizeString(GregtechMetaTileEntity_LargerTurbineBase.getTurbineSize(getTurbine()));
+ PlayerUtils.messagePlayer(aPlayer, "Using: "+aMat.mLocalizedName+" "+aSize);
+ }
+ }
+ else {
+ this.mUsingAnimation = Utils.invertBoolean(mUsingAnimation);
+ if (this.mUsingAnimation) {
+ PlayerUtils.messagePlayer(aPlayer, "Using Animated Turbine Texture.");
+ }
+ else {
+ PlayerUtils.messagePlayer(aPlayer, "Using Static Turbine Texture.");
+ }
+ }
+ }
+
@Override
public boolean onWrenchRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- // TODO Auto-generated method stub
+ if (this.getBaseMetaTileEntity().isServerSide() && !aPlayer.isSneaking()) {
+ ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
+ if (tCurrentItem != null) {
+ if (tCurrentItem.getItem() instanceof GT_MetaGenerated_Tool) {
+ return onToolClick(tCurrentItem, aPlayer, aWrenchingSide);
+ }
+ }
+ }
return super.onWrenchRightClick(aSide, aWrenchingSide, aPlayer, aX, aY, aZ);
}
@Override
- public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, byte aSide, float aX,
- float aY, float aZ) {
- //Do Super
- boolean aSuper = super.onRightclick(aBaseMetaTileEntity, aPlayer, aSide, aX, aY, aZ);
- // Do Things
+ public boolean onSolderingToolRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (this.getBaseMetaTileEntity().isServerSide()) {
ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
- if (tCurrentItem != null) {
- if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) {
- if (mControllerLocation != null && mControllerLocation.length() > 0) {
- if (setController(BlockPos.generateBlockPos(mControllerLocation))) {
- if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
- String tChat = "Trying to Reset linked Controller";
- IGregTechTileEntity g = this.getBaseMetaTileEntity();
- GT_Utility.sendChatToPlayer(aPlayer, tChat);
- GT_Utility.sendSoundToPlayers(g.getWorld(), GregTech_API.sSoundList.get(101), 1.0F, -1,
- g.getXCoord(), g.getYCoord(), g.getZCoord());
- }
- }
+ if (tCurrentItem != null) {
+ if (tCurrentItem.getItem() instanceof GT_MetaGenerated_Tool) {
+ return onToolClick(tCurrentItem, aPlayer, aWrenchingSide);
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean onToolClick(ItemStack tCurrentItem, EntityPlayer aPlayer, byte aSide) {
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) {
+ boolean aHasTurbine = this.hasTurbine();
+ if (aPlayer.inventory.getFirstEmptyStack() >= 0 && aHasTurbine) {
+ if (PlayerUtils.isCreative(aPlayer) || GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ aPlayer.inventory.addItemStackToInventory((this.getTurbine()));
+ this.mInventory[0] = null;
+ GT_Utility.sendChatToPlayer(aPlayer, "Removed turbine with wrench.");
+ return true;
+ }
+ }
+ else {
+ GT_Utility.sendChatToPlayer(aPlayer, aHasTurbine ? "Cannot remove turbine, no free inventory space." : "No turbine to remove.");
+ }
+ }
+ else if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) {
+ if (mControllerLocation != null && mControllerLocation.length() > 0) {
+ if (setController(BlockPos.generateBlockPos(mControllerLocation))) {
+ if (PlayerUtils.isCreative(aPlayer) || GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ String tChat = "Trying to Reset linked Controller";
+ IGregTechTileEntity g = this.getBaseMetaTileEntity();
+ GT_Utility.sendChatToPlayer(aPlayer, tChat);
+ GT_Utility.sendSoundToPlayers(g.getWorld(), GregTech_API.sSoundList.get(101), 1.0F, -1, g.getXCoord(), g.getYCoord(), g.getZCoord());
+ return true;
}
}
}
}
- return aSuper;
+ return false;
}
- public void setActive(boolean b) {
- this.getBaseMetaTileEntity().setActive(b);
- }
-
}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java
index 825a55632d..42fdc246b4 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java
@@ -191,81 +191,100 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En
@Override
public final String[] getInfoData() {
ArrayList<String> mInfo = new ArrayList<String>();
- if (!this.getMetaName().equals("")) {
- mInfo.add(this.getMetaName());
- }
-
- String[] extra = getExtraInfoData();
-
- if (extra == null) {
- extra = new String[0];
- }
- if (extra.length > 0) {
- for (String s : extra) {
- mInfo.add(s);
+ try {
+ if (!this.getMetaName().equals("")) {
+ mInfo.add(this.getMetaName());
}
- }
-
- long seconds = (this.mTotalRunTime/20);
- int weeks = (int) (TimeUnit.SECONDS.toDays(seconds) / 7);
- int days = (int) (TimeUnit.SECONDS.toDays(seconds) - 7 * weeks);
- long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(days) - TimeUnit.DAYS.toHours(7*weeks);
- long minutes = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60);
- long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);
-
- int mPollutionReduction = getPollutionReductionForAllMufflers();
- long storedEnergy = getStoredEnergyInAllEnergyHatches();
- long maxEnergy = getMaxEnergyStorageOfAllEnergyHatches();
- int tTier = this.getControlCoreTier();
- mInfo.add(getMachineTooltip());
+ String[] extra = getExtraInfoData();
+ if (extra == null) {
+ extra = new String[0];
+ }
+ if (extra.length > 0) {
+ for (String s : extra) {
+ mInfo.add(s);
+ }
+ }
- //Lets borrow the GTNH handling
-
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.progress")+": "+
- EnumChatFormatting.GREEN + Integer.toString(mProgresstime/20) + EnumChatFormatting.RESET +" s / "+
- EnumChatFormatting.YELLOW + Integer.toString(mMaxProgresstime/20) + EnumChatFormatting.RESET +" s");
+ long seconds = (this.mTotalRunTime/20);
+ int weeks = (int) (TimeUnit.SECONDS.toDays(seconds) / 7);
+ int days = (int) (TimeUnit.SECONDS.toDays(seconds) - 7 * weeks);
+ long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(days) - TimeUnit.DAYS.toHours(7*weeks);
+ long minutes = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60);
+ long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy")+": "+
- EnumChatFormatting.GREEN + Long.toString(storedEnergy) + EnumChatFormatting.RESET +" EU / "+
- EnumChatFormatting.YELLOW + Long.toString(maxEnergy) + EnumChatFormatting.RESET +" EU");
+ mInfo.add(getMachineTooltip());
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.usage")+": "+
- EnumChatFormatting.RED + Integer.toString(-mEUt) + EnumChatFormatting.RESET + " EU/t");
+ //Lets borrow the GTNH handling
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.mei")+": "+
- EnumChatFormatting.YELLOW+Long.toString(getMaxInputVoltage())+EnumChatFormatting.RESET+ " EU/t(*2A) "+StatCollector.translateToLocal("GTPP.machines.tier")+": "+
- EnumChatFormatting.YELLOW+GT_Values.VN[GT_Utility.getTier(getMaxInputVoltage())]+ EnumChatFormatting.RESET);
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.progress")+": "+
+ EnumChatFormatting.GREEN + Integer.toString(mProgresstime/20) + EnumChatFormatting.RESET +" s / "+
+ EnumChatFormatting.YELLOW + Integer.toString(mMaxProgresstime/20) + EnumChatFormatting.RESET +" s");
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.problems")+": "+
- EnumChatFormatting.RED+ (getIdealStatus() - getRepairStatus())+EnumChatFormatting.RESET+
- " "+StatCollector.translateToLocal("GTPP.multiblock.efficiency")+": "+
- EnumChatFormatting.YELLOW+Float.toString(mEfficiency / 100.0F)+EnumChatFormatting.RESET + " %");
+ if (!this.mAllEnergyHatches.isEmpty()) {
+ long storedEnergy = getStoredEnergyInAllEnergyHatches();
+ long maxEnergy = getMaxEnergyStorageOfAllEnergyHatches();
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy")+": "+
+ EnumChatFormatting.GREEN + Long.toString(storedEnergy) + EnumChatFormatting.RESET +" EU / "+
+ EnumChatFormatting.YELLOW + Long.toString(maxEnergy) + EnumChatFormatting.RESET +" EU");
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.mei")+": "+
+ EnumChatFormatting.YELLOW+Long.toString(getMaxInputVoltage())+EnumChatFormatting.RESET+ " EU/t(*2A) "+StatCollector.translateToLocal("GTPP.machines.tier")+": "+
+ EnumChatFormatting.YELLOW+GT_Values.VN[GT_Utility.getTier(getMaxInputVoltage())]+ EnumChatFormatting.RESET);
+ }
+ if (!this.mAllDynamoHatches.isEmpty()) {
+ long storedEnergy = getStoredEnergyInAllDynamoHatches();
+ long maxEnergy = getMaxEnergyStorageOfAllDynamoHatches();
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy")+" In Dynamos: "+
+ EnumChatFormatting.GREEN + Long.toString(storedEnergy) + EnumChatFormatting.RESET +" EU / "+
+ EnumChatFormatting.YELLOW + Long.toString(maxEnergy) + EnumChatFormatting.RESET +" EU");
+ }
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.pollution")+": "+ EnumChatFormatting.RED + this.getPollutionPerTick(null)*20+ EnumChatFormatting.RESET+"/sec");
- mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced")+": "+ EnumChatFormatting.GREEN + mPollutionReduction+ EnumChatFormatting.RESET+" %");
+ if (-mEUt > 0) {
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.usage")+": "+
+ EnumChatFormatting.RED + Integer.toString(-mEUt) + EnumChatFormatting.RESET + " EU/t");
+ }
+ else {
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.generation")+": "+
+ EnumChatFormatting.GREEN + Integer.toString(mEUt) + EnumChatFormatting.RESET + " EU/t");
+ }
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.problems")+": "+
+ EnumChatFormatting.RED+ (getIdealStatus() - getRepairStatus())+EnumChatFormatting.RESET+
+ " "+StatCollector.translateToLocal("GTPP.multiblock.efficiency")+": "+
+ EnumChatFormatting.YELLOW+Float.toString(mEfficiency / 100.0F)+EnumChatFormatting.RESET + " %");
- mInfo.add(StatCollector.translateToLocal("GTPP.CC.machinetier")+": "+
- EnumChatFormatting.GREEN+tTier+EnumChatFormatting.RESET);
+ if (this.getPollutionPerSecond(null) > 0) {
+ int mPollutionReduction = getPollutionReductionForAllMufflers();
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.pollution")+": "+ EnumChatFormatting.RED + this.getPollutionPerSecond(null)+ EnumChatFormatting.RESET+"/sec");
+ mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced")+": "+ EnumChatFormatting.GREEN + mPollutionReduction+ EnumChatFormatting.RESET+" %");
+ }
- mInfo.add(StatCollector.translateToLocal("GTPP.CC.discount")+": "+
- EnumChatFormatting.GREEN+(getEuDiscountForParallelism())+EnumChatFormatting.RESET + "%");
+ if (this.mControlCoreBus.size() > 0) {
+ int tTier = this.getControlCoreTier();
+ mInfo.add(StatCollector.translateToLocal("GTPP.CC.machinetier")+": "+
+ EnumChatFormatting.GREEN+tTier+EnumChatFormatting.RESET);
+ }
- mInfo.add(StatCollector.translateToLocal("GTPP.CC.parallel")+": "+EnumChatFormatting.GREEN+(getMaxParallelRecipes())+EnumChatFormatting.RESET);
+ mInfo.add(StatCollector.translateToLocal("GTPP.CC.discount")+": "+
+ EnumChatFormatting.GREEN+(getEuDiscountForParallelism())+EnumChatFormatting.RESET + "%");
+ mInfo.add(StatCollector.translateToLocal("GTPP.CC.parallel")+": "+EnumChatFormatting.GREEN+(getMaxParallelRecipes())+EnumChatFormatting.RESET);
- mInfo.add("Total Time Since Built: " + EnumChatFormatting.DARK_GREEN + Integer.toString(weeks)+EnumChatFormatting.RESET+" Weeks, " + EnumChatFormatting.DARK_GREEN+ Integer.toString(days) +EnumChatFormatting.RESET+ " Days, ");
- mInfo.add(EnumChatFormatting.DARK_GREEN + Long.toString(hours) +EnumChatFormatting.RESET + " Hours, " + EnumChatFormatting.DARK_GREEN+ Long.toString(minutes) +EnumChatFormatting.RESET+ " Minutes, " + EnumChatFormatting.DARK_GREEN+ Long.toString(second) +EnumChatFormatting.RESET+ " Seconds.");
- mInfo.add("Total Time in ticks: " + EnumChatFormatting.DARK_GREEN + Long.toString(this.mTotalRunTime));
+ mInfo.add("Total Time Since Built: " + EnumChatFormatting.DARK_GREEN + Integer.toString(weeks)+EnumChatFormatting.RESET+" Weeks, " + EnumChatFormatting.DARK_GREEN+ Integer.toString(days) +EnumChatFormatting.RESET+ " Days, ");
+ mInfo.add(EnumChatFormatting.DARK_GREEN + Long.toString(hours) +EnumChatFormatting.RESET + " Hours, " + EnumChatFormatting.DARK_GREEN+ Long.toString(minutes) +EnumChatFormatting.RESET+ " Minutes, " + EnumChatFormatting.DARK_GREEN+ Long.toString(second) +EnumChatFormatting.RESET+ " Seconds.");
+ mInfo.add("Total Time in ticks: " + EnumChatFormatting.DARK_GREEN + Long.toString(this.mTotalRunTime));
- String[] mInfo2 = new String[mInfo.size()];
- mInfo.toArray(mInfo2);
- return mInfo2;
+ String[] mInfo2 = mInfo.toArray(new String[mInfo.size()]);
+ return mInfo2;
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
+ return new String[] {};
}
@@ -282,7 +301,7 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En
public long getStoredEnergyInAllEnergyHatches() {
long storedEnergy=0;
- for(GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) {
+ for(GT_MetaTileEntity_Hatch tHatch : mAllEnergyHatches) {
if (isValidMetaTileEntity(tHatch)) {
storedEnergy+=tHatch.getBaseMetaTileEntity().getStoredEU();
}
@@ -292,7 +311,27 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En
public long getMaxEnergyStorageOfAllEnergyHatches() {
long maxEnergy=0;
- for(GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) {
+ for(GT_MetaTileEntity_Hatch tHatch : mAllEnergyHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ maxEnergy+=tHatch.getBaseMetaTileEntity().getEUCapacity();
+ }
+ }
+ return maxEnergy;
+ }
+
+ public long getStoredEnergyInAllDynamoHatches() {
+ long storedEnergy=0;
+ for(GT_MetaTileEntity_Hatch tHatch : mAllDynamoHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ storedEnergy+=tHatch.getBaseMetaTileEntity().getStoredEU();
+ }
+ }
+ return storedEnergy;
+ }
+
+ public long getMaxEnergyStorageOfAllDynamoHatches() {
+ long maxEnergy=0;
+ for(GT_MetaTileEntity_Hatch tHatch : mAllDynamoHatches) {
if (isValidMetaTileEntity(tHatch)) {
maxEnergy+=tHatch.getBaseMetaTileEntity().getEUCapacity();
}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java
index ec93c4379d..7169861340 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java
@@ -351,7 +351,7 @@ public class LargeTurbineTextureHandler {
if (aTile != null) {
final IMetaTileEntity aMetaTileEntity = aTile.getMetaTileEntity();
if (aMetaTileEntity != null && aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine) {
- aVal = ((GT_MetaTileEntity_Hatch_Turbine) aMetaTileEntity).isControllerActive();
+ aVal = ((GT_MetaTileEntity_Hatch_Turbine) aMetaTileEntity).getBaseMetaTileEntity().isActive();
//Logger.INFO("Returning "+aVal+" as Rotor Assembly controller status");
}
}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java
index c5450fec5b..965b8bd70c 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java
@@ -63,7 +63,7 @@ extends GregtechMeta_MultiBlockBase {
.addCasingInfo("Sieve Grate", 18)
.addCasingInfo("Sieve Casings", 35)
.addInputBus("Any Casing", 1)
- .addOutputBus("Any Casing", 1)
+ .addOutputBus("Any Casing (x4)", 1)
.addEnergyHatch("Any Casing", 1)
.addMaintenanceHatch("Any Casing", 1)
.addMufflerHatch("Any Casing", 1)
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java
index 53b3f491cc..6221dba89d 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java
@@ -11,7 +11,6 @@ import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
@@ -43,15 +42,25 @@ public class GT_MTE_LargeTurbine_Gas extends GregtechMetaTileEntity_LargerTurbin
return 58;
}
+
+ @Override
+ protected boolean requiresOutputHatch() {
+ return false;
+ }
+
@Override
- public int getPollutionPerTick(ItemStack aStack) {
- return 15;
+ public int getPollutionPerSecond(ItemStack aStack) {
+ return 5000;
}
public int getFuelValue(FluidStack aLiquid) {
- if (aLiquid == null) return 0;
+ if (aLiquid == null) {
+ return 0;
+ }
GT_Recipe tFuel = GT_Recipe_Map.sTurbineFuels.findFuel(aLiquid);
- if (tFuel != null) return tFuel.mSpecialValue;
+ if (tFuel != null) {
+ return tFuel.mSpecialValue;
+ }
return 0;
}
@@ -63,7 +72,7 @@ public class GT_MTE_LargeTurbine_Gas extends GregtechMetaTileEntity_LargerTurbin
FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. Doesn't matter which one. Ignore the rest!
int fuelValue = getFuelValue(firstFuelType);
-
+ //log("Fuel Value of "+aFluids.get(0).getLocalizedName()+" is "+fuelValue+"eu");
if (aOptFlow < fuelValue) {
// turbine too weak and/or fuel too powerful
// at least consume 1L
@@ -94,6 +103,11 @@ public class GT_MTE_LargeTurbine_Gas extends GregtechMetaTileEntity_LargerTurbin
if (totalFlow <= 0) return 0;
tEU = GT_Utility.safeInt((long) totalFlow * fuelValue);
+ //log("Total Flow: "+totalFlow);
+ //log("Real Optimal Flow: "+actualOptimalFlow);
+ //log("Flow: "+flow);
+ //log("Remaining Flow: "+remainingFlow);
+
if (totalFlow == actualOptimalFlow) {
tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L);
} else {
@@ -110,26 +124,17 @@ public class GT_MTE_LargeTurbine_Gas extends GregtechMetaTileEntity_LargerTurbin
@Override
public int getDamageToComponent(ItemStack aStack) {
- return (looseFit && RANDOM.nextInt(4)==0)?0:1;
- }
-
-
- @Override
- public String[] getExtraInfoData() {
- super.looseFit = looseFit;
- return super.getInfoData();
+ return (RANDOM.nextInt(4) == 0) ? 0 : 1;
}
@Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
- aNBT.setBoolean("turbineFitting",looseFit);
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
- looseFit=aNBT.getBoolean("turbineFitting");
}
@Override
@@ -139,27 +144,27 @@ public class GT_MTE_LargeTurbine_Gas extends GregtechMetaTileEntity_LargerTurbin
@Override
public String getMachineType() {
- return "Large Steam Turbine";
+ return "Large Gas Turbine";
}
@Override
protected String getTurbineType() {
- return "Steam";
+ return "Gas";
}
@Override
protected String getCasingName() {
- return "Reinforced Steam Turbine Casing";
+ return "Reinforced Gas Turbine Casing";
}
@Override
protected ITexture getTextureFrontFace() {
- return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST5);
+ return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_SS5);
}
@Override
protected ITexture getTextureFrontFaceActive() {
- return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST_ACTIVE5);
+ return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_SS_ACTIVE5);
}
}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java
index f815811ece..fbb9f4b92c 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java
@@ -40,8 +40,13 @@ public class GT_MTE_LargeTurbine_Plasma extends GregtechMetaTileEntity_LargerTur
return 60;
}
+ @Override
+ protected boolean requiresOutputHatch() {
+ return true;
+ }
+
@Override
- public int getPollutionPerTick(ItemStack aStack) {
+ public int getPollutionPerSecond(ItemStack aStack) {
return 0;
}
@@ -115,11 +120,6 @@ public class GT_MTE_LargeTurbine_Plasma extends GregtechMetaTileEntity_LargerTur
public int getDamageToComponent(ItemStack aStack) {
return 1;
}
-
- @Override
- public String[] getExtraInfoData() {
- return super.getInfoData();
- }
@Override
public String getCustomGUIResourceName() {
@@ -128,28 +128,28 @@ public class GT_MTE_LargeTurbine_Plasma extends GregtechMetaTileEntity_LargerTur
@Override
public String getMachineType() {
- return "Large Steam Turbine";
+ return "Large Plasma Turbine";
}
@Override
protected String getTurbineType() {
- return "Steam";
+ return "Plasma";
}
@Override
protected String getCasingName() {
- return "Reinforced Steam Turbine Casing";
+ return "Reinforced Plasma Turbine Casing";
}
@Override
protected ITexture getTextureFrontFace() {
- return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST5);
+ return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_TU5);
}
@Override
protected ITexture getTextureFrontFaceActive() {
- return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST_ACTIVE5);
+ return new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_TU_ACTIVE5);
}
}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java
index d657c627d6..d1e3e35938 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java
@@ -11,7 +11,6 @@ import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.math.MathUtils;
-import gtPlusPlus.xmod.gregtech.common.blocks.textures.turbine.LargeTurbineTextureHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -46,8 +45,13 @@ public class GT_MTE_LargeTurbine_SHSteam extends GregtechMetaTileEntity_LargerTu
return 59;
}
+ @Override
+ protected boolean requiresOutputHatch() {
+ return true;
+ }
+
@Override
- public int getPollutionPerTick(ItemStack aStack) {
+ public int getPollutionPerSecond(ItemStack aStack) {
return 0;
}
@@ -125,11 +129,9 @@ public class GT_MTE_LargeTurbine_SHSteam extends GregtechMetaTileEntity_LargerTu
return (looseFit && CORE.RANDOM.nextInt(4)==0)?0:1;
}
- @Override
- public String[] getExtraInfoData() {
- super.looseFit = looseFit;
- return super.getInfoData();
- }
+ public boolean isLooseMode() {
+ return looseFit;
+ }
@Override
public void saveNBTData(NBTTagCompound aNBT) {
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java
index 9929a583a8..f285d3e8de 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java
@@ -10,9 +10,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -50,8 +48,13 @@ public class GT_MTE_LargeTurbine_Steam extends GregtechMetaTileEntity_LargerTurb
return 16;
}
+ @Override
+ protected boolean requiresOutputHatch() {
+ return true;
+ }
+
@Override
- public int getPollutionPerTick(ItemStack aStack) {
+ public int getPollutionPerSecond(ItemStack aStack) {
return 0;
}
@@ -132,13 +135,10 @@ public class GT_MTE_LargeTurbine_Steam extends GregtechMetaTileEntity_LargerTurb
public int getDamageToComponent(ItemStack aStack) {
return (looseFit && RANDOM.nextInt(4)==0)?0:1;
}
-
-
- @Override
- public String[] getExtraInfoData() {
- super.looseFit = looseFit;
- return super.getInfoData();
- }
+
+ public boolean isLooseMode() {
+ return looseFit;
+ }
@Override
public void saveNBTData(NBTTagCompound aNBT) {
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java
index 02d7268c0c..f34b744384 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java
@@ -2,14 +2,16 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.t
import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
-import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
import java.util.ArrayList;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+import gregtech.api.enums.Materials;
import gregtech.api.enums.Textures;
import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
@@ -24,9 +26,11 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maint
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.api.objects.minecraft.BlockPos;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.lib.CORE;
@@ -51,14 +55,15 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
protected double realOptFlow = 0;
protected int storedFluid = 0;
protected int counter = 0;
- protected boolean looseFit=false;
-
+ protected int mCasing;
+
public ITexture frontFace;
public ITexture frontFaceActive;
public ArrayList<GT_MetaTileEntity_Hatch_Turbine> mTurbineRotorHatches = new ArrayList<GT_MetaTileEntity_Hatch_Turbine>();
+
public GregtechMetaTileEntity_LargerTurbineBase(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
frontFace = getTextureFrontFace();
@@ -70,37 +75,43 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
frontFace = getTextureFrontFace();
frontFaceActive = getTextureFrontFaceActive();
}
-
+
protected abstract ITexture getTextureFrontFace();
-
+
protected abstract ITexture getTextureFrontFaceActive();
-
+
protected abstract String getTurbineType();
-
+
protected abstract String getCasingName();
+ protected abstract boolean requiresOutputHatch();
+
@Override
protected final GT_Multiblock_Tooltip_Builder createTooltip() {
GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
tt.addMachineType(getMachineType())
- .addInfo("Controller Block for the XL "+getTurbineType()+" Turbine")
- .addPollutionAmount(getPollutionPerSecond(null))
- .addSeparator()
- .beginStructureBlock(3, 3, 9, false)
- .addController("Top Middle")
- .addCasingInfo(getCasingName(), 64)
- .addOtherStructurePart("Rotor Assembly", "Any 1 dot hint", 1)
- .addInputBus("Any 4 dot hint", 4)
- .addInputHatch("Any 4 dot hint", 4)
- .addOutputHatch("Any 4 dot hint", 4)
- .addDynamoHatch("Any 4 dot hint", 4)
- .addMaintenanceHatch("Any 4 dot hint", 4)
- .addMufflerHatch("Any 7 dot hint x4", 7)
- .toolTipFinisher(CORE.GT_Tooltip_Builder);
+ .addInfo("Controller Block for the XL "+getTurbineType()+" Turbine")
+ .addPollutionAmount(getPollutionPerSecond(null))
+ .addSeparator()
+ .beginStructureBlock(3, 9, 3, false)
+ .addController("Top Middle")
+ .addCasingInfo(getCasingName(), 360)
+ .addOtherStructurePart("Rotor Assembly", "Any 1 dot hint", 1)
+ .addInputBus("Any 4 dot hint (min 1)", 4)
+ .addInputHatch("Any 4 dot hint(min 1)", 4);
+ if (requiresOutputHatch()) {
+ tt.addOutputHatch("Any 4 dot hint(min 1)", 4);
+ }
+ tt.addDynamoHatch("Any 4 dot hint(min 1)", 4)
+ .addMaintenanceHatch("Any 4 dot hint(min 1)", 4);
+ if (requiresMufflers()) {
+ tt.addMufflerHatch("Any 7 dot hint (x4)", 7);
+ }
+ tt.toolTipFinisher(CORE.GT_Tooltip_Builder);
return tt;
}
-
+
private static final String STRUCTURE_PIECE_MAIN = "main";
private static final ClassValue<IStructureDefinition<GregtechMetaTileEntity_LargerTurbineBase>> STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<GregtechMetaTileEntity_LargerTurbineBase>>() {
@Override
@@ -121,12 +132,18 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
{"ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc"},
{"ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc"},
{"ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc"},
- }))
- .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta())))
+ }))
+
+ .addElement('c', lazy(t -> onElementPass(x -> ++x.mCasing, ofBlock(t.getCasingBlock(), t.getCasingMeta()))))
.addElement('s', lazy(t -> ofBlock(t.getCasingBlock(), t.getTurbineShaftMeta())))
.addElement('t', lazy(t -> ofHatchAdder(GregtechMetaTileEntity_LargerTurbineBase::addTurbineHatch, t.getCasingTextureIndex(), 1)))
- .addElement('h', lazy(t -> ofHatchAdderOptional(GregtechMetaTileEntity_LargerTurbineBase::addGenericHatch, t.getCasingTextureIndex(), 4, t.getCasingBlock(), t.getCasingMeta())))
- .addElement('m', lazy(t -> ofHatchAdderOptional(GregtechMetaTileEntity_LargerTurbineBase::addMuffler, t.getCasingTextureIndex(), 7, t.getCasingBlock(), t.getCasingMeta())))
+ .addElement('h', lazy(t -> ofChain(
+ ofHatchAdder(GregtechMetaTileEntity_LargerTurbineBase::addGenericHatch, t.getCasingTextureIndex(), 4),
+ onElementPass(x -> ++x.mCasing, ofBlock(t.getCasingBlock(), t.getCasingMeta()))
+ )))
+ .addElement('m', lazy(t -> ofChain(
+ ofHatchAdder(GregtechMetaTileEntity_LargerTurbineBase::addMuffler, t.getCasingTextureIndex(), 7),
+ onElementPass(x -> ++x.mCasing, ofBlock(t.getCasingBlock(), t.getCasingMeta())))))
.build();
}
};
@@ -136,25 +153,36 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
return STRUCTURE_DEFINITION.get(getClass());
}
+ private boolean requiresMufflers() {
+ return getPollutionPerSecond(null) > 0;
+ }
+
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
this.mDynamoHatches.clear();
this.mTurbineRotorHatches.clear();
this.mMaintenanceHatches.clear();
- this.mMufflerHatches.clear();
+ if (requiresMufflers()) {
+ this.mMufflerHatches.clear();
+ }
this.mInputBusses.clear();
this.mInputHatches.clear();
- this.mOutputHatches.clear();
-
+ if (requiresOutputHatch()) {
+ this.mOutputHatches.clear();
+ }
+ mCasing = 0;
+
boolean aStructure = checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0);
+ boolean aCasingCount = mCasing >= 360;
log("Structure Check: "+aStructure);
- if (mTurbineRotorHatches.size() != 12 ||
+ if (!aCasingCount ||
+ mTurbineRotorHatches.size() != 12 ||
mMaintenanceHatches.size() != 1 ||
mDynamoHatches.size() < 1 ||
- mMufflerHatches.size() != 4 ||
+ (requiresMufflers() && mMufflerHatches.size() != 4) ||
mInputBusses.size() < 1 ||
mInputHatches.size() < 1 ||
- mOutputHatches.size() < 1
+ (requiresOutputHatch() && mOutputHatches.size() < 1)
) {
log("Bad Hatches - Turbine Housings: "+mTurbineRotorHatches.size()+
", Maint: "+mMaintenanceHatches.size()+
@@ -163,11 +191,11 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
", Input Buses: "+mInputBusses.size()+
", Input Hatches: "+mInputHatches.size()+
", Output Hatches: "+mOutputHatches.size()+
- ", ");
+ ", Casing Count: "+aCasingCount+" | Found: "+mCasing);
return false;
}
- log("Built "+this.getLocalName());
- return aStructure;
+ log("Built "+this.getLocalName()+" with "+mCasing+"/360 casings.");
+ return aCasingCount && aStructure;
}
@Override
@@ -189,8 +217,9 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
GT_MetaTileEntity_Hatch_Turbine aTurbineHatch = (GT_MetaTileEntity_Hatch_Turbine) aMetaTileEntity;
IGregTechTileEntity g = this.getBaseMetaTileEntity();
if (aTurbineHatch.setController(new BlockPos(g.getXCoord(), g.getYCoord(), g.getZCoord(), g.getWorld()))) {
- Logger.INFO("Injected Controller into Turbine Assembly.");
- return this.mTurbineRotorHatches.add(aTurbineHatch);
+ boolean aDidAdd = this.mTurbineRotorHatches.add(aTurbineHatch);
+ Logger.INFO("Injected Controller into Turbine Assembly. Found: "+this.mTurbineRotorHatches.size());
+ return aDidAdd;
}
else {
Logger.INFO("Failed to inject controller into Turbine Assembly Hatch.");
@@ -209,7 +238,6 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
return addToMachineList(aTileEntity, aBaseCasingIndex);
}
}
- log("Bad Muffler");
return false;
}
@@ -264,10 +292,10 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
public final Block getCasingBlock() {
return ModBlocks.blockSpecialMultiCasings;
}
-
+
@Override
public final boolean hasSlotInGUI() {
- return false;
+ return true;
}
public abstract int getCasingMeta();
@@ -278,104 +306,292 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
public abstract byte getCasingTextureIndex();
- public abstract int getFuelValue(FluidStack aLiquid);
-
- public static boolean isValidTurbine(ItemStack aTurbine) {
- return (aTurbine !=null && aTurbine.getItem() instanceof GT_MetaGenerated_Tool && aTurbine.getItemDamage() >= 170 && aTurbine.getItemDamage() <= 176);
- }
-
- private ArrayList<ItemStack> getAllBufferedTurbines(){
- ArrayList<ItemStack> aTurbinesInStorage = new ArrayList<ItemStack>();
- for (GT_MetaTileEntity_Hatch_InputBus aBus: this.mInputBusses) {
- if (isValidMetaTileEntity(aBus)) {
- for (ItemStack aContent : aBus.mInventory) {
- if (isValidTurbine(aContent)) {
- aTurbinesInStorage.add(aContent);
- }
- }
- }
- }
- return aTurbinesInStorage;
- }
-
- @Override
- public boolean checkRecipe(ItemStack aStack) {
-
+ public abstract int getFuelValue(FluidStack aLiquid);
+
+ public static boolean isValidTurbine(ItemStack aTurbine) {
+ return (aTurbine !=null && aTurbine.getItem() instanceof GT_MetaGenerated_Tool && aTurbine.getItemDamage() >= 170 && aTurbine.getItemDamage() <= 176);
+ }
+
+ private ArrayList<ItemStack> getAllBufferedTurbines(){
+ ArrayList<ItemStack> aTurbinesInStorage = new ArrayList<ItemStack>();
+ for (GT_MetaTileEntity_Hatch_InputBus aBus: this.mInputBusses) {
+ if (isValidMetaTileEntity(aBus)) {
+ for (ItemStack aContent : aBus.mInventory) {
+ if (isValidTurbine(aContent)) {
+ aTurbinesInStorage.add(aContent);
+ }
+ }
+ }
+ }
+ return aTurbinesInStorage;
+ }
+
+ public boolean areAllTurbinesTheSame() {
+ ArrayList<GT_MetaTileEntity_Hatch_Turbine> aTurbineAssemblies = getFullTurbineAssemblies();
+ if (aTurbineAssemblies.size() < 12) {
+ log("Found "+aTurbineAssemblies.size()+", expected 12.");
+ return false;
+ }
+ AutoMap<Materials> aTurbineMats = new AutoMap<Materials>();
+ AutoMap<Integer> aTurbineSizes = new AutoMap<Integer>();
+ for (GT_MetaTileEntity_Hatch_Turbine aHatch : aTurbineAssemblies) {
+ aTurbineMats.add(GT_MetaGenerated_Tool.getPrimaryMaterial(aHatch.getTurbine()));
+ aTurbineSizes.add(getTurbineSize(aHatch.getTurbine()));
+ }
+ Materials aBaseMat = aTurbineMats.get(0);
+ int aBaseSize = aTurbineSizes.get(0);
+ for (int aSize : aTurbineSizes) {
+ if (aBaseSize != aSize) {
+ return false;
+ }
+ }
+ for (Materials aMat : aTurbineMats) {
+ if (aBaseMat != aMat) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static int getTurbineSize(ItemStack aTurbine) {
+ if (isValidTurbine(aTurbine)) {
+ if (aTurbine.getItemDamage() >= 170 && aTurbine.getItemDamage() < 172) {
+ return 1;
+ }
+ else if (aTurbine.getItemDamage() >= 172 && aTurbine.getItemDamage() < 174) {
+ return 2;
+ }
+ else if (aTurbine.getItemDamage() >= 174 && aTurbine.getItemDamage() < 176) {
+ return 3;
+ }
+ else if (aTurbine.getItemDamage() >= 176 && aTurbine.getItemDamage() < 178) {
+ return 4;
+ }
+ }
+ return 0;
+ }
+
+ public static String getTurbineSizeString(int aSize) {
+ switch (aSize) {
+ case 1:
+ return "Small Turbine";
+ case 2:
+ return "Turbine";
+ case 3:
+ return "Large Turbine";
+ case 4:
+ return "Huge Turbine";
+ default:
+ return "";
+ }
+ }
+
+ private ArrayList<GT_MetaTileEntity_Hatch_Turbine> getEmptyTurbineAssemblies() {
ArrayList<GT_MetaTileEntity_Hatch_Turbine> aEmptyTurbineRotorHatches = new ArrayList<GT_MetaTileEntity_Hatch_Turbine>();
+ //log("Checking "+mTurbineRotorHatches.size()+" Assemblies for empties.");
for (GT_MetaTileEntity_Hatch_Turbine aTurbineHatch : this.mTurbineRotorHatches) {
if (!aTurbineHatch.hasTurbine()) {
+ //log("Found Assembly without Turbine.");
aEmptyTurbineRotorHatches.add(aTurbineHatch);
}
}
- if (aEmptyTurbineRotorHatches.size() > 0) {
- ArrayList<ItemStack> aTurbines = getAllBufferedTurbines();
- for (GT_MetaTileEntity_Hatch_Turbine aHatch : aEmptyTurbineRotorHatches) {
- for (ItemStack aTurbineItem : aTurbines) {
- if (aHatch.insertTurbine(aTurbineItem) && this.depleteInput(aTurbineItem)) {
- continue;
- }
- else {
- break;
- }
- }
+ return aEmptyTurbineRotorHatches;
+ }
+
+ private ArrayList<GT_MetaTileEntity_Hatch_Turbine> getFullTurbineAssemblies() {
+ ArrayList<GT_MetaTileEntity_Hatch_Turbine> aTurbineRotorHatches = new ArrayList<GT_MetaTileEntity_Hatch_Turbine>();
+ //log("Checking "+mTurbineRotorHatches.size()+" Assemblies for Turbines.");
+ for (GT_MetaTileEntity_Hatch_Turbine aTurbineHatch : this.mTurbineRotorHatches) {
+ if (aTurbineHatch.hasTurbine()) {
+ //log("Found Assembly with Turbine.");
+ aTurbineRotorHatches.add(aTurbineHatch);
}
- }
-
- if((counter&7)==0 && (aStack==null || !(aStack.getItem() instanceof GT_MetaGenerated_Tool) || aStack.getItemDamage() < 170 || aStack.getItemDamage() >179)) {
- stopMachine();
- return false;
}
- ArrayList<FluidStack> tFluids = getStoredFluids();
- if (tFluids.size() > 0) {
- if (baseEff == 0 || optFlow == 0 || counter >= 512 || this.getBaseMetaTileEntity().hasWorkJustBeenEnabled()
- || this.getBaseMetaTileEntity().hasInventoryBeenModified()) {
- counter = 0;
- baseEff = MathUtils.safeInt((long)((5F + ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F));
- optFlow = MathUtils.safeInt((long)Math.max(Float.MIN_NORMAL,
- ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack).getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed
- * 50));
- if(optFlow<=0 || baseEff<=0){
- stopMachine();//in case the turbine got removed
- return false;
+ return aTurbineRotorHatches;
+ }
+
+ private boolean depleteTurbineFromStock(ItemStack aTurbine) {
+ for (GT_MetaTileEntity_Hatch_InputBus aInputBus : this.mInputBusses) {
+ for (int slot = 0; slot < aInputBus.mInventory.length; slot++) {
+ ItemStack aStack = aInputBus.getStackInSlot(slot);
+ if (aStack != null && GT_Utility.areStacksEqual(aStack, aTurbine)) {
+ aInputBus.setInventorySlotContents(slot, null);
+ updateSlots();
+ return true;
}
- } else {
- counter++;
}
}
- else {
- Logger.INFO("Did not find any valid input fluids.");
- }
+ return false;
+ }
+
+ @Override
+ public boolean checkRecipe(final ItemStack aStack) {
+ return checkRecipeGeneric(new ItemStack[] {}, getStoredFluids().toArray(new FluidStack[] {}), 1, 100, 100, 10000);
+ }
+
+ public boolean checkRecipeGeneric(
+ ItemStack[] aItemInputs, FluidStack[] aFluidInputs,
+ int aMaxParallelRecipes, int aEUPercent,
+ int aSpeedBonusPercent, int aOutputChanceRoll, GT_Recipe aRecipe, boolean isPerpectOC) {
+
+ try {
+ ArrayList<GT_MetaTileEntity_Hatch_Turbine> aEmptyTurbineRotorHatches = getEmptyTurbineAssemblies();
+ if (aEmptyTurbineRotorHatches.size() > 0) {
+ log("Found "+aEmptyTurbineRotorHatches.size()+" Assemblies without Turbine.");
+ ArrayList<ItemStack> aTurbines = getAllBufferedTurbines();
+ hatch : for (GT_MetaTileEntity_Hatch_Turbine aHatch : aEmptyTurbineRotorHatches) {
+ for (ItemStack aTurbineItem : aTurbines) {
+ if (aTurbineItem == null) {
+ continue;
+ }
+ if (aTurbineItem != null && aHatch.insertTurbine(aTurbineItem.copy())) {
+ boolean aDidDeplete = depleteTurbineFromStock(aTurbineItem);
+ log("Put Turbine into Assembly - "+aDidDeplete);
+ continue hatch;
+ }
+ }
+ }
+ }
+ //log("Found "+getFullTurbineAssemblies().size()+" Assemblies with a Turbine.");
- int newPower = fluidIntoPower(tFluids, optFlow, baseEff); // How much the turbine should be producing with this flow
- int difference = newPower - this.mEUt; // difference between current output and new output
+ if (getEmptyTurbineAssemblies().size() > 0 || !areAllTurbinesTheSame()) {
+ log("BAD RETURN - 1");
+ stopMachine();
+ return false;
+ }
- // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in power level (per tick)
- // This is how much the turbine can actually change during this tick
- int maxChangeAllowed = Math.max(10, MathUtils.safeInt((long)Math.abs(difference)/100));
+ //log("Running checkRecipeGeneric(0)");
+
+ ArrayList<FluidStack> tFluids = getStoredFluids();
+
+ if (tFluids.size() > 0) {
+ if (baseEff == 0 || optFlow == 0 || counter >= 512 || this.getBaseMetaTileEntity().hasWorkJustBeenEnabled()
+ || this.getBaseMetaTileEntity().hasInventoryBeenModified()) {
+ counter = 0;
+
+ //log("Running checkRecipeGeneric(1)");
+ float aTotalBaseEff = 0;
+ float aTotalOptimalFlow = 0;
+
+ ItemStack aStack = getFullTurbineAssemblies().get(0).getTurbine();
+ for (int i=0;i<18;i++) {
+ if (i == 0) {
+ aTotalBaseEff += GT_Utility.safeInt((long) ((5F + ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F));
+ //log("Bumped base eff to "+aTotalBaseEff);
+ }
+ aTotalOptimalFlow += GT_Utility.safeInt((long) Math.max(Float.MIN_NORMAL,
+ ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack).getSpeedMultiplier()
+ * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed
+ * 50));
+ //log("Bumped base optimal flow to "+aTotalOptimalFlow);
+ }
- if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change
- int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative.
- this.mEUt += change; // Apply the change
- } else {
- this.mEUt = newPower;
+ //log("Running checkRecipeGeneric(2)");
+ //log("Total base eff: "+aTotalBaseEff);
+ //log("Total base optimal flow: "+aTotalOptimalFlow);
+ baseEff = MathUtils.roundToClosestInt(aTotalBaseEff);
+ optFlow = MathUtils.roundToClosestInt(aTotalOptimalFlow);
+ //log("Total eff: "+baseEff);
+ //log("Total optimal flow: "+optFlow);
+ if(optFlow<=0 || baseEff<=0){
+ log("Running checkRecipeGeneric(bad-1)");
+ stopMachine();//in case the turbine got removed
+ return false;
+ }
+ } else {
+ counter++;
+ }
+ }
+
+ //log("Total eff: "+baseEff);
+ //log("Total optimal flow: "+optFlow);
+
+ // How much the turbine should be producing with this flow
+ int newPower = fluidIntoPower(tFluids, optFlow, baseEff);
+ //log("Bumped newPower to "+newPower);
+ //log("New Power: "+newPower);
+ int difference = newPower - this.mEUt; // difference between current output and new output
+ //log("diff: "+difference);
+
+ // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in power level (per tick)
+ // This is how much the turbine can actually change during this tick
+ int maxChangeAllowed = Math.max(10, GT_Utility.safeInt((long)Math.abs(difference)/100));
+ //log("Max Change Allowed: "+maxChangeAllowed);
+
+ if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change
+ int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative.
+ this.mEUt += change; // Apply the change
+ //log("Applied power change.");
+ }
+ else {
+ this.mEUt = newPower;
+ //log("Using same value.");
+ }
+ if (this.mEUt <= 0) {
+ this.mEUt=0;
+ this.mEfficiency=0;
+ log("Running checkRecipeGeneric(bad-2)");
+ //stopMachine();
+ return false;
+ } else {
+ this.mMaxProgresstime = 1;
+ this.mEfficiencyIncrease = 10;
+ // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here.
+ // Play sounds (GT++ addition - GT multiblocks play no sounds)
+ startProcess();
+ //log("GOOD RETURN - Making: "+this.mEUt+" EU/t");
+ return true;
+ }
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
}
+ return false;
+ }
- if (this.mEUt <= 0) {
- //stopMachine();
- this.mEUt=0;
- this.mEfficiency=0;
+ public boolean doRandomMaintenanceDamage() {
+ if (getMaxParallelRecipes() == 0 || getRepairStatus() == 0) {
+ stopMachine();
return false;
- } else {
- this.mMaxProgresstime = 1;
- this.mEfficiencyIncrease = 10;
- if(this.mDynamoHatches.size()>0){
- for(GT_MetaTileEntity_Hatch dynamo:mDynamoHatches)
- if(isValidMetaTileEntity(dynamo) && dynamo.maxEUOutput() < mEUt)
- explodeMultiblock();
- }
- return true;
}
+ if (mRuntime++ > 1000) {
+ mRuntime = 0;
+ if (getBaseMetaTileEntity().getRandomNumber(6000) == 0) {
+ switch (getBaseMetaTileEntity().getRandomNumber(6)) {
+ case 0:
+ mWrench = false;
+ break;
+ case 1:
+ mScrewdriver = false;
+ break;
+ case 2:
+ mSoftHammer = false;
+ break;
+ case 3:
+ mHardHammer = false;
+ break;
+ case 4:
+ mSolderingTool = false;
+ break;
+ case 5:
+ mCrowbar = false;
+ break;
+ }
+ }
+ for (GT_MetaTileEntity_Hatch_Turbine aHatch : getFullTurbineAssemblies()) {
+ aHatch.damageTurbine(mEUt, damageFactorLow, damageFactorHigh);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public int getMaxParallelRecipes() {
+ return (getFullTurbineAssemblies().size());
+ }
+
+ public boolean runRecipe(GT_MetaTileEntity_Hatch_Turbine aHatch) {
+ return false;
}
abstract int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff);
@@ -386,19 +602,17 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
}
public int getMaxEfficiency(ItemStack aStack) {
- if (GT_Utility.isStackInvalid(aStack)) {
- return 0;
- }
- if (aStack.getItem() instanceof GT_MetaGenerated_Tool_01) {
- return 10000;
- }
- return 0;
+ return this.getMaxParallelRecipes() == 12 ? 10000 : 0;
}
@Override
public boolean explodesOnComponentBreak(ItemStack aStack) {
return true;
}
+ public boolean isLooseMode() {
+ return false;
+ }
+
@Override
public String[] getExtraInfoData() {
int mPollutionReduction=0;
@@ -408,17 +622,20 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
}
}
- String tRunning = mMaxProgresstime>0 ?
-
+ String tRunning = mMaxProgresstime > 0 ?
EnumChatFormatting.GREEN+StatCollector.translateToLocal("GT5U.turbine.running.true")+EnumChatFormatting.RESET :
EnumChatFormatting.RED+StatCollector.translateToLocal("GT5U.turbine.running.false")+EnumChatFormatting.RESET;
+
String tMaintainance = getIdealStatus() == getRepairStatus() ?
EnumChatFormatting.GREEN+StatCollector.translateToLocal("GT5U.turbine.maintenance.false")+EnumChatFormatting.RESET :
EnumChatFormatting.RED+StatCollector.translateToLocal("GT5U.turbine.maintenance.true")+EnumChatFormatting.RESET ;
int tDura = 0;
- if (mInventory[1] != null && mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) {
- tDura = MathUtils.safeInt((long)(100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(mInventory[1]) * (GT_MetaGenerated_Tool.getToolDamage(mInventory[1]))+1));
+ String aTurbineDamage = "";
+ for (GT_MetaTileEntity_Hatch_Turbine aHatch : this.getFullTurbineAssemblies()) {
+ ItemStack aTurbine = aHatch.getTurbine();
+ tDura = MathUtils.safeInt((long)(100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(aTurbine) * (GT_MetaGenerated_Tool.getToolDamage(aTurbine))+1));
+ aTurbineDamage += EnumChatFormatting.RED+Integer.toString(tDura)+EnumChatFormatting.RESET+"% | ";
}
long storedEnergy=0;
@@ -429,29 +646,23 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
maxEnergy+=tHatch.getBaseMetaTileEntity().getEUCapacity();
}
}
+
+ boolean aIsSteam = this.getClass().getName().toLowerCase().contains("steam");
+
String[] ret = new String[]{
// 8 Lines available for information panels
tRunning + ": " + EnumChatFormatting.RED+mEUt+EnumChatFormatting.RESET+" EU/t",
- /* 1 */
tMaintainance,
- /* 2 */
StatCollector.translateToLocal("GT5U.turbine.efficiency")+": "+EnumChatFormatting.YELLOW+(mEfficiency/100F)+EnumChatFormatting.RESET+"%",
- /* 2 */
StatCollector.translateToLocal("GT5U.multiblock.energy")+": " + EnumChatFormatting.GREEN + Long.toString(storedEnergy) + EnumChatFormatting.RESET +" EU / "+
- /* 3 */
- EnumChatFormatting.YELLOW + Long.toString(maxEnergy) + EnumChatFormatting.RESET +" EU",
- StatCollector.translateToLocal("GT5U.turbine.flow")+": "+EnumChatFormatting.YELLOW+MathUtils.safeInt((long)realOptFlow)+EnumChatFormatting.RESET+" L/t" +
- /* 4 */
- EnumChatFormatting.YELLOW+" ("+(looseFit?StatCollector.translateToLocal("GT5U.turbine.loose"):StatCollector.translateToLocal("GT5U.turbine.tight"))+")",
- /* 5 */
- StatCollector.translateToLocal("GT5U.turbine.fuel")+": "+EnumChatFormatting.GOLD+storedFluid+EnumChatFormatting.RESET+"L",
- /* 6 */
- StatCollector.translateToLocal("GT5U.turbine.dmg")+": "+EnumChatFormatting.RED+Integer.toString(tDura)+EnumChatFormatting.RESET+"%",
- /* 7 */
- StatCollector.translateToLocal("GT5U.multiblock.pollution")+": "+ EnumChatFormatting.GREEN + mPollutionReduction+ EnumChatFormatting.RESET+" %"
- /* 8 */
+ EnumChatFormatting.YELLOW + Long.toString(maxEnergy) + EnumChatFormatting.RESET +" EU",
+ StatCollector.translateToLocal("GT5U.turbine.flow")+": "+EnumChatFormatting.YELLOW+MathUtils.safeInt((long)realOptFlow)+EnumChatFormatting.RESET+" L/t" +
+ EnumChatFormatting.YELLOW+" ("+(isLooseMode()?StatCollector.translateToLocal("GT5U.turbine.loose"):StatCollector.translateToLocal("GT5U.turbine.tight"))+")",
+ StatCollector.translateToLocal("GT5U.turbine.fuel")+": "+EnumChatFormatting.GOLD+storedFluid+EnumChatFormatting.RESET+"L",
+ StatCollector.translateToLocal("GT5U.turbine.dmg")+": "+aTurbineDamage,
+ StatCollector.translateToLocal("GT5U.multiblock.pollution")+": "+ EnumChatFormatting.GREEN + mPollutionReduction+ EnumChatFormatting.RESET+" %"
};
- if (!this.getClass().getName().contains("Steam"))
+ if (!aIsSteam)
ret[4]=StatCollector.translateToLocal("GT5U.turbine.flow")+": "+EnumChatFormatting.YELLOW+MathUtils.safeInt((long)realOptFlow)+EnumChatFormatting.RESET+" L/t";
return ret;
@@ -465,19 +676,22 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
public boolean polluteEnvironment(int aPollutionLevel) {
- mPollution += aPollutionLevel;
- for (GT_MetaTileEntity_Hatch_Muffler tHatch : mMufflerHatches) {
- if (isValidMetaTileEntity(tHatch)) {
- if (mPollution >= 1000) {
- if (PollutionUtils.addPollution(this.getBaseMetaTileEntity(), 1000)) {
- mPollution -= 1000;
+ if (this.requiresMufflers()) {
+ mPollution += aPollutionLevel;
+ for (GT_MetaTileEntity_Hatch_Muffler tHatch : mMufflerHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ if (mPollution >= 10000) {
+ if (PollutionUtils.addPollution(this.getBaseMetaTileEntity(), 10000)) {
+ mPollution -= 10000;
+ }
+ } else {
+ break;
}
- } else {
- break;
}
}
+ return mPollution < 10000;
}
- return mPollution < 1000;
+ return true;
}
@Override
public long maxAmperesOut() {
@@ -506,7 +720,7 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
}
}
}
- */}
+ */}
}
@Override
@@ -523,15 +737,19 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
- super.onPostTick(aBaseMetaTileEntity, aTick);
if (aBaseMetaTileEntity.isServerSide()) {
- if (mUpdate == 0 || this.mStartUpCheck == 0) {
+ if (mUpdate == 1 || mStartUpCheck == 1) {
+ log("Cleared Rotor Assemblies.");
this.mTurbineRotorHatches.clear();
}
- }
- if (aTick % 20 == 0 || this.getBaseMetaTileEntity().hasWorkJustBeenEnabled()) {
+ }
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (this.maxProgresstime() > 0 || this.getBaseMetaTileEntity().hasWorkJustBeenEnabled()) {
enableAllTurbineHatches();
}
+ if (this.maxProgresstime() <= 0) {
+ stopMachine();
+ }
}
@Override
@@ -539,16 +757,13 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
super.startProcess();
enableAllTurbineHatches();
}
-
- @Override
- public boolean onRunningTick(ItemStack aStack) {
- return super.onRunningTick(aStack);
- }
-
+
@Override
public void stopMachine() {
- super.stopMachine();
+ baseEff = 0;
+ optFlow = 0;
disableAllTurbineHatches();
+ super.stopMachine();
}
@Override
public void onRemoval() {
@@ -586,15 +801,10 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
}
@Override
- public int getMaxParallelRecipes() {
- return 1;
- }
-
- @Override
public int getEuDiscountForParallelism() {
return 0;
}
-
+
@Override
public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
super.onPreTick(aBaseMetaTileEntity, aTick);
@@ -604,5 +814,82 @@ public abstract class GregtechMetaTileEntity_LargerTurbineBase extends GregtechM
this.getBaseMetaTileEntity().setFrontFacing((byte) 1);
}
}
+
+ /**
+ * Called every tick the Machine runs
+ */
+ public boolean onRunningTick(ItemStack aStack) {
+ if (mEUt > 0) {
+ addEnergyOutput(((long) mEUt * mEfficiency) / 10000);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean addEnergyOutput(long aEU) {
+ if (aEU <= 0) {
+ return true;
+ }
+ if (this.mAllDynamoHatches.size() > 0) {
+ return addEnergyOutputMultipleDynamos(aEU, true);
+ }
+ return false;
+ }
+
+ public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) {
+ int injected = 0;
+ long totalOutput = 0;
+ long aFirstVoltageFound = -1;
+ boolean aFoundMixedDynamos = false;
+ for (GT_MetaTileEntity_Hatch aDynamo : mAllDynamoHatches) {
+ if(aDynamo == null) {
+ return false;
+ }
+ if (isValidMetaTileEntity(aDynamo)) {
+ long aVoltage = aDynamo.maxEUOutput();
+ long aTotal = aDynamo.maxAmperesOut() * aVoltage;
+ // Check against voltage to check when hatch mixing
+ if (aFirstVoltageFound == -1) {
+ aFirstVoltageFound = aVoltage;
+ }
+ else {
+ if (aFirstVoltageFound != aVoltage) {
+ aFoundMixedDynamos = true;
+ }
+ }
+ totalOutput += aTotal;
+ }
+ }
+
+ if (totalOutput < aEU || (aFoundMixedDynamos && !aAllowMixedVoltageDynamos)) {
+ explodeMultiblock();
+ return false;
+ }
+
+ long leftToInject;
+ long aVoltage;
+ int aAmpsToInject;
+ int aRemainder;
+ int ampsOnCurrentHatch;
+ for (GT_MetaTileEntity_Hatch aDynamo : mAllDynamoHatches) {
+ if (isValidMetaTileEntity(aDynamo)) {
+ leftToInject = aEU - injected;
+ aVoltage = aDynamo.maxEUOutput();
+ aAmpsToInject = (int) (leftToInject / aVoltage);
+ aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage));
+ ampsOnCurrentHatch= (int) Math.min(aDynamo.maxAmperesOut(), aAmpsToInject);
+ for (int i = 0; i < ampsOnCurrentHatch; i++) {
+ aDynamo.getBaseMetaTileEntity().increaseStoredEnergyUnits(aVoltage, false);
+ }
+ injected+=aVoltage*ampsOnCurrentHatch;
+ if(aRemainder>0 && ampsOnCurrentHatch<aDynamo.maxAmperesOut()){
+ aDynamo.getBaseMetaTileEntity().increaseStoredEnergyUnits(aRemainder, false);
+ injected+=aRemainder;
+ }
+ }
+ }
+ return injected > 0;
+ }
}