aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity/implementations
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/implementations')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java86
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java6
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java41
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java97
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java100
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java49
6 files changed, 71 insertions, 308 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
index 80ad9e38a5..35d95627b8 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
@@ -4,8 +4,6 @@ import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.debugCleanroom;
import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT;
-import static gregtech.api.metatileentity.BaseTileEntity.FLUID_INPUT_TOOLTIP;
-import static gregtech.api.metatileentity.BaseTileEntity.FLUID_OUTPUT_TOOLTIP;
import static gregtech.api.metatileentity.BaseTileEntity.FLUID_TRANSFER_TOOLTIP;
import static gregtech.api.metatileentity.BaseTileEntity.ITEM_TRANSFER_TOOLTIP;
import static gregtech.api.metatileentity.BaseTileEntity.NEI_TRANSFER_STEAM_TOOLTIP;
@@ -48,16 +46,16 @@ import com.gtnewhorizons.modularui.api.math.Size;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
import com.gtnewhorizons.modularui.api.widget.Widget;
-import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import com.gtnewhorizons.modularui.common.fluid.FluidStackTank;
import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget;
import com.gtnewhorizons.modularui.common.widget.ProgressBar;
import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.ItemList;
import gregtech.api.enums.SoundResource;
import gregtech.api.gui.GT_Container_BasicMachine;
import gregtech.api.gui.GT_GUIContainer_BasicMachine;
@@ -81,7 +79,6 @@ import gregtech.api.util.GT_TooltipDataCache;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.GT_Waila;
import gregtech.common.gui.modularui.UIHelper;
-import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget;
import gregtech.common.power.BasicMachineEUPower;
import gregtech.common.power.Power;
import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Cleanroom;
@@ -123,6 +120,10 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B
protected GT_Recipe mLastRecipe = null;
private FluidStack mFluidOut;
+ protected final FluidStackTank fluidOutputTank = new FluidStackTank(
+ () -> mFluidOut,
+ fluidStack -> mFluidOut = fluidStack,
+ this::getCapacity);
/**
* @param aOverlays 0 = SideFacingActive 1 = SideFacingInactive 2 = FrontFacingActive 3 = FrontFacingInactive 4 =
@@ -482,11 +483,6 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B
}
@Override
- public FluidStack getDisplayedFluid() {
- return displaysOutputFluid() ? getDrainableStack() : null;
- }
-
- @Override
public FluidStack getDrainableStack() {
return mFluidOut;
}
@@ -756,29 +752,6 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B
}
}
- @Override
- public void updateFluidDisplayItem() {
- updateFluidOutputDisplayItem();
- updateFluidInputDisplayItem();
- }
-
- public void updateFluidOutputDisplayItem() {
- super.updateFluidDisplayItem();
- }
-
- public void updateFluidInputDisplayItem() {
- if (displaysInputFluid()) {
- int tDisplayStackSlot = OTHER_SLOT_COUNT + mInputSlotCount + mOutputItems.length;
- if (getFillableStack() == null) {
- if (ItemList.Display_Fluid.isStackEqual(mInventory[tDisplayStackSlot], true, true))
- mInventory[tDisplayStackSlot] = null;
- } else {
- mInventory[tDisplayStackSlot] = GT_Utility
- .getFluidDisplayStack(getFillableStack(), true, !displaysStackSize());
- }
- }
- }
-
protected boolean hasEnoughEnergyToCheckRecipe() {
return getBaseMetaTileEntity().isUniversalEnergyStored(getMinimumStoredEU() / 2);
}
@@ -863,14 +836,6 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B
return rIsEmpty;
}
- protected boolean displaysInputFluid() {
- return true;
- }
-
- protected boolean displaysOutputFluid() {
- return true;
- }
-
@Override
public void onValueUpdate(byte aValue) {
mMainFacing = ForgeDirection.getOrientation(aValue);
@@ -1440,38 +1405,13 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B
.setPos(pos);
}
- protected FluidDisplaySlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) {
- return (FluidDisplaySlotWidget) new FluidDisplaySlotWidget(
- inventoryHandler,
- OTHER_SLOT_COUNT + mInputSlotCount + mOutputItems.length)
- .setFluidAccessConstructor(() -> constructFluidAccess(true))
- .setIHasFluidDisplay(this)
- .setCanDrain(true)
- .setCanFill(true)
- .setActionRealClick(FluidDisplaySlotWidget.Action.TRANSFER)
- .setBeforeRealClick((clickData, widget) -> {
- if (NetworkUtils.isClient()) {
- // propagate display item content to
- // actual fluid stored in this tank
- setFillableStack(
- GT_Utility.getFluidFromDisplayStack(
- widget.getMcSlot()
- .getStack()));
- }
- return true;
- })
- .setUpdateFluidDisplayItem(this::updateFluidInputDisplayItem)
- .setGTTooltip(() -> mTooltipCache.getData(FLUID_INPUT_TOOLTIP, GT_Utility.formatNumbers(getCapacity())))
- .setTooltipShowUpDelay(TOOLTIP_DELAY)
- .setBackground(backgrounds)
- .setPos(pos);
- }
-
- protected FluidDisplaySlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) {
- return (FluidDisplaySlotWidget) createDrainableFluidSlot()
- .setUpdateFluidDisplayItem(this::updateFluidOutputDisplayItem)
- .setGTTooltip(() -> mTooltipCache.getData(FLUID_OUTPUT_TOOLTIP, GT_Utility.formatNumbers(getCapacity())))
- .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ protected FluidSlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) {
+ return (FluidSlotWidget) new FluidSlotWidget(fluidTank).setBackground(backgrounds)
+ .setPos(pos);
+ }
+
+ protected FluidSlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) {
+ return (FluidSlotWidget) new FluidSlotWidget(fluidOutputTank).setInteraction(true, false)
.setBackground(backgrounds)
.setPos(pos);
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java
index 2ea4b25860..d804454801 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java
@@ -13,6 +13,7 @@ import com.gtnewhorizons.modularui.api.drawable.IDrawable;
import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Dyes;
@@ -28,7 +29,6 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
-import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget;
import gregtech.common.power.Power;
import gregtech.common.power.SteamPower;
@@ -370,12 +370,12 @@ public abstract class GT_MetaTileEntity_BasicMachine_Bronze extends GT_MetaTileE
}
@Override
- protected FluidDisplaySlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) {
+ protected FluidSlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) {
return null;
}
@Override
- protected FluidDisplaySlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) {
+ protected FluidSlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) {
return null;
}
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
index dc79ef0ba9..2479448a40 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
@@ -172,13 +172,13 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case WIRE -> Tier.ELECTRIC[this.mTier].mConductingObject;
case WIRE4 -> Tier.ELECTRIC[this.mTier].mLargerConductingObject;
case STICK_DISTILLATION -> OrePrefixes.stick.get(Materials.Blaze);
-
+
case GLASS -> switch (this.mTier) {
case 0, 1, 2, 3 -> new ItemStack(Blocks.glass, 1, W);
case 4, 5, 6, 7, 8 -> BartWorks.isModLoaded() ? "blockGlass" + VN[aTier] : Ic2Items.reinforcedGlass;
default -> BartWorks.isModLoaded() ? "blockGlass" + VN[8] : Ic2Items.reinforcedGlass;
};
-
+
case PLATE -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.plate.get(Materials.Steel);
case 2 -> OrePrefixes.plate.get(Materials.Aluminium);
@@ -189,7 +189,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 7 -> OrePrefixes.plate.get(Materials.HSSE);
default -> OrePrefixes.plate.get(Materials.Neutronium);
};
-
+
case PIPE -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.pipeMedium.get(Materials.Bronze);
case 2 -> OrePrefixes.pipeMedium.get(Materials.Steel);
@@ -201,7 +201,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 8 -> OrePrefixes.pipeLarge.get(Materials.Ultimate);
default -> OrePrefixes.pipeHuge.get(Materials.Ultimate);
};
-
+
case COIL_HEATING -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.wireGt02.get(Materials.AnyCopper);
case 2 -> OrePrefixes.wireGt02.get(Materials.Cupronickel);
@@ -214,7 +214,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 9 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy);
default -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy);
};
-
+
case COIL_HEATING_DOUBLE -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.wireGt04.get(Materials.AnyCopper);
case 2 -> OrePrefixes.wireGt04.get(Materials.Cupronickel);
@@ -227,7 +227,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 9 -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy);
default -> OrePrefixes.wireGt16.get(Materials.NaquadahAlloy);
};
-
+
case STICK_MAGNETIC -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.stick.get(Materials.IronMagnetic);
case 2, 3 -> OrePrefixes.stick.get(Materials.SteelMagnetic);
@@ -235,14 +235,14 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 6, 7, 8, 9 -> OrePrefixes.stick.get(Materials.SamariumMagnetic);
default -> OrePrefixes.stick.get(Materials.TengamAttuned);
};
-
+
case STICK_ELECTROMAGNETIC -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.stick.get(Materials.AnyIron);
case 2, 3 -> OrePrefixes.stick.get(Materials.Steel);
case 4 -> OrePrefixes.stick.get(Materials.Neodymium);
default -> OrePrefixes.stick.get(Materials.VanadiumGallium);
};
-
+
case COIL_ELECTRIC -> switch (this.mTier) {
case 0 -> OrePrefixes.wireGt01.get(Materials.Lead);
case 1 -> OrePrefixes.wireGt02.get(Materials.Tin);
@@ -254,7 +254,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 7 -> OrePrefixes.wireGt08.get(Materials.Iridium);
default -> OrePrefixes.wireGt16.get(Materials.Osmium);
};
-
+
case ROBOT_ARM -> switch (this.mTier) {
case 0, 1 -> ItemList.Robot_Arm_LV;
case 2 -> ItemList.Robot_Arm_MV;
@@ -271,7 +271,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Robot_Arm_UXV;
default -> ItemList.Robot_Arm_MAX;
};
-
+
case PUMP -> switch (this.mTier) {
case 0, 1 -> ItemList.Electric_Pump_LV;
case 2 -> ItemList.Electric_Pump_MV;
@@ -288,7 +288,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Electric_Pump_UXV;
default -> ItemList.Electric_Pump_MAX;
};
-
+
case MOTOR -> switch (this.mTier) {
case 0, 1 -> ItemList.Electric_Motor_LV;
case 2 -> ItemList.Electric_Motor_MV;
@@ -305,7 +305,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Electric_Motor_UXV;
default -> ItemList.Electric_Motor_MAX;
};
-
+
case PISTON -> switch (this.mTier) {
case 0, 1 -> ItemList.Electric_Piston_LV;
case 2 -> ItemList.Electric_Piston_MV;
@@ -322,7 +322,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Electric_Piston_UXV;
default -> ItemList.Electric_Piston_MAX;
};
-
+
case CONVEYOR -> switch (this.mTier) {
case 0, 1 -> ItemList.Conveyor_Module_LV;
case 2 -> ItemList.Conveyor_Module_MV;
@@ -339,7 +339,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Conveyor_Module_UXV;
default -> ItemList.Conveyor_Module_MAX;
};
-
+
case EMITTER -> switch (this.mTier) {
case 0, 1 -> ItemList.Emitter_LV;
case 2 -> ItemList.Emitter_MV;
@@ -356,7 +356,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Emitter_UXV;
default -> ItemList.Emitter_MAX;
};
-
+
case SENSOR -> switch (this.mTier) {
case 0, 1 -> ItemList.Sensor_LV;
case 2 -> ItemList.Sensor_MV;
@@ -373,7 +373,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Sensor_UXV;
default -> ItemList.Sensor_MAX;
};
-
+
case FIELD_GENERATOR -> switch (this.mTier) {
case 0, 1 -> ItemList.Field_Generator_LV;
case 2 -> ItemList.Field_Generator_MV;
@@ -390,7 +390,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 13 -> ItemList.Field_Generator_UXV;
default -> ItemList.Field_Generator_MAX;
};
-
+
case ROTOR -> switch (this.mTier) {
case 0, 1 -> OrePrefixes.rotor.get(Materials.Tin);
case 2 -> OrePrefixes.rotor.get(Materials.Bronze);
@@ -401,7 +401,7 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 7 -> OrePrefixes.rotor.get(Materials.Iridium);
default -> OrePrefixes.rotor.get(Materials.Osmium);
};
-
+
default -> throw new IllegalArgumentException("MISSING TIER MAPPING FOR: " + aRecipe[i] + " AT TIER " + this.mTier);
};
// spotless:on
@@ -765,11 +765,6 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
}
@Override
- protected boolean displaysOutputFluid() {
- return !this.mSharedTank;
- }
-
- @Override
protected ProgressBar createProgressBar(UITexture texture, int imageSize, ProgressBar.Direction direction,
Pos2d pos, Size size) {
return super.createProgressBar(texture, imageSize, direction, pos, size)
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java
index f3a0af38f5..aaac590fe3 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java
@@ -9,17 +9,15 @@ import net.minecraftforge.fluids.FluidTankInfo;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
-import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import com.gtnewhorizons.modularui.common.fluid.FluidStackTank;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget;
import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import com.gtnewhorizons.modularui.common.widget.TextWidget;
-import gregtech.api.enums.ItemList;
import gregtech.api.gui.GT_Container_BasicTank;
import gregtech.api.gui.GT_GUIContainer_BasicTank;
import gregtech.api.gui.modularui.GT_UITextures;
-import gregtech.api.interfaces.IFluidAccess;
-import gregtech.api.interfaces.IHasFluidDisplayItem;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -32,10 +30,15 @@ import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget;
* This is the main construct for my generic Tanks. Filling and emptying behavior have to be implemented manually
*/
public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_TieredMachineBlock
- implements IHasFluidDisplayItem, IAddUIWidgets {
+ implements IAddUIWidgets {
public FluidStack mFluid;
- protected int mOpenerCount;
+ // Due to class initializing order, getCapacity might not work properly at this time.
+ // So we pass supplier instead of current value here.
+ protected final FluidStackTank fluidTank = new FluidStackTank(
+ () -> mFluid,
+ fluidStack -> mFluid = fluidStack,
+ this::getRealCapacity);
/**
* @param aInvSlotCount should be 3
@@ -141,6 +144,7 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier
return false;
}
+ @Deprecated
public FluidStack getDisplayedFluid() {
return getDrainableStack();
}
@@ -158,26 +162,11 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier
}
@Override
- public void onOpenGUI() {
- super.onOpenGUI();
- mOpenerCount++;
- if (mOpenerCount == 1) updateFluidDisplayItem();
- }
-
- @Override
- public void onCloseGUI() {
- super.onCloseGUI();
- mOpenerCount--;
- }
-
- @Override
public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0)
setFillableStack(null);
- if (mOpenerCount > 0) updateFluidDisplayItem();
-
if (doesEmptyContainers()) {
FluidStack tFluid = GT_Utility.getFluidForFilledItem(mInventory[getInputSlot()], true);
if (tFluid != null && isFluidInputAllowed(tFluid)) {
@@ -221,19 +210,6 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier
}
@Override
- public void updateFluidDisplayItem() {
- if (displaysItemStack() && getStackDisplaySlot() >= 0 && getStackDisplaySlot() < mInventory.length) {
- if (getDisplayedFluid() == null) {
- if (ItemList.Display_Fluid.isStackEqual(mInventory[getStackDisplaySlot()], true, true))
- mInventory[getStackDisplaySlot()] = null;
- } else {
- mInventory[getStackDisplaySlot()] = GT_Utility
- .getFluidDisplayStack(getDisplayedFluid(), true, !displaysStackSize());
- }
- }
- }
-
- @Override
public FluidStack getFluid() {
return getDrainableStack();
}
@@ -353,7 +329,7 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier
.setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT)
.setPos(79, 52))
.widget(
- createDrainableFluidSlot().setBackground(GT_UITextures.TRANSPARENT)
+ createFluidSlot().setBackground(GT_UITextures.TRANSPARENT)
.setPos(58, 41))
.widget(
new TextWidget("Liquid Amount").setDefaultColor(COLOR_TEXT_WHITE.get())
@@ -364,53 +340,12 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier
.setPos(10, 30));
}
- protected FluidDisplaySlotWidget createDrainableFluidSlot() {
- return new FluidDisplaySlotWidget(inventoryHandler, getStackDisplaySlot())
- .setFluidAccessConstructor(() -> constructFluidAccess(false))
- .setIHasFluidDisplay(this)
- .setCanDrain(true)
- .setCanFill(!isDrainableStackSeparate())
- .setActionRealClick(FluidDisplaySlotWidget.Action.TRANSFER)
- .setBeforeRealClick((clickData, widget) -> {
- if (NetworkUtils.isClient()) {
- // propagate display item content to actual fluid stored in this tank
- setDrainableStack(
- GT_Utility.getFluidFromDisplayStack(
- widget.getMcSlot()
- .getStack()));
- }
- return true;
- });
- }
-
- protected IFluidAccess constructFluidAccess(boolean aIsFillableStack) {
- return new BasicTankFluidAccess(this, aIsFillableStack);
+ protected FluidSlotWidget createFluidSlot() {
+ return new FluidSlotWidget(fluidTank);
}
- protected static class BasicTankFluidAccess implements IFluidAccess {
-
- protected final GT_MetaTileEntity_BasicTank mTank;
- protected final boolean mIsFillableStack;
-
- public BasicTankFluidAccess(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) {
- this.mTank = aTank;
- this.mIsFillableStack = aIsFillableStack;
- }
-
- @Override
- public void set(FluidStack stack) {
- if (mIsFillableStack) mTank.setFillableStack(stack);
- else mTank.setDrainableStack(stack);
- }
-
- @Override
- public FluidStack get() {
- return mIsFillableStack ? mTank.getFillableStack() : mTank.getDrainableStack();
- }
-
- @Override
- public int getCapacity() {
- return mTank.getCapacity();
- }
+ @Deprecated
+ protected FluidDisplaySlotWidget createDrainableFluidSlot() {
+ return null;
}
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java
index 48d6569f42..cd1ea520c8 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java
@@ -2,7 +2,6 @@ package gregtech.api.metatileentity.implementations;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_INPUT_HATCH_2x2;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -12,26 +11,25 @@ import com.gtnewhorizons.modularui.api.ModularUITextures;
import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
-import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import com.gtnewhorizons.modularui.common.fluid.FluidStackTank;
+import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget;
-import gregtech.api.enums.ItemList;
-import gregtech.api.interfaces.IFluidAccess;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget;
public class GT_MetaTileEntity_Hatch_MultiInput extends GT_MetaTileEntity_Hatch_Input implements IAddUIWidgets {
- public FluidStack[] mStoredFluid;
- public int mCapacityPer;
+ private final FluidStack[] mStoredFluid;
+ private final FluidStackTank[] fluidTanks;
+ public final int mCapacityPer;
public GT_MetaTileEntity_Hatch_MultiInput(int aID, int aSlot, String aName, String aNameRegional, int aTier) {
super(aID, aSlot, aName, aNameRegional, aTier);
this.mStoredFluid = new FluidStack[aSlot];
+ fluidTanks = new FluidStackTank[aSlot];
mCapacityPer = 8000 * (1 << aTier) / aSlot;
}
@@ -39,7 +37,15 @@ public class GT_MetaTileEntity_Hatch_MultiInput extends GT_MetaTileEntity_Hatch_
ITexture[][][] aTextures) {
super(aName, aSlot, aTier, aDescription, aTextures);
this.mStoredFluid = new FluidStack[aSlot];
+ fluidTanks = new FluidStackTank[aSlot];
mCapacityPer = 8000 * (1 << aTier) / aSlot;
+ for (int i = 0; i < aSlot; i++) {
+ final int index = i;
+ fluidTanks[i] = new FluidStackTank(
+ () -> mStoredFluid[index],
+ fluid -> mStoredFluid[index] = fluid,
+ mCapacityPer);
+ }
}
@Override
@@ -272,21 +278,6 @@ public class GT_MetaTileEntity_Hatch_MultiInput extends GT_MetaTileEntity_Hatch_
}
@Override
- public void updateFluidDisplayItem() {
- for (int i = 0; i < 4; i++) {
- updateFluidDisplayItem(i);
- }
- }
-
- public void updateFluidDisplayItem(int index) {
- if (getFluid(index) == null || getFluid(index).amount <= 0) {
- if (ItemList.Display_Fluid.isStackEqual(mInventory[index], true, true)) mInventory[index] = null;
- } else {
- mInventory[index] = GT_Utility.getFluidDisplayStack(getFluid(index), true, !displaysStackSize());
- }
- }
-
- @Override
public boolean useModularUI() {
return true;
}
@@ -298,68 +289,9 @@ public class GT_MetaTileEntity_Hatch_MultiInput extends GT_MetaTileEntity_Hatch_
new Pos2d(88, 43), };
for (int i = 0; i < SLOT_NUMBER; i++) {
- final int slotId = i;
builder.widget(
- new FluidDisplaySlotWidget(inventoryHandler, slotId)
- .setFluidAccessConstructor(() -> constructFluidAccess(slotId))
- .setIHasFluidDisplay(this)
- .setCanDrain(true)
- .setCanFill(!isDrainableStackSeparate())
- .setActionRealClick(FluidDisplaySlotWidget.Action.TRANSFER)
- .setBeforeRealClick((clickData, widget) -> {
- if (NetworkUtils.isClient()) {
- // propagate display item content to
- // actual fluid stored in this tank
- setFluid(
- GT_Utility.getFluidFromDisplayStack(
- widget.getMcSlot()
- .getStack()),
- slotId);
- }
- ItemStack tStackHeld = widget.getContext()
- .getPlayer().inventory.getItemStack();
- FluidStack tFluidHeld = GT_Utility.getFluidForFilledItem(tStackHeld, true);
- return constructFluidAccess(slotId).isMatch(tFluidHeld, slotId);
- })
- .setUpdateFluidDisplayItem(() -> updateFluidDisplayItem(slotId))
- .setBackground(ModularUITextures.FLUID_SLOT)
- .setPos(positions[slotId]));
- }
- }
-
- protected MultiFluidAccess constructFluidAccess(int aSlot) {
- return new MultiFluidAccess(this, aSlot);
- }
-
- protected static class MultiFluidAccess implements IFluidAccess {
-
- private final GT_MetaTileEntity_Hatch_MultiInput mTank;
- private final int mSlot;
-
- public MultiFluidAccess(GT_MetaTileEntity_Hatch_MultiInput aTank, int aSlot) {
- this.mTank = aTank;
- this.mSlot = aSlot;
- }
-
- public boolean isMatch(FluidStack stack, int slot) {
- if (!mTank.hasFluid(stack)) return true;
- if (stack == null) return true;
- return stack.equals(mTank.getFluid(slot));
- }
-
- @Override
- public void set(FluidStack stack) {
- mTank.setFluid(stack, mSlot);
- }
-
- @Override
- public FluidStack get() {
- return mTank.getFluid(mSlot);
- }
-
- @Override
- public int getCapacity() {
- return mTank.getCapacity();
+ new FluidSlotWidget(fluidTanks[i]).setBackground(ModularUITextures.FLUID_SLOT)
+ .setPos(positions[i]));
}
}
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
index a967df47f3..fe3144f3a3 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
@@ -16,7 +16,6 @@ import net.minecraftforge.fluids.*;
import com.gtnewhorizons.modularui.api.math.Alignment;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
-import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
import com.gtnewhorizons.modularui.common.widget.TextWidget;
@@ -32,7 +31,7 @@ import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget;
+import gregtech.common.gui.modularui.widget.FluidLockWidget;
public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch implements IFluidLockable, IAddUIWidgets {
@@ -195,21 +194,6 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
}
@Override
- public void updateFluidDisplayItem() {
- super.updateFluidDisplayItem();
- if (lockedFluidName == null || mMode < 8) mInventory[getLockedDisplaySlot()] = null;
- else {
- FluidStack tLockedFluid = FluidRegistry.getFluidStack(lockedFluidName, 1);
- // Because getStackDisplaySlot() only allow return one int, this place I only can manually set.
- if (tLockedFluid != null) {
- mInventory[getLockedDisplaySlot()] = GT_Utility.getFluidDisplayStack(tLockedFluid, false, true);
- } else {
- mInventory[getLockedDisplaySlot()] = null;
- }
- }
- }
-
- @Override
public boolean isValidSlot(int aIndex) {
// Because getStackDisplaySlot() only allow return one int, this place I only can manually set.
return aIndex != getStackDisplaySlot() && aIndex != getLockedDisplaySlot();
@@ -415,7 +399,7 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
}
@Override
- public boolean allowChangingLockedFluid(String name) {
+ public boolean acceptsFluidLock(String name) {
return true;
}
@@ -484,41 +468,18 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
.setPos(98, 16)
.setSize(71, 45))
- .widget(
- new FluidDisplaySlotWidget(inventoryHandler, getLockedDisplaySlot()).setIHasFluidDisplay(this)
- .setActionRealClick(FluidDisplaySlotWidget.Action.LOCK)
- .setActionDragAndDrop(FluidDisplaySlotWidget.Action.LOCK)
- .setBeforeClick((clickData, widget) -> {
- if (NetworkUtils.isClient()) {
- // propagate
- // display
- // item
- // content to
- // actual
- // fluid
- // stored in
- // this tank
- setDrainableStack(GT_Utility.getFluidFromDisplayStack(mInventory[getStackDisplaySlot()]));
- }
- return true;
- })
- .setBackground(GT_UITextures.TRANSPARENT)
- .setPos(149, 41))
+ .widget(new FluidLockWidget(this).setPos(149, 41))
.widget(
new TextWidget("Locked Fluid").setDefaultColor(COLOR_TEXT_WHITE.get())
.setPos(101, 20))
.widget(TextWidget.dynamicString(() -> {
- final ItemStack lockedDisplayStack = mInventory[getLockedDisplaySlot()];
- return lockedDisplayStack == null ? "None" : lockedDisplayStack.getDisplayName();
+ FluidStack fluidStack = FluidRegistry.getFluidStack(lockedFluidName, 1);
+ return fluidStack != null ? fluidStack.getLocalizedName() : "None";
})
- .setSynced(false)
.setDefaultColor(COLOR_TEXT_WHITE.get())
.setTextAlignment(Alignment.CenterLeft)
.setMaxWidth(65)
.setPos(101, 30))
- // #updateFluidDisplayItem invalidates locked fluid slot
- // if lockedFluidName == null or mMode is incorrect
- .widget(new FakeSyncWidget.StringSyncer(() -> lockedFluidName, val -> lockedFluidName = val))
.widget(new FakeSyncWidget.ByteSyncer(() -> mMode, val -> mMode = val));
}
}