diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 05a4364558..d75261409f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -588,6 +588,15 @@ public final boolean hasFrontFacing() { public boolean isFacingValid(Direction facing) { if (hasFrontFacing() && facing == getFrontFacing()) return false; + var coverContainer = getCoverContainer(); + if (coverContainer.hasCover(facing)) { + // noinspection DataFlowIssue + var coverDefinition = coverContainer.getCoverAtSide(facing).coverDefinition; + var behaviour = coverDefinition.createCoverBehavior(coverContainer, getFrontFacing()); + if (!behaviour.canAttach()) { + return false; + } + } var blockState = getBlockState(); if (blockState.getBlock() instanceof MetaMachineBlock metaMachineBlock) { return metaMachineBlock.rotationState.test(facing); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index 59b75cbc8a..2ba2bde45f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.config.ConfigHolder; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; @@ -17,7 +18,11 @@ import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.core.Direction; import net.minecraft.util.Mth; +import net.minecraftforge.items.IItemHandlerModifiable; + +import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -80,6 +85,26 @@ public void onUnload() { } } + ////////////////////////////////////// + // ****** Capability ********// + ////////////////////////////////////// + + @Override + public @Nullable IItemHandlerModifiable getItemHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getItemHandlerCap(side, useCoverCapability); + } + + @Override + public @Nullable IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getFluidHandlerCap(side, useCoverCapability); + } + ////////////////////////////////////// // ******** Explosion ********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java index 28bde9c8fb..408f4a2f80 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java @@ -4,14 +4,18 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.core.Direction; +import net.minecraftforge.items.IItemHandlerModifiable; import lombok.Getter; +import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -53,4 +57,24 @@ public int getTier() { } protected abstract NotifiableFluidTank createSteamTank(Object... args); + + ////////////////////////////////////// + // ****** Capability ********// + ////////////////////////////////////// + + @Override + public @Nullable IItemHandlerModifiable getItemHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getItemHandlerCap(side, useCoverCapability); + } + + @Override + public @Nullable IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getFluidHandlerCap(side, useCoverCapability); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java index 7429ec9174..f2a033b1eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java @@ -16,6 +16,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; +import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; @@ -171,6 +172,26 @@ public void loadCustomPersistedData(@NotNull CompoundTag tag) { storedAmount = tag.getLong("storedAmount"); } + ////////////////////////////////////// + // ****** Capability ********// + ////////////////////////////////////// + + @Override + public @Nullable IItemHandlerModifiable getItemHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getItemHandlerCap(side, useCoverCapability); + } + + @Override + public @Nullable IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getFluidHandlerCap(side, useCoverCapability); + } + ////////////////////////////////////// // ******* Auto Output *******// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java index bcfebda97c..596eeb7f5b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java @@ -17,6 +17,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; +import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -48,6 +49,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.IItemHandlerModifiable; import com.mojang.blaze3d.MethodsReturnNonnullByDefault; import lombok.Getter; @@ -170,6 +172,26 @@ public void loadCustomPersistedData(@NotNull CompoundTag tag) { if (storedAmount == 0 && !stored.isEmpty()) this.storedAmount = stored.getAmount(); } + ////////////////////////////////////// + // ****** Capability ********// + ////////////////////////////////////// + + @Override + public @Nullable IItemHandlerModifiable getItemHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getItemHandlerCap(side, useCoverCapability); + } + + @Override + public @Nullable IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, boolean useCoverCapability) { + if (side == getFrontFacing()) { + return null; + } + return super.getFluidHandlerCap(side, useCoverCapability); + } + ////////////////////////////////////// // ******* Auto Output *******// //////////////////////////////////////