From e8cd646ef8adc8f856cbf3209fac04487c5f155a Mon Sep 17 00:00:00 2001 From: Mikerooni <139889766+mikerooni@users.noreply.github.com> Date: Sun, 24 Mar 2024 18:44:38 +0100 Subject: [PATCH] 1.1.4 fixes (after dev build 01) (#1006) * fix: filter covers no longer reset their filter mode on opening UI * fix: don't expose creative tank slot as a capability * feat: add infinite source/sink capability to creative tanks * fix: use correct underlying fluid/item transfers in pumps & conveyors * chore: changelog * fix: don't expose creative chest slot as a capability & add cap proxy * chore: oops. * fix: crash when defining a custom coil type --- CHANGELOG.md | 4 ++ .../fluid/InfiniteFluidTransferProxy.java | 39 ++++++++++++++++++ .../item/InfiniteItemTransferProxy.java | 40 +++++++++++++++++++ .../gtceu/common/cover/ConveyorCover.java | 2 +- .../gtceu/common/cover/ItemFilterCover.java | 2 +- .../gtceu/common/cover/PumpCover.java | 2 +- .../machine/storage/CreativeChestMachine.java | 18 ++++++++- .../machine/storage/CreativeTankMachine.java | 19 ++++++++- .../kjs/builders/block/CoilBlockBuilder.java | 3 +- 9 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/InfiniteFluidTransferProxy.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/transfer/item/InfiniteItemTransferProxy.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f18d829e1..6a6c873c52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,10 @@ Version: 1.1.4 - fix large miner crashes - fix fluid drilling rig EU/t usage and add extra tooltips - fix distinct bus mode not working with ghost circuits +- fix item filter mode resetting every time the UI is opened +- fix pumps inserting the same fluid into more than one slot +- fix pump/conveyor covers and other machines being able to extract from a creative tank's internal slot +- fix startup crash when creating custom coils using KJS ### CHANGES: - updated Russian and Chinese translations diff --git a/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/InfiniteFluidTransferProxy.java b/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/InfiniteFluidTransferProxy.java new file mode 100644 index 0000000000..7914194967 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/InfiniteFluidTransferProxy.java @@ -0,0 +1,39 @@ +package com.gregtechceu.gtceu.api.transfer.fluid; + +import com.lowdragmc.lowdraglib.side.fluid.FluidStack; +import com.lowdragmc.lowdraglib.side.fluid.IFluidTransfer; +import net.minecraft.MethodsReturnNonnullByDefault; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.ParametersAreNonnullByDefault; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class InfiniteFluidTransferProxy extends FluidTransferDelegate { + private final boolean infiniteSource; + private final boolean infiniteSink; + + public InfiniteFluidTransferProxy(IFluidTransfer delegate, boolean infiniteSource, boolean infiniteSink) { + super(delegate); + + this.infiniteSource = infiniteSource; + this.infiniteSink = infiniteSink; + } + + @Override + public long fill(int tank, FluidStack resource, boolean simulate, boolean notifyChanges) { + if (infiniteSink) + return resource.getAmount(); + + return super.fill(tank, resource, simulate, notifyChanges); + } + + @NotNull + @Override + public FluidStack drain(int tank, FluidStack resource, boolean simulate, boolean notifyChanges) { + if (infiniteSource) + return resource.copy(); + + return super.drain(tank, resource, simulate, notifyChanges); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/transfer/item/InfiniteItemTransferProxy.java b/src/main/java/com/gregtechceu/gtceu/api/transfer/item/InfiniteItemTransferProxy.java new file mode 100644 index 0000000000..b02a9a492c --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/transfer/item/InfiniteItemTransferProxy.java @@ -0,0 +1,40 @@ +package com.gregtechceu.gtceu.api.transfer.item; + +import com.lowdragmc.lowdraglib.side.item.IItemTransfer; +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.ParametersAreNonnullByDefault; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class InfiniteItemTransferProxy extends ItemTransferDelegate { + private final boolean infiniteSource; + private final boolean infiniteSink; + + public InfiniteItemTransferProxy(IItemTransfer delegate, boolean infiniteSource, boolean infiniteSink) { + super(delegate); + + this.infiniteSource = infiniteSource; + this.infiniteSink = infiniteSink; + } + + @NotNull + @Override + public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate, boolean notifyChanges) { + if (infiniteSink) + return ItemStack.EMPTY; + + return super.insertItem(slot, stack, simulate, notifyChanges); + } + + @NotNull + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate, boolean notifyChanges) { + if (infiniteSource) + return delegate.getStackInSlot(slot).copyWithCount(amount); + + return super.extractItem(slot, amount, simulate, notifyChanges); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index e0fef0e896..ff90eb16a6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -98,7 +98,7 @@ protected boolean isSubscriptionActive() { } protected @Nullable IItemTransfer getOwnItemTransfer() { - return ItemTransferHelper.getItemTransfer(coverHolder.getLevel(), coverHolder.getPos(), attachedSide); + return coverHolder.getItemTransferCap(attachedSide, false); } protected @Nullable IItemTransfer getAdjacentItemTransfer() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index 0b2384e456..49a89d76f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -61,7 +61,7 @@ public Widget createUIWidget() { final var group = new WidgetGroup(0, 0, 176, 85); group.addWidget(new LabelWidget(7, 5, attachItem.getDescriptionId())); group.addWidget(new EnumSelectorWidget<>(7, 61, 18, 18, - ItemFilterMode.VALUES, ItemFilterMode.FILTER_INSERT, this::setFilterMode)); + ItemFilterMode.VALUES, filterMode, this::setFilterMode)); group.addWidget(getItemFilter().openConfigurator(30, 25)); return group; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index f81647db92..6ff19749b5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -106,7 +106,7 @@ protected boolean isSubscriptionActive() { } protected @Nullable IFluidTransfer getOwnFluidTransfer() { - return FluidTransferHelper.getFluidTransfer(coverHolder.getLevel(), coverHolder.getPos(), attachedSide); + return coverHolder.getFluidTransferCap(attachedSide, false); } protected @Nullable IFluidTransfer getAdjacentFluidTransfer() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java index f0f76dd577..71df115429 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java @@ -5,6 +5,8 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.transfer.fluid.InfiniteFluidTransferProxy; +import com.gregtechceu.gtceu.api.transfer.item.InfiniteItemTransferProxy; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.ResourceBorderTexture; @@ -25,6 +27,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; public class CreativeChestMachine extends QuantumChestMachine { public static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(CreativeChestMachine.class, QuantumChestMachine.MANAGED_FIELD_HOLDER); @@ -34,13 +37,26 @@ public class CreativeChestMachine extends QuantumChestMachine { @Persisted @DropSaved private int ticksPerCycle = 1; + private final InfiniteItemTransferProxy capabilityTransferProxy; + public CreativeChestMachine(IMachineBlockEntity holder) { super(holder, GTValues.MAX, -1); + + capabilityTransferProxy = new InfiniteItemTransferProxy(cache, true, true); + } + + @Nullable + @Override + public IItemTransfer getItemTransferCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == null || (useCoverCapability && coverContainer.hasCover(side))) + return super.getItemTransferCap(side, useCoverCapability); + + return capabilityTransferProxy; } @Override protected NotifiableItemStackHandler createCacheItemHandler(Object... args) { - return new NotifiableItemStackHandler(this, 1, IO.BOTH) { + return new NotifiableItemStackHandler(this, 1, IO.BOTH, IO.NONE) { @Override public int getSlotLimit(int slot) { return 1; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java index b2949c16e1..1a1d816295 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java @@ -5,7 +5,9 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.ICapabilityTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.transfer.fluid.InfiniteFluidTransferProxy; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.ResourceBorderTexture; import com.lowdragmc.lowdraglib.gui.texture.TextTexture; @@ -16,6 +18,10 @@ import com.lowdragmc.lowdraglib.syncdata.annotation.DropSaved; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; +import net.minecraft.core.Direction; +import net.minecraftforge.fluids.capability.IFluidHandler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class CreativeTankMachine extends QuantumTankMachine { public static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(CreativeTankMachine.class, QuantumTankMachine.MANAGED_FIELD_HOLDER); @@ -25,14 +31,25 @@ public class CreativeTankMachine extends QuantumTankMachine { @Persisted @DropSaved private int ticksPerCycle = 1; + private final InfiniteFluidTransferProxy capabilityTransferProxy; + public CreativeTankMachine(IMachineBlockEntity holder) { super(holder, GTValues.MAX, -1); + + capabilityTransferProxy = new InfiniteFluidTransferProxy(cache, true, true); } + @Nullable + @Override + public IFluidTransfer getFluidTransferCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == null || (useCoverCapability && coverContainer.hasCover(side))) + return super.getFluidTransferCap(side, useCoverCapability); + return capabilityTransferProxy; + } protected NotifiableFluidTank createCacheFluidHandler(Object... args) { - return new NotifiableFluidTank(this, 1, 1000, IO.BOTH); + return new NotifiableFluidTank(this, 1, 1000, IO.BOTH, IO.NONE); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java index de457378e0..df008665bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java @@ -11,7 +11,6 @@ import dev.latvian.mods.kubejs.generator.AssetJsonGenerator; import lombok.Setter; import lombok.experimental.Accessors; -import net.minecraft.client.renderer.texture.MissingTextureAtlasSprite; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -21,7 +20,7 @@ public class CoilBlockBuilder extends BlockBuilder { public transient int temperature = 0, level = 0, energyDiscount = 1, tier = 0; public transient Material material = GTMaterials.Air; @Setter - public transient ResourceLocation texture = MissingTextureAtlasSprite.getLocation(); + public transient ResourceLocation texture = new ResourceLocation("missingno"); public CoilBlockBuilder(ResourceLocation i) { super(i);