diff options
author | miozune <miozune@gmail.com> | 2023-05-08 17:25:22 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-08 10:25:22 +0200 |
commit | 4f5d9697557f8aeee32fe2b1cc5e22393a7ff8ad (patch) | |
tree | 28a350d6afca99a0ed5befe62769cb63352a4734 /src/main/java/gregtech/api/metatileentity/implementations | |
parent | 312812a4b8ee14ab2f1ad53ed2a941543942f16e (diff) | |
download | GT5-Unofficial-4f5d9697557f8aeee32fe2b1cc5e22393a7ff8ad.tar.gz GT5-Unofficial-4f5d9697557f8aeee32fe2b1cc5e22393a7ff8ad.tar.bz2 GT5-Unofficial-4f5d9697557f8aeee32fe2b1cc5e22393a7ff8ad.zip |
Migrate to FluidSlotWidget from FluidDisplaySlotWidget (#1963)
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/implementations')
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)); } } |