diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md new file mode 100644 index 00000000000..e9aaf5dcade --- /dev/null +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -0,0 +1,71 @@ +--- +title: "Version 8.0.0" +--- + + +# Updating from `7.4.0` to `8.0.0` + +## Machine Refactor + +Many aspects of the machine classes have been refactored and changed in order to streamline the machine system and remove legacy and unnecessary abstraction. + +### `MetaMachine` and `MetaMachineBlockEntity` merge + +- The `MetaMachineBlockEntity`(MMBE) class has been removed, and `MetaMachine`(MM) is now a BlockEntity. +- Most methods and properties of MMBE have been moved onto MM. +- The `IMachineBlockEntity` interface has been removed. Use `MetaMachineBlock` directly instead. +- Many methods common to all block entities have been moved to the `IGregtechBlockEntity` interface. +- Machine instance creation functions have signature `(BlockEntityCreationInfo) -> MetaMachine` instead of `(IMachineBlockEntity) -> MetaMachine` + +References to MMBE can generally be replaced with references to MM: +```java +/////// OLD +if (level.getBlockEntity(getPos()) instanceof MetaMachineBlockEntity mmbe) { + MetaMachine machine = mmbe.getMetaMachine(); + ... +} + +////// NEW +if (level.getBlockEntity(getPos()) instanceof MetaMachine machine) { + ... +} +``` + +The `IMachineBlockEntity holder` argument in machine constructors has been replaced with `BlockEntityCreationInfo info`: +```java +////// OLD +public MetaMachine(IMachineBlockEntity holder); +////// NEW +public MetaMachine(BlockEntityCreationInfo info); +``` +A number of methods have been renamed across a number of different interfaces and classes to ensure consistency with default BlockEntity methods: +- `BlockPos getPipePos()` -> `BlockPos getBlockPos()` +- `Level getPipeLevel()` -> `Level getLevel()` +- `BlockPos getPos()` -> `BlockPos getBlockPos()` +- `BlockState getState()` -> `BlockState getBlockState()` +- `boolean isInvalid()` -> `boolean isRemoved()` +- `void markAsDirty()` -> `void markAsChanged()` + +### Machine constructor and trait initialisation changes + +The constructors for a large number of machines have changed in order to simply machine instance creation. Additionally, methods for trait creation have also been removed and now form part of the machine constructor. + +#### **All Machines** +- Replace the first constructor argument `IMachineBlockEntity holder` with `BlockEntityCreationInfo info` +#### `TieredEnergyMachine` +- Removed `createEnergyContainer` method +- Constructor now has an optional `Supplier` argument +#### `WorkableTieredMachine` +- Removed `createRecipeLogic`, `createImportItemHandler`, `createExportItemHandler`, `createImportFluidHandler`, `createExportFluidHandler` methods +- Added a new constructor: + - `BlockEntityCreationInfo info` + - `int tier` + - `Supplier recipeLogicSupplier` Recipe logic supplier, defaults to the standard `RecipeLogic` class. + - `int importSlots` Item import slots, defaults to the amount of slots in the machine's default recipe type. + - `int exportSlots` Same as above, but for item export slots. + - `int fluidImportSlots` As above, but for fluid import slots. + - `int fluidExportSlots` As above, but for fluid export slots. + - `Int2IntFunction tankScalingFunction` Fluid tank capacity scaling function. +#### `WorkableMultiblockMachine`, `WorkableElectricMultiblockMachine` and `SteamWorkableMachine` +- Removed `createRecipeLogic` method +- Constructor now has an optional `Supplier` argument, defaults to the standard `RecipeLogic` class diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/IMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/IMachineBlock.java deleted file mode 100644 index 3e9a0042a10..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/block/IMachineBlock.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.gregtechceu.gtceu.api.block; - -import com.gregtechceu.gtceu.api.data.RotationState; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; - -import org.jetbrains.annotations.Nullable; - -public interface IMachineBlock extends EntityBlock { - - default Block self() { - return (Block) this; - } - - MachineDefinition getDefinition(); - - default RotationState getRotationState() { - return getDefinition().getRotationState(); - } - - default Direction getFrontFacing(BlockState state) { - return getRotationState() == RotationState.NONE ? Direction.NORTH : state.getValue(getRotationState().property); - } - - @Nullable - default MetaMachine getMachine(BlockGetter level, BlockPos pos) { - return MetaMachine.getMachine(level, pos); - } - - static int colorTinted(BlockState blockState, @Nullable BlockAndTintGetter level, @Nullable BlockPos pos, - int index) { - if (level != null && pos != null) { - var machine = MetaMachine.getMachine(level, pos); - if (machine != null) { - return machine.tintColor(index); - } - } - return -1; - } - - @Nullable - @Override - default BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return getDefinition().getBlockEntityType().create(pos, state); - } - - @Nullable - @Override - default BlockEntityTicker getTicker(Level level, BlockState state, - BlockEntityType blockEntityType) { - if (blockEntityType == getDefinition().getBlockEntityType()) { - if (!level.isClientSide) { - return (pLevel, pPos, pState, pTile) -> { - pTile.setChanged(); - if (pTile instanceof IMachineBlockEntity metaMachine) { - metaMachine.getMetaMachine().serverTick(); - } - if (pTile instanceof ManagedSyncBlockEntity syncObj) { - syncObj.updateTick(); - } - }; - } else { - return (pLevel, pPos, pState, pTile) -> { - if (pTile instanceof IMachineBlockEntity metaMachine) { - metaMachine.getMetaMachine().clientTick(); - } - }; - } - } - return null; - } - - default boolean canConnectRedstone(BlockGetter level, BlockPos pos, Direction side) { - return getMachine(level, pos).canConnectRedstone(side); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java index 37c3130d7d8..f06f8e0b0f9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java @@ -6,20 +6,19 @@ import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; +import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.locale.Language; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -37,9 +36,12 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.storage.loot.LootParams; @@ -60,7 +62,7 @@ @SuppressWarnings("deprecation") @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class MetaMachineBlock extends Block implements IMachineBlock { +public class MetaMachineBlock extends Block implements EntityBlock { @Getter public final MachineDefinition definition; @@ -90,6 +92,10 @@ protected void createBlockStateDefinition(StateDefinition.Builder getDrops(BlockState state, LootParams.Builder builder) { BlockEntity tileEntity = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); var drops = super.getDrops(state, builder); - if (tileEntity instanceof IMachineBlockEntity holder) { - var machine = holder.getMetaMachine(); + if (tileEntity instanceof MetaMachine machine) { if (machine instanceof IMachineModifyDrops machineModifyDrops) { machineModifyDrops.onDrops(drops); } @@ -250,7 +245,7 @@ public List getDrops(BlockState state, LootParams.Builder builder) { public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) { if (pState.hasBlockEntity()) { if (!pState.is(pNewState.getBlock())) { // new block - MetaMachine machine = getMachine(pLevel, pPos); + MetaMachine machine = MetaMachine.getMachine(pLevel, pPos); if (machine instanceof IMachineLife machineLife) { machineLife.onMachineRemoved(); } @@ -266,7 +261,7 @@ public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState var oldFacing = pState.getValue(getRotationState().property); var newFacing = pNewState.getValue(getRotationState().property); if (newFacing != oldFacing) { - var machine = getMachine(pLevel, pPos); + var machine = MetaMachine.getMachine(pLevel, pPos); if (machine != null) { machine.onRotated(oldFacing, newFacing); } @@ -278,7 +273,7 @@ public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState @Override public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - var machine = getMachine(world, pos); + var machine = MetaMachine.getMachine(world, pos); ItemStack itemStack = player.getItemInHand(hand); boolean shouldOpenUi = true; @@ -319,28 +314,32 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player return shouldOpenUi ? InteractionResult.PASS : InteractionResult.CONSUME; } - @Override - @SuppressWarnings("deprecation") // This is fine to override, just not to be called. - public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { - return getMachine(level, pos).getOutputSignal(direction); + ////////////////////////////////////// + // ***** Redstone Signals ****// + ////////////////////////////////////// + + public boolean canConnectRedstone(BlockGetter level, BlockPos pos, Direction side) { + return MetaMachine.getMachine(level, pos).canConnectRedstone(side); } @Override @SuppressWarnings("deprecation") // This is fine to override, just not to be called. - public int getDirectSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { - return getMachine(level, pos).getOutputDirectSignal(direction); + public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return MetaMachine.getMachine(level, pos).getOutputSignal(direction); } @Override @SuppressWarnings("deprecation") // This is fine to override, just not to be called. public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - return getMachine(level, pos).getAnalogOutputSignal(); + return MetaMachine.getMachine(level, pos).getAnalogOutputSignal(); } + ///////// + @Override public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { - var machine = getMachine(level, pos); + var machine = MetaMachine.getMachine(level, pos); if (machine != null) { machine.onNeighborChanged(block, fromPos, isMoving); } @@ -350,7 +349,7 @@ public void neighborChanged(BlockState state, Level level, BlockPos pos, Block b @Override public BlockState getAppearance(BlockState state, BlockAndTintGetter level, BlockPos pos, Direction side, @Nullable BlockState sourceState, @Nullable BlockPos sourcePos) { - var machine = getMachine(level, pos); + var machine = MetaMachine.getMachine(level, pos); if (machine != null) { return machine.getBlockAppearance(state, level, pos, side, sourceState, sourcePos); } @@ -362,4 +361,51 @@ public boolean isValidSpawn(BlockState state, BlockGetter level, BlockPos pos, S EntityType entityType) { return false; } + + public Direction getFrontFacing(BlockState state) { + return getRotationState() == RotationState.NONE ? Direction.NORTH : state.getValue(getRotationState().property); + } + + public static int colorTinted(BlockState blockState, @Nullable BlockAndTintGetter level, @Nullable BlockPos pos, + int index) { + if (level != null && pos != null) { + var machine = MetaMachine.getMachine(level, pos); + if (machine != null) { + return machine.tintColor(index); + } + } + return -1; + } + + @Nullable + @Override + public final BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return getDefinition().getBlockEntityType().create(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, + BlockEntityType blockEntityType) { + if (blockEntityType == getDefinition().getBlockEntityType()) { + if (!level.isClientSide) { + return (pLevel, pPos, pState, pTile) -> { + pTile.setChanged(); + if (pTile instanceof MetaMachine metaMachine) { + metaMachine.serverTick(); + } + if (pTile instanceof ManagedSyncBlockEntity syncObj) { + syncObj.updateTick(); + } + }; + } else { + return (pLevel, pPos, pState, pTile) -> { + if (pTile instanceof MetaMachine metaMachine) { + metaMachine.clientTick(); + } + }; + } + } + return null; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java index 91b4258f295..fccd8a8bc3d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java @@ -168,7 +168,7 @@ public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, pipeTile.setConnection(facing, true, false); if (open && !canConnect) pipeTile.setConnection(facing, false, false); - updateActiveNodeStatus(pipeTile.getPipeLevel(), pos, pipeTile); + updateActiveNodeStatus(pipeTile.getLevel(), pos, pipeTile); } PipeNet net = pipeTile.getPipeNet(); if (net != null) { @@ -198,7 +198,7 @@ public IPipeNode getPipeTile(BlockGetter level, BlockPos protected void onActiveModeChange(Level world, BlockPos pos, boolean isActiveNow, boolean isInitialChange) {} public boolean canConnect(IPipeNode selfTile, Direction facing) { - if (selfTile.getPipeLevel().getBlockState(selfTile.getPipePos().relative(facing)).getBlock() == Blocks.AIR) + if (selfTile.getLevel().getBlockState(selfTile.getBlockPos().relative(facing)).getBlock() == Blocks.AIR) return false; CoverBehavior cover = selfTile.getCoverContainer().getCoverAtSide(facing); if (cover != null && !cover.canPipePassThrough()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/BlockEntityCreationInfo.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/BlockEntityCreationInfo.java new file mode 100644 index 00000000000..9df43b0d71c --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/BlockEntityCreationInfo.java @@ -0,0 +1,7 @@ +package com.gregtechceu.gtceu.api.blockentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public record BlockEntityCreationInfo(BlockEntityType type, BlockPos pos, BlockState state) {} diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java new file mode 100644 index 00000000000..4fd12fcf388 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java @@ -0,0 +1,61 @@ +package com.gregtechceu.gtceu.api.blockentity; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.syncsystem.ISyncManaged; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.extensions.IForgeBlockEntity; + +public interface IGregtechBlockEntity extends ISyncManaged, ITickSubscription, IForgeBlockEntity { + + Level getLevel(); + + BlockPos getBlockPos(); + + BlockState getBlockState(); + + long getOffsetTimer(); + + boolean isRemoved(); + + void notifyBlockUpdate(); + + default void scheduleNeighborShapeUpdate() { + Level level = getLevel(); + BlockPos pos = getBlockPos(); + + if (level == null || pos == null) + return; + + level.getBlockState(pos).updateNeighbourShapes(level, pos, Block.UPDATE_ALL); + } + + void markAsChanged(); + + default boolean isRemote() { + return getLevel() == null ? GTCEu.isClientThread() : getLevel().isClientSide; + } + + default void scheduleRenderUpdate() { + var pos = getBlockPos(); + var level = getLevel(); + if (level != null) { + var state = getLevel().getBlockState(pos); + if (level.isClientSide) { + level.sendBlockUpdated(pos, state, state, Block.UPDATE_IMMEDIATE); + requestModelDataUpdate(); + } else { + level.blockEvent(pos, state.getBlock(), 1, 0); + } + } + } + + default BlockEntity getNeighbor(Direction direction) { + return getLevel().getBlockEntity(getBlockPos().relative(direction)); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java index b4cdcd49fb7..e69de29bb2d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java @@ -1,347 +0,0 @@ -package com.gregtechceu.gtceu.api.blockentity; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.*; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; -import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; -import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; -import com.gregtechceu.gtceu.api.misc.EnergyContainerList; -import com.gregtechceu.gtceu.api.misc.EnergyInfoProviderList; -import com.gregtechceu.gtceu.api.misc.LaserContainerList; -import com.gregtechceu.gtceu.client.model.IBlockEntityRendererBakedModel; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.common.datafixers.TagFixer; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.block.BlockRenderDispatcher; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.energy.IEnergyStorage; - -import appeng.api.networking.IInWorldGridNodeHost; -import appeng.capabilities.Capabilities; -import lombok.Getter; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; - -public class MetaMachineBlockEntity extends ManagedSyncBlockEntity implements IMachineBlockEntity { - - @Getter - protected final SyncDataHolder syncDataHolder = new SyncDataHolder(this); - - @Getter - @SaveField(nbtKey = "machine") - @SyncToClient - public final MetaMachine metaMachine; - @Getter - @SaveField - @SyncToClient - @RerenderOnChanged - private MachineRenderState renderState; - private final long offset = GTValues.RNG.nextInt(20); - - public MetaMachineBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { - super(type, pos, blockState); - this.renderState = getDefinition().defaultRenderState(); - this.metaMachine = getDefinition().createMetaMachine(this); - } - - @Override - public boolean triggerEvent(int id, int para) { - if (id == 1) { // chunk re render - if (level != null && level.isClientSide) { - scheduleRenderUpdate(); - } - return true; - } - return false; - } - - @Override - public void setRenderState(MachineRenderState state) { - this.renderState = state; - if (level != null && !level.isClientSide) { - syncDataHolder.markClientSyncFieldDirty("renderState"); - } - scheduleRenderUpdate(); - } - - @Override - public long getOffset() { - return offset; - } - - @Override - public void setRemoved() { - super.setRemoved(); - metaMachine.onUnload(); - } - - @Override - public void onLoad() { - super.onLoad(); - metaMachine.onLoad(); - } - - @Override - public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, ItemStack held, - Set toolTypes) { - return metaMachine.shouldRenderGrid(player, pos, state, held, toolTypes); - } - - @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { - return metaMachine.sideTips(player, pos, state, toolTypes, side); - } - - @Override - public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { - var result = getCapability(getMetaMachine(), cap, side); - return result.isPresent() ? result : super.getCapability(cap, side); - } - - @Override - public void setChanged() { - if (getLevel() != null) { - getLevel().blockEntityChanged(getBlockPos()); - } - } - - public static LazyOptional getCapability(MetaMachine machine, @NotNull Capability cap, - @Nullable Direction side) { - if (cap == GTCapability.CAPABILITY_COVERABLE) { - return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(machine::getCoverContainer)); - } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> machine)); - } else if (cap == GTCapability.CAPABILITY_WORKABLE) { - if (machine instanceof IWorkable workable) { - return GTCapability.CAPABILITY_WORKABLE.orEmpty(cap, LazyOptional.of(() -> workable)); - } - for (MachineTrait trait : machine.getTraits()) { - if (trait instanceof IWorkable workable) { - return GTCapability.CAPABILITY_WORKABLE.orEmpty(cap, LazyOptional.of(() -> workable)); - } - } - } else if (cap == GTCapability.CAPABILITY_CONTROLLABLE) { - if (machine instanceof IControllable controllable) { - return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable)); - } - for (MachineTrait trait : machine.getTraits()) { - if (trait instanceof IControllable controllable) { - return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable)); - } - } - } else if (cap == GTCapability.CAPABILITY_RECIPE_LOGIC) { - for (MachineTrait trait : machine.getTraits()) { - if (trait instanceof RecipeLogic recipeLogic) { - return GTCapability.CAPABILITY_RECIPE_LOGIC.orEmpty(cap, LazyOptional.of(() -> recipeLogic)); - } - } - } else if (cap == GTCapability.CAPABILITY_ENERGY_CONTAINER) { - if (machine instanceof IEnergyContainer energyContainer) { - return GTCapability.CAPABILITY_ENERGY_CONTAINER.orEmpty(cap, LazyOptional.of(() -> energyContainer)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyContainer.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_ENERGY_CONTAINER.orEmpty(cap, - LazyOptional.of(() -> list.size() == 1 ? list.get(0) : new EnergyContainerList(list))); - } - } else if (cap == GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER) { - if (machine instanceof IEnergyInfoProvider energyInfoProvider) { - return GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER.orEmpty(cap, - LazyOptional.of(() -> energyInfoProvider)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyInfoProvider.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER.orEmpty(cap, - LazyOptional.of(() -> list.size() == 1 ? list.get(0) : new EnergyInfoProviderList(list))); - } - } else if (cap == GTCapability.CAPABILITY_CLEANROOM_RECEIVER) { - if (machine instanceof ICleanroomReceiver cleanroomReceiver) { - return GTCapability.CAPABILITY_CLEANROOM_RECEIVER.orEmpty(cap, - LazyOptional.of(() -> cleanroomReceiver)); - } - } else if (cap == GTCapability.CAPABILITY_MAINTENANCE_MACHINE) { - if (machine instanceof IMaintenanceMachine maintenanceMachine) { - return GTCapability.CAPABILITY_MAINTENANCE_MACHINE.orEmpty(cap, - LazyOptional.of(() -> maintenanceMachine)); - } - } else if (cap == GTCapability.CAPABILITY_TURBINE_MACHINE) { - if (machine instanceof ITurbineMachine turbineMachine) { - return GTCapability.CAPABILITY_TURBINE_MACHINE.orEmpty(cap, - LazyOptional.of(() -> turbineMachine)); - } - } else if (cap == ForgeCapabilities.ITEM_HANDLER) { - var handler = machine.getItemHandlerCap(side, true); - if (handler != null) { - return ForgeCapabilities.ITEM_HANDLER.orEmpty(cap, LazyOptional.of(() -> handler)); - } - } else if (cap == ForgeCapabilities.FLUID_HANDLER) { - var handler = machine.getFluidHandlerCap(side, true); - if (handler != null) { - return ForgeCapabilities.FLUID_HANDLER.orEmpty(cap, LazyOptional.of(() -> handler)); - } - } else if (cap == ForgeCapabilities.ENERGY) { - if (machine instanceof IEnergyStorage energyStorage) { - return ForgeCapabilities.ENERGY.orEmpty(cap, LazyOptional.of(() -> energyStorage)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyStorage.class); - if (!list.isEmpty()) { - // TODO wrap list in the future - return ForgeCapabilities.ENERGY.orEmpty(cap, LazyOptional.of(() -> list.get(0))); - } - } else if (cap == GTCapability.CAPABILITY_LASER) { - if (machine instanceof ILaserContainer energyContainer) { - return GTCapability.CAPABILITY_LASER.orEmpty(cap, LazyOptional.of(() -> energyContainer)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, ILaserContainer.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_LASER.orEmpty(cap, - LazyOptional.of(() -> list.size() == 1 ? list.get(0) : new LaserContainerList(list))); - } - } else if (cap == GTCapability.CAPABILITY_COMPUTATION_PROVIDER) { - if (machine instanceof IOpticalComputationProvider computationProvider) { - return GTCapability.CAPABILITY_COMPUTATION_PROVIDER.orEmpty(cap, - LazyOptional.of(() -> computationProvider)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IOpticalComputationProvider.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_COMPUTATION_PROVIDER.orEmpty(cap, LazyOptional.of(() -> list.get(0))); - } - } else if (cap == GTCapability.CAPABILITY_DATA_ACCESS) { - if (machine instanceof IDataAccessHatch computationProvider) { - return GTCapability.CAPABILITY_DATA_ACCESS.orEmpty(cap, LazyOptional.of(() -> computationProvider)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IDataAccessHatch.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_DATA_ACCESS.orEmpty(cap, LazyOptional.of(() -> list.get(0))); - } - } else if (cap == GTCapability.CAPABILITY_MONITOR_COMPONENT) { - if (machine instanceof IMonitorComponent monitorComponent) { - return GTCapability.CAPABILITY_MONITOR_COMPONENT.orEmpty(cap, LazyOptional.of(() -> monitorComponent)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IMonitorComponent.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_MONITOR_COMPONENT.orEmpty(cap, LazyOptional.of(() -> list.get(0))); - } - } else if (cap == GTCapability.CAPABILITY_CENTRAL_MONITOR) { - if (machine instanceof ICentralMonitor centralMonitor) { - return GTCapability.CAPABILITY_CENTRAL_MONITOR.orEmpty(cap, LazyOptional.of(() -> centralMonitor)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, ICentralMonitor.class); - if (!list.isEmpty()) { - return GTCapability.CAPABILITY_CENTRAL_MONITOR.orEmpty(cap, LazyOptional.of(() -> list.get(0))); - } - } - if (GTCEu.Mods.isAE2Loaded()) { - LazyOptional opt = AE2CallWrapper.getGridNodeHostCapability(cap, machine, side); - if (opt.isPresent()) { - // noinspection unchecked - return (LazyOptional) opt; - } - } - return LazyOptional.empty(); - } - - public static List getCapabilitiesFromTraits(List traits, Direction accessSide, - Class capability) { - if (traits.isEmpty()) return Collections.emptyList(); - List list = new ArrayList<>(); - for (MachineTrait trait : traits) { - if (trait.hasCapability(accessSide) && capability.isInstance(trait)) { - list.add(capability.cast(trait)); - } - } - return list; - } - - /** - * Why, Forge, Why? - * Why must you make me add a method for no good reason? - */ - @SuppressWarnings("unchecked") - @OnlyIn(Dist.CLIENT) - @Override - public AABB getRenderBoundingBox() { - BlockRenderDispatcher blockRenderDispatcher = Minecraft.getInstance().getBlockRenderer(); - BakedModel model = blockRenderDispatcher.getBlockModel(this.getBlockState()); - - if (model instanceof IBlockEntityRendererBakedModel modelWithBER) { - if (modelWithBER.getBlockEntityType() == this.getType()) { - return ((IBlockEntityRendererBakedModel) modelWithBER) - .getRenderBoundingBox(this); - } - } - return new AABB(worldPosition.offset(-1, 0, -1), worldPosition.offset(2, 2, 2)); - } - - @Override - public void load(@NotNull CompoundTag tag) { - TagFixer.fixFluidTags(tag); - if (!tag.contains("machine")) { - var compound = tag.copy(); - tag.put("machine", compound); - } - super.load(tag); - } - - @Override - public void scheduleRenderUpdate() { - var pos = getBlockPos(); - var level = getLevel(); - if (level != null) { - var state = level.getBlockState(pos); - if (level.isClientSide) { - level.sendBlockUpdated(pos, state, state, Block.UPDATE_IMMEDIATE); - } else { - level.blockEvent(pos, state.getBlock(), 1, 0); - } - } - } - - public static class AE2CallWrapper { - - public static LazyOptional getGridNodeHostCapability(Capability cap, MetaMachine machine, - Direction side) { - if (cap == Capabilities.IN_WORLD_GRID_NODE_HOST) { - if (machine instanceof IInWorldGridNodeHost nodeHost) { - return Capabilities.IN_WORLD_GRID_NODE_HOST.orEmpty(cap, LazyOptional.of(() -> nodeHost)); - } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IInWorldGridNodeHost.class); - if (!list.isEmpty()) { - // TODO wrap list in the future (or not.) - return Capabilities.IN_WORLD_GRID_NODE_HOST.orEmpty(cap, LazyOptional.of(() -> list.get(0))); - } - } - return LazyOptional.empty(); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java index 32913faacbc..2059672d0c4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java @@ -14,7 +14,6 @@ import com.gregtechceu.gtceu.api.pipenet.*; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.datafixers.TagFixer; import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -27,7 +26,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -99,10 +97,6 @@ public PipeBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockSt ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - public void scheduleRenderUpdate() { - IPipeNode.super.scheduleRenderUpdate(); - } - @Override public long getOffsetTimer() { return level == null ? offset : (level.getServer().getTickCount() + offset); @@ -283,7 +277,7 @@ private void syncPipeConnections(Direction side, IPipeNode pipe) { private void updateNetworkConnection(Direction side, boolean connected) { LevelPipeNet worldPipeNet = getPipeBlock().getWorldPipeNet((ServerLevel) getLevel()); - worldPipeNet.updateBlockedConnections(getPipePos(), side, !connected); + worldPipeNet.updateBlockedConnections(this.getBlockPos(), side, !connected); } protected int withSideConnection(int blockedConnections, Direction side, boolean connected) { @@ -398,7 +392,7 @@ public Pair onToolClick(Set toolTypes } } else { if (!frameMaterial.isNull()) { - Block.popResource(getLevel(), getPipePos(), + Block.popResource(getLevel(), this.getBlockPos(), GTMaterialBlocks.MATERIAL_BLOCKS.get(TagPrefix.frameGt, frameMaterial).asStack()); frameMaterial = GTMaterials.NULL; return Pair.of(GTToolType.CROWBAR, InteractionResult.sidedSuccess(playerIn.level().isClientSide)); @@ -420,13 +414,14 @@ public int getDefaultPaintingColor() { } public void doExplosion(float explosionPower) { - getLevel().removeBlock(getPipePos(), false); + getLevel().removeBlock(this.getBlockPos(), false); if (!getLevel().isClientSide) { - ((ServerLevel) getLevel()).sendParticles(ParticleTypes.LARGE_SMOKE, getPipePos().getX() + 0.5, - getPipePos().getY() + 0.5, getPipePos().getZ() + 0.5, + ((ServerLevel) getLevel()).sendParticles(ParticleTypes.LARGE_SMOKE, this.getBlockPos().getX() + 0.5, + this.getBlockPos().getY() + 0.5, this.getBlockPos().getZ() + 0.5, 10, 0.2, 0.2, 0.2, 0.0); } - getLevel().explode(null, getPipePos().getX() + 0.5, getPipePos().getY() + 0.5, getPipePos().getZ() + 0.5, + getLevel().explode(null, this.getBlockPos().getX() + 0.5, this.getBlockPos().getY() + 0.5, + this.getBlockPos().getZ() + 0.5, explosionPower, Level.ExplosionInteraction.NONE); } @@ -437,10 +432,4 @@ public static boolean isFaceBlocked(int blockedConnections, Direction side) { public static boolean isConnected(int connections, Direction side) { return (connections & (1 << side.ordinal())) > 0; } - - @Override - public void load(CompoundTag tag) { - TagFixer.fixFluidTags(tag); - super.load(tag); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java b/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java index 51a3d94af9e..49da2760363 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java @@ -1,10 +1,13 @@ package com.gregtechceu.gtceu.api.capability; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity; import com.gregtechceu.gtceu.api.blockentity.ITickSubscription; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; +import com.gregtechceu.gtceu.syncsystem.ISyncManaged; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.core.BlockPos; @@ -31,23 +34,56 @@ import java.util.Objects; import java.util.stream.Collectors; -public interface ICoverable extends ITickSubscription { +public interface ICoverable extends ITickSubscription, ISyncManaged { - Level getLevel(); + IGregtechBlockEntity getHolder(); - BlockPos getPos(); + default Level getLevel() { + return getHolder().getLevel(); + } + + default BlockPos getBlockPos() { + return getHolder().getBlockPos(); + } + + default BlockState getBlockState() { + return getHolder().getBlockState(); + } + + default long getOffsetTimer() { + return getHolder().getOffsetTimer(); + } + + default boolean isRemoved() { + return getHolder().isRemoved(); + } - BlockState getState(); + default void notifyBlockUpdate() { + getHolder().notifyBlockUpdate(); + } - long getOffsetTimer(); + default void scheduleRenderUpdate() { + getHolder().notifyBlockUpdate(); + } - boolean isInValid(); + default void scheduleNeighborShapeUpdate() { + getHolder().scheduleNeighborShapeUpdate(); + } - void notifyBlockUpdate(); + default void markAsChanged() { + getHolder().markAsChanged(); + } - void scheduleRenderUpdate(); + @Nullable + @Override + default TickableSubscription subscribeServerTick(Runnable runnable) { + return getHolder().subscribeServerTick(runnable); + } - void scheduleNeighborShapeUpdate(); + @Override + default void unsubscribe(@Nullable TickableSubscription current) { + getHolder().unsubscribe(current); + } boolean canPlaceCoverOnSide(CoverDefinition definition, Direction side); @@ -109,7 +145,7 @@ default boolean removeCover(boolean dropItself, Direction side, @Nullable Player if (player != null && player.getInventory().add(dropStack)) continue; - Block.popResource(getLevel(), getPos(), dropStack); + Block.popResource(getLevel(), getBlockPos(), dropStack); } notifyBlockUpdate(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/IMonitorComponent.java b/src/main/java/com/gregtechceu/gtceu/api/capability/IMonitorComponent.java index aa9d1cb61fe..002c650a187 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/IMonitorComponent.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/IMonitorComponent.java @@ -15,7 +15,7 @@ default boolean isMonitor() { IGuiTexture getComponentIcon(); - BlockPos getPos(); + BlockPos getBlockPos(); default @Nullable IItemHandler getDataItems() { return null; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java index 779fde8da84..8e08918f169 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java @@ -92,7 +92,7 @@ public void markAsChanged() { */ @MustBeInvokedByOverriders public boolean canAttach() { - var machine = MetaMachine.getMachine(coverHolder.getLevel(), coverHolder.getPos()); + var machine = MetaMachine.getMachine(coverHolder.getLevel(), coverHolder.getBlockPos()); return machine == null || (machine.getDefinition().isAllowCoverOnFront() || !machine.hasFrontFacing() || coverHolder.getFrontFacing() != attachedSide); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/IUICover.java b/src/main/java/com/gregtechceu/gtceu/api/cover/IUICover.java index 4161092b8cd..93d85bd74f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/IUICover.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/IUICover.java @@ -18,7 +18,7 @@ default CoverBehavior self() { @Override default boolean isInvalid() { - return self().coverHolder.isInValid() || self().coverHolder.getCoverAtSide(self().attachedSide) != self(); + return self().coverHolder.isRemoved() || self().coverHolder.getCoverAtSide(self().attachedSide) != self(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java index 6932bf36a67..23ffbbf132d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java @@ -160,7 +160,7 @@ private void loadFilterFromItem() { if (filter instanceof SmartItemFilter smart && container instanceof CoverBehavior cover && cover.coverHolder instanceof MachineCoverContainer mcc) { - var machine = MetaMachine.getMachine(mcc.getLevel(), mcc.getPos()); + var machine = MetaMachine.getMachine(mcc.getLevel(), mcc.getBlockPos()); if (machine != null) { smart.setModeFromMachine(machine.getDefinition().getName()); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/factory/CoverUIFactory.java b/src/main/java/com/gregtechceu/gtceu/api/gui/factory/CoverUIFactory.java index 45b15bb3335..62bdd2601ad 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/factory/CoverUIFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/factory/CoverUIFactory.java @@ -48,7 +48,7 @@ protected CoverBehavior readHolderFromSyncData(FriendlyByteBuf syncData) { @Override protected void writeHolderToSyncData(FriendlyByteBuf syncData, CoverBehavior holder) { - syncData.writeBlockPos(holder.coverHolder.getPos()); + syncData.writeBlockPos(holder.coverHolder.getBlockPos()); syncData.writeEnum(holder.attachedSide); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java b/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java index 0a71e7c5454..220c3a9c4d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.api.gui.factory; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; @@ -36,14 +35,14 @@ protected ModularUI createUITemplate(MetaMachine holder, Player entityPlayer) { protected MetaMachine readHolderFromSyncData(FriendlyByteBuf syncData) { Level world = Minecraft.getInstance().level; if (world == null) return null; - if (world.getBlockEntity(syncData.readBlockPos()) instanceof IMachineBlockEntity holder) { - return holder.getMetaMachine(); + if (world.getBlockEntity(syncData.readBlockPos()) instanceof MetaMachine holder) { + return holder; } return null; } @Override protected void writeHolderToSyncData(FriendlyByteBuf syncData, MetaMachine holder) { - syncData.writeBlockPos(holder.getPos()); + syncData.writeBlockPos(holder.getBlockPos()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java index ec1ffa01db5..2dff532615f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.pattern.BlockPattern; @@ -387,9 +386,8 @@ private MBPattern initializePattern(MultiblockShapeInfo shapeInfo, HashSet parts = gatherBlockDrops(blockMap); diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java index 92d640f9472..cf281d96a37 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java @@ -77,7 +77,7 @@ public void initWidget() { } private SceneWidget createSceneWidget() { - var pos = this.machine.getPos(); + var pos = this.machine.getBlockPos(); SceneWidget sceneWidget = new SceneWidget(4, 4, width - 8, height - 8, this.machine.getLevel()) .setRenderedCore(List.of(pos), null) @@ -111,7 +111,7 @@ private void renderOverlays(WorldSceneRenderer renderer) { for (Direction face : GTUtil.DIRECTIONS) { for (IDirectionalConfigHandler configHandler : configHandlers) { - configHandler.renderOverlay(sceneWidget, new BlockPosFace(machine.getPos(), face)); + configHandler.renderOverlay(sceneWidget, new BlockPosFace(machine.getBlockPos(), face)); } } } @@ -143,7 +143,7 @@ private void addConfigWidgets(SceneWidget sceneWidget) { } protected void onSideSelected(BlockPos pos, Direction side) { - if (!pos.equals(machine.getPos())) + if (!pos.equals(machine.getBlockPos())) return; if (this.selectedSide == side) @@ -166,7 +166,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { if (isMouseOverElement(mouseX, mouseY) && this.selectedSide == lastSide && this.selectedSide != null) { var hover = sceneWidget.getHoverPosFace(); - if (hover != null && hover.pos.equals(machine.getPos()) && hover.facing == this.selectedSide) { + if (hover != null && hover.pos.equals(machine.getBlockPos()) && hover.facing == this.selectedSide) { var cd = new ClickData(); writeClientAction(MOUSE_CLICK_CLIENT_ACTION_ID, buf -> { cd.writeToBuf(buf); diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java index 399ac3c30cc..c4dc9e6c6a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.item; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidPipeProperties; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; @@ -20,12 +20,12 @@ public class DrumMachineItem extends MetaMachineItem { @NotNull private Material mat = GTMaterials.NULL; - protected DrumMachineItem(IMachineBlock block, Properties properties, @NotNull Material mat) { + protected DrumMachineItem(MetaMachineBlock block, Properties properties, @NotNull Material mat) { super(block, properties); this.mat = mat; } - public static DrumMachineItem create(IMachineBlock block, Properties properties, @NotNull Material mat) { + public static DrumMachineItem create(MetaMachineBlock block, Properties properties, @NotNull Material mat) { return new DrumMachineItem(block, properties, mat); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/MetaMachineItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/MetaMachineItem.java index f6ece747ce6..782b65efeb2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/MetaMachineItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/MetaMachineItem.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.item; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; @@ -25,12 +25,12 @@ @MethodsReturnNonnullByDefault public class MetaMachineItem extends BlockItem { - public MetaMachineItem(IMachineBlock block, Properties properties) { - super(block.self(), properties); + public MetaMachineItem(MetaMachineBlock block, Properties properties) { + super(block, properties); } public MachineDefinition getDefinition() { - return ((IMachineBlock) getBlock()).getDefinition(); + return ((MetaMachineBlock) getBlock()).getDefinition(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java index aa8398925b4..65a6b1df1dd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.item; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.misc.forge.QuantumFluidHandlerItemStack; import com.gregtechceu.gtceu.common.machine.storage.QuantumTankMachine; @@ -13,7 +13,7 @@ public class QuantumTankMachineItem extends MetaMachineItem { - public QuantumTankMachineItem(IMachineBlock block, Properties properties) { + public QuantumTankMachineItem(MetaMachineBlock block, Properties properties) { super(block, properties); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java index 59867b18bbb..ac8df4a1755 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java @@ -3,7 +3,9 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; -import com.gregtechceu.gtceu.api.capability.recipe.*; +import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; @@ -17,14 +19,14 @@ import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; -import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.utils.DummyMachineBlockEntity; +import com.gregtechceu.gtceu.utils.DummyRecipeCapabilityHolder; import com.gregtechceu.gtceu.utils.InfiniteEnergyContainer; import net.minecraft.advancements.CriteriaTriggers; @@ -411,7 +413,6 @@ private static boolean isBlockAoEHarvestable(UseOnContext context) { public static void applyHammerDropConversion(ServerLevel world, BlockPos pos, ItemStack tool, BlockState state, List drops, int fortune, float dropChance, RandomSource random) { - // EnchantmentHelper.getEnchantmentLevel(EnchantmentHardHammer.INSTANCE, tool) if (is(tool, GTToolType.HARD_HAMMER)) { List silktouchDrops = getSilkTouchDrop(world, pos, state); for (ItemStack silktouchDrop : silktouchDrops) { @@ -419,24 +420,26 @@ public static void applyHammerDropConversion(ServerLevel world, BlockPos pos, It // Stack lists can be immutable going into Recipe#matches barring no rewrites // Search for forge hammer recipes from all drops individually (only LV or under) - DummyMachineBlockEntity be = new DummyMachineBlockEntity(GTValues.LV, - GTRecipeTypes.FORGE_HAMMER_RECIPES, GTMachineUtils.defaultTankSizeFunction, - Collections.emptyList()); RecipeHandlerList dummyInputs = RecipeHandlerList.of(IO.IN, - new InfiniteEnergyContainer(be.getMetaMachine(), GTValues.V[GTValues.LV], + new InfiniteEnergyContainer(null, GTValues.V[GTValues.LV], GTValues.V[GTValues.LV], 1, GTValues.V[GTValues.LV], 1), - new NotifiableItemStackHandler(be.getMetaMachine(), 1, IO.IN, IO.IN, + new NotifiableItemStackHandler(null, 1, IO.IN, IO.IN, (slots) -> new CustomItemStackHandler(silktouchDrop))); RecipeHandlerList dummyOutputs = RecipeHandlerList.of(IO.OUT, - new NotifiableItemStackHandler(be.getMetaMachine(), 2, IO.OUT)); - be.getMetaMachine().reinitializeHandlers(List.of(dummyInputs, dummyOutputs)); + new NotifiableItemStackHandler(null, 2, IO.OUT)); + DummyRecipeCapabilityHolder capHolder = new DummyRecipeCapabilityHolder(dummyInputs, dummyOutputs); - Iterator hammerRecipes = GTRecipeTypes.FORGE_HAMMER_RECIPES.searchRecipe(be.metaMachine, - r -> RecipeHelper.matchContents(be.metaMachine, r).isSuccess()); + Map, Object2IntMap> cacheChances = new IdentityHashMap<>(); + for (RecipeCapability cap : GTRegistries.RECIPE_CAPABILITIES.values()) { + cacheChances.put(cap, cap.makeChanceCache()); + } + + Iterator hammerRecipes = GTRecipeTypes.FORGE_HAMMER_RECIPES.searchRecipe(capHolder, + r -> RecipeHelper.matchContents(capHolder, r).isSuccess()); GTRecipe hammerRecipe = !hammerRecipes.hasNext() ? null : hammerRecipes.next(); - if (hammerRecipe != null && RecipeHelper.handleRecipeIO(be.metaMachine, hammerRecipe, IO.IN, - be.getMetaMachine().recipeLogic.getChanceCaches()).isSuccess()) { + if (hammerRecipe != null && + RecipeHelper.handleRecipeIO(capHolder, hammerRecipe, IO.IN, cacheChances).isSuccess()) { drops.clear(); TagPrefix prefix = ChemicalHelper.getPrefix(silktouchDrop.getItem()); if (prefix.isEmpty()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/IMachineBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/machine/IMachineBlockEntity.java deleted file mode 100644 index d01fe0f0a98..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/IMachineBlockEntity.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.gregtechceu.gtceu.api.machine; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.block.IMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.IPaintable; -import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraftforge.client.model.data.ModelData; -import net.minecraftforge.client.model.data.ModelProperty; -import net.minecraftforge.common.extensions.IForgeBlockEntity; - -import org.jetbrains.annotations.NotNull; - -/** - * A simple compound Interface for all my TileEntities. - *

- * Also delivers most of the Information about TileEntities. - */ -public interface IMachineBlockEntity extends IToolGridHighlight, IPaintable, IForgeBlockEntity { - - ModelProperty MODEL_DATA_LEVEL = new ModelProperty<>(); - ModelProperty MODEL_DATA_POS = new ModelProperty<>(); - - default BlockEntity self() { - return (BlockEntity) this; - } - - default Level level() { - return self().getLevel(); - } - - default BlockPos pos() { - return self().getBlockPos(); - } - - default void notifyBlockUpdate() { - if (level() != null) { - level().updateNeighborsAt(pos(), level().getBlockState(pos()).getBlock()); - } - } - - default void scheduleRenderUpdate() { - var pos = pos(); - if (level() != null) { - var state = level().getBlockState(pos); - if (level().isClientSide) { - level().sendBlockUpdated(pos, state, state, Block.UPDATE_IMMEDIATE); - self().requestModelDataUpdate(); - } else { - level().blockEvent(pos, state.getBlock(), 1, 0); - } - } - } - - @Override - default @NotNull ModelData getModelData() { - ModelData.Builder data = IForgeBlockEntity.super.getModelData().derive(); - getMetaMachine().updateModelData(data); - return data.build(); - } - - default long getOffsetTimer() { - if (level() == null) return getOffset(); - else if (level().isClientSide()) return GTValues.CLIENT_TIME + getOffset(); - - var server = level().getServer(); - if (server != null) return server.getTickCount() + getOffset(); - return getOffset(); - } - - default MachineDefinition getDefinition() { - if (self().getBlockState().getBlock() instanceof IMachineBlock machineBlock) { - return machineBlock.getDefinition(); - } else { - throw new IllegalStateException("MetaMachineBlockEntity is created for an un available block: " + - self().getBlockState().getBlock()); - } - } - - MachineRenderState getRenderState(); - - void setRenderState(MachineRenderState state); - - MetaMachine getMetaMachine(); - - long getOffset(); - - @Override - default int getPaintingColor() { - return getMetaMachine().getPaintingColor(); - } - - @Override - default void setPaintingColor(int color) { - getMetaMachine().setPaintingColor(color); - } - - @Override - default int getDefaultPaintingColor() { - return getMetaMachine().getDefaultPaintingColor(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java index dc0feb8751d..1e7981d0672 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.machine; +import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; @@ -8,10 +9,7 @@ import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; import com.gregtechceu.gtceu.syncsystem.annotations.*; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.items.IItemHandlerModifiable; @@ -36,48 +34,8 @@ public MachineCoverContainer(MetaMachine machine) { } @Override - public void markAsChanged() { - machine.markAsChanged(); - } - - @Override - public BlockState getState() { - return machine.getBlockState(); - } - - @Override - public Level getLevel() { - return machine.getLevel(); - } - - @Override - public BlockPos getPos() { - return machine.getPos(); - } - - @Override - public long getOffsetTimer() { - return machine.getOffsetTimer(); - } - - @Override - public void notifyBlockUpdate() { - machine.notifyBlockUpdate(); - } - - @Override - public void scheduleRenderUpdate() { - machine.scheduleRenderUpdate(); - } - - @Override - public void scheduleNeighborShapeUpdate() { - machine.scheduleNeighborShapeUpdate(); - } - - @Override - public boolean isInValid() { - return machine.isInValid(); + public IGregtechBlockEntity getHolder() { + return machine; } @Override @@ -108,17 +66,6 @@ public boolean shouldRenderBackSide() { return !machine.getBlockState().canOcclude(); } - @Nullable - @Override - public TickableSubscription subscribeServerTick(Runnable runnable) { - return machine.subscribeServerTick(runnable); - } - - @Override - public void unsubscribe(@Nullable TickableSubscription current) { - machine.unsubscribe(current); - } - @Override public CoverBehavior getCoverAtSide(Direction side) { return switch (side) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index 73db1803309..01b6204239c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.machine; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; @@ -43,7 +43,7 @@ /** * Representing basic information of a machine. */ -public class MachineDefinition implements Supplier { +public class MachineDefinition implements Supplier { public static final IdMapper RENDER_STATE_REGISTRY = new IdMapper<>(512); @@ -59,8 +59,6 @@ public class MachineDefinition implements Supplier { private Supplier itemSupplier; @Setter private Supplier> blockEntityTypeSupplier; - @Setter - private Function machineSupplier; @Getter @Setter private @NotNull GTRecipeType @NotNull [] recipeTypes; @@ -156,10 +154,6 @@ public BlockEntityType getBlockEntityType() { return blockEntityTypeSupplier.get(); } - public MetaMachine createMetaMachine(IMachineBlockEntity blockEntity) { - return machineSupplier.apply(blockEntity); - } - public ItemStack asStack() { return new ItemStack(getItem()); } @@ -174,8 +168,8 @@ public VoxelShape getShape(Direction direction) { } @Override - public IMachineBlock get() { - return (IMachineBlock) blockSupplier.get(); + public MetaMachineBlock get() { + return (MetaMachineBlock) blockSupplier.get(); } public String getName() { 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 bed3c3cc006..e6d2c52c5aa 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -1,14 +1,14 @@ package com.gregtechceu.gtceu.api.machine; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity; import com.gregtechceu.gtceu.api.blockentity.IPaintable; -import com.gregtechceu.gtceu.api.blockentity.ITickSubscription; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.IControllable; -import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.capability.IToolable; +import com.gregtechceu.gtceu.api.capability.*; +import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.RotationState; @@ -17,13 +17,15 @@ import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.machine.feature.*; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; -import com.gregtechceu.gtceu.api.misc.IOFilteredInvWrapper; -import com.gregtechceu.gtceu.api.misc.IOFluidHandlerList; +import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; +import com.gregtechceu.gtceu.api.misc.*; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; +import com.gregtechceu.gtceu.client.model.IBlockEntityRendererBakedModel; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.util.ModelUtils; import com.gregtechceu.gtceu.common.cover.FluidFilterCover; @@ -32,12 +34,12 @@ import com.gregtechceu.gtceu.common.item.tool.behavior.ToolModeSwitchBehavior; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -45,13 +47,19 @@ import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.locale.Language; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; @@ -60,40 +68,49 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelProperty; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandlerModifiable; +import appeng.api.networking.IInWorldGridNodeHost; +import appeng.capabilities.Capabilities; import com.mojang.datafixers.util.Pair; +import lombok.AccessLevel; import lombok.Getter; +import lombok.Setter; import org.jetbrains.annotations.MustBeInvokedByOverriders; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnknownNullability; import java.util.*; import java.util.function.Consumer; import java.util.function.Predicate; +import javax.annotation.OverridingMethodsMustInvokeSuper; import javax.annotation.ParametersAreNonnullByDefault; import static com.gregtechceu.gtceu.api.item.tool.ToolHelper.getBehaviorsTag; -/** - * an abstract layer of gregtech machine. - * Because I have to implement BlockEntities for both fabric and forge platform. - * All fundamental features will be implemented here. - * To add additional features, you can see {@link IMachineFeature} - */ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class MetaMachine implements ISyncManaged, IToolable, ITickSubscription, IToolGridHighlight, - IFancyTooltip, IPaintable, IRedstoneSignalMachine { +public class MetaMachine extends ManagedSyncBlockEntity implements IGregtechBlockEntity, IToolable, IToolGridHighlight, + IFancyTooltip, IPaintable, IMachineFeature { + + public static final ModelProperty MODEL_DATA_LEVEL = new ModelProperty<>(); + public static final ModelProperty MODEL_DATA_POS = new ModelProperty<>(); @Getter protected final SyncDataHolder syncDataHolder = new SyncDataHolder(this); @@ -103,24 +120,35 @@ public class MetaMachine implements ISyncManaged, IToolable, ITickSubscription, @SyncToClient @Nullable private UUID ownerUUID; - @Getter - public final IMachineBlockEntity holder; + @Getter @SyncToClient @SaveField(nbtKey = "cover") protected final MachineCoverContainer coverContainer; + @Getter @SaveField @SyncToClient @RerenderOnChanged private int paintingColor = -1; + @Getter protected final List traits; + + @Getter + @SaveField + @SyncToClient + @RerenderOnChanged + private MachineRenderState renderState; + @Getter(value = AccessLevel.PROTECTED) + private final long offset = GTValues.RNG.nextInt(20); + private final List serverTicks; private final List waitingToAdd; - public MetaMachine(IMachineBlockEntity holder) { - this.holder = holder; + public MetaMachine(BlockEntityCreationInfo info) { + super(info); + this.renderState = getDefinition().defaultRenderState(); this.coverContainer = new MachineCoverContainer(this); this.traits = new ArrayList<>(); this.serverTicks = new ArrayList<>(); @@ -128,77 +156,57 @@ public MetaMachine(IMachineBlockEntity holder) { } ////////////////////////////////////// - // ***** Initialization ******// + // ***** Machine Lifecycle ******// ////////////////////////////////////// - @Override - public void markAsChanged() { - if (getHolder() instanceof ManagedSyncBlockEntity syncBlockEntity) { - syncBlockEntity.markAsChanged(); + public void onMachinePlaced(@Nullable LivingEntity player, ItemStack stack) { + if (player instanceof ServerPlayer sPlayer) { + ownerUUID = sPlayer.getUUID(); } - } - - public @Nullable Level getLevel() { - return holder.level(); - } - - public BlockPos getPos() { - return holder.pos(); - } - - public BlockState getBlockState() { - return holder.self().getBlockState(); - } - - public void setOwnerUUID(UUID uuid) { - ownerUUID = uuid; - syncDataHolder.markClientSyncFieldDirty("ownerUUID"); - } - - public boolean isRemote() { - return getLevel() == null ? GTCEu.isClientThread() : getLevel().isClientSide; - } - public void notifyBlockUpdate() { - holder.notifyBlockUpdate(); - } - - public void scheduleRenderUpdate() { - holder.scheduleRenderUpdate(); + if (this instanceof IDropSaveMachine dropSaveMachine) { + CompoundTag tag = stack.getTag(); + if (tag != null) { + dropSaveMachine.loadFromItem(tag); + } + } } - public void scheduleNeighborShapeUpdate() { - Level level = getLevel(); - BlockPos pos = getPos(); - - if (level == null) return; - - level.getBlockState(pos).updateNeighbourShapes(level, pos, Block.UPDATE_ALL); + public void onRemoved() { + for (Direction direction : GTUtil.DIRECTIONS) { + getCoverContainer().removeCover(direction, null); + } + if (this instanceof IMachineLife l) l.onMachineRemoved(); } - public void setPaintingColor(int color) { - if (color == this.paintingColor) return; - - this.paintingColor = color; - syncDataHolder.markClientSyncFieldDirty("paintingColor"); - this.onPaintingColorChanged(color); + @OverridingMethodsMustInvokeSuper + public void onLoad() { + traits.forEach(MachineTrait::onMachineLoad); + coverContainer.onLoad(); + // update the painted model property if the machine is painted MachineRenderState renderState = getRenderState(); - if (renderState.hasProperty(GTMachineModelProperties.IS_PAINTED)) { + if (renderState.hasProperty(GTMachineModelProperties.IS_PAINTED) && + this.isPainted() != renderState.getValue(GTMachineModelProperties.IS_PAINTED)) { setRenderState(renderState.setValue(GTMachineModelProperties.IS_PAINTED, this.isPainted())); } } - public void onPaintingColorChanged(int color) {} - - public long getOffsetTimer() { - return holder.getOffsetTimer(); + public void setRenderState(MachineRenderState renderState) { + this.renderState = renderState; + if (level != null && !level.isClientSide) { + syncDataHolder.markClientSyncFieldDirty("renderState"); + } + scheduleRenderUpdate(); } - public boolean isInValid() { - return holder.self().isRemoved(); + @Override + public final void setRemoved() { + super.setRemoved(); + onUnload(); } + @OverridingMethodsMustInvokeSuper public void onUnload() { traits.forEach(MachineTrait::onMachineUnLoad); coverContainer.onUnload(); @@ -208,18 +216,6 @@ public void onUnload() { serverTicks.clear(); } - public void onLoad() { - traits.forEach(MachineTrait::onMachineLoad); - coverContainer.onLoad(); - - // update the painted model property if the machine is painted - MachineRenderState renderState = getRenderState(); - if (renderState.hasProperty(GTMachineModelProperties.IS_PAINTED) && - this.isPainted() != renderState.getValue(GTMachineModelProperties.IS_PAINTED)) { - setRenderState(renderState.setValue(GTMachineModelProperties.IS_PAINTED, this.isPainted())); - } - } - ////////////////////////////////////// // ***** Tickable Manager ****// ////////////////////////////////////// @@ -276,7 +272,7 @@ private void executeTick() { if (tickable.isStillSubscribed()) { tickable.run(); } - if (isInValid()) break; + if (isRemoved()) break; if (!tickable.isStillSubscribed()) { iter.remove(); } @@ -286,6 +282,7 @@ private void executeTick() { ////////////////////////////////////// // ******* Interaction *******// ////////////////////////////////////// + /** * Called when a player clicks this meta tile entity with a tool * @@ -293,7 +290,7 @@ private void executeTick() { * animations will be played */ @Override - public final Pair onToolClick(Set<@NotNull GTToolType> toolType, ItemStack itemStack, + public final Pair onToolClick(Set toolType, ItemStack itemStack, UseOnContext context) { // the side hit from the machine grid var playerIn = context.getPlayer(); @@ -390,7 +387,7 @@ protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, BlockHitResult hitResult) { - var controllable = GTCapabilityHelper.getControllable(getLevel(), getPos(), gridSide); + var controllable = GTCapabilityHelper.getControllable(getLevel(), getBlockPos(), gridSide); if (controllable == null) return InteractionResult.PASS; if (!isRemote()) { controllable.setWorkingEnabled(!controllable.isWorkingEnabled()); @@ -457,12 +454,53 @@ protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand @Nullable public static MetaMachine getMachine(BlockGetter level, BlockPos pos) { - if (level.getBlockEntity(pos) instanceof IMachineBlockEntity machineBlockEntity) { - return machineBlockEntity.getMetaMachine(); + if (level.getBlockEntity(pos) instanceof MetaMachine m) { + return m; } return null; } + public void notifyBlockUpdate() { + if (getLevel() != null) { + getLevel().updateNeighborsAt(getBlockPos(), getLevel().getBlockState(getBlockPos()).getBlock()); + } + } + + public @UnknownNullability Level getLevel() { + return super.getLevel(); + } + + public void setOwnerUUID(UUID uuid) { + ownerUUID = uuid; + syncDataHolder.markClientSyncFieldDirty("ownerUUID"); + } + + @Override + public boolean triggerEvent(int id, int para) { + if (id == 1) { // chunk re render + if (level != null && level.isClientSide) { + scheduleRenderUpdate(); + } + return true; + } + return false; + } + + public void setPaintingColor(int color) { + if (color == this.paintingColor) return; + + this.paintingColor = color; + syncDataHolder.markClientSyncFieldDirty("paintingColor"); + this.onPaintingColorChanged(color); + + MachineRenderState renderState = getRenderState(); + if (renderState.hasProperty(GTMachineModelProperties.IS_PAINTED)) { + setRenderState(renderState.setValue(GTMachineModelProperties.IS_PAINTED, this.isPainted())); + } + } + + public void onPaintingColorChanged(int color) {} + /** * All traits should be initialized while MetaMachine is creating. you cannot add them on the fly. */ @@ -475,7 +513,7 @@ public void clearInventory(IItemHandlerModifiable inventory) { ItemStack stackInSlot = inventory.getStackInSlot(i); if (!stackInSlot.isEmpty()) { inventory.setStackInSlot(i, ItemStack.EMPTY); - Block.popResource(getLevel(), getPos(), stackInSlot); + Block.popResource(getLevel(), getBlockPos(), stackInSlot); } } } @@ -532,7 +570,12 @@ public void addDebugOverlayText(Consumer lines) { } public MachineDefinition getDefinition() { - return holder.getDefinition(); + if (getBlockState().getBlock() instanceof MetaMachineBlock machineBlock) { + return machineBlock.getDefinition(); + } else { + throw new IllegalStateException( + "MetaMachine created for an incompatible block: " + getBlockState().getBlock()); + } } public RotationState getRotationState() { @@ -551,7 +594,7 @@ public boolean canSetIoOnSide(@Nullable Direction direction) { return !hasFrontFacing() || getFrontFacing() != direction; } - public static @NotNull Direction getFrontFacing(@Nullable MetaMachine machine) { + public static Direction getFrontFacing(@Nullable MetaMachine machine) { return machine == null ? Direction.NORTH : machine.getFrontFacing(); } @@ -588,7 +631,7 @@ public void setFrontFacing(Direction facing) { var blockState = getBlockState(); if (isFacingValid(facing)) { - getLevel().setBlockAndUpdate(getPos(), blockState.setValue(getRotationState().property, facing)); + getLevel().setBlockAndUpdate(getBlockPos(), blockState.setValue(getRotationState().property, facing)); } if (getLevel() != null && !getLevel().isClientSide) { @@ -596,9 +639,11 @@ public void setFrontFacing(Direction facing) { } } - public static @NotNull Direction getUpwardFacing(@Nullable MetaMachine machine) { - return machine == null || !machine.allowExtendedFacing() ? Direction.NORTH : - machine.getBlockState().getValue(GTBlockStateProperties.UPWARDS_FACING); + @Override + public @NotNull ModelData getModelData() { + ModelData.Builder data = super.getModelData().derive(); + updateModelData(data); + return data.build(); } public Direction getUpwardsFacing() { @@ -617,7 +662,7 @@ public void setUpwardsFacing(@NotNull Direction upwardsFacing) { var blockState = getBlockState(); if (blockState.getBlock() instanceof MetaMachineBlock && blockState.getValue(GTBlockStateProperties.UPWARDS_FACING) != upwardsFacing) { - getLevel().setBlockAndUpdate(getPos(), + getLevel().setBlockAndUpdate(getBlockPos(), blockState.setValue(GTBlockStateProperties.UPWARDS_FACING, upwardsFacing)); if (getLevel() != null && !getLevel().isClientSide) { notifyBlockUpdate(); @@ -664,15 +709,24 @@ public void updateModelData(ModelData.Builder builder) { } } - public MachineRenderState getRenderState() { - return this.getHolder().getRenderState(); - } + public final long getOffsetTimer() { + if (getLevel() == null) return getOffset(); + else if (getLevel().isClientSide()) return GTValues.CLIENT_TIME + getOffset(); - public void setRenderState(MachineRenderState state) { - this.getHolder().setRenderState(state); + var server = getLevel().getServer(); + if (server == null) return getOffset(); + return server.getTickCount() + getOffset(); } @Override + public boolean isRemote() { + return IGregtechBlockEntity.super.isRemote(); + } + + //////////////////////////////// + // ***** Redstone Signals ****// + //////////////////////////////// + public int getOutputSignal(@Nullable Direction side) { if (side == null) return 0; @@ -683,10 +737,11 @@ public int getOutputSignal(@Nullable Direction side) { return cover.getRedstoneSignalOutput(); } - @Override - public boolean canConnectRedstone(Direction side) { - if (side == null) return false; + public int getAnalogOutputSignal() { + return 0; + } + public boolean canConnectRedstone(@NotNull Direction side) { // For some reason, Minecraft requests the output signal from the opposite side... CoverBehavior cover = getCoverContainer().getCoverAtSide(side); if (cover == null) return false; @@ -707,7 +762,57 @@ public boolean canConnectRedstone(Direction side) { } ////////////////////////////////////// - // ****** Capability ********// + // ******** GUI *********// + ////////////////////////////////////// + @Override + public IGuiTexture getFancyTooltipIcon() { + return GuiTextures.INFO_ICON; + } + + @Override + public final List getFancyTooltip() { + var tooltips = new ArrayList(); + onAddFancyInformationTooltip(tooltips); + return tooltips; + } + + @Override + public boolean showFancyTooltip() { + return !getFancyTooltip().isEmpty(); + } + + public void onAddFancyInformationTooltip(List tooltips) { + getDefinition().getTooltipBuilder().accept(getDefinition().asStack(), tooltips); + String mainKey = String.format("%s.machine.%s.tooltip", getDefinition().getId().getNamespace(), + getDefinition().getId().getPath()); + if (Language.getInstance().has(mainKey)) { + tooltips.add(0, Component.translatable(mainKey)); + } + } + + @Override + public int getDefaultPaintingColor() { + return getDefinition().getDefaultPaintingColor(); + } + + @SuppressWarnings("unchecked") + @OnlyIn(Dist.CLIENT) + @Override + public AABB getRenderBoundingBox() { + BlockRenderDispatcher blockRenderDispatcher = Minecraft.getInstance().getBlockRenderer(); + BakedModel model = blockRenderDispatcher.getBlockModel(this.getBlockState()); + + if (model instanceof IBlockEntityRendererBakedModel modelWithBER) { + if (modelWithBER.getBlockEntityType() == this.getType()) { + return ((IBlockEntityRendererBakedModel) modelWithBER) + .getRenderBoundingBox(this); + } + } + return new AABB(worldPosition.offset(-1, 0, -1), worldPosition.offset(2, 2, 2)); + } + + ////////////////////////////////////// + // ******** Capabilities *********// ////////////////////////////////////// public Predicate getItemCapFilter(@Nullable Direction side, IO io) { @@ -794,37 +899,175 @@ public IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, bool return cover != null ? cover.getFluidHandlerCap(handlerList) : handlerList; } - ////////////////////////////////////// - // ******** GUI *********// - ////////////////////////////////////// @Override - public IGuiTexture getFancyTooltipIcon() { - return GuiTextures.INFO_ICON; - } - - @Override - public final List getFancyTooltip() { - var tooltips = new ArrayList(); - onAddFancyInformationTooltip(tooltips); - return tooltips; + public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + var result = getCapability(this, cap, side); + return result.isPresent() ? result : super.getCapability(cap, side); + } + + private static List getCapabilitiesFromTraits(List traits, @Nullable Direction accessSide, + Class capability) { + if (traits.isEmpty()) return Collections.emptyList(); + List list = new ArrayList<>(); + for (MachineTrait trait : traits) { + if (trait.hasCapability(accessSide) && capability.isInstance(trait)) { + list.add(capability.cast(trait)); + } + } + return list; + } + + public static @NotNull LazyOptional getCapability(MetaMachine machine, @NotNull Capability cap, + @Nullable Direction side) { + if (cap == GTCapability.CAPABILITY_COVERABLE) { + return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(machine::getCoverContainer)); + } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { + return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> machine)); + } else if (cap == GTCapability.CAPABILITY_WORKABLE) { + if (machine instanceof IWorkable workable) { + return GTCapability.CAPABILITY_WORKABLE.orEmpty(cap, LazyOptional.of(() -> workable)); + } + for (MachineTrait trait : machine.getTraits()) { + if (trait instanceof IWorkable workable) { + return GTCapability.CAPABILITY_WORKABLE.orEmpty(cap, LazyOptional.of(() -> workable)); + } + } + } else if (cap == GTCapability.CAPABILITY_CONTROLLABLE) { + if (machine instanceof IControllable controllable) { + return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable)); + } + for (MachineTrait trait : machine.getTraits()) { + if (trait instanceof IControllable controllable) { + return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable)); + } + } + } else if (cap == GTCapability.CAPABILITY_RECIPE_LOGIC) { + for (MachineTrait trait : machine.getTraits()) { + if (trait instanceof RecipeLogic recipeLogic) { + return GTCapability.CAPABILITY_RECIPE_LOGIC.orEmpty(cap, LazyOptional.of(() -> recipeLogic)); + } + } + } else if (cap == GTCapability.CAPABILITY_ENERGY_CONTAINER) { + if (machine instanceof IEnergyContainer energyContainer) { + return GTCapability.CAPABILITY_ENERGY_CONTAINER.orEmpty(cap, LazyOptional.of(() -> energyContainer)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyContainer.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_ENERGY_CONTAINER.orEmpty(cap, + LazyOptional.of(() -> list.size() == 1 ? list.get(0) : new EnergyContainerList(list))); + } + } else if (cap == GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER) { + if (machine instanceof IEnergyInfoProvider energyInfoProvider) { + return GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER.orEmpty(cap, + LazyOptional.of(() -> energyInfoProvider)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyInfoProvider.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER.orEmpty(cap, + LazyOptional.of(() -> list.size() == 1 ? list.get(0) : new EnergyInfoProviderList(list))); + } + } else if (cap == GTCapability.CAPABILITY_CLEANROOM_RECEIVER) { + if (machine instanceof ICleanroomReceiver cleanroomReceiver) { + return GTCapability.CAPABILITY_CLEANROOM_RECEIVER.orEmpty(cap, + LazyOptional.of(() -> cleanroomReceiver)); + } + } else if (cap == GTCapability.CAPABILITY_MAINTENANCE_MACHINE) { + if (machine instanceof IMaintenanceMachine maintenanceMachine) { + return GTCapability.CAPABILITY_MAINTENANCE_MACHINE.orEmpty(cap, + LazyOptional.of(() -> maintenanceMachine)); + } + } else if (cap == GTCapability.CAPABILITY_TURBINE_MACHINE) { + if (machine instanceof ITurbineMachine turbineMachine) { + return GTCapability.CAPABILITY_TURBINE_MACHINE.orEmpty(cap, + LazyOptional.of(() -> turbineMachine)); + } + } else if (cap == ForgeCapabilities.ITEM_HANDLER) { + var handler = machine.getItemHandlerCap(side, true); + if (handler != null) { + return ForgeCapabilities.ITEM_HANDLER.orEmpty(cap, LazyOptional.of(() -> handler)); + } + } else if (cap == ForgeCapabilities.FLUID_HANDLER) { + var handler = machine.getFluidHandlerCap(side, true); + if (handler != null) { + return ForgeCapabilities.FLUID_HANDLER.orEmpty(cap, LazyOptional.of(() -> handler)); + } + } else if (cap == ForgeCapabilities.ENERGY) { + if (machine instanceof IEnergyStorage energyStorage) { + return ForgeCapabilities.ENERGY.orEmpty(cap, LazyOptional.of(() -> energyStorage)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyStorage.class); + if (!list.isEmpty()) { + // TODO wrap list in the future + return ForgeCapabilities.ENERGY.orEmpty(cap, LazyOptional.of(() -> list.get(0))); + } + } else if (cap == GTCapability.CAPABILITY_LASER) { + if (machine instanceof ILaserContainer energyContainer) { + return GTCapability.CAPABILITY_LASER.orEmpty(cap, LazyOptional.of(() -> energyContainer)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, ILaserContainer.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_LASER.orEmpty(cap, + LazyOptional.of(() -> list.size() == 1 ? list.get(0) : new LaserContainerList(list))); + } + } else if (cap == GTCapability.CAPABILITY_COMPUTATION_PROVIDER) { + if (machine instanceof IOpticalComputationProvider computationProvider) { + return GTCapability.CAPABILITY_COMPUTATION_PROVIDER.orEmpty(cap, + LazyOptional.of(() -> computationProvider)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IOpticalComputationProvider.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_COMPUTATION_PROVIDER.orEmpty(cap, LazyOptional.of(() -> list.get(0))); + } + } else if (cap == GTCapability.CAPABILITY_DATA_ACCESS) { + if (machine instanceof IDataAccessHatch computationProvider) { + return GTCapability.CAPABILITY_DATA_ACCESS.orEmpty(cap, LazyOptional.of(() -> computationProvider)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IDataAccessHatch.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_DATA_ACCESS.orEmpty(cap, LazyOptional.of(() -> list.get(0))); + } + } else if (cap == GTCapability.CAPABILITY_MONITOR_COMPONENT) { + if (machine instanceof IMonitorComponent monitorComponent) { + return GTCapability.CAPABILITY_MONITOR_COMPONENT.orEmpty(cap, LazyOptional.of(() -> monitorComponent)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IMonitorComponent.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_MONITOR_COMPONENT.orEmpty(cap, LazyOptional.of(() -> list.get(0))); + } + } else if (cap == GTCapability.CAPABILITY_CENTRAL_MONITOR) { + if (machine instanceof ICentralMonitor centralMonitor) { + return GTCapability.CAPABILITY_CENTRAL_MONITOR.orEmpty(cap, LazyOptional.of(() -> centralMonitor)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, ICentralMonitor.class); + if (!list.isEmpty()) { + return GTCapability.CAPABILITY_CENTRAL_MONITOR.orEmpty(cap, LazyOptional.of(() -> list.get(0))); + } + } + if (GTCEu.Mods.isAE2Loaded()) { + LazyOptional opt = MetaMachine.AE2CallWrapper.getGridNodeHostCapability(cap, machine, side); + if (opt.isPresent()) { + // noinspection unchecked + return (LazyOptional) opt; + } + } + return LazyOptional.empty(); } - @Override - public boolean showFancyTooltip() { - return !getFancyTooltip().isEmpty(); - } + public static class AE2CallWrapper { - public void onAddFancyInformationTooltip(List tooltips) { - getDefinition().getTooltipBuilder().accept(getDefinition().asStack(), tooltips); - String mainKey = String.format("%s.machine.%s.tooltip", getDefinition().getId().getNamespace(), - getDefinition().getId().getPath()); - if (Language.getInstance().has(mainKey)) { - tooltips.add(0, Component.translatable(mainKey)); + public static LazyOptional getGridNodeHostCapability(Capability cap, MetaMachine machine, + Direction side) { + if (cap == Capabilities.IN_WORLD_GRID_NODE_HOST) { + if (machine instanceof IInWorldGridNodeHost nodeHost) { + return Capabilities.IN_WORLD_GRID_NODE_HOST.orEmpty(cap, LazyOptional.of(() -> nodeHost)); + } + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IInWorldGridNodeHost.class); + if (!list.isEmpty()) { + // TODO wrap list in the future (or not.) + return Capabilities.IN_WORLD_GRID_NODE_HOST.orEmpty(cap, LazyOptional.of(() -> list.get(0))); + } + } + return LazyOptional.empty(); } } - - @Override - public int getDefaultPaintingColor() { - return getDefinition().getDefaultPaintingColor(); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java index d61cafe6651..b6e8c23bac7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.api.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; @@ -43,28 +43,22 @@ public class SimpleGeneratorMachine extends WorkableTieredMachine @Getter private final float hazardStrengthPerOperation; - public SimpleGeneratorMachine(IMachineBlockEntity holder, int tier, - float hazardStrengthPerOperation, Int2IntFunction tankScalingFunction, - Object... args) { - super(holder, tier, tankScalingFunction, args); + public SimpleGeneratorMachine(BlockEntityCreationInfo info, int tier, + float hazardStrengthPerOperation, Int2IntFunction tankScalingFunction) { + super(info, tier, tankScalingFunction); + + energyContainer.setSideOutputCondition(side -> !hasFrontFacing() || side == getFrontFacing()); this.hazardStrengthPerOperation = hazardStrengthPerOperation; } - public SimpleGeneratorMachine(IMachineBlockEntity holder, int tier, Int2IntFunction tankScalingFunction, - Object... args) { - this(holder, tier, 0.25f, tankScalingFunction, args); + public SimpleGeneratorMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { + this(info, tier, 0.25f, tankScalingFunction); } + ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - @Override - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { - var energyContainer = super.createEnergyContainer(args); - energyContainer.setSideOutputCondition(side -> !hasFrontFacing() || side == getFrontFacing()); - return energyContainer; - } - @Override protected boolean isEnergyEmitter() { return true; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index 41bb3cbe453..3805be9758c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.gui.GuiTextures; @@ -105,40 +106,29 @@ public class SimpleTieredMachine extends WorkableTieredMachine @Nullable protected ISubscription exportItemSubs, exportFluidSubs, energySubs; - public SimpleTieredMachine(IMachineBlockEntity holder, int tier, Int2IntFunction tankScalingFunction, - Object... args) { - super(holder, tier, tankScalingFunction, args); + public SimpleTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { + super(info, tier, tankScalingFunction); this.outputFacingItems = hasFrontFacing() ? getFrontFacing().getOpposite() : Direction.UP; this.outputFacingFluids = outputFacingItems; - this.chargerInventory = createChargerItemHandler(args); - this.circuitInventory = createCircuitItemHandler(args); - } - ////////////////////////////////////// - // ***** Initialization ******// - ////////////////////////////////////// - - protected CustomItemStackHandler createChargerItemHandler(Object... args) { - var handler = new CustomItemStackHandler() { + this.chargerInventory = new CustomItemStackHandler() { public int getSlotLimit(int slot) { return 1; } }; - handler.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || + chargerInventory.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && GTCapabilityHelper.getForgeEnergyItem(item) != null)); - return handler; - } - protected NotifiableItemStackHandler createCircuitItemHandler(Object... args) { - return new NotifiableItemStackHandler(this, 1, IO.IN, IO.NONE) + this.circuitInventory = new NotifiableItemStackHandler(this, 1, IO.IN, IO.NONE) .setFilter(IntCircuitBehaviour::isIntegratedCircuit); } ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// + @Override public void onLoad() { super.onLoad(); @@ -249,9 +239,9 @@ protected void updateAutoOutputSubscription() { var outputFacingItems = getOutputFacingItems(); var outputFacingFluids = getOutputFacingFluids(); if ((isAutoOutputItems() && !exportItems.isEmpty() && outputFacingItems != null && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacingItems)) || + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacingItems)) || (isAutoOutputFluids() && !exportFluids.isEmpty() && outputFacingFluids != null && - GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), outputFacingFluids))) { + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), outputFacingFluids))) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); 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 794b8e5e332..bd3f7374033 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.editor.EditableUI; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; @@ -17,6 +18,8 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.util.Mth; +import java.util.function.Function; + import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -28,24 +31,29 @@ public class TieredEnergyMachine extends TieredMachine implements ITieredMachine public final NotifiableEnergyContainer energyContainer; protected TickableSubscription explosionSub; - public TieredEnergyMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, tier); - energyContainer = createEnergyContainer(args); + public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, + Function energyContainerSupplier) { + super(info, tier); + energyContainer = energyContainerSupplier.apply(this); } - ////////////////////////////////////// - // ***** Initialization ******// - ////////////////////////////////////// + public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { long tierVoltage = GTValues.V[tier]; if (isEnergyEmitter()) { - return NotifiableEnergyContainer.emitterContainer(this, + energyContainer = NotifiableEnergyContainer.emitterContainer(this, + tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage()); + } else { + energyContainer = NotifiableEnergyContainer.receiverContainer(this, tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage()); - } else return NotifiableEnergyContainer.receiverContainer(this, - tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage()); + } } + ////////////////////////////////////// + // ***** Initialization ******// + ////////////////////////////////////// + @Override public void onLoad() { super.onLoad(); @@ -115,9 +123,7 @@ protected static EditableUI createEnergyBar progressBar.setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP); progressBar.setBackground(GuiTextures.ENERGY_BAR_BACKGROUND); return progressBar; - }, (progressBar, machine) -> { - progressBar.setProgressSupplier( - () -> machine.energyContainer.getEnergyStored() * 1d / machine.energyContainer.getEnergyCapacity()); - }); + }, (progressBar, machine) -> progressBar.setProgressSupplier( + () -> machine.energyContainer.getEnergyStored() * 1d / machine.energyContainer.getEnergyCapacity())); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredMachine.java index 40fe9099ac3..1b5b1f9d3c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import lombok.Getter; @@ -9,8 +10,8 @@ public class TieredMachine extends MetaMachine implements ITieredMachine { @Getter protected final int tier; - public TieredMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public TieredMachine(BlockEntityCreationInfo info, int tier) { + super(info); this.tier = tier; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java index 5cd77a6358d..5e7d723a943 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.trait.*; @@ -20,6 +21,7 @@ import org.jetbrains.annotations.VisibleForTesting; import java.util.*; +import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @@ -38,24 +40,16 @@ public abstract class WorkableTieredMachine extends TieredEnergyMachine implemen @Setter @SaveField public int activeRecipeType; - @Getter - public final Int2IntFunction tankScalingFunction; @Nullable @Getter @Setter private ICleanroomProvider cleanroom; @SaveField - public final NotifiableItemStackHandler importItems; - @SaveField - public final NotifiableItemStackHandler exportItems; - @SaveField - public final NotifiableFluidTank importFluids; - @SaveField - public final NotifiableFluidTank exportFluids; + public final NotifiableItemStackHandler importItems, exportItems; @SaveField - public final NotifiableComputationContainer importComputation; + public final NotifiableFluidTank importFluids, exportFluids; @SaveField - public final NotifiableComputationContainer exportComputation; + public final NotifiableComputationContainer importComputation, exportComputation; @Getter protected final Map> capabilitiesProxy; @Getter @@ -70,75 +64,53 @@ public abstract class WorkableTieredMachine extends TieredEnergyMachine implemen protected boolean isMuffled; protected boolean previouslyMuffled = true; - public WorkableTieredMachine(IMachineBlockEntity holder, int tier, Int2IntFunction tankScalingFunction, - Object... args) { - super(holder, tier, args); + public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, + Function recipeLogicSupplier, int importSlots, + int exportSlots, + int fluidImportSlots, int fluidExportSlots, Int2IntFunction tankScalingFunction) { + super(info, tier); this.overclockTier = getMaxOverclockTier(); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; - this.tankScalingFunction = tankScalingFunction; this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); this.traitSubscriptions = new ArrayList<>(); - this.recipeLogic = createRecipeLogic(args); - this.importItems = createImportItemHandler(args); - this.exportItems = createExportItemHandler(args); - this.importFluids = createImportFluidHandler(args); - this.exportFluids = createExportFluidHandler(args); - this.importComputation = createImportComputationContainer(args); - this.exportComputation = createExportComputationContainer(args); + this.recipeLogic = recipeLogicSupplier.apply(this); + this.importItems = new NotifiableItemStackHandler(this, importSlots, IO.IN, IO.BOTH); + this.exportItems = new NotifiableItemStackHandler(this, exportSlots, IO.OUT); + this.importFluids = new NotifiableFluidTank(this, fluidImportSlots, tankScalingFunction.applyAsInt(getTier()), + IO.IN, IO.BOTH); + this.exportFluids = new NotifiableFluidTank(this, fluidExportSlots, tankScalingFunction.applyAsInt(getTier()), + IO.OUT); + this.importComputation = new NotifiableComputationContainer(this, IO.IN, true); + this.exportComputation = new NotifiableComputationContainer(this, IO.OUT, false); + } + + public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { + super(info, tier); + this.overclockTier = getMaxOverclockTier(); + this.recipeTypes = getDefinition().getRecipeTypes(); + this.activeRecipeType = 0; + this.capabilitiesProxy = new EnumMap<>(IO.class); + this.capabilitiesFlat = new EnumMap<>(IO.class); + this.traitSubscriptions = new ArrayList<>(); + this.recipeLogic = new RecipeLogic(this); + this.importItems = new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), + IO.IN); + this.exportItems = new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), + IO.OUT); + this.importFluids = new NotifiableFluidTank(this, getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), + tankScalingFunction.applyAsInt(getTier()), IO.IN); + this.exportFluids = new NotifiableFluidTank(this, getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), + tankScalingFunction.applyAsInt(getTier()), IO.OUT); + this.importComputation = new NotifiableComputationContainer(this, IO.IN, true); + this.exportComputation = new NotifiableComputationContainer(this, IO.OUT, false); } ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - @Override - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { - long tierVoltage = GTValues.V[getTier()]; - if (isEnergyEmitter()) { - return RecipeAmperageEnergyContainer.makeEmitterContainer(this, tierVoltage * 64L, - tierVoltage, getMaxInputOutputAmperage()); - } else { - return RecipeAmperageEnergyContainer.makeReceiverContainer(this, tierVoltage * 64L, - tierVoltage, getMaxInputOutputAmperage()); - } - } - - protected NotifiableItemStackHandler createImportItemHandler(Object... args) { - return new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN); - } - - protected NotifiableItemStackHandler createExportItemHandler(Object... args) { - return new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT); - } - - protected NotifiableFluidTank createImportFluidHandler(Object... args) { - return new NotifiableFluidTank(this, getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), - this.tankScalingFunction.applyAsInt(this.getTier()), IO.IN); - } - - protected NotifiableFluidTank createExportFluidHandler(Object... args) { - return new NotifiableFluidTank(this, getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), - this.tankScalingFunction.applyAsInt(this.getTier()), IO.OUT); - } - - protected NotifiableComputationContainer createImportComputationContainer(Object... args) { - boolean transmitter = true; - if (args.length > 0 && args[args.length - 1] instanceof Boolean isTransmitter) { - transmitter = isTransmitter; - } - return new NotifiableComputationContainer(this, IO.IN, transmitter); - } - - protected NotifiableComputationContainer createExportComputationContainer(Object... args) { - return new NotifiableComputationContainer(this, IO.OUT, false); - } - - protected RecipeLogic createRecipeLogic(Object... args) { - return new RecipeLogic(this); - } - @Override public void onLoad() { super.onLoad(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java index 86bb8b68348..4d4edb0c46e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java @@ -34,7 +34,7 @@ default void spreadEnvironmentalHazard() { if (self().getLevel() instanceof ServerLevel serverLevel) { IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(serverLevel, - self().getPos().relative(self().getFrontFacing()), self().getFrontFacing().getOpposite()); + self().getBlockPos().relative(self().getFrontFacing()), self().getFrontFacing().getOpposite()); if (container != null && container.getHazardCanBeInserted(getConditionToEmit()) > getHazardStrengthPerOperation()) { container.addHazard(getConditionToEmit(), getHazardStrengthPerOperation()); @@ -42,7 +42,7 @@ default void spreadEnvironmentalHazard() { } var savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); - savedData.addZone(self().getPos(), getHazardStrengthPerOperation(), true, + savedData.addZone(self().getBlockPos(), getHazardStrengthPerOperation(), true, HazardProperty.HazardTrigger.INHALATION, getConditionToEmit()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java index 8493f730910..7c62d616ba2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java @@ -62,7 +62,7 @@ public interface IExhaustVentMachine extends IMachineFeature { */ default boolean checkVenting() { if (isNeedsVenting()) { - tryDoVenting(self().getLevel(), self().getPos()); + tryDoVenting(self().getLevel(), self().getBlockPos()); } return !isNeedsVenting(); } @@ -73,7 +73,7 @@ default boolean checkVenting() { default boolean isVentingBlocked() { Level level = self().getLevel(); Direction ventingSide = getVentingDirection(); - BlockPos ventingBlockPos = self().getPos().relative(ventingSide); + BlockPos ventingBlockPos = self().getBlockPos().relative(ventingSide); BlockState state = level.getBlockState(ventingBlockPos); return state.canOcclude() || Shapes.blockOccudes(state.getCollisionShape(level, ventingBlockPos), diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java index bf1c40a6b88..44f35b1e1c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java @@ -24,7 +24,7 @@ default void checkWeatherOrTerrainExplosion(float explosionPower, double additio if (!shouldWeatherOrTerrainExplosion()) return; var machine = self(); var level = machine.getLevel(); - var pos = machine.getPos(); + var pos = machine.getBlockPos(); if (GTValues.RNG.nextInt(1000) == 0) { for (Direction side : GTUtil.DIRECTIONS) { var fluidState = level.getBlockState(pos.relative(side)).getFluidState(); @@ -47,7 +47,7 @@ default void checkWeatherOrTerrainExplosion(float explosionPower, double additio } default void doExplosion(float explosionPower) { - doExplosion(self().getPos(), explosionPower); + doExplosion(self().getBlockPos(), explosionPower); } default void doExplosion(BlockPos pos, float explosionPower) { @@ -62,7 +62,7 @@ default void doExplosion(BlockPos pos, float explosionPower) { default void setOnFire(double additionalFireChance) { var machine = self(); var level = machine.getLevel(); - var pos = machine.getPos(); + var pos = machine.getBlockPos(); boolean isFirstFireSpawned = false; for (Direction side : GTUtil.DIRECTIONS) { if (level.isEmptyBlock(pos.relative(side))) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java index 41144c5946c..f13c10b0af1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java @@ -34,7 +34,7 @@ default void spreadLocalizedHazard() { if (self().getLevel() instanceof ServerLevel serverLevel) { IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(serverLevel, - self().getPos().relative(self().getFrontFacing()), self().getFrontFacing().getOpposite()); + self().getBlockPos().relative(self().getFrontFacing()), self().getFrontFacing().getOpposite()); if (container != null && container.getHazardCanBeInserted(getConditionToEmit()) > getHazardSizePerOperation()) { container.addHazard(getConditionToEmit(), getHazardSizePerOperation()); @@ -42,7 +42,7 @@ default void spreadLocalizedHazard() { } var savedData = LocalizedHazardSavedData.getOrCreate(serverLevel); - savedData.addSphericalZone(self().getPos(), getHazardSizePerOperation(), false, + savedData.addSphericalZone(self().getBlockPos(), getHazardSizePerOperation(), false, HazardProperty.HazardTrigger.INHALATION, getConditionToEmit()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRedstoneSignalMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRedstoneSignalMachine.java deleted file mode 100644 index 145eefb84b8..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRedstoneSignalMachine.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import net.minecraft.core.Direction; - -import org.jetbrains.annotations.Nullable; - -public interface IRedstoneSignalMachine extends IMachineFeature { - - default int getOutputSignal(@Nullable Direction side) { - return 0; - } - - default int getOutputDirectSignal(Direction direction) { - return 0; - } - - default int getAnalogOutputSignal() { - return 0; - } - - default boolean canConnectRedstone(Direction side) { - return false; - } - - /** - * Call to update output signal. - * also see {@link IRedstoneSignalMachine#getOutputSignal(Direction)} and - * {@link IRedstoneSignalMachine#getOutputDirectSignal(Direction)} - */ - default void updateSignal() { - var level = self().getLevel(); - if (!level.isClientSide) { - self().notifyBlockUpdate(); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java index 5b504ccfa09..074723db931 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.machine.feature; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.gui.factory.MachineUIFactory; import com.lowdragmc.lowdraglib.gui.modular.IUIHolder; @@ -33,13 +32,12 @@ default InteractionResult tryToOpenUI(Player player, InteractionHand hand, Block @Override default boolean isInvalid() { - return self().isInValid(); + return self().isRemoved(); } @Override default boolean isRemote() { - var level = self().getLevel(); - return level == null ? GTCEu.isClientThread() : level.isClientSide; + return self().isRemote(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java index 90a20071f83..788d7fdec68 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java @@ -26,14 +26,14 @@ public interface IMufflerMachine extends IMultiPart, IEnvironmentalHazardEmitter * @return true if front face is free and contains only air blocks in 1x1 area OR has a duct block on it. */ default boolean isFrontFaceFree() { - var frontPos = self().getPos().relative(self().getFrontFacing()); + var frontPos = self().getBlockPos().relative(self().getFrontFacing()); return self().getLevel().getBlockState(frontPos).isAir() || GTCapabilityHelper.getHazardContainer(self().getLevel(), frontPos, self().getFrontFacing().getOpposite()) != null; } default void emitPollutionParticles() { - var pos = self().getPos(); + var pos = self().getBlockPos(); var facing = self().getFrontFacing(); IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(self().getLevel(), diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java index 3f46cf2765b..58ba7ce2a43 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java @@ -150,7 +150,7 @@ default void damageRotor(int damageAmount) { default boolean isFrontFaceFree() { final var facing = self().getFrontFacing(); final var up = facing.getAxis() == Direction.Axis.Y ? Direction.NORTH : Direction.UP; - final var pos = self().getPos(); + final var pos = self().getBlockPos(); final var level = self().getLevel(); for (int dLeft = -1; dLeft < 2; dLeft++) { for (int dUp = -1; dUp < 2; dUp++) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index 112c5566288..a4ea83d5a11 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.machine.multiblock; import com.gregtechceu.gtceu.api.block.ICoilType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.common.block.CoilBlock; import net.minecraft.MethodsReturnNonnullByDefault; @@ -17,8 +17,8 @@ public class CoilWorkableElectricMultiblockMachine extends WorkableElectricMulti @Getter private ICoilType coilType = CoilBlock.CoilType.CUPRONICKEL; - public CoilWorkableElectricMultiblockMachine(IMachineBlockEntity holder) { - super(holder); + public CoilWorkableElectricMultiblockMachine(BlockEntityCreationInfo info) { + super(info); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java index 9e70e772dea..fee56e23d70 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java @@ -3,8 +3,8 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IParallelHatch; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; @@ -62,8 +62,8 @@ public class MultiblockControllerMachine extends MetaMachine implements IMultiCo @SyncToClient protected boolean isFlipped; - public MultiblockControllerMachine(IMachineBlockEntity holder) { - super(holder); + public MultiblockControllerMachine(BlockEntityCreationInfo info) { + super(info); } ////////////////////////////////////// @@ -95,7 +95,7 @@ public void onUnload() { @NotNull public MultiblockState getMultiblockState() { if (multiblockState == null) { - multiblockState = new MultiblockState(getLevel(), getPos()); + multiblockState = new MultiblockState(getLevel(), getBlockPos()); } return multiblockState; } @@ -118,7 +118,7 @@ protected void onPartsUpdated() { protected void updatePartPositions() { this.partPositions = this.parts.isEmpty() ? new BlockPos[0] : - this.parts.stream().map(part -> part.self().getPos()).toArray(BlockPos[]::new); + this.parts.stream().map(part -> part.self().getBlockPos()).toArray(BlockPos[]::new); syncDataHolder.markClientSyncFieldDirty("partPositions"); } @@ -149,7 +149,7 @@ public Optional getParallelHatch() { @Override public void asyncCheckPattern(long periodID) { - if ((getMultiblockState().hasError() || !isFormed) && (getHolder().getOffset() + periodID) % 4 == 0 && + if ((getMultiblockState().hasError() || !isFormed) && (getOffset() + periodID) % 4 == 0 && checkPatternWithTryLock()) { // per second if (getLevel() instanceof ServerLevel serverLevel) { serverLevel.getServer().execute(() -> { @@ -217,7 +217,7 @@ public void onStructureInvalid() { */ @Override public void onPartUnload() { - parts.removeIf(part -> part.self().isInValid()); + parts.removeIf(part -> part.self().isRemoved()); getMultiblockState().setError(MultiblockState.UNLOAD_ERROR); if (getLevel() instanceof ServerLevel serverLevel) { MultiblockWorldSavedData.getOrCreate(serverLevel).addAsyncLogic(this); @@ -252,7 +252,7 @@ public void setUpwardsFacing(@NotNull Direction upwardsFacing) { var blockState = getBlockState(); if (blockState.getBlock() instanceof MetaMachineBlock && blockState.getValue(GTBlockStateProperties.UPWARDS_FACING) != upwardsFacing) { - getLevel().setBlockAndUpdate(getPos(), + getLevel().setBlockAndUpdate(getBlockPos(), blockState.setValue(GTBlockStateProperties.UPWARDS_FACING, upwardsFacing)); if (getLevel() != null && !getLevel().isClientSide) { notifyBlockUpdate(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java index 4954cbb2915..0b7802a67c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.machine.multiblock; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -22,8 +22,8 @@ public class TieredWorkableElectricMultiblockMachine extends WorkableElectricMul @Getter protected int overclockTier; - public TieredWorkableElectricMultiblockMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, args); + public TieredWorkableElectricMultiblockMachine(BlockEntityCreationInfo info, int tier) { + super(info); this.tier = tier; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index 3585044097d..a539f87542b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine.multiblock; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.IParallelHatch; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; @@ -8,13 +9,13 @@ import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.*; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; +import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; @@ -34,6 +35,7 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @@ -50,8 +52,13 @@ public class WorkableElectricMultiblockMachine extends WorkableMultiblockMachine @Getter protected boolean batchEnabled; - public WorkableElectricMultiblockMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public WorkableElectricMultiblockMachine(BlockEntityCreationInfo info, + Function recipeLogicSupplier) { + super(info, recipeLogicSupplier); + } + + public WorkableElectricMultiblockMachine(BlockEntityCreationInfo info) { + super(info); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java index d1065d67482..43a14b50c53 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.api.machine.multiblock; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.IMufflableMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; @@ -37,6 +37,7 @@ import org.jetbrains.annotations.VisibleForTesting; import java.util.*; +import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @@ -78,16 +79,21 @@ public abstract class WorkableMultiblockMachine extends MultiblockControllerMach @SyncToClient protected VoidingMode voidingMode = VoidingMode.VOID_NONE; - public WorkableMultiblockMachine(IMachineBlockEntity holder, Object... args) { - super(holder); + public WorkableMultiblockMachine(BlockEntityCreationInfo info, + Function recipeLogicSupplier) { + super(info); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; - this.recipeLogic = createRecipeLogic(args); + this.recipeLogic = recipeLogicSupplier.apply(this); this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); this.traitSubscriptions = new ArrayList<>(); } + public WorkableMultiblockMachine(BlockEntityCreationInfo info) { + this(info, RecipeLogic::new); + } + public void setMuffled(boolean muffled) { isMuffled = muffled; syncDataHolder.markClientSyncFieldDirty("isMuffled"); @@ -105,10 +111,6 @@ public void onUnload() { recipeLogic.inValid(); } - protected RecipeLogic createRecipeLogic(Object... args) { - return new RecipeLogic(this); - } - ////////////////////////////////////// // *** Multiblock LifeCycle ***// ////////////////////////////////////// @@ -124,7 +126,7 @@ public void onStructureFormed() { Long2ObjectMap ioMap = getMultiblockState().getMatchContext().getOrCreate("ioMap", Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (io == IO.NONE) continue; var handlerLists = part.getRecipeHandlers(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java index a51764d1adb..f4e4630d4da 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; @@ -25,11 +25,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnmodifiableView; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.SortedSet; +import java.util.*; import javax.annotation.ParametersAreNonnullByDefault; @@ -43,8 +39,8 @@ public class MultiblockPartMachine extends MetaMachine implements IMultiPart { private @Nullable RecipeHandlerList handlerList; - public MultiblockPartMachine(IMachineBlockEntity holder) { - super(holder); + public MultiblockPartMachine(BlockEntityCreationInfo info) { + super(info); } ////////////////////////////////////// @@ -114,7 +110,7 @@ public void onUnload() { // Need to copy if > 1 so that we can call removedFromController safely without CME Set toIter = controllers.size() > 1 ? new ObjectOpenHashSet<>(controllers) : controllers; for (IMultiController controller : toIter) { - if (serverLevel.isLoaded(controller.self().getPos())) { + if (serverLevel.isLoaded(controller.self().getBlockPos())) { removedFromController(controller); controller.onPartUnload(); } @@ -131,7 +127,7 @@ public void onUnload() { @MustBeInvokedByOverriders @Override public void removedFromController(IMultiController controller) { - controllerPositions.remove(controller.self().getPos()); + controllerPositions.remove(controller.self().getBlockPos()); controllers.remove(controller); if (controllers.isEmpty()) { @@ -146,7 +142,7 @@ public void removedFromController(IMultiController controller) { @MustBeInvokedByOverriders @Override public void addedToController(IMultiController controller) { - controllerPositions.add(controller.self().getPos()); + controllerPositions.add(controller.self().getBlockPos()); controllers.add(controller); syncDataHolder.markClientSyncFieldDirty("controllerPositions"); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java index fe934dd779f..d27f64e6476 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; @@ -29,8 +29,8 @@ public class TieredIOPartMachine extends TieredPartMachine implements IControlla @RerenderOnChanged protected boolean workingEnabled; - public TieredIOPartMachine(IMachineBlockEntity holder, int tier, IO io) { - super(holder, tier); + public TieredIOPartMachine(BlockEntityCreationInfo info, int tier, IO io) { + super(info, tier); this.io = io; this.workingEnabled = true; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredPartMachine.java index becbaf3bd68..e3af3eda8b0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredPartMachine.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.machine.multiblock.part; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import net.minecraft.MethodsReturnNonnullByDefault; @@ -16,8 +16,8 @@ public class TieredPartMachine extends MultiblockPartMachine implements ITieredM @Getter protected final int tier; - public TieredPartMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public TieredPartMachine(BlockEntityCreationInfo info, int tier) { + super(info); this.tier = tier; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java index 634ee83fded..91409caea89 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java @@ -1,18 +1,17 @@ package com.gregtechceu.gtceu.api.machine.steam; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.PredicatedImageWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IExhaustVentMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -32,7 +31,6 @@ import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.fluids.FluidType; import com.google.common.collect.Tables; import lombok.Getter; @@ -56,10 +54,10 @@ public class SimpleSteamMachine extends SteamWorkableMachine implements IExhaust @SaveField private boolean needsVenting; - public SimpleSteamMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder, isHighPressure, args); - this.importItems = createImportItemHandler(args); - this.exportItems = createExportItemHandler(args); + public SimpleSteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) { + super(info, isHighPressure); + this.importItems = createImportItemHandler(); + this.exportItems = createExportItemHandler(); MachineRenderState renderState = getRenderState(); if (renderState.hasProperty(GTMachineModelProperties.VENT_DIRECTION)) { @@ -72,16 +70,11 @@ public SimpleSteamMachine(IMachineBlockEntity holder, boolean isHighPressure, Ob // ***** Initialization *****// ////////////////////////////////////// - @Override - protected NotifiableFluidTank createSteamTank(Object... args) { - return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN); - } - - protected NotifiableItemStackHandler createImportItemHandler(@SuppressWarnings("unused") Object... args) { + protected NotifiableItemStackHandler createImportItemHandler() { return new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN); } - protected NotifiableItemStackHandler createExportItemHandler(@SuppressWarnings("unused") Object... args) { + protected NotifiableItemStackHandler createExportItemHandler() { return new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index 9401567fb01..2214cdc6ec9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.api.machine.steam; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; @@ -85,9 +86,10 @@ public abstract class SteamBoilerMachine extends SteamWorkableMachine @Nullable protected ISubscription steamTankSubs; - public SteamBoilerMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder, isHighPressure, args); - this.waterTank = createWaterTank(args); + public SteamBoilerMachine(BlockEntityCreationInfo info, boolean isHighPressure) { + super(info, isHighPressure, RecipeLogic::new, + m -> new NotifiableFluidTank(m, 1, 16 * FluidType.BUCKET_VOLUME, IO.OUT)); + this.waterTank = createWaterTank(); this.waterTank.setFilter(fluid -> fluid.getFluid().is(GTMaterials.Water.getFluidTag())); } @@ -95,12 +97,7 @@ public SteamBoilerMachine(IMachineBlockEntity holder, boolean isHighPressure, Ob // ***** Initialization *****// ////////////////////////////////////// - @Override - protected NotifiableFluidTank createSteamTank(Object... args) { - return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.OUT); - } - - protected NotifiableFluidTank createWaterTank(@SuppressWarnings("unused") Object... args) { + protected NotifiableFluidTank createWaterTank() { return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN); } @@ -140,7 +137,7 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { protected void updateAutoOutputSubscription() { if (Direction.stream().filter(direction -> direction != getFrontFacing() && direction != Direction.DOWN) - .anyMatch(direction -> GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), direction))) { + .anyMatch(direction -> GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), direction))) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); @@ -152,7 +149,7 @@ protected void autoOutput() { if (getOffsetTimer() % 5 == 0) { steamTank.exportToNearby(Direction.stream() .filter(direction -> direction != getFrontFacing() && direction != Direction.DOWN) - .filter(direction -> GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), direction)) + .filter(direction -> GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), direction)) .toArray(Direction[]::new)); updateAutoOutputSubscription(); } @@ -202,9 +199,9 @@ protected void updateCurrentTemperature() { doExplosion(2.0f); } else this.hasNoWater = !hasDrainedWater; if (filledSteam == 0 && hasDrainedWater && getLevel() instanceof ServerLevel serverLevel) { - final float x = getPos().getX() + 0.5F; - final float y = getPos().getY() + 0.5F; - final float z = getPos().getZ() + 0.5F; + final float x = getBlockPos().getX() + 0.5F; + final float y = getBlockPos().getY() + 0.5F; + final float z = getBlockPos().getZ() + 0.5F; serverLevel.sendParticles(ParticleTypes.CLOUD, x + getFrontFacing().getStepX() * 0.6, @@ -345,7 +342,7 @@ public ModularUI createUI(Player entityPlayer) { @Override public void animateTick(RandomSource random) { if (isActive()) { - final BlockPos pos = getPos(); + final BlockPos pos = getBlockPos(); float x = pos.getX() + 0.5F; float z = pos.getZ() + 0.5F; 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 55644ab2f39..9493b41ff55 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 @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine.steam; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -10,9 +11,12 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraftforge.fluids.FluidType; import lombok.Getter; +import java.util.function.Function; + import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -26,11 +30,16 @@ public abstract class SteamMachine extends MetaMachine implements ITieredMachine @SaveField public final NotifiableFluidTank steamTank; - public SteamMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder); + public SteamMachine(BlockEntityCreationInfo info, boolean isHighPressure, + Function steamTankFactory) { + super(info); this.isHighPressure = isHighPressure; - this.steamTank = createSteamTank(args); - this.steamTank.setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Steam.getFluidTag())); + this.steamTank = steamTankFactory.apply(this); + this.steamTank.setFilter(f -> f.getFluid().is(GTMaterials.Steam.getFluidTag())); + } + + public SteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) { + this(info, isHighPressure, (m) -> new NotifiableFluidTank(m, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN)); } ////////////////////////////////////// @@ -41,6 +50,4 @@ public SteamMachine(IMachineBlockEntity holder, boolean isHighPressure, Object.. public int getTier() { return isHighPressure ? 1 : 0; } - - protected abstract NotifiableFluidTank createSteamTank(Object... args); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java index 304cd9039f5..144e8218a84 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java @@ -1,19 +1,16 @@ package com.gregtechceu.gtceu.api.machine.steam; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.feature.IMufflableMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.api.machine.trait.IRecipeHandlerTrait; -import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; -import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; +import com.gregtechceu.gtceu.api.machine.trait.*; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -30,6 +27,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.fluids.FluidType; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Getter; @@ -38,6 +36,7 @@ import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @@ -75,17 +74,29 @@ public abstract class SteamWorkableMachine extends SteamMachine protected final Map, List>>> capabilitiesFlat; protected final List traitSubscriptions; - public SteamWorkableMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder, isHighPressure, args); + public SteamWorkableMachine(BlockEntityCreationInfo info, boolean isHighPressure, + Function recipeLogicSupplier, + Function steamTankFactory) { + super(info, isHighPressure); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; - this.recipeLogic = createRecipeLogic(args); + this.recipeLogic = recipeLogicSupplier.apply(this); this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); this.traitSubscriptions = new ArrayList<>(); this.outputFacing = hasFrontFacing() ? getFrontFacing().getOpposite() : Direction.UP; } + public SteamWorkableMachine(BlockEntityCreationInfo info, boolean isHighPressure, + Function recipeLogicSupplier) { + this(info, isHighPressure, recipeLogicSupplier, + (m) -> new NotifiableFluidTank(m, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN)); + } + + public SteamWorkableMachine(BlockEntityCreationInfo info, boolean isHighPressure) { + this(info, isHighPressure, RecipeLogic::new); + } + ////////////////////////////////////// // ***** Initialization *****// ////////////////////////////////////// @@ -109,10 +120,6 @@ public void onLoad() { } } - protected RecipeLogic createRecipeLogic(@SuppressWarnings("unused") Object... args) { - return new RecipeLogic(this); - } - @Override public void onUnload() { super.onUnload(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java index 607ae9ca84b..b9fc462b299 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java @@ -120,7 +120,7 @@ public boolean isEmpty() { public void exportToNearby(Direction... facings) { if (isEmpty()) return; var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getFluidCapFilter(facing, IO.OUT); GTTransferUtils.getAdjacentFluidHandler(level, pos, facing) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyTrait.java index b2bb0a8e7e0..6aab403d666 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyTrait.java @@ -104,7 +104,7 @@ public boolean isEmpty() { public void exportToNearby(Direction... facings) { if (isEmpty()) return; var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getItemCapFilter(facing, IO.OUT); GTTransferUtils.getAdjacentItemHandler(level, pos, facing) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java index 65976e2c88f..a72c7a58c62 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java @@ -31,7 +31,9 @@ public abstract class MachineTrait implements ISyncManaged { public MachineTrait(MetaMachine machine) { this.machine = machine; this.capabilityValidator = side -> true; - machine.attachTraits(this); + /// Machine should never be null, unless this trait is a recipe handler instantiated outside a machine for + /// recipe search. + if (machine != null) machine.attachTraits(this); } public final boolean hasCapability(@Nullable Direction side) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java index c32067261d8..2ce4bbd3241 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java @@ -254,7 +254,7 @@ public IOpticalComputationProvider getComputationProvider() { } } for (Direction direction : GTUtil.DIRECTIONS) { - BlockEntity blockEntity = machine.getLevel().getBlockEntity(machine.getPos().relative(direction)); + BlockEntity blockEntity = machine.getLevel().getBlockEntity(machine.getBlockPos().relative(direction)); if (blockEntity == null) continue; // noinspection DataFlowIssue can be null just fine. @@ -271,7 +271,7 @@ public IOpticalComputationProvider getComputationProvider() { @Nullable private IOpticalComputationProvider getOpticalNetProvider() { for (Direction direction : GTUtil.DIRECTIONS) { - BlockEntity blockEntity = machine.getLevel().getBlockEntity(machine.getPos().relative(direction)); + BlockEntity blockEntity = machine.getLevel().getBlockEntity(machine.getBlockPos().relative(direction)); if (blockEntity instanceof OpticalPipeBlockEntity) { return blockEntity.getCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER, direction.getOpposite()) .orElse(null); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index 46cc1872da9..d8ab29624ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -164,7 +164,7 @@ public void serverTick() { if (!outputsEnergy(side)) continue; var oppositeSide = side.getOpposite(); var energyContainer = GTCapabilityHelper.getEnergyContainer(machine.getLevel(), - machine.getPos().relative(side), oppositeSide); + machine.getBlockPos().relative(side), oppositeSide); if (energyContainer != null && energyContainer.inputsEnergy(oppositeSide)) { amperesUsed += energyContainer.acceptEnergyFromNetwork(oppositeSide, outputVoltage, outputAmperes - amperesUsed); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java index 22235f5eb59..15b16f284d2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java @@ -308,7 +308,7 @@ public boolean isEmpty() { public void exportToNearby(@NotNull Direction... facings) { if (isEmpty()) return; var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getFluidCapFilter(facing, IO.OUT); GTTransferUtils.getAdjacentFluidHandler(level, pos, facing) @@ -318,7 +318,7 @@ public void exportToNearby(@NotNull Direction... facings) { public void importFromNearby(@NotNull Direction... facings) { var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getFluidCapFilter(facing, IO.IN); GTTransferUtils.getAdjacentFluidHandler(level, pos, facing) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java index fe3433ebd8c..84e4074d1eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java @@ -247,7 +247,7 @@ public boolean isEmpty() { public void exportToNearby(@NotNull Direction... facings) { if (isEmpty()) return; var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getItemCapFilter(facing, IO.OUT); GTTransferUtils.getAdjacentItemHandler(level, pos, facing) @@ -257,7 +257,7 @@ public void exportToNearby(@NotNull Direction... facings) { public void importFromNearby(@NotNull Direction... facings) { var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getItemCapFilter(facing, IO.IN); GTTransferUtils.getAdjacentItemHandler(level, pos, facing) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableLaserContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableLaserContainer.java index 23229f60c2d..acba206d27e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableLaserContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableLaserContainer.java @@ -38,10 +38,10 @@ public void serverTick() { long amperesUsed = 0; for (Direction side : GTUtil.DIRECTIONS) { if (!outputsEnergy(side)) continue; - BlockEntity tileEntity = getMachine().getLevel().getBlockEntity(getMachine().getPos().relative(side)); + BlockEntity tileEntity = getMachine().getLevel().getBlockEntity(getMachine().getBlockPos().relative(side)); Direction oppositeSide = side.getOpposite(); ILaserContainer laserContainer = GTCapabilityHelper.getLaser(getMachine().getLevel(), - getMachine().getPos().relative(side), oppositeSide); + getMachine().getBlockPos().relative(side), oppositeSide); if (tileEntity != null && laserContainer != null) { if (laserContainer == null || !laserContainer.inputsEnergy(oppositeSide)) continue; amperesUsed += laserContainer.acceptEnergyFromNetwork(oppositeSide, outputVoltage, diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java index 71e5ee2ed6e..bd16dbfd7f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java @@ -567,10 +567,11 @@ public void updateSound() { } if (sound != null) { workingSound = sound.playAutoReleasedSound( - () -> machine.shouldWorkingPlaySound() && isWorking() && !getMachine().isInValid() && - getMachine().getLevel().isLoaded(getMachine().getPos()) && - MetaMachine.getMachine(getMachine().getLevel(), getMachine().getPos()) == getMachine(), - getMachine().getPos(), true, 0, 1, 1); + () -> machine.shouldWorkingPlaySound() && isWorking() && !getMachine().isRemoved() && + getMachine().getLevel().isLoaded(getMachine().getBlockPos()) && + MetaMachine.getMachine(getMachine().getLevel(), getMachine().getBlockPos()) == + getMachine(), + getMachine().getBlockPos(), true, 0, 1, 1); } } else if (workingSound instanceof AutoReleasedSound soundEntry) { soundEntry.release(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java index 0942643a042..346add8ca7f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.block.ActiveBlock; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; @@ -94,7 +93,7 @@ public boolean checkPatternAt(MultiblockState worldState, boolean savePredicate) worldState.setError(new PatternStringError("no controller found")); return false; } - BlockPos centerPos = controller.self().getPos(); + BlockPos centerPos = controller.self().getBlockPos(); Direction frontFacing = controller.self().getFrontFacing(); Direction[] facings = controller.hasFrontFacing() ? new Direction[] { frontFacing } : new Direction[] { Direction.SOUTH, Direction.NORTH, Direction.EAST, Direction.WEST }; @@ -149,8 +148,7 @@ public boolean checkPatternAt(MultiblockState worldState, BlockPos centerPos, Di } } boolean canPartShared = true; - if (worldState.getTileEntity() instanceof IMachineBlockEntity machineBlockEntity && - machineBlockEntity.getMetaMachine() instanceof IMultiPart part) { // add detected parts + if (worldState.getTileEntity() instanceof IMultiPart part) { // add detected parts if (!predicate.isAny()) { if (part.isFormed() && !part.canShared() && !part.hasController(worldState.controllerPos)) { // check part can be shared @@ -224,7 +222,7 @@ public void autoBuild(Player player, MultiblockState worldState) { int minZ = -centerOffset[4]; worldState.clean(); IMultiController controller = worldState.getController(); - BlockPos centerPos = controller.self().getPos(); + BlockPos centerPos = controller.self().getBlockPos(); Direction facing = controller.self().getFrontFacing(); Direction upwardsFacing = controller.self().getUpwardsFacing(); boolean isFlipped = controller.self().isFlipped(); @@ -345,8 +343,8 @@ public void autoBuild(Player player, MultiblockState worldState) { handler.extractItem(foundSlot, 1, false); } } - if (world.getBlockEntity(pos) instanceof IMachineBlockEntity machineBlockEntity) { - blocks.put(pos, machineBlockEntity.getMetaMachine()); + if (world.getBlockEntity(pos) instanceof MetaMachine metaMachine) { + blocks.put(pos, metaMachine); } else { blocks.put(pos, world.getBlockState(pos)); } @@ -502,8 +500,7 @@ public BlockInfo[][][] getPreview(int[] repetition) { if (blockInfo == null || blockInfo.getBlockState().getBlock() == Blocks.AIR) { if (blocks.get(pos).getBlockState().getBlock() instanceof MetaMachineBlock machineBlock) { if (machineBlock.newBlockEntity(BlockPos.ZERO, - machineBlock.defaultBlockState()) instanceof IMachineBlockEntity machineBlockEntity) { - var machine = machineBlockEntity.getMetaMachine(); + machineBlock.defaultBlockState()) instanceof MetaMachine machine) { if (machine instanceof IMultiController) { return false; } else { diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java index 326e1e01b97..cc1c36353af 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.pattern; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.data.RotationState; import com.lowdragmc.lowdraglib.utils.BlockInfo; @@ -42,14 +42,14 @@ public ShapeInfoBuilder where(char symbol, Block block) { return where(symbol, block.defaultBlockState()); } - public ShapeInfoBuilder where(char symbol, Supplier machine, Direction facing) { + public ShapeInfoBuilder where(char symbol, Supplier machine, Direction facing) { return where(symbol, machine.get(), facing); } - public ShapeInfoBuilder where(char symbol, IMachineBlock machine, Direction facing) { + public ShapeInfoBuilder where(char symbol, MetaMachineBlock machine, Direction facing) { return where(symbol, machine.getRotationState() == RotationState.NONE ? - machine.self().defaultBlockState() : - machine.self().defaultBlockState().setValue(machine.getRotationState().property, facing)); + machine.defaultBlockState() : + machine.defaultBlockState().setValue(machine.getRotationState().property, facing)); } private BlockInfo[][][] bake() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockState.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockState.java index e310177a82a..099b359c236 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockState.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockState.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.ActiveBlock; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.pattern.error.PatternError; import com.gregtechceu.gtceu.api.pattern.error.PatternStringError; @@ -86,8 +85,7 @@ public boolean update(BlockPos posIn, TraceabilityPredicate predicate) { public IMultiController getController() { if (world.isLoaded(controllerPos)) { - if (world.getBlockEntity(controllerPos) instanceof IMachineBlockEntity machineBlockEntity && - machineBlockEntity.getMetaMachine() instanceof IMultiController controller) { + if (world.getBlockEntity(controllerPos) instanceof IMultiController controller) { return lastController = controller; } } else { diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java index 413a17137ee..55c816d8620 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.block.ICoilType; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; @@ -61,19 +61,19 @@ public static TraceabilityPredicate blocks(Block... blocks) { return new TraceabilityPredicate(new PredicateBlocks(blocks)); } - public static TraceabilityPredicate blocks(IMachineBlock... blocks) { + public static TraceabilityPredicate blocks(MetaMachineBlock... blocks) { return new TraceabilityPredicate( - new PredicateBlocks(Arrays.stream(blocks).map(IMachineBlock::self).toArray(Block[]::new))); + new PredicateBlocks(Arrays.stream(blocks).toArray(Block[]::new))); } public static TraceabilityPredicate machines(MachineDefinition... definitions) { - ArrayList machineBlocks = new ArrayList<>(definitions.length); + ArrayList machineBlocks = new ArrayList<>(definitions.length); for (var definition : definitions) { if (definition != null) { machineBlocks.add(definition.get()); } } - return blocks(machineBlocks.toArray(IMachineBlock[]::new)); + return blocks(machineBlocks.toArray(MetaMachineBlock[]::new)); } public static TraceabilityPredicate blockTag(TagKey tag) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/IPipeNode.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/IPipeNode.java index 2dee23358ea..8e12e0e15ce 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/IPipeNode.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/IPipeNode.java @@ -1,18 +1,15 @@ package com.gregtechceu.gtceu.api.pipenet; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.PipeBlock; +import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity; import com.gregtechceu.gtceu.api.blockentity.IPaintable; import com.gregtechceu.gtceu.api.blockentity.ITickSubscription; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -20,9 +17,7 @@ import org.jetbrains.annotations.Nullable; public interface IPipeNode & IPipeType, NodeDataType> - extends ITickSubscription, IPaintable { - - long getOffsetTimer(); + extends ITickSubscription, IPaintable, IGregtechBlockEntity { /** * Get Cover Container. @@ -93,26 +88,6 @@ default BlockEntity self() { return (BlockEntity) this; } - default Level getPipeLevel() { - return self().getLevel(); - } - - default BlockPos getPipePos() { - return self().getBlockPos(); - } - - default boolean isInValid() { - return self().isRemoved(); - } - - default boolean isRemote() { - var level = getPipeLevel(); - if (level == null) { - return GTCEu.isClientThread(); - } - return level.isClientSide; - } - @SuppressWarnings("unchecked") default PipeBlock getPipeBlock() { return (PipeBlock) self().getBlockState().getBlock(); @@ -120,8 +95,8 @@ default boolean isRemote() { @Nullable default PipeNet getPipeNet() { - if (getPipeLevel() instanceof ServerLevel serverLevel) { - return getPipeBlock().getWorldPipeNet(serverLevel).getNetFromPos(getPipePos()); + if (getLevel() instanceof ServerLevel serverLevel) { + return getPipeBlock().getWorldPipeNet(serverLevel).getNetFromPos(getBlockPos()); } return null; } @@ -134,42 +109,13 @@ default PipeType getPipeType() { default NodeDataType getNodeData() { var net = getPipeNet(); if (net != null) { - return net.getNodeAt(getPipePos()).data; + return net.getNodeAt(getBlockPos()).data; } return null; } - void notifyBlockUpdate(); - - default void scheduleRenderUpdate() { - var pos = getPipePos(); - var level = getPipeLevel(); - if (level != null) { - var state = level.getBlockState(pos); - if (level.isClientSide) { - level.sendBlockUpdated(pos, state, state, Block.UPDATE_IMMEDIATE); - } else { - level.blockEvent(pos, state.getBlock(), 1, 0); - } - } - } - default void serverTick() {} - default void scheduleNeighborShapeUpdate() { - Level level = getPipeLevel(); - BlockPos pos = getPipePos(); - - if (level == null || pos == null) - return; - - level.getBlockState(pos).updateNeighbourShapes(level, pos, Block.UPDATE_ALL); - } - - default BlockEntity getNeighbor(Direction direction) { - return getPipeLevel().getBlockEntity(getPipePos().relative(direction)); - } - @Override default int getDefaultPaintingColor() { return 0xFFFFFF; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java index 7212066aa4f..2fb313b8d50 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java @@ -1,22 +1,18 @@ package com.gregtechceu.gtceu.api.pipenet; +import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; -import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.blockentity.FluidPipeBlockEntity; import com.gregtechceu.gtceu.common.blockentity.ItemPipeBlockEntity; import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; import com.gregtechceu.gtceu.syncsystem.annotations.*; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.EmptyHandler; @@ -40,50 +36,8 @@ public PipeCoverContainer(IPipeNode pipeTile) { } @Override - public void markAsChanged() { - if (pipeTile instanceof ManagedSyncBlockEntity syncBlockEntity) { - syncBlockEntity.markAsChanged(); - } - } - - @Override - public Level getLevel() { - return pipeTile.getPipeLevel(); - } - - @Override - public BlockPos getPos() { - return pipeTile.getPipePos(); - } - - @Override - public BlockState getState() { - return pipeTile.getState(); - } - - @Override - public long getOffsetTimer() { - return pipeTile.getOffsetTimer(); - } - - @Override - public void notifyBlockUpdate() { - pipeTile.notifyBlockUpdate(); - } - - @Override - public void scheduleRenderUpdate() { - pipeTile.scheduleRenderUpdate(); - } - - @Override - public void scheduleNeighborShapeUpdate() { - pipeTile.scheduleNeighborShapeUpdate(); - } - - @Override - public boolean isInValid() { - return pipeTile.isInValid(); + public IGregtechBlockEntity getHolder() { + return pipeTile; } @Override @@ -113,17 +67,6 @@ public boolean shouldRenderBackSide() { return true; } - @Nullable - @Override - public TickableSubscription subscribeServerTick(Runnable runnable) { - return pipeTile.subscribeServerTick(runnable); - } - - @Override - public void unsubscribe(@Nullable TickableSubscription current) { - pipeTile.unsubscribe(current); - } - @Override public IItemHandlerModifiable getItemHandlerCap(Direction side, boolean useCoverCapability) { if (pipeTile instanceof ItemPipeBlockEntity itemPipe) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeNetWalker.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeNetWalker.java index 25bb61229c3..9d38ef072aa 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeNetWalker.java @@ -151,7 +151,7 @@ private boolean walk() { if (nextPipeFacings.isEmpty()) return true; if (nextPipeFacings.size() == 1) { - currentPos.set(nextPipes.get(0).getPipePos()); + currentPos.set(nextPipes.get(0).getBlockPos()); currentPipe = nextPipes.get(0); from = nextPipeFacings.get(0).getOpposite(); walkedBlocks++; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/ILDEndpoint.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/ILDEndpoint.java index d7ec4368989..17cea8f68f7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/ILDEndpoint.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/ILDEndpoint.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.api.pipenet.longdistance; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -45,6 +44,8 @@ default boolean isOutput() { @Nullable ILDEndpoint getLink(); + boolean isRemoved(); + /** * removes the linked endpoint if there is any */ @@ -72,16 +73,14 @@ default boolean isOutput() { /** * @return pos in world */ - BlockPos getPos(); + BlockPos getBlockPos(); Level getLevel(); - boolean isInValid(); - @Nullable static ILDEndpoint tryGet(LevelAccessor world, BlockPos pos) { BlockEntity te = world.getBlockEntity(pos); - if (te instanceof IMachineBlockEntity gte && gte.getMetaMachine() instanceof ILDEndpoint endpoint) { + if (te instanceof ILDEndpoint endpoint) { return endpoint; } return null; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistanceNetwork.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistanceNetwork.java index 8a05c60f33d..cf59ed6c42f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistanceNetwork.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistanceNetwork.java @@ -128,7 +128,7 @@ public void onRemoveEndpoint(ILDEndpoint endpoint) { if (this.endpoints.remove(endpoint)) { invalidateEndpoints(); } - onRemovePipe(endpoint.getPos()); + onRemovePipe(endpoint.getBlockPos()); } /** @@ -144,8 +144,8 @@ public void onPlacePipe(BlockPos pos) { */ public void onPlaceEndpoint(ILDEndpoint endpoint) { addEndpoint(endpoint); - this.longDistancePipeBlocks.add(endpoint.getPos()); - this.world.putNetwork(endpoint.getPos(), this); + this.longDistancePipeBlocks.add(endpoint.getBlockPos()); + this.world.putNetwork(endpoint.getBlockPos(), this); } /** @@ -205,7 +205,7 @@ public ILDEndpoint getOtherEndpoint(ILDEndpoint endpoint) { int thisIndex = this.endpoints.indexOf(endpoint); if (thisIndex < 0) { // endpoint not found in this network, something is wrong, recalculate network - recalculateNetwork(Collections.singleton(endpoint.getPos())); + recalculateNetwork(Collections.singleton(endpoint.getBlockPos())); return null; } @@ -249,7 +249,7 @@ public ILDEndpoint getOtherEndpoint(ILDEndpoint endpoint) { private int find(ILDEndpoint endpoint) { for (int i = 0; i < this.endpoints.size(); i++) { ILDEndpoint other = this.endpoints.get(i); - if (other.isInValid()) { + if (other.isRemoved()) { other.invalidateLink(); this.endpoints.remove(i--); continue; @@ -441,7 +441,7 @@ public CompoundTag save(@NotNull CompoundTag nbtTagCompound) { ListTag endpoints = new ListTag(); tag.put("endpoints", endpoints); for (ILDEndpoint endpoint : network.endpoints) { - endpoints.add(LongTag.valueOf(endpoint.getPos().asLong())); + endpoints.add(LongTag.valueOf(endpoint.getBlockPos().asLong())); } } nbtTagCompound.put("nets", list); diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistancePipeType.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistancePipeType.java index 2983ff3bcbb..ce42f98570d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistancePipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/longdistance/LongDistancePipeType.java @@ -57,9 +57,9 @@ public int getMinLength() { } public boolean satisfiesMinLength(ILDEndpoint endpoint1, ILDEndpoint endpoint2) { - BlockPos p = endpoint2.getPos(); + BlockPos p = endpoint2.getBlockPos(); int minLength = getMinLength(); - return endpoint1 != endpoint2 && endpoint1.getPos().distSqr(p) >= minLength * minLength; + return endpoint1 != endpoint2 && endpoint1.getBlockPos().distSqr(p) >= minLength * minLength; } @NotNull diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 63c5578809e..70de7fa3336 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -1,21 +1,17 @@ package com.gregtechceu.gtceu.api.registry.registrate; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.block.IMachineBlock; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.item.MetaMachineItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.registrate.forge.GTFluidBuilder; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -25,9 +21,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; @@ -46,7 +40,6 @@ import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullFunction; import com.tterrag.registrate.util.nullness.NonNullSupplier; -import org.apache.commons.lang3.function.TriFunction; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -128,33 +121,31 @@ public IGTFluidBuilder createFluid(String name, String langKey, Material materia public MachineBuilder machine(String name, Function definitionFactory, - Function metaMachine, - BiFunction blockFactory, - BiFunction itemFactory, - TriFunction, BlockPos, BlockState, IMachineBlockEntity> blockEntityFactory) { - return new MachineBuilder<>(this, name, definitionFactory, metaMachine, + BiFunction blockFactory, + BiFunction itemFactory, + Function blockEntityFactory) { + return new MachineBuilder<>(this, name, definitionFactory, blockFactory, itemFactory, blockEntityFactory); } public MachineBuilder machine(String name, - Function metaMachine) { - return new MachineBuilder<>(this, name, MachineDefinition::new, metaMachine, - MetaMachineBlock::new, MetaMachineItem::new, MetaMachineBlockEntity::new); + Function blockEntityFactory) { + return new MachineBuilder<>(this, name, MachineDefinition::new, + MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, - Function metaMachine, - BiFunction blockFactory, - BiFunction itemFactory, - TriFunction, BlockPos, BlockState, IMachineBlockEntity> blockEntityFactory) { - return new MultiblockMachineBuilder(this, name, metaMachine, + BiFunction blockFactory, + BiFunction itemFactory, + Function blockEntityFactory) { + return new MultiblockMachineBuilder(this, name, blockFactory, itemFactory, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, - Function metaMachine) { - return new MultiblockMachineBuilder(this, name, metaMachine, - MetaMachineBlock::new, MetaMachineItem::new, MetaMachineBlockEntity::new); + Function blockEntityFactory) { + return new MultiblockMachineBuilder(this, name, MetaMachineBlock::new, MetaMachineItem::new, + blockEntityFactory); } public SoundEntryBuilder sound(String name) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java index 264938c11bc..021dcb3f54e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java @@ -2,12 +2,12 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.item.MetaMachineItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; @@ -30,7 +30,6 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.client.renderer.RenderType; -import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; @@ -67,7 +66,6 @@ import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.function.TriFunction; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -88,13 +86,11 @@ public class MachineBuilder extends Builde protected final GTRegistrate registrate; protected final String name; - protected final BiFunction blockFactory; - protected final BiFunction itemFactory; - protected final TriFunction, BlockPos, BlockState, IMachineBlockEntity> blockEntityFactory; + protected final BiFunction blockFactory; + protected final BiFunction itemFactory; + protected final Function blockEntityFactory; protected final Function definition; - @Setter - protected Function machine; @Nullable @Getter @Setter @@ -187,14 +183,12 @@ public class MachineBuilder extends Builde public MachineBuilder(GTRegistrate registrate, String name, Function definition, - Function machine, - BiFunction blockFactory, - BiFunction itemFactory, - TriFunction, BlockPos, BlockState, IMachineBlockEntity> blockEntityFactory) { + BiFunction blockFactory, + BiFunction itemFactory, + Function blockEntityFactory) { super(new ResourceLocation(registrate.getModid(), name)); this.registrate = registrate; this.name = name; - this.machine = machine; this.blockFactory = blockFactory; this.itemFactory = itemFactory; this.blockEntityFactory = blockEntityFactory; @@ -556,7 +550,8 @@ public DEFINITION register() { var item = itemBuilder.register(); var blockEntityBuilder = registrate - .blockEntity((type, pos, state) -> blockEntityFactory.apply(type, pos, state).self()) + .blockEntity( + (type, pos, state) -> blockEntityFactory.apply(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) .validBlock(block); if (hasBER) { @@ -569,7 +564,6 @@ public DEFINITION register() { definition.setTier(tier); definition.setRecipeOutputLimits(recipeOutputLimits); definition.setBlockEntityTypeSupplier(blockEntity::get); - definition.setMachineSupplier(machine); definition.setTooltipBuilder((itemStack, components) -> { components.addAll(tooltips); if (tooltipBuilder != null) tooltipBuilder.accept(itemStack, components); @@ -637,9 +631,7 @@ default ModelInitializer compose(ModelInitializer before) { default ModelInitializer compose(UnaryOperator> before) { Objects.requireNonNull(before); - return (ctx, prov, builder) -> { - this.configureModel(ctx, prov, before.apply(builder)); - }; + return (ctx, prov, builder) -> this.configureModel(ctx, prov, before.apply(builder)); } } @@ -649,7 +641,7 @@ protected static class BlockBuilderWrapper { public static BlockBuilder> makeBlockBuilder(MachineBuilder builder, DEFINITION definition) { return builder.registrate.block(properties -> makeBlock(builder, definition, properties)) - .color(() -> () -> IMachineBlock::colorTinted) + .color(() -> () -> MetaMachineBlock::colorTinted) .initialProperties(() -> Blocks.DISPENSER) .properties(BlockBehaviour.Properties::noLootTable) .addLayer(() -> RenderType::cutout) @@ -663,7 +655,7 @@ private static Block makeBlock(MachineBui MachineDefinition.setBuilt(definition); var b = builder.blockFactory.apply(properties, definition); MachineDefinition.clearBuilt(); - return b.self(); + return b; } } @@ -672,13 +664,11 @@ protected static class ItemBuilderWrapper { public static ItemBuilder> makeItemBuilder(MachineBuilder builder, BlockEntry block) { return builder.registrate - .item(properties -> builder.itemFactory.apply((IMachineBlock) block.get(), properties)) + .item(properties -> builder.itemFactory.apply((MetaMachineBlock) block.get(), properties)) .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys // copied from BlockBuilder#item - .model((ctx, prov) -> { - prov.withExistingParent(ctx.getName(), new ResourceLocation(builder.registrate.getModid(), - "block/machine/" + ctx.getName())); - }) + .model((ctx, prov) -> prov.withExistingParent(ctx.getName(), new ResourceLocation(builder.registrate.getModid(), + "block/machine/" + ctx.getName()))) .color(() -> () -> builder.itemColor::apply) .properties(builder.itemProp); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java index e7ff7419d08..21abaf12f75 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.api.registry.registrate; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.item.MetaMachineItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; @@ -23,7 +23,6 @@ import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -83,11 +82,10 @@ public class MultiblockMachineBuilder extends MachineBuilder> additionalDisplay = (m, l) -> {}; public MultiblockMachineBuilder(GTRegistrate registrate, String name, - Function metaMachine, - BiFunction blockFactory, - BiFunction itemFactory, - TriFunction, BlockPos, BlockState, IMachineBlockEntity> blockEntityFactory) { - super(registrate, name, MultiblockMachineDefinition::new, metaMachine::apply, blockFactory, + BiFunction blockFactory, + BiFunction itemFactory, + Function blockEntityFactory) { + super(registrate, name, MultiblockMachineDefinition::new, blockFactory, itemFactory, blockEntityFactory); allowExtendedFacing(true); allowCoverOnFront(true); @@ -116,11 +114,6 @@ public MultiblockMachineBuilder recoveryStacks(Supplier stacks) { return this; } - @Override - public MultiblockMachineBuilder machine(Function metaMachine) { - return (MultiblockMachineBuilder) super.machine(metaMachine); - } - @Override public MultiblockMachineBuilder model(@Nullable MachineBuilder.ModelInitializer model) { return (MultiblockMachineBuilder) super.model(model); diff --git a/src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java b/src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java index f0646525cc2..69db6523b79 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.block.BlockAttributes; import com.gregtechceu.gtceu.api.cosmetics.CapeRegistry; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.client.EnvironmentalHazardClientHandler; import com.gregtechceu.gtceu.client.TooltipsHandler; import com.gregtechceu.gtceu.client.renderer.BlockHighlightRenderer; @@ -170,7 +170,7 @@ public static void onDebugTextEvent(CustomizeGuiOverlayEvent.DebugText event) { BlockPos hitPos = hit.getBlockPos(); BlockEntity blockEntity = mc.level.getBlockEntity(hitPos); // only try to find the correct location if we have a valid machine - if (!(blockEntity instanceof IMachineBlockEntity machineBE)) return; + if (!(blockEntity instanceof MetaMachine machineBE)) return; final List rightLines = event.getRight(); int lineCount = rightLines.size(); @@ -203,7 +203,7 @@ public static void onDebugTextEvent(CustomizeGuiOverlayEvent.DebugText event) { MutableInt index = new MutableInt(afterBlockSection); rightLines.add(index.getAndIncrement(), ""); - machineBE.getMetaMachine().addDebugOverlayText(line -> rightLines.add(index.getAndIncrement(), line)); + machineBE.addDebugOverlayText(line -> rightLines.add(index.getAndIncrement(), line)); } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/client/model/machine/IMachineRendererModel.java b/src/main/java/com/gregtechceu/gtceu/client/model/machine/IMachineRendererModel.java index 3b95701b5cd..554697b1d0c 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/model/machine/IMachineRendererModel.java +++ b/src/main/java/com/gregtechceu/gtceu/client/model/machine/IMachineRendererModel.java @@ -51,7 +51,7 @@ default boolean shouldRenderOffScreen(T machine) { } default boolean shouldRender(T machine, Vec3 cameraPos) { - return Vec3.atCenterOf(machine.self().getPos()).closerThan(cameraPos, this.getViewDistance()); + return Vec3.atCenterOf(machine.self().getBlockPos()).closerThan(cameraPos, this.getViewDistance()); } default int getViewDistance() { @@ -59,7 +59,7 @@ default int getViewDistance() { } default AABB getRenderBoundingBox(T machine) { - BlockPos pos = machine.self().getPos(); + BlockPos pos = machine.self().getBlockPos(); return new AABB(pos.offset(-1, 0, -1), pos.offset(2, 2, 2)); } diff --git a/src/main/java/com/gregtechceu/gtceu/client/model/machine/MachineModel.java b/src/main/java/com/gregtechceu/gtceu/client/model/machine/MachineModel.java index c20eb618e68..e2a0c4b3c0d 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/model/machine/MachineModel.java +++ b/src/main/java/com/gregtechceu/gtceu/client/model/machine/MachineModel.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.client.model.machine; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputFluid; @@ -59,7 +58,7 @@ import java.util.function.Function; import java.util.stream.Collectors; -import static com.gregtechceu.gtceu.api.machine.IMachineBlockEntity.*; +import static com.gregtechceu.gtceu.api.machine.MetaMachine.*; public final class MachineModel extends BaseBakedModel implements ICoverableRenderer, IBlockEntityRendererBakedModel { @@ -390,14 +389,13 @@ public boolean isCustomRenderer() { public void render(@NotNull BlockEntity blockEntity, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource buffer, int packedLight, int packedOverlay) { - if (!(blockEntity instanceof IMachineBlockEntity machineBE)) return; - if (machineBE.getDefinition() != getDefinition()) return; - ICoverableRenderer.super.renderDynamicCovers(machineBE.getMetaMachine(), partialTick, poseStack, buffer, + if (!(blockEntity instanceof MetaMachine machine)) return; + if (machine.getDefinition() != getDefinition()) return; + ICoverableRenderer.super.renderDynamicCovers(machine, partialTick, poseStack, buffer, packedLight, packedOverlay); if (dynamicRenders.isEmpty()) return; - MetaMachine machine = machineBE.getMetaMachine(); Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); for (DynamicRender model : dynamicRenders) { if (!model.shouldRender(machine, cameraPos)) { @@ -422,11 +420,10 @@ public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, public AABB getRenderBoundingBox(BlockEntity blockEntity) { AABB bounds = IBlockEntityRendererBakedModel.super.getRenderBoundingBox(blockEntity); - if (!(blockEntity instanceof IMachineBlockEntity machineBE)) return bounds; - if (machineBE.getDefinition() != getDefinition()) return bounds; + if (!(blockEntity instanceof MetaMachine machine)) return bounds; + if (machine.getDefinition() != getDefinition()) return bounds; if (dynamicRenders.isEmpty()) return bounds; - MetaMachine machine = machineBE.getMetaMachine(); for (DynamicRender model : dynamicRenders) { bounds = bounds.minmax(model.getRenderBoundingBox(machine)); } @@ -436,11 +433,10 @@ public AABB getRenderBoundingBox(BlockEntity blockEntity) { @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public boolean shouldRenderOffScreen(BlockEntity blockEntity) { - if (!(blockEntity instanceof IMachineBlockEntity machineBE)) return false; - if (machineBE.getDefinition() != getDefinition()) return false; + if (!(blockEntity instanceof MetaMachine machine)) return false; + if (machine.getDefinition() != getDefinition()) return false; if (dynamicRenders.isEmpty()) return false; - MetaMachine machine = machineBE.getMetaMachine(); for (DynamicRender render : dynamicRenders) { if (render.shouldRenderOffScreen(machine)) return true; } @@ -450,12 +446,11 @@ public boolean shouldRenderOffScreen(BlockEntity blockEntity) { @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public boolean shouldRender(BlockEntity blockEntity, @NotNull Vec3 cameraPos) { - if (!(blockEntity instanceof IMachineBlockEntity machineBE)) return false; - if (machineBE.getDefinition() != getDefinition()) return false; - if (machineBE.getMetaMachine().getCoverContainer().hasDynamicCovers()) return true; + if (!(blockEntity instanceof MetaMachine machine)) return false; + if (machine.getDefinition() != getDefinition()) return false; + if (machine.getCoverContainer().hasDynamicCovers()) return true; if (dynamicRenders.isEmpty()) return false; - MetaMachine machine = machineBE.getMetaMachine(); for (DynamicRender model : dynamicRenders) { if (model.shouldRender(machine, Minecraft.getInstance().gameRenderer.getMainCamera().getPosition())) { return true; diff --git a/src/main/java/com/gregtechceu/gtceu/client/model/machine/multipart/MultiPartBakedModel.java b/src/main/java/com/gregtechceu/gtceu/client/model/machine/multipart/MultiPartBakedModel.java index 2835f96414f..07d643cfa62 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/model/machine/multipart/MultiPartBakedModel.java +++ b/src/main/java/com/gregtechceu/gtceu/client/model/machine/multipart/MultiPartBakedModel.java @@ -33,7 +33,7 @@ import java.util.*; import java.util.function.Predicate; -import static com.gregtechceu.gtceu.api.machine.IMachineBlockEntity.*; +import static com.gregtechceu.gtceu.api.machine.MetaMachine.*; public class MultiPartBakedModel implements IDynamicBakedModel { diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java index 77820ddf4df..09efb849bb7 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java @@ -1,10 +1,8 @@ package com.gregtechceu.gtceu.client.renderer; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.block.IMachineBlock; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.data.RotationState; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -129,7 +127,7 @@ public static void showPreview(BlockPos pos, MultiblockControllerMachine control for (int z = 0; z < column.length; z++) { var blockState = column[z].getBlockState(); // if its controller record its position offset. - if (blockState.getBlock() instanceof IMachineBlock machineBlock && + if (blockState.getBlock() instanceof MetaMachineBlock machineBlock && machineBlock.getDefinition() instanceof MultiblockMachineDefinition) { controllerPatternPos = new BlockPos(x, y, z); } @@ -196,9 +194,8 @@ public static void showPreview(BlockPos pos, MultiblockControllerMachine control BlockPos realPos = pos.offset(offset); - if (column[z].getBlockEntity(realPos) instanceof IMachineBlockEntity holder && - holder.getMetaMachine() instanceof IMultiController cont) { - holder.self().setLevel(LEVEL); + if (column[z].getBlockEntity(realPos) instanceof IMultiController cont) { + cont.self().setLevel(LEVEL); controllerBase = cont; } else { blockMap.put(realPos, BlockInfo.fromBlockState(blockState)); @@ -209,7 +206,7 @@ public static void showPreview(BlockPos pos, MultiblockControllerMachine control LEVEL.addBlocks(blockMap); if (controllerBase != null) { - LEVEL.setInnerBlockEntity(controllerBase.self().holder.self()); + LEVEL.setInnerBlockEntity(controllerBase.self()); } prepareBuffers(LEVEL, blockMap.keySet(), duration); diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/BoilerMultiPartRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/BoilerMultiPartRender.java index 850a0c64c55..c208a90c6df 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/BoilerMultiPartRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/BoilerMultiPartRender.java @@ -106,10 +106,10 @@ public void renderPartModel(List quads, IMultiController controller, this.casingModel = ModelUtils.getModelForState(casing); } - BlockPos partPos = part.self().getPos(); + BlockPos partPos = part.self().getBlockPos(); MultiblockControllerMachine machine = controller.self(); - BlockPos controllerPos = machine.getPos(); + BlockPos controllerPos = machine.getBlockPos(); Direction multiFront = machine.getFrontFacing(); Direction multiUpward = machine.getUpwardsFacing(); boolean flipped = machine.isFlipped(); diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/CentralMonitorRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/CentralMonitorRender.java index 8ce0183cafc..6e04229890f 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/CentralMonitorRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/CentralMonitorRender.java @@ -75,7 +75,7 @@ public boolean shouldRender(CentralMonitorMachine machine, Vec3 cameraPos) { @Override public AABB getRenderBoundingBox(CentralMonitorMachine machine) { - BlockPos pos = machine.getPos(); + BlockPos pos = machine.getBlockPos(); BoundingBox bounds = new BoundingBox( pos.getX() - 1, pos.getY() - 1, pos.getZ() - 1, pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); @@ -85,7 +85,7 @@ public AABB getRenderBoundingBox(CentralMonitorMachine machine) { IMonitorComponent component = machine.getComponent(row, col); if (component != null && component.isMonitor()) { // noinspection deprecation - bounds.encapsulate(component.getPos()); + bounds.encapsulate(component.getBlockPos()); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FluidAreaRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FluidAreaRender.java index 590e0f4c744..7c1d4b4061a 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FluidAreaRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FluidAreaRender.java @@ -111,7 +111,7 @@ public void render(IFluidRenderMulti machine, float partialTick, if (dir.getAxis() != Direction.Axis.Y) dir = dir.getOpposite(); fluidBlockRenderer.drawPlane(dir, machine.getFluidOffsets(), pose, consumer, cachedFluid, - RenderUtil.FluidTextureType.STILL, packedOverlay, machine.self().getPos()); + RenderUtil.FluidTextureType.STILL, packedOverlay, machine.self().getBlockPos()); poseStack.popPose(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FusionRingRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FusionRingRender.java index fb5e254216e..c23337bbb61 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FusionRingRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/FusionRingRender.java @@ -108,6 +108,6 @@ public int getViewDistance() { @Override public AABB getRenderBoundingBox(FusionReactorMachine machine) { - return new AABB(machine.getPos()).inflate(getViewDistance() / 2.0D); + return new AABB(machine.getBlockPos()).inflate(getViewDistance() / 2.0D); } } diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/GrowingPlantRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/GrowingPlantRender.java index 9608285fdb1..2eebe91ad4f 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/GrowingPlantRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/GrowingPlantRender.java @@ -92,7 +92,7 @@ public int getViewDistance() { @Override public AABB getRenderBoundingBox(IRecipeLogicMachine machine) { - final BlockPos pos = machine.self().getPos(); + final BlockPos pos = machine.self().getBlockPos(); List positions = new ArrayList<>(); Collections.addAll(positions, pos.offset(-1, 0, -1), pos.offset(2, 2, 2)); @@ -143,7 +143,7 @@ public void render(IRecipeLogicMachine rlm, float partialTick, PoseStack poseSta MetaMachine machine = rlm.self(); Level level = machine.getLevel(); assert level != null; - BlockPos machinePos = machine.getPos(); + BlockPos machinePos = machine.getBlockPos(); var statesToDraw = mode.renderFunction().configureState(level, state, progress); diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java index f08d13c97f9..c7e7fd5b683 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.block; import com.gregtechceu.gtceu.api.block.PipeBlock; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; @@ -95,9 +95,8 @@ public boolean canPipeConnectToBlock(IPipeNode @Nullable BlockEntity tile) { return tile != null && (tile.getCapability(GTCapability.CAPABILITY_HAZARD_CONTAINER, side.getOpposite()).isPresent() || - tile instanceof MetaMachineBlockEntity metaMachine && - (metaMachine.getMetaMachine() instanceof IEnvironmentalHazardCleaner || - metaMachine.getMetaMachine() instanceof IEnvironmentalHazardEmitter)); + tile instanceof MetaMachine metaMachine && (tile instanceof IEnvironmentalHazardCleaner || + tile instanceof IEnvironmentalHazardEmitter)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java index d2e27a69840..1136349e1bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.common.pipelike.duct.*; @@ -97,11 +96,11 @@ public DuctPipeNet getDuctPipeNet() { return null; } DuctPipeNet currentPipeNet = this.currentPipeNet.get(); - if (currentPipeNet != null && currentPipeNet.isValid() && currentPipeNet.containsNode(getPipePos())) { + if (currentPipeNet != null && currentPipeNet.isValid() && currentPipeNet.containsNode(this.getBlockPos())) { return currentPipeNet; } - LevelDuctPipeNet worldNet = (LevelDuctPipeNet) getPipeBlock().getWorldPipeNet((ServerLevel) getPipeLevel()); - currentPipeNet = worldNet.getNetFromPos(getPipePos()); + LevelDuctPipeNet worldNet = (LevelDuctPipeNet) getPipeBlock().getWorldPipeNet((ServerLevel) this.getLevel()); + currentPipeNet = worldNet.getNetFromPos(this.getBlockPos()); if (currentPipeNet != null) { this.currentPipeNet = new WeakReference<>(currentPipeNet); } @@ -117,9 +116,8 @@ public boolean canAttachTo(Direction side) { BlockPos relative = getBlockPos().relative(side); return GTCapabilityHelper.getHazardContainer(level, relative, side.getOpposite()) != null || - (level.getBlockEntity(relative) instanceof IMachineBlockEntity machineBlockEntity && - (machineBlockEntity.getMetaMachine() instanceof IEnvironmentalHazardCleaner || - machineBlockEntity.getMetaMachine() instanceof IEnvironmentalHazardEmitter)); + (level.getBlockEntity(relative) instanceof IEnvironmentalHazardCleaner || + level.getBlockEntity(relative) instanceof IEnvironmentalHazardEmitter); } return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java index f681ffbb576..1dd3e437560 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java @@ -318,7 +318,7 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, boolean isShattering, boolean isMelting) { // prevent the sound from spamming when filled from anything not a pipe if (getOffsetTimer() % 10 == 0) { - level.playSound(null, this.getPipePos(), SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1.0F, 1.0F); + level.playSound(null, this.getBlockPos(), SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1.0F, 1.0F); } if (isLeaking) { @@ -330,8 +330,8 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, // apply heat damage in area surrounding the pipe if (getOffsetTimer() % 20 == 0) { - List entities = getPipeLevel().getEntitiesOfClass(LivingEntity.class, - new AABB(getPipePos()).inflate(2)); + List entities = this.getLevel().getEntitiesOfClass(LivingEntity.class, + new AABB(this.getBlockPos()).inflate(2)); for (LivingEntity entityLivingBase : entities) { EntityDamageUtil.applyTemperatureDamage(entityLivingBase, stack.getFluid().getFluidType().getTemperature(stack), @@ -346,7 +346,7 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, } if (isCorroding) { - FluidPipeBlockEntity.spawnParticles(getPipeLevel(), getPipePos(), Direction.UP, ParticleTypes.CRIT, + FluidPipeBlockEntity.spawnParticles(this.getLevel(), this.getBlockPos(), Direction.UP, ParticleTypes.CRIT, 3 + GTValues.RNG.nextInt(2)); // voids 25% @@ -354,8 +354,8 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, // apply chemical damage in area surrounding the pipe if (getOffsetTimer() % 20 == 0) { - List entities = getPipeLevel().getEntitiesOfClass(LivingEntity.class, - new AABB(getPipePos()).inflate(1)); + List entities = this.getLevel().getEntitiesOfClass(LivingEntity.class, + new AABB(this.getBlockPos()).inflate(1)); for (LivingEntity entityLivingBase : entities) { EntityDamageUtil.applyChemicalDamage(entityLivingBase, 2); } @@ -364,7 +364,7 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, // 1/10 chance to void everything and destroy the pipe if (GTValues.RNG.nextInt(10) == 0) { stack.setAmount(0); - level.removeBlock(getPipePos(), false); + level.removeBlock(this.getBlockPos(), false); } } @@ -382,8 +382,8 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, // apply heat damage in area surrounding the pipe if (isMelting && getOffsetTimer() % 20 == 0) { - List entities = getPipeLevel().getEntitiesOfClass(LivingEntity.class, - new AABB(getPipePos()).inflate(2)); + List entities = this.getLevel().getEntitiesOfClass(LivingEntity.class, + new AABB(this.getBlockPos()).inflate(2)); for (LivingEntity entityLivingBase : entities) { EntityDamageUtil.applyTemperatureDamage(entityLivingBase, stack.getFluid().getFluidType().getTemperature(stack), @@ -407,8 +407,8 @@ public void destroyPipe(FluidStack stack, boolean isBurning, boolean isLeaking, // apply frost damage in area surrounding the pipe if (getOffsetTimer() % 20 == 0) { - List entities = getPipeLevel().getEntitiesOfClass(LivingEntity.class, - new AABB(getPipePos()).inflate(2)); + List entities = this.getLevel().getEntitiesOfClass(LivingEntity.class, + new AABB(this.getBlockPos()).inflate(2)); for (LivingEntity entityLivingBase : entities) { EntityDamageUtil.applyTemperatureDamage(entityLivingBase, stack.getFluid().getFluidType().getTemperature(stack), diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java index a3e4c906c9c..7d3c7dd192e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java @@ -106,11 +106,11 @@ public LaserPipeNet getLaserPipeNet() { return null; } LaserPipeNet currentPipeNet = this.currentPipeNet.get(); - if (currentPipeNet != null && currentPipeNet.isValid() && currentPipeNet.containsNode(getPipePos())) { + if (currentPipeNet != null && currentPipeNet.isValid() && currentPipeNet.containsNode(this.getBlockPos())) { return currentPipeNet; } - LevelLaserPipeNet worldNet = (LevelLaserPipeNet) getPipeBlock().getWorldPipeNet((ServerLevel) getPipeLevel()); - currentPipeNet = worldNet.getNetFromPos(getPipePos()); + LevelLaserPipeNet worldNet = (LevelLaserPipeNet) getPipeBlock().getWorldPipeNet((ServerLevel) this.getLevel()); + currentPipeNet = worldNet.getNetFromPos(this.getBlockPos()); if (currentPipeNet != null) { this.currentPipeNet = new WeakReference<>(currentPipeNet); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java index 3dce0b7ed3a..90454b687bc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java @@ -115,11 +115,11 @@ public OpticalPipeNet getOpticalPipeNet() { if (level == null || level.isClientSide) return null; OpticalPipeNet currentPipeNet = this.currentPipeNet.get(); - if (currentPipeNet != null && currentPipeNet.isValid() && currentPipeNet.containsNode(getPipePos())) + if (currentPipeNet != null && currentPipeNet.isValid() && currentPipeNet.containsNode(this.getBlockPos())) return currentPipeNet; // if current net is valid and does contain position, return it LevelOpticalPipeNet worldNet = (LevelOpticalPipeNet) getPipeBlock() - .getWorldPipeNet((ServerLevel) getPipeLevel()); - currentPipeNet = worldNet.getNetFromPos(getPipePos()); + .getWorldPipeNet((ServerLevel) this.getLevel()); + currentPipeNet = worldNet.getNetFromPos(this.getBlockPos()); if (currentPipeNet != null) { this.currentPipeNet = new WeakReference<>(currentPipeNet); } @@ -138,7 +138,7 @@ public void setConnection(Direction side, boolean connected, boolean fromNeighbo if (getNumConnections() >= 2) return; // also check the other pipe - BlockEntity tile = getLevel().getBlockEntity(getPipePos().relative(side)); + BlockEntity tile = getLevel().getBlockEntity(this.getBlockPos().relative(side)); if (tile instanceof IPipeNode pipeTile && pipeTile.getPipeType().getClass() == this.getPipeType().getClass()) { if (pipeTile.getNumConnections() >= 2) return; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java index 4bc0ae05ff9..856996b1f92 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java @@ -100,7 +100,8 @@ public List getRenderedText() { tmp = tmp.stream().map(str -> '{' + str + '}').toList(); return PlaceholderHandler.processPlaceholders( GTStringUtils.replace(s, "\\{}", tmp), - new PlaceholderContext(coverHolder.getLevel(), coverHolder.getPos(), attachedSide, itemStackHandler, + new PlaceholderContext(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide, + itemStackHandler, this, new MultiLineComponent(text), placeholderUUID)); } 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 4b03b9021cc..343d146ed96 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -125,7 +125,7 @@ protected boolean isSubscriptionActive() { } protected @Nullable IItemHandler getAdjacentItemHandler() { - return GTTransferUtils.getAdjacentItemHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide) + return GTTransferUtils.getAdjacentItemHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide) .resolve().orElse(null); } @@ -413,8 +413,8 @@ protected static class GroupItemInfo { public boolean shouldRespectDistributionMode() { return ((io == IO.IN) ? - (coverHolder.getLevel().getBlockEntity(coverHolder.getPos()) instanceof ItemPipeBlockEntity) : - (coverHolder.getLevel().getBlockEntity(coverHolder.getPos() + (coverHolder.getLevel().getBlockEntity(coverHolder.getBlockPos()) instanceof ItemPipeBlockEntity) : + (coverHolder.getLevel().getBlockEntity(coverHolder.getBlockPos() .relative(attachedSide)) instanceof ItemPipeBlockEntity)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/CoverSolarPanel.java b/src/main/java/com/gregtechceu/gtceu/common/cover/CoverSolarPanel.java index ea90970ad9a..db2beea796c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/CoverSolarPanel.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/CoverSolarPanel.java @@ -51,7 +51,7 @@ public boolean canAttach() { protected void update() { Level level = coverHolder.getLevel(); - BlockPos blockPos = coverHolder.getPos(); + BlockPos blockPos = coverHolder.getBlockPos(); if (GTUtil.canSeeSunClearly(level, blockPos)) { IEnergyContainer energyContainer = getEnergyContainer(); if (energyContainer != null) { @@ -62,6 +62,6 @@ protected void update() { @Nullable protected IEnergyContainer getEnergyContainer() { - return GTCapabilityHelper.getEnergyContainer(coverHolder.getLevel(), coverHolder.getPos(), attachedSide); + return GTCapabilityHelper.getEnergyContainer(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/InfiniteWaterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/InfiniteWaterCover.java index 6c8db9886cf..443b030701e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/InfiniteWaterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/InfiniteWaterCover.java @@ -28,7 +28,7 @@ public InfiniteWaterCover(CoverDefinition definition, ICoverable coverHolder, Di @Override public boolean canAttach() { return super.canAttach() && - FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide).isPresent(); + FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide).isPresent(); } @Override @@ -47,7 +47,7 @@ public void onRemoved() { public void update() { if (coverHolder.getOffsetTimer() % 20 == 0) { - FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide) + FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide) .ifPresent(h -> h.fill(new FluidStack(Fluids.WATER, 16 * FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.EXECUTE)); } 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 48b68b5eda1..05a46aa7542 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -55,7 +55,7 @@ public ItemFilter getItemFilter() { if (itemFilter == null) { itemFilter = ItemFilter.loadFilter(attachItem); if (itemFilter instanceof SmartItemFilter smart && coverHolder instanceof MachineCoverContainer mcc) { - var machine = MetaMachine.getMachine(mcc.getLevel(), mcc.getPos()); + var machine = MetaMachine.getMachine(mcc.getLevel(), mcc.getBlockPos()); if (machine != null) smart.setModeFromMachine(machine.getDefinition().getName()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java index bc6164bbd95..d8e76b3a1bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java @@ -136,7 +136,7 @@ private void updateAll() { @Nullable private IControllable getControllable(@Nullable Direction side) { if (side == null) { - return GTCapabilityHelper.getControllable(coverHolder.getLevel(), coverHolder.getPos(), null); + return GTCapabilityHelper.getControllable(coverHolder.getLevel(), coverHolder.getBlockPos(), null); } if (coverHolder.getCoverAtSide(side) instanceof IControllable cover) { @@ -189,7 +189,7 @@ public List getAllowedModes() { private int getInputSignal() { Level level = coverHolder.getLevel(); - BlockPos sourcePos = coverHolder.getPos().relative(attachedSide); + BlockPos sourcePos = coverHolder.getBlockPos().relative(attachedSide); return level.getSignal(sourcePos, attachedSide); } 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 4015bfa82c1..91e9a1d7d52 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -118,7 +118,7 @@ protected boolean isSubscriptionActive() { } protected @Nullable IFluidHandler getAdjacentFluidHandler() { - return GTTransferUtils.getAdjacentFluidHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide) + return GTTransferUtils.getAdjacentFluidHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide) .resolve() .orElse(null); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCover.java index 56f40a83402..7ac9f8eb4f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCover.java @@ -41,9 +41,9 @@ public WirelessTransmitterCover(CoverDefinition definition, ICoverable coverHold @Override public InteractionResult onDataStickUse(Player player, ItemStack dataStick) { - dataStick.getOrCreateTag().putInt("targetX", coverHolder.getPos().getX()); - dataStick.getOrCreateTag().putInt("targetY", coverHolder.getPos().getY()); - dataStick.getOrCreateTag().putInt("targetZ", coverHolder.getPos().getZ()); + dataStick.getOrCreateTag().putInt("targetX", coverHolder.getBlockPos().getX()); + dataStick.getOrCreateTag().putInt("targetY", coverHolder.getBlockPos().getY()); + dataStick.getOrCreateTag().putInt("targetZ", coverHolder.getBlockPos().getZ()); dataStick.getOrCreateTag().putString("face", attachedSide.getName()); dataStick.getOrCreateTag().putString("dim", coverHolder.getLevel().dimension().location().toString()); return InteractionResult.SUCCESS; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ActivityDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ActivityDetectorCover.java index 3c214d7b6cb..f37d3b8353a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ActivityDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ActivityDetectorCover.java @@ -20,7 +20,7 @@ public ActivityDetectorCover(CoverDefinition definition, ICoverable coverHolder, @Override public boolean canAttach() { return super.canAttach() && - GTCapabilityHelper.getWorkable(coverHolder.getLevel(), coverHolder.getPos(), attachedSide) != null; + GTCapabilityHelper.getWorkable(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide) != null; } @Override @@ -29,7 +29,7 @@ protected void update() { return; } - var workable = GTCapabilityHelper.getWorkable(coverHolder.getLevel(), coverHolder.getPos(), attachedSide); + var workable = GTCapabilityHelper.getWorkable(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide); boolean isCurrentlyWorking = workable.isActive() && workable.isWorkingEnabled(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedActivityDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedActivityDetectorCover.java index a260e35b6f4..a007105ae4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedActivityDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedActivityDetectorCover.java @@ -23,7 +23,7 @@ protected void update() { if (this.coverHolder.getOffsetTimer() % 20 != 0) return; - var workable = GTCapabilityHelper.getWorkable(coverHolder.getLevel(), coverHolder.getPos(), attachedSide); + var workable = GTCapabilityHelper.getWorkable(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide); if (workable == null || workable.getMaxProgress() == 0) { setRedstoneSignalOutput(0); return; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/EnergyDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/EnergyDetectorCover.java index 99b25f520f4..91548ddbc25 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/EnergyDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/EnergyDetectorCover.java @@ -50,6 +50,7 @@ protected void update() { @Nullable protected IEnergyInfoProvider getEnergyInfoProvider() { - return GTCapabilityHelper.getEnergyInfoProvider(coverHolder.getLevel(), coverHolder.getPos(), attachedSide); + return GTCapabilityHelper.getEnergyInfoProvider(coverHolder.getLevel(), coverHolder.getBlockPos(), + attachedSide); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/FluidDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/FluidDetectorCover.java index b94de19b4f7..944079b03d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/FluidDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/FluidDetectorCover.java @@ -47,7 +47,7 @@ protected void update() { } protected IFluidHandler getFluidHandler() { - return FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide).resolve() + return FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide).resolve() .orElse(null); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ItemDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ItemDetectorCover.java index fbf82946fae..65900bc03e6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ItemDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/ItemDetectorCover.java @@ -44,7 +44,7 @@ protected void update() { } protected IItemHandler getItemHandler() { - return GTTransferUtils.getItemHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide).resolve() + return GTTransferUtils.getItemHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide).resolve() .orElse(null); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/MaintenanceDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/MaintenanceDetectorCover.java index 55fe8e91cb0..01335f2ac3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/MaintenanceDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/MaintenanceDetectorCover.java @@ -21,7 +21,8 @@ public boolean canAttach() { } return super.canAttach() && - GTCapabilityHelper.getMaintenanceMachine(coverHolder.getLevel(), coverHolder.getPos(), attachedSide) != + GTCapabilityHelper.getMaintenanceMachine(coverHolder.getLevel(), coverHolder.getBlockPos(), + attachedSide) != null; } @@ -32,7 +33,7 @@ protected void update() { } IMaintenanceMachine maintenance = GTCapabilityHelper.getMaintenanceMachine(coverHolder.getLevel(), - coverHolder.getPos(), attachedSide); + coverHolder.getBlockPos(), attachedSide); int signal = getRedstoneSignalOutput(); boolean shouldSignal = isInverted() != maintenance.hasMaintenanceProblems(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java index 297fcb95395..48e6d2cb7ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java @@ -64,7 +64,7 @@ protected void setEntry(VirtualEntry entry) { @Override public boolean canAttach() { - return FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getPos(), attachedSide).isPresent(); + return FluidUtil.getFluidHandler(coverHolder.getLevel(), coverHolder.getBlockPos(), attachedSide).isPresent(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java index 99f15bf0967..ad447928344 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java @@ -96,7 +96,7 @@ public void onRemoved() { } protected int getSignalInput() { - return coverHolder.getLevel().getSignal(coverHolder.getPos().relative(attachedSide), + return coverHolder.getLevel().getSignal(coverHolder.getBlockPos().relative(attachedSide), attachedSide.getOpposite()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java index 35a707c549c..b27505a4854 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java @@ -9,7 +9,6 @@ import com.gregtechceu.gtceu.api.item.ComponentItem; import com.gregtechceu.gtceu.api.item.component.IDataItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.misc.virtualregistry.EntryTypes; @@ -91,10 +90,8 @@ public static void initPlaceholders() { public MultiLineComponent apply(PlaceholderContext ctx, List args) throws PlaceholderException { PlaceholderUtils.checkArgs(args, 0); - if (ctx.level().getBlockEntity(ctx.pos()) instanceof IMachineBlockEntity machineBE) { - if (machineBE.getMetaMachine() instanceof IEnergyInfoProvider energyInfoProvider) { - return MultiLineComponent.literal(energyInfoProvider.getEnergyInfo().stored().longValue()); - } + if (ctx.level().getBlockEntity(ctx.pos()) instanceof IEnergyInfoProvider energyInfoProvider) { + return MultiLineComponent.literal(energyInfoProvider.getEnergyInfo().stored().longValue()); } IEnergyContainer energy = GTCapabilityHelper.getEnergyContainer(ctx.level(), ctx.pos(), ctx.side()); return MultiLineComponent.literal(energy != null ? energy.getEnergyStored() : 0); @@ -106,10 +103,8 @@ public MultiLineComponent apply(PlaceholderContext ctx, public MultiLineComponent apply(PlaceholderContext ctx, List args) throws PlaceholderException { PlaceholderUtils.checkArgs(args, 0); - if (ctx.level().getBlockEntity(ctx.pos()) instanceof IMachineBlockEntity machineBE) { - if (machineBE.getMetaMachine() instanceof IEnergyInfoProvider energyInfoProvider) { - return MultiLineComponent.literal(energyInfoProvider.getEnergyInfo().capacity().longValue()); - } + if (ctx.level().getBlockEntity(ctx.pos()) instanceof IEnergyInfoProvider energyInfoProvider) { + return MultiLineComponent.literal(energyInfoProvider.getEnergyInfo().capacity().longValue()); } IEnergyContainer energy = GTCapabilityHelper.getEnergyContainer(ctx.level(), ctx.pos(), ctx.side()); return MultiLineComponent.literal(energy != null ? energy.getEnergyCapacity() : 0); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java index ba1fa7bba54..11810bc6fc1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java @@ -55,7 +55,7 @@ public class GTRecipeModifiers { if (!(machine.getLevel() instanceof ServerLevel serverLevel)) return ModifierFunction.NULL; EnvironmentalHazardSavedData data = EnvironmentalHazardSavedData.getOrCreate(serverLevel); - BlockPos machinePos = machine.getPos(); + BlockPos machinePos = machine.getBlockPos(); var zone = data.getZoneByContainedPosAndCondition(machinePos, condition); if (zone == null) return ModifierFunction.IDENTITY; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index 8ece01ec0cb..f460eb19aee 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java @@ -702,7 +702,7 @@ public static void init() {} return shapeInfos; }) .allowExtendedFacing(false) - .partSorter(Comparator.comparingInt(p -> p.self().getPos().getY())) + .partSorter(Comparator.comparingInt(p -> p.self().getBlockPos().getY())) .workableCasingModel(GTCEu.id("block/casings/gcym/watertight_casing"), GTCEu.id("block/multiblock/gcym/large_distillery")) .register(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 66c58065d87..6c78b3d7446 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -166,7 +166,7 @@ public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate boolean hasPollutionDebuff, int... tiers) { return registerTieredMachines(registrate, name, - (holder, tier) -> new SimpleTieredMachine(holder, tier, tankScalingFunction), (tier, builder) -> { + (info, tier) -> new SimpleTieredMachine(info, tier, tankScalingFunction), (tier, builder) -> { if (hasPollutionDebuff) { builder.recipeModifiers(GTRecipeModifiers.ENVIRONMENT_REQUIREMENT .apply(GTMedicalConditions.CARBON_MONOXIDE_POISONING, 100 * tier), @@ -190,7 +190,7 @@ public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate } public static MachineDefinition[] registerTieredMachines(String name, - BiFunction factory, + BiFunction factory, BiFunction, MachineDefinition> builder, int... tiers) { return registerTieredMachines(REGISTRATE, name, factory, builder, tiers); @@ -198,14 +198,14 @@ public static MachineDefinition[] registerTieredMachines(String name, public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, String name, - BiFunction factory, + BiFunction factory, BiFunction, MachineDefinition> builder, int... tiers) { MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .machine(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - holder -> factory.apply(holder, tier)) + info -> factory.apply(info, tier)) .tier(tier); definitions[tier] = builder.apply(tier, register); } @@ -213,13 +213,13 @@ public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate } public static Pair registerSteamMachines(String name, - BiFunction factory, + BiFunction factory, BiFunction, MachineDefinition> builder) { return registerSteamMachines(REGISTRATE, name, factory, builder); } public static Pair registerSteamMachines(GTRegistrate registrate, String name, - BiFunction factory, + BiFunction factory, BiFunction, MachineDefinition> builder) { MachineDefinition lowTier = builder.apply(false, registrate.machine("lp_%s".formatted(name), holder -> factory.apply(holder, false)) @@ -509,9 +509,9 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m boolean wooden = material.hasProperty(PropertyKey.WOOD); var definition = registrate .machine(material.getName() + "_drum", MachineDefinition::new, - holder -> new DrumMachine(holder, material, capacity), MetaMachineBlock::new, + MetaMachineBlock::new, (holder, prop) -> DrumMachineItem.create(holder, prop, material), - MetaMachineBlockEntity::new) + info -> new DrumMachine(info, material, capacity)) .langValue(lang) .rotationState(RotationState.NONE) .simpleModel(GTCEu.id("block/machine/template/drum/" + (wooden ? "wooden" : "metal") + "_drum")) @@ -542,9 +542,9 @@ public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, long maxAmount = 4000 * FluidType.BUCKET_VOLUME * (long) Math.pow(2, tier - 1); var register = registrate.machine( GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - MachineDefinition::new, (holder) -> new QuantumTankMachine(holder, tier, maxAmount), + MachineDefinition::new, MetaMachineBlock::new, QuantumTankMachineItem::new, - MetaMachineBlockEntity::new) + (holder) -> new QuantumTankMachine(holder, tier, maxAmount)) .langValue(toEnglishName(name) + " " + LVT[tier]) .blockProp(BlockBehaviour.Properties::dynamicShape) .rotationState(RotationState.ALL) @@ -651,14 +651,14 @@ public static MachineDefinition registerTankValve(GTRegistrate registrate, Strin } public static MultiblockMachineDefinition[] registerTieredMultis(String name, - BiFunction factory, + BiFunction factory, BiFunction builder, int... tiers) { return registerTieredMultis(REGISTRATE, name, factory, builder, tiers); } public static MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, String name, - BiFunction factory, + BiFunction factory, BiFunction builder, int... tiers) { MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[GTValues.TIER_COUNT]; @@ -698,7 +698,7 @@ public static MultiblockMachineDefinition registerLargeBoiler(GTRegistrate regis .recipeModifier(LargeBoilerMachine::recipeModifier, true) .appearanceBlock(casing) .partAppearance((controller, part, side) -> - controller.self().getPos().below().getY() == part.self().getPos().getY() ? + controller.self().getBlockPos().below().getY() == part.self().getBlockPos().getY() ? fireBox.get().defaultBlockState() : casing.get().defaultBlockState()) .pattern((definition) -> { TraceabilityPredicate fireboxPred = blocks(ALL_FIREBOXES.get(firebox).get()).setMinGlobalLimited(3) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java index 019c13fbeea..dfbcf64b53d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java @@ -503,7 +503,7 @@ public class GTMultiMachines { return shapeInfos; }) .allowExtendedFacing(false) - .partSorter(Comparator.comparingInt(p -> p.self().getPos().getY())) + .partSorter(Comparator.comparingInt(p -> p.self().getBlockPos().getY())) .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), GTCEu.id("block/multiblock/distillation_tower")) .register(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java index 2baae3aa047..79653a23233 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java @@ -2,8 +2,8 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.data.RotationState; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; @@ -439,7 +439,7 @@ public class GTResearchMachines { @NotNull private static MachineBuilder registerDataHatch(String name, String displayName, int tier, - Function constructor, + Function constructor, String model, PartAbility... abilities) { return REGISTRATE.machine(name, constructor) .langValue(displayName) @@ -450,7 +450,7 @@ private static MachineBuilder registerDataHatch(String name, } private static MachineBuilder registerHPCAPart(String name, String displayName, - Function constructor, + Function constructor, String texture, boolean isAdvanced) { return REGISTRATE.machine(name, constructor) .langValue(displayName) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java index 1c4c30c51c2..d4cdf600f2c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -641,7 +641,7 @@ public static MachineBuilder.ModelInitializer createItemCollectorModel(ResourceL public static NonNullBiConsumer, GTBlockstateProvider> createMachineModel(MachineBuilder.ModelInitializer modelInitializer) { return (ctx, prov) -> { Block block = ctx.getEntry(); - if (!(block instanceof IMachineBlock machineBlock)) { + if (!(block instanceof MetaMachineBlock machineBlock)) { throw new IllegalArgumentException( "passed block must be a machine block, is " + block.getClass().getName()); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java index a65523e1a8b..d961124791f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java @@ -218,7 +218,7 @@ private boolean handleSpecialBlockEntities(BlockEntity first, int limit, UseOnCo } } else if (first instanceof IPipeNode pipe) { var collected = BreadthFirstBlockSearch.conditionalSearch(IPipeNode.class, pipe, - first.getLevel(), IPipeNode::getPipePos, + first.getLevel(), IPipeNode::getBlockPos, gtPipePredicate, limit, limit * 6); paintPaintables(collected, context); } else if (first instanceof IPaintable paintable) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java index 9df8a915c81..047f36f7484 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.item; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; @@ -8,6 +7,7 @@ import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IDataItem; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; @@ -158,8 +158,7 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex return interactable.onDataStickUse(context.getPlayer(), itemStack); } } - if (context.getLevel().getBlockEntity(context.getClickedPos()) instanceof MetaMachineBlockEntity blockEntity) { - var machine = blockEntity.getMetaMachine(); + if (context.getLevel().getBlockEntity(context.getClickedPos()) instanceof MetaMachine machine) { if (!MachineOwner.canOpenOwnerMachine(context.getPlayer(), machine)) { return InteractionResult.FAIL; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java index 5e2a1566377..5661008cfa5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.item; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IItemUIFactory; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; @@ -141,8 +141,8 @@ public InteractionResult useOn(UseOnContext context) { var stack = context.getItemInHand(); int circuitSetting = getCircuitConfiguration(stack); BlockEntity entity = context.getLevel().getBlockEntity(context.getClickedPos()); - if (entity instanceof MetaMachineBlockEntity machineEntity && context.isSecondaryUseActive()) { - if (machineEntity.metaMachine instanceof IHasCircuitSlot circuitMachine && + if (entity instanceof MetaMachine machine && context.isSecondaryUseActive()) { + if (machine instanceof IHasCircuitSlot circuitMachine && circuitMachine.getCircuitInventory().getSlots() > 0) { setCircuitConfig(circuitMachine.getCircuitInventory(), circuitSetting); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java index 8416000eb05..d62b68bea73 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.*; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; @@ -10,7 +9,6 @@ import com.gregtechceu.gtceu.api.gui.misc.ProspectorMode; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IMufflableMachine; @@ -197,8 +195,7 @@ public int addScannerInfo(Player player, Level level, BlockPos pos, DisplayMode } } - if (tileEntity instanceof IMachineBlockEntity machineBlockEntity) { - MetaMachine machine = machineBlockEntity.getMetaMachine(); + if (tileEntity instanceof MetaMachine machine) { list.add(Component.translatable(state.getBlock().getDescriptionId()).withStyle(ChatFormatting.BLUE)); @@ -214,7 +211,7 @@ public int addScannerInfo(Player player, Level level, BlockPos pos, DisplayMode list.add(Component.translatable("behavior.portable_scanner.machine_front_facing", machine.getFrontFacing().getSerializedName())); list.add(Component.translatable("behavior.portable_scanner.machine_upwards_facing", - machineBlockEntity.self().getBlockState().getValue(GTBlockStateProperties.UPWARDS_FACING) + machine.getBlockState().getValue(GTBlockStateProperties.UPWARDS_FACING) .getSerializedName())); } @@ -452,11 +449,10 @@ else if (machine instanceof IDataInfoProvider) if (mode == DisplayMode.SHOW_INTERNAL_JAVA_INFO && tileEntity instanceof ManagedSyncBlockEntity syncBlockEntity) { - MetaMachineBlockEntity mmbe = (syncBlockEntity instanceof MetaMachineBlockEntity m) ? m : null; + MetaMachine machine = (syncBlockEntity instanceof MetaMachine m) ? m : null; PipeBlockEntity pipe = (syncBlockEntity instanceof PipeBlockEntity p) ? p : null; list.add(Component.literal(syncBlockEntity.toString())); - if (mmbe != null) list.add(Component.literal(mmbe.getMetaMachine().toString())); if (pipe != null) { var net = pipe.getPipeNet(); list.add(Component.literal(net == null ? "null" : net.toString())); @@ -464,7 +460,7 @@ else if (machine instanceof IDataInfoProvider) list.add(Component.translatable("behavior.portable_scanner.divider")); list.add(Component.literal("Covers")); - ICoverable coverable = mmbe != null ? mmbe.getMetaMachine().getCoverContainer() : + ICoverable coverable = machine != null ? machine.getCoverContainer() : (pipe != null ? pipe.getCoverContainer() : null); if (coverable != null) { for (var dir : GTUtil.DIRECTIONS) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java index e63906415ed..9c50b46bfb0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.api.item.tool.ToolHelper; import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.data.item.GTToolActions; import com.gregtechceu.gtceu.common.item.tool.rotation.CustomBlockRotations; import com.gregtechceu.gtceu.common.item.tool.rotation.ICustomRotationBehavior; @@ -51,7 +51,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { BlockPos pos = context.getClickedPos(); BlockEntity te = level.getBlockEntity(pos); // MTEs have special handling on rotation - if (te instanceof IMachineBlockEntity) { + if (te instanceof MetaMachine) { return InteractionResult.PASS; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MetaMachineConfigCopyBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MetaMachineConfigCopyBehaviour.java index 2d52bb34cec..e60fc0b90e4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MetaMachineConfigCopyBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MetaMachineConfigCopyBehaviour.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputFluid; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; @@ -101,8 +100,7 @@ public InteractionResultHolder use(Item item, Level level, Player pla @Override public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { // spotless:off - if (context.getLevel().getBlockEntity(context.getClickedPos()) instanceof IMachineBlockEntity blockEntity) { - var machine = blockEntity.getMetaMachine(); + if (context.getLevel().getBlockEntity(context.getClickedPos()) instanceof MetaMachine machine) { if (!MachineOwner.canOpenOwnerMachine(context.getPlayer(), machine)) { return InteractionResult.FAIL; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java index 154473063f9..3380aadc391 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.item.component.forge.IComponentCapability; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.misc.forge.VoidFluidHandlerItemStack; import net.minecraft.network.chat.Component; @@ -51,8 +51,8 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { } IFluidHandler fluidHandler; - if (level.getBlockEntity(context.getClickedPos()) instanceof IMachineBlockEntity mmbe) { - fluidHandler = mmbe.getMetaMachine().getFluidHandlerCap(context.getClickedFace(), false); + if (level.getBlockEntity(context.getClickedPos()) instanceof MetaMachine machine) { + fluidHandler = machine.getFluidHandlerCap(context.getClickedFace(), false); } else { // noinspection DataFlowIssue fluidHandler = FluidUtil.getFluidHandler(level, context.getClickedPos(), context.getClickedFace()) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java index 34333331774..2b4458f88e3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.electric; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -40,8 +40,8 @@ public class AirScrubberMachine extends SimpleTieredMachine implements IEnvironm @Getter private float removedLastSecond; - public AirScrubberMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, tier, GTMachineUtils.largeTankSizeFunction, args); + public AirScrubberMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier, GTMachineUtils.largeTankSizeFunction); this.cleaningPerOperation = MIN_CLEANING_PER_OPERATION; } @@ -88,7 +88,7 @@ public boolean onWorking() { removedLastSecond = 0; for (Direction dir : GTUtil.DIRECTIONS) { - BlockPos offset = getPos().relative(dir); + BlockPos offset = getBlockPos().relative(dir); if (GTCapabilityHelper.getHazardContainer(getLevel(), offset, dir.getOpposite()) != null) { if (getLevel().getBlockEntity(offset) instanceof DuctPipeBlockEntity duct && !duct.isConnected(dir.getOpposite())) { @@ -101,7 +101,7 @@ public boolean onWorking() { final ServerLevel serverLevel = (ServerLevel) getLevel(); EnvironmentalHazardSavedData savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); - final ChunkPos pos = new ChunkPos(getPos()); + final ChunkPos pos = new ChunkPos(getBlockPos()); Object2FloatMap relativePositions = new Object2FloatOpenHashMap<>(); int radius = tier / 2; if (radius <= 0) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index e261481043b..2a05e2b3b5d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IElectricItem; @@ -8,7 +9,6 @@ import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -29,6 +29,7 @@ import net.minecraftforge.energy.IEnergyStorage; import lombok.Getter; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -52,11 +53,12 @@ public class BatteryBufferMachine extends TieredEnergyMachine @SaveField protected final CustomItemStackHandler batteryInventory; - public BatteryBufferMachine(IMachineBlockEntity holder, int tier, int inventorySize, Object... args) { - super(holder, tier, inventorySize); + public BatteryBufferMachine(BlockEntityCreationInfo info, int tier, int inventorySize) { + super(info, tier, + (TieredEnergyMachine machine) -> new EnergyBatteryTrait((BatteryBufferMachine) machine, inventorySize)); this.isWorkingEnabled = true; this.inventorySize = inventorySize; - this.batteryInventory = createBatteryInventory(args); + this.batteryInventory = createBatteryInventory(); this.batteryInventory.setOnContentsChanged(energyContainer::checkOutputSubscription); } @@ -64,12 +66,7 @@ public BatteryBufferMachine(IMachineBlockEntity holder, int tier, int inventoryS // ***** Initialization ******// ////////////////////////////////////// - @Override - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { - return new EnergyBatteryTrait((int) args[0]); - } - - protected CustomItemStackHandler createBatteryInventory(Object... ignoredArgs) { + protected CustomItemStackHandler createBatteryInventory() { var handler = new CustomItemStackHandler(this.inventorySize) { @Override @@ -203,18 +200,23 @@ public IGuiTexture getComponentIcon() { return GuiTextures.BUTTON_CHECK; // temporary } - protected class EnergyBatteryTrait extends NotifiableEnergyContainer { + protected static class EnergyBatteryTrait extends NotifiableEnergyContainer { + + private final BatteryBufferMachine machine; + private final int tier; - protected EnergyBatteryTrait(int inventorySize) { - super(BatteryBufferMachine.this, GTValues.V[tier] * inventorySize * 32L, GTValues.V[tier], - inventorySize * AMPS_PER_BATTERY, GTValues.V[tier], inventorySize); - this.setSideInputCondition(side -> side != getFrontFacing() && isWorkingEnabled()); - this.setSideOutputCondition(side -> side == getFrontFacing() && isWorkingEnabled()); + protected EnergyBatteryTrait(@NotNull BatteryBufferMachine machine, int inventorySize) { + super(machine, GTValues.V[machine.getTier()] * inventorySize * 32L, GTValues.V[machine.getTier()], + inventorySize * AMPS_PER_BATTERY, GTValues.V[machine.getTier()], inventorySize); + tier = machine.getTier(); + this.machine = machine; + this.setSideInputCondition(side -> side != machine.getFrontFacing() && machine.isWorkingEnabled()); + this.setSideOutputCondition(side -> side == machine.getFrontFacing() && machine.isWorkingEnabled()); } @Override public void checkOutputSubscription() { - if (isWorkingEnabled()) { + if (machine.isWorkingEnabled()) { super.checkOutputSubscription(); } else if (outputSubs != null) { outputSubs.unsubscribe(); @@ -224,15 +226,16 @@ public void checkOutputSubscription() { @Override public void serverTick() { - var outFacing = getFrontFacing(); - var energyContainer = GTCapabilityHelper.getEnergyContainer(getLevel(), getPos().relative(outFacing), + var outFacing = machine.getFrontFacing(); + var energyContainer = GTCapabilityHelper.getEnergyContainer(machine.getLevel(), + machine.getBlockPos().relative(outFacing), outFacing.getOpposite()); if (energyContainer == null) { return; } var voltage = getOutputVoltage(); - var batteries = getNonEmptyBatteries(); + var batteries = machine.getNonEmptyBatteries(); if (!batteries.isEmpty()) { // Prioritize as many packets as available of energy created long internalAmps = Math.abs(Math.min(0, getInternalStorage() / voltage)); @@ -250,7 +253,7 @@ public void serverTick() { boolean changed = false; for (IElectricItem electricItem : batteries) { - var charged = electricItem.discharge(distributed, getTier(), false, true, false); + var charged = electricItem.discharge(distributed, tier, false, true, false); if (charged > 0) { changed = true; } @@ -259,6 +262,7 @@ public void serverTick() { } if (changed) { + machine.markAsDirty(); checkOutputSubscription(); } @@ -277,7 +281,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (amperage <= 0 || voltage <= 0) return 0; - var batteries = getNonFullBatteries(); + var batteries = machine.getNonFullBatteries(); var leftAmps = batteries.size() * AMPS_PER_BATTERY - amps; var usedAmps = Math.min(leftAmps, amperage); if (leftAmps <= 0) @@ -285,7 +289,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (side == null || inputsEnergy(side)) { if (voltage > getInputVoltage()) { - doExplosion(GTUtil.getExplosionPower(voltage)); + machine.doExplosion(GTUtil.getExplosionPower(voltage)); return usedAmps; } @@ -303,11 +307,11 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long long charged = 0; if (item instanceof IElectricItem electricItem) { charged = electricItem.charge( - Math.min(distributed, GTValues.V[electricItem.getTier()] * AMPS_PER_BATTERY), getTier(), + Math.min(distributed, GTValues.V[electricItem.getTier()] * AMPS_PER_BATTERY), tier, true, false); } else if (item instanceof IEnergyStorage energyStorage) { charged = FeCompat.insertEu(energyStorage, - Math.min(distributed, GTValues.V[getTier()] * AMPS_PER_BATTERY), false); + Math.min(distributed, GTValues.V[tier] * AMPS_PER_BATTERY), false); } if (charged > 0) { changed = true; @@ -317,6 +321,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long } if (changed) { + machine.markAsDirty(); checkOutputSubscription(); } @@ -330,7 +335,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long @Override public long getEnergyCapacity() { long energyCapacity = 0L; - for (Object battery : getAllBatteries()) { + for (Object battery : machine.getAllBatteries()) { if (battery instanceof IElectricItem electricItem) { energyCapacity += electricItem.getMaxCharge(); } else if (battery instanceof IEnergyStorage energyStorage) { @@ -343,7 +348,7 @@ public long getEnergyCapacity() { @Override public long getEnergyStored() { long energyStored = 0L; - for (Object battery : getAllBatteries()) { + for (Object battery : machine.getAllBatteries()) { if (battery instanceof IElectricItem electricItem) { energyStored += electricItem.getCharge(); } else if (battery instanceof IEnergyStorage energyStorage) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java index 962bd9e823f..9acde03fe6f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -10,7 +11,6 @@ import com.gregtechceu.gtceu.api.gui.editor.EditableUI; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; @@ -94,8 +94,8 @@ public class BlockBreakerMachine extends TieredEnergyMachine @SyncToClient private boolean isWorkingEnabled = true; - public BlockBreakerMachine(IMachineBlockEntity holder, int tier, Object... ignoredArgs) { - super(holder, tier); + public BlockBreakerMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); this.inventorySize = (tier + 1) * (tier + 1); this.cache = createCacheItemHandler(); this.chargerInventory = createChargerItemHandler(); @@ -179,7 +179,7 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { ////////////////////////////////////// public void updateBreakerSubscription() { - if (drainEnergy(true) && !getLevel().getBlockState(getPos().relative(getFrontFacing())).isAir() && + if (drainEnergy(true) && !getLevel().getBlockState(getBlockPos().relative(getFrontFacing())).isAir() && isWorkingEnabled) { breakerSubs = subscribeServerTick(breakerSubs, this::breakerUpdate); } else if (breakerSubs != null) { @@ -195,7 +195,7 @@ public void breakerUpdate() { drainEnergy(false); if (blockBreakProgress == 0) { - var pos = getPos().relative(getFrontFacing()); + var pos = getBlockPos().relative(getFrontFacing()); var blockState = getLevel().getBlockState(pos); float hardness = blockState.getBlock().defaultDestroyTime(); if (hardness >= 0.0f && Math.abs(hardness - currentHardness) < .5f) { @@ -204,9 +204,10 @@ public void breakerUpdate() { var remainder = tryFillCache(drop); if (!remainder.isEmpty()) { if (getOutputFacingItems() == null) { - Block.popResource(getLevel(), getPos(), remainder); + Block.popResource(getLevel(), getBlockPos(), remainder); } else { - Block.popResource(getLevel(), getPos().relative(getOutputFacingItems()), remainder); + Block.popResource(getLevel(), getBlockPos().relative(getOutputFacingItems()), + remainder); } } } @@ -216,7 +217,7 @@ public void breakerUpdate() { } if (blockBreakProgress == 0) { - var pos = getPos().relative(getFrontFacing()); + var pos = getBlockPos().relative(getFrontFacing()); var blockState = getLevel().getBlockState(pos); float hardness = blockState.getBlock().defaultDestroyTime(); boolean skipBlock = blockState.isAir(); @@ -237,7 +238,7 @@ public void breakerUpdate() { public void clientTick() { super.clientTick(); if (blockBreakProgress > 0) { - var pos = getPos().relative(getFrontFacing()); + var pos = getBlockPos().relative(getFrontFacing()); var blockState = getLevel().getBlockState(pos); getLevel().addDestroyBlockEffect(pos, blockState); } @@ -297,7 +298,7 @@ public void setOutputFacingItems(@Nullable Direction outputFacing) { protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingItems(); if ((isAutoOutputItems() && !cache.isEmpty()) && outputFacing != null && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacing)) + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacing)) autoOutputSubs = subscribeServerTick(autoOutputSubs, this::checkAutoOutput); else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); @@ -475,7 +476,7 @@ protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, @Override protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, BlockHitResult hitResult) { - var controllable = GTCapabilityHelper.getControllable(getLevel(), getPos(), gridSide); + var controllable = GTCapabilityHelper.getControllable(getLevel(), getBlockPos(), gridSide); if (controllable != null) { if (!isRemote()) { controllable.setWorkingEnabled(!controllable.isWorkingEnabled()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java index 1333e87264d..92e90d46257 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.*; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -75,11 +75,12 @@ public enum State implements StringRepresentable { @RerenderOnChanged private State state; - public ChargerMachine(IMachineBlockEntity holder, int tier, int inventorySize, Object... args) { - super(holder, tier, inventorySize); + public ChargerMachine(BlockEntityCreationInfo info, int tier, int inventorySize) { + super(info, tier, + (TieredEnergyMachine machine) -> new EnergyBatteryTrait((ChargerMachine) machine, inventorySize)); this.isWorkingEnabled = true; this.inventorySize = inventorySize; - this.chargerInventory = createChargerInventory(args); + this.chargerInventory = createChargerInventory(); this.state = State.IDLE; } @@ -87,12 +88,7 @@ public ChargerMachine(IMachineBlockEntity holder, int tier, int inventorySize, O // ***** Initialization ******// ////////////////////////////////////// - @Override - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { - return new EnergyBatteryTrait((int) args[0]); - } - - protected CustomItemStackHandler createChargerInventory(Object... args) { + protected CustomItemStackHandler createChargerInventory() { var handler = new CustomItemStackHandler(this.inventorySize) { @Override @@ -192,12 +188,14 @@ private void changeState(State newState) { } } - protected class EnergyBatteryTrait extends NotifiableEnergyContainer { + protected static class EnergyBatteryTrait extends NotifiableEnergyContainer { + + private ChargerMachine machine; - protected EnergyBatteryTrait(int inventorySize) { - super(ChargerMachine.this, GTValues.V[tier] * inventorySize * 32L, GTValues.V[tier], + protected EnergyBatteryTrait(ChargerMachine machine, int inventorySize) { + super(machine, GTValues.V[machine.tier] * inventorySize * 32L, GTValues.V[machine.tier], inventorySize * AMPS_PER_ITEM, 0L, 0L); - this.setSideInputCondition(side -> isWorkingEnabled()); + this.setSideInputCondition(side -> machine.isWorkingEnabled()); this.setSideOutputCondition(side -> false); } @@ -209,11 +207,11 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long lastTimeStamp = latestTimeStamp; } if (amperage <= 0 || voltage <= 0) { - changeState(State.IDLE); + machine.changeState(State.IDLE); return 0; } - var electricItems = getNonFullElectricItem(); + var electricItems = machine.getNonFullElectricItem(); var maxAmps = electricItems.size() * AMPS_PER_ITEM - amps; var usedAmps = Math.min(maxAmps, amperage); if (maxAmps <= 0) { @@ -222,7 +220,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (side == null || inputsEnergy(side)) { if (voltage > getInputVoltage()) { - doExplosion(GTUtil.getExplosionPower(voltage)); + machine.doExplosion(GTUtil.getExplosionPower(voltage)); return usedAmps; } @@ -240,10 +238,10 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long long charged = 0; if (electricItem instanceof IElectricItem item) { charged = item.charge(Math.min(distributed, GTValues.V[item.getTier()] * AMPS_PER_ITEM), - getTier(), true, false); + machine.tier, true, false); } else if (electricItem instanceof IEnergyStorage energyStorage) { charged = FeCompat.insertEu(energyStorage, - Math.min(distributed, GTValues.V[getTier()] * AMPS_PER_ITEM), false); + Math.min(distributed, GTValues.V[machine.tier] * AMPS_PER_ITEM), false); } if (charged > 0) { changed = true; @@ -253,7 +251,8 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long } if (changed) { - changeState(State.RUNNING); + machine.markAsDirty(); + machine.changeState(State.RUNNING); } // Remove energy used and then transfer overflow energy into the internal buffer @@ -266,8 +265,8 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long @Override public long getEnergyCapacity() { long energyCapacity = 0L; - for (int i = 0; i < chargerInventory.getSlots(); i++) { - var electricItemStack = chargerInventory.getStackInSlot(i); + for (int i = 0; i < machine.chargerInventory.getSlots(); i++) { + var electricItemStack = machine.chargerInventory.getStackInSlot(i); var electricItem = GTCapabilityHelper.getElectricItem(electricItemStack); if (electricItem != null) { energyCapacity += electricItem.getMaxCharge(); @@ -281,7 +280,7 @@ public long getEnergyCapacity() { } if (energyCapacity == 0) { - changeState(State.IDLE); + machine.changeState(State.IDLE); } return energyCapacity; @@ -290,8 +289,8 @@ public long getEnergyCapacity() { @Override public long getEnergyStored() { long energyStored = 0L; - for (int i = 0; i < chargerInventory.getSlots(); i++) { - var electricItemStack = chargerInventory.getStackInSlot(i); + for (int i = 0; i < machine.chargerInventory.getSlots(); i++) { + var electricItemStack = machine.chargerInventory.getStackInSlot(i); var electricItem = GTCapabilityHelper.getElectricItem(electricItemStack); if (electricItem != null) { energyStored += electricItem.getCharge(); @@ -307,7 +306,7 @@ public long getEnergyStored() { var capacity = getEnergyCapacity(); if (capacity != 0 && capacity == energyStored) { - changeState(State.FINISHED); + machine.changeState(State.FINISHED); } return energyStored; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java index 2a0390108af..6f2cf812f04 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java @@ -1,13 +1,12 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.common.machine.trait.ConverterTrait; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -35,22 +34,14 @@ public class ConverterMachine extends TieredEnergyMachine { public static final BooleanProperty FE_TO_EU_PROPERTY = GTMachineModelProperties.IS_FE_TO_EU; - public ConverterMachine(IMachineBlockEntity holder, int tier, int amps, Object... args) { - super(holder, tier, args, amps); + public ConverterMachine(BlockEntityCreationInfo info, int tier, int amps) { + super(info, tier, (TieredEnergyMachine machine) -> new ConverterTrait((ConverterMachine) machine, amps)); } ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - @Override - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { - if (args.length > 0 && args[args.length - 1] instanceof Integer ampsValue) { - return new ConverterTrait(this, ampsValue); - } - throw new IllegalArgumentException("ConverterMachine need args [amps] for initialization"); - } - public ConverterTrait getConverterTrait() { return (ConverterTrait) energyContainer; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index afd5b630cfd..02537d249b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -11,7 +12,6 @@ import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; @@ -127,37 +127,22 @@ public class FisherMachine extends TieredEnergyMachine @SyncToClient protected boolean junkEnabled = true; - public FisherMachine(IMachineBlockEntity holder, int tier, Object... ignoredArgs) { - super(holder, tier); + public FisherMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); this.inventorySize = (tier + 1) * (tier + 1); this.maxProgress = calcMaxProgress(tier); this.energyPerTick = GTValues.V[tier - 1]; - this.cache = createCacheItemHandler(); - this.baitHandler = createBaitItemHandler(); - this.chargerInventory = createChargerItemHandler(); - setOutputFacingItems(getFrontFacing()); - } + this.cache = new NotifiableItemStackHandler(this, inventorySize, IO.BOTH, IO.OUT); - ////////////////////////////////////// - // ***** Initialization *****// - ////////////////////////////////////// + this.baitHandler = new NotifiableItemStackHandler(this, 1, IO.BOTH, IO.IN); + baitHandler.setFilter(item -> item.is(Items.STRING)); - protected CustomItemStackHandler createChargerItemHandler() { - var handler = new CustomItemStackHandler(); - handler.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || + this.chargerInventory = new CustomItemStackHandler(); + chargerInventory.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && GTCapabilityHelper.getForgeEnergyItem(item) != null)); - return handler; - } - - protected NotifiableItemStackHandler createCacheItemHandler() { - return new NotifiableItemStackHandler(this, inventorySize, IO.BOTH, IO.OUT); - } - protected NotifiableItemStackHandler createBaitItemHandler() { - var handler = new NotifiableItemStackHandler(this, 1, IO.BOTH, IO.IN); - handler.setFilter(item -> item.is(Items.STRING)); - return handler; + setOutputFacingItems(getFrontFacing()); } public void setWorkingEnabled(boolean enabled) { @@ -241,7 +226,8 @@ public void updateFishingUpdateSubscription() { private void updateHasWater() { for (int x = 0; x < WATER_CHECK_SIZE; x++) for (int z = 0; z < WATER_CHECK_SIZE; z++) { - BlockPos waterCheckPos = getPos().below().offset(x - WATER_CHECK_SIZE / 2, 0, z - WATER_CHECK_SIZE / 2); + BlockPos waterCheckPos = getBlockPos().below().offset(x - WATER_CHECK_SIZE / 2, 0, + z - WATER_CHECK_SIZE / 2); if (!getLevel().getBlockState(waterCheckPos).getFluidState().is(Fluids.WATER)) { hasWater = false; return; @@ -274,7 +260,7 @@ public boolean isOpenWaterFishing() { .withOptionalParameter(LootContextParams.THIS_ENTITY, simulatedHook) .withParameter(LootContextParams.TOOL, fishingRod) .withParameter(LootContextParams.ORIGIN, - new Vec3(getPos().getX(), getPos().getY(), getPos().getZ())) + new Vec3(getBlockPos().getX(), getBlockPos().getY(), getBlockPos().getZ())) .create(LootContextParamSets.FISHING); NonNullList generatedLoot = NonNullList.create(); @@ -342,7 +328,7 @@ else if (batterySubs != null) { protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingItems(); if ((isAutoOutputItems() && !cache.isEmpty()) && outputFacing != null && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacing)) + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacing)) autoOutputSubs = subscribeServerTick(autoOutputSubs, this::checkAutoOutput); else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java index d426c536d65..8017d8ba498 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IMonitorComponent; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.integration.ae2.machine.trait.GridNodeHostTrait; @@ -36,8 +36,8 @@ public class HullMachine extends TieredPartMachine implements IMonitorComponent @SaveField protected NotifiableEnergyContainer energyContainer; - public HullMachine(IMachineBlockEntity holder, int tier) { - super(holder, tier); + public HullMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); if (GTCEu.Mods.isAE2Loaded()) { this.gridNodeHost = new GridNodeHostTrait(this); } else { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index 58c253e0016..82e33277732 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -12,7 +13,6 @@ import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; @@ -125,8 +125,8 @@ public class ItemCollectorMachine extends TieredEnergyMachine @RerenderOnChanged private boolean active = false; - public ItemCollectorMachine(IMachineBlockEntity holder, int tier, Object... ignoredArgs) { - super(holder, tier); + public ItemCollectorMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); this.inventorySize = INVENTORY_SIZES[Mth.clamp(getTier(), 0, INVENTORY_SIZES.length - 1)]; this.energyPerTick = (long) BASE_EU_CONSUMPTION * (1L << (tier - 1)); this.output = createOutputItemHandler(); @@ -231,8 +231,8 @@ public void update() { if (drainEnergy(false)) { if (aabb == null || rangeDirty) { rangeDirty = false; - BlockPos pos1 = getPos().offset(-range, 0, -range); - BlockPos pos2 = getPos().offset(range, 2, range); + BlockPos pos1 = getBlockPos().offset(-range, 0, -range); + BlockPos pos2 = getBlockPos().offset(range, 2, range); this.aabb = AABB.of(BoundingBox.fromCorners(pos1, pos2)); } moveItemsInRange(); @@ -244,7 +244,7 @@ public void moveItemsInRange() { ItemFilter filter = null; if (!filterInventory.getStackInSlot(0).isEmpty()) filter = ItemFilter.loadFilter(filterInventory.getStackInSlot(0)); - BlockPos centerPos = self().getPos().above(); + BlockPos centerPos = self().getBlockPos().above(); List itemEntities = getLevel().getEntitiesOfClass(ItemEntity.class, aabb); for (ItemEntity itemEntity : itemEntities) { @@ -338,7 +338,7 @@ else if (batterySubs != null) { protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingItems(); if ((isAutoOutputItems() && !output.isEmpty()) && outputFacing != null && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacing)) + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacing)) autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); @@ -550,7 +550,7 @@ protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, @Override protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, BlockHitResult hitResult) { - var controllable = GTCapabilityHelper.getControllable(getLevel(), getPos(), gridSide); + var controllable = GTCapabilityHelper.getControllable(getLevel(), getBlockPos(), gridSide); if (controllable != null) { if (!isRemote()) { controllable.setWorkingEnabled(!controllable.isWorkingEnabled()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index 470c0a386e7..be617b2b03e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -1,25 +1,21 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IMiner; -import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.WidgetUtils; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.gui.editor.EditableUI; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.WorkableTieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.MinerLogic; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -93,10 +89,10 @@ public class MinerMachine extends WorkableTieredMachine @Nullable protected ISubscription exportItemSubs, energySubs; - public MinerMachine(IMachineBlockEntity holder, int tier, int speed, int maximumRadius, int fortune, - Object... args) { - super(holder, tier, GTMachineUtils.defaultTankSizeFunction, args, (tier + 1) * (tier + 1), fortune, speed, - maximumRadius); + public MinerMachine(BlockEntityCreationInfo info, int tier, int speed, int maximumRadius, int fortune) { + super(info, tier, + (m) -> new MinerLogic(m, fortune, speed, maximumRadius), + 0, (tier + 1) * (tier + 1), 0, 0, ($) -> 0); this.energyPerTick = GTValues.V[tier - 1]; this.chargerInventory = createChargerItemHandler(); } @@ -105,7 +101,7 @@ public MinerMachine(IMachineBlockEntity holder, int tier, int speed, int maximum // ***** Initialization ******// ////////////////////////////////////// - protected CustomItemStackHandler createChargerItemHandler(Object... args) { + protected CustomItemStackHandler createChargerItemHandler() { var handler = new CustomItemStackHandler(); handler.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && @@ -113,30 +109,6 @@ protected CustomItemStackHandler createChargerItemHandler(Object... args) { return handler; } - @Override - protected NotifiableItemStackHandler createImportItemHandler(Object... args) { - return new NotifiableItemStackHandler(this, 0, IO.IN); - } - - @Override - protected NotifiableItemStackHandler createExportItemHandler(Object... args) { - if (args.length > 3 && args[args.length - 4] instanceof Integer invSize) { - return new NotifiableItemStackHandler(this, invSize, IO.OUT); - } - throw new IllegalArgumentException( - "MinerMachine need args [inventorySize, fortune, speed, maximumRadius] for initialization"); - } - - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - if (args.length > 2 && args[args.length - 3] instanceof Integer fortune && - args[args.length - 2] instanceof Integer speed && args[args.length - 1] instanceof Integer maxRadius) { - return new MinerLogic(this, fortune, speed, maxRadius); - } - throw new IllegalArgumentException( - "MinerMachine need args [inventorySize, fortune, speed, maximumRadius] for initialization"); - } - @Override public void onMachineRemoved() { // Remove the miner pipes below this miner @@ -190,7 +162,7 @@ public void onUnload() { protected void updateAutoOutputSubscription() { var outputFace = getOutputFacingItems(); if (isAutoOutputItems() && outputFace != null && !exportItems.isEmpty() && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFace)) { + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFace)) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java index b3204b65c57..b93dc476bcd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java @@ -1,13 +1,13 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputFluid; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -75,19 +75,16 @@ public class PumpMachine extends TieredEnergyMachine implements IAutoOutputFluid @SaveField protected final NotifiableFluidTank cache; - public PumpMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, tier); - this.cache = createCacheFluidHandler(args); + public PumpMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); + this.cache = new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME * Math.max(1, getTier()), IO.NONE, + IO.OUT); } ////////////////////////////////////// // ***** Initialization *****// ////////////////////////////////////// - protected NotifiableFluidTank createCacheFluidHandler(Object... args) { - return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME * Math.max(1, getTier()), IO.NONE, IO.OUT); - } - @Override public boolean isAllowInputFromOutputSideFluids() { return false; @@ -107,7 +104,7 @@ public void setAutoOutputFluids(boolean autoOutputFluids) { } @Override - public void setOutputFacingFluids(Direction outputFacing) { + public void setOutputFacingFluids(@Nullable Direction outputFacing) { setFrontFacing(outputFacing); } @@ -251,7 +248,7 @@ private void updatePumpQueue(@Nullable FluidType fluidType) { return; } - BlockPos headPos = getPos().below(pumpHeadY); + BlockPos headPos = getBlockPos().below(pumpHeadY); BlockPos downPos = headPos.below(1); var downBlock = getLevel().getBlockState(downPos); @@ -385,7 +382,7 @@ private PumpQueue buildPumpQueue(Level level, BlockPos headPos, FluidType fluidT */ private boolean canAdvancePumpHead() { // position of the pump head, i.e. the position of the lowest mining pipe - BlockPos headPos = getPos().below(pumpHeadY); + BlockPos headPos = getBlockPos().below(pumpHeadY); if (pumpQueue == null || pumpQueue.queue.isEmpty()) { Level level; @@ -409,7 +406,7 @@ private boolean canAdvancePumpHead() { @Override public void onMachineRemoved() { if (getLevel() instanceof ServerLevel serverLevel) { - var pos = getPos().relative(Direction.DOWN); + var pos = getBlockPos().relative(Direction.DOWN); while (serverLevel.getBlockState(pos).is(GTBlocks.MINER_PIPE.get())) { serverLevel.removeBlock(pos, false); pos = pos.relative(Direction.DOWN); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java index b40a7fca0ac..e18da73b220 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java @@ -1,13 +1,13 @@ package com.gregtechceu.gtceu.common.machine.electric; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; public class RockCrusherMachine extends SimpleTieredMachine { - public RockCrusherMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, tier, GTMachineUtils.defaultTankSizeFunction, args); + public RockCrusherMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier, GTMachineUtils.defaultTankSizeFunction); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java index 80139917c2b..c6965a2844a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; @@ -41,10 +41,20 @@ public class TransformerMachine extends TieredEnergyMachine implements IControll @Getter private final int baseAmp; - public TransformerMachine(IMachineBlockEntity holder, int tier, int baseAmp, Object... args) { - super(holder, tier, baseAmp, args); + public TransformerMachine(BlockEntityCreationInfo info, int tier, int amps) { + super(info, tier, (TieredEnergyMachine machine) -> { + NotifiableEnergyContainer energyContainer; + long tierVoltage = GTValues.V[machine.getTier()]; + energyContainer = new NotifiableEnergyContainer(machine, tierVoltage * 8L, tierVoltage * 4, amps, + tierVoltage, + 4L * amps); + return energyContainer; + }); + + energyContainer.setSideInputCondition(s -> s == getFrontFacing() && isWorkingEnabled()); + energyContainer.setSideOutputCondition(s -> s != getFrontFacing() && isWorkingEnabled()); this.isWorkingEnabled = true; - this.baseAmp = baseAmp; + this.baseAmp = amps; } ////////////////////////////////////// @@ -57,19 +67,6 @@ private void onTransformUpdated() { updateEnergyContainer(isTransformUp); } - @Override - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { - var amp = (args.length > 0 && args[0] instanceof Integer a) ? a : 1; - NotifiableEnergyContainer energyContainer; - long tierVoltage = GTValues.V[getTier()]; - // Since this.baseAmp is not yet initialized, we substitute with 1A as default - energyContainer = new NotifiableEnergyContainer(this, tierVoltage * 8L, tierVoltage * 4, amp, tierVoltage, - 4L * amp); - energyContainer.setSideInputCondition(s -> s == getFrontFacing() && isWorkingEnabled()); - energyContainer.setSideOutputCondition(s -> s != getFrontFacing() && isWorkingEnabled()); - return energyContainer; - } - @Override public void onLoad() { super.onLoad(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java index 88bacf93b0c..655c5473f71 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java @@ -2,17 +2,17 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; -import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -21,6 +21,7 @@ import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; @@ -47,6 +48,10 @@ import java.util.Map; import java.util.Set; +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault public class WorldAcceleratorMachine extends TieredEnergyMachine implements IControllable { private static final Map> blacklistedClasses = new Object2ObjectOpenHashMap<>(); @@ -82,19 +87,16 @@ public class WorldAcceleratorMachine extends TieredEnergyMachine implements ICon private boolean active = false; private TickableSubscription tickSubs; - public WorldAcceleratorMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, tier, GTMachineUtils.defaultTankSizeFunction, args); + public WorldAcceleratorMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier, (TieredEnergyMachine machine) -> { + long tierVoltage = GTValues.V[machine.getTier()]; + return new NotifiableEnergyContainer(machine, tierVoltage * 256L, tierVoltage, 8, 0L, 0L); + }); this.speed = (int) Math.pow(2, tier); this.successLimit = SUCCESS_LIMITS[tier - 1]; this.randRange = (getTier() << 1) + 1; } - @Override - protected @NotNull NotifiableEnergyContainer createEnergyContainer(Object @NotNull... args) { - long tierVoltage = GTValues.V[getTier()]; - return new NotifiableEnergyContainer(this, tierVoltage * 256L, tierVoltage, 8, 0L, 0L); - } - public void updateSubscription() { if (isWorkingEnabled && drainEnergy(true)) { tickSubs = subscribeServerTick(tickSubs, this::update); @@ -119,9 +121,9 @@ public void update() { // handle random tick mode if (isRandomTickMode) { BlockPos cornerPos = new BlockPos( - getPos().getX() - getTier(), - getPos().getY() - getTier(), - getPos().getZ() - getTier()); + getBlockPos().getX() - getTier(), + getBlockPos().getY() - getTier(), + getBlockPos().getZ() - getTier()); int attempts = successLimit * 3; for (int i = 0, j = 0; i < successLimit && j < attempts; j++) { @@ -131,7 +133,7 @@ public void update() { GTValues.RNG.nextInt(randRange)); if (randomPos.getY() > getLevel().getMaxBuildHeight() || randomPos.getY() < getLevel().getMinBuildHeight() || !getLevel().isLoaded(randomPos) || - randomPos.equals(getPos())) + randomPos.equals(getBlockPos())) continue; if (getLevel().getBlockState(randomPos).isRandomlyTicking()) { getLevel().getBlockState(randomPos).randomTick((ServerLevel) this.getLevel(), randomPos, @@ -142,7 +144,7 @@ public void update() { } else { // else handle block entity mode for (Direction dir : GTUtil.DIRECTIONS) { - BlockEntity blockEntity = this.getLevel().getBlockEntity(this.getPos().relative(dir)); + BlockEntity blockEntity = this.getLevel().getBlockEntity(this.getBlockPos().relative(dir)); if (blockEntity != null && canAccelerate(blockEntity)) { tickBlockEntity(blockEntity); } @@ -176,7 +178,7 @@ private void tickBlockEntity(@NotNull T blockEntity) { } private boolean canAccelerate(BlockEntity blockEntity) { - if (blockEntity instanceof PipeBlockEntity || blockEntity instanceof IMachineBlockEntity) return false; + if (blockEntity instanceof PipeBlockEntity || blockEntity instanceof MetaMachine) return false; generateWorldAcceleratorBlacklist(); final Class blockEntityClass = blockEntity.getClass(); @@ -232,7 +234,7 @@ public void setWorkingEnabled(boolean workingEnabled) { protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, BlockHitResult hitResult) { - var controllable = GTCapabilityHelper.getControllable(getLevel(), getPos(), gridSide); + var controllable = GTCapabilityHelper.getControllable(getLevel(), getBlockPos(), gridSide); if (controllable != null) { if (!isRemote()) { controllable.setWorkingEnabled(!controllable.isWorkingEnabled()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java index 2ad53abea17..0eb894dac70 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; @@ -7,7 +8,6 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; @@ -24,6 +24,7 @@ import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.*; +import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.Block; @@ -36,8 +37,12 @@ import java.util.Comparator; import java.util.List; +import javax.annotation.ParametersAreNonnullByDefault; + import static com.gregtechceu.gtceu.api.pattern.Predicates.abilities; +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault public class ActiveTransformerMachine extends WorkableElectricMultiblockMachine implements IControllable, IExplosionMachine, IFancyUIMachine, IDisplayUIMachine { @@ -45,8 +50,8 @@ public class ActiveTransformerMachine extends WorkableElectricMultiblockMachine private IEnergyContainer powerInput; protected ConditionalSubscriptionHandler converterSubscription; - public ActiveTransformerMachine(IMachineBlockEntity holder) { - super(holder); + public ActiveTransformerMachine(BlockEntityCreationInfo info) { + super(info); this.powerOutput = new EnergyContainerList(new ArrayList<>()); this.powerInput = new EnergyContainerList(new ArrayList<>()); @@ -88,7 +93,7 @@ public void onStructureFormed() { Long2ObjectMaps::emptyMap); for (IMultiPart part : getPrioritySortedParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (io == IO.NONE) continue; var handlerLists = part.getRecipeHandlers(); for (var handlerList : handlerLists) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java index cc47ad07ef6..257a77b6ddb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java @@ -1,13 +1,12 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; @@ -22,6 +21,7 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraftforge.fluids.FluidStack; @@ -33,6 +33,10 @@ import java.util.*; +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault public class AssemblyLineMachine extends WorkableElectricMultiblockMachine { @Accessors(fluent = true) @@ -40,22 +44,17 @@ public class AssemblyLineMachine extends WorkableElectricMultiblockMachine { @SaveField protected boolean allowCircuitSlots; - public AssemblyLineMachine(IMachineBlockEntity holder, boolean allowCircuitSlots) { - super(holder); + public AssemblyLineMachine(BlockEntityCreationInfo info, boolean allowCircuitSlots) { + super(info, machine -> new AsslineRecipeLogic((AssemblyLineMachine) machine)); this.allowCircuitSlots = allowCircuitSlots; } - public AssemblyLineMachine(IMachineBlockEntity holder) { - this(holder, false); - } - - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new AsslineRecipeLogic(this); + public AssemblyLineMachine(BlockEntityCreationInfo info) { + this(info, false); } public static Comparator partSorter(MultiblockControllerMachine mc) { - return Comparator.comparing(p -> p.self().getPos(), + return Comparator.comparing(p -> p.self().getBlockPos(), RelativeDirection.RIGHT.getSorter(mc.getFrontFacing(), mc.getUpwardsFacing(), mc.isFlipped())); } @@ -257,16 +256,19 @@ private ActionResult consumeAll(@NotNull GTRecipe recipe, boolean isTick, RecipeHelper.handleRecipeIO(this, copyWithoutItemsFluids, IO.IN, chanceCaches); } - class AsslineRecipeLogic extends RecipeLogic { + private static class AsslineRecipeLogic extends RecipeLogic { + + private final AssemblyLineMachine machine; - public AsslineRecipeLogic(IRecipeLogicMachine machine) { + public AsslineRecipeLogic(AssemblyLineMachine machine) { super(machine); + this.machine = machine; } @Override protected ActionResult handleRecipeIO(GTRecipe recipe, IO io) { if (io.equals(IO.IN)) { - return consumeAll(recipe, false, this.getChanceCaches()); + return machine.consumeAll(recipe, false, this.getChanceCaches()); } return RecipeHelper.handleRecipeIO(machine, recipe, io, this.chanceCaches); } @@ -274,7 +276,7 @@ protected ActionResult handleRecipeIO(GTRecipe recipe, IO io) { @Override protected ActionResult handleTickRecipeIO(GTRecipe recipe, IO io) { if (io.equals(IO.IN)) { - return consumeAll(recipe, true, this.getChanceCaches()); + return machine.consumeAll(recipe, true, this.getChanceCaches()); } return RecipeHelper.handleTickRecipeIO(machine, recipe, io, this.chanceCaches); } @@ -287,12 +289,12 @@ protected ActionResult matchRecipe(GTRecipe recipe) { var config = ConfigHolder.INSTANCE.machines; if (!config.orderedAssemblyLineItems && !config.orderedAssemblyLineFluids) return ActionResult.SUCCESS; - if (!checkItemInputs(recipe, false)) return ActionResult.FAIL_NO_REASON; - if (!checkItemInputs(recipe, true)) return ActionResult.FAIL_NO_REASON; + if (!machine.checkItemInputs(recipe, false)) return ActionResult.FAIL_NO_REASON; + if (!machine.checkItemInputs(recipe, true)) return ActionResult.FAIL_NO_REASON; if (!config.orderedAssemblyLineFluids) return ActionResult.SUCCESS; - if (!checkFluidInputs(recipe, false)) return ActionResult.FAIL_NO_REASON; - if (!checkFluidInputs(recipe, true)) return ActionResult.FAIL_NO_REASON; + if (!machine.checkFluidInputs(recipe, false)) return ActionResult.FAIL_NO_REASON; + if (!machine.checkFluidInputs(recipe, true)) return ActionResult.FAIL_NO_REASON; return ActionResult.SUCCESS; } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java index af8040bc18f..5933ae2b079 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java @@ -2,15 +2,14 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.WeightedMaterial; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; @@ -40,16 +39,11 @@ public class BedrockOreMinerMachine extends WorkableElectricMultiblockMachine im @Getter private final int tier; - public BedrockOreMinerMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public BedrockOreMinerMachine(BlockEntityCreationInfo info, int tier) { + super(info, (m) -> new BedrockOreMinerLogic((BedrockOreMinerMachine) m)); this.tier = tier; } - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new BedrockOreMinerLogic(this); - } - @Override public BedrockOreMinerLogic getRecipeLogic() { return (BedrockOreMinerLogic) super.getRecipeLogic(); @@ -57,7 +51,6 @@ public BedrockOreMinerLogic getRecipeLogic() { public int getEnergyTier() { var energyContainer = this.getCapabilitiesFlat(IO.IN, EURecipeCapability.CAP); - if (energyContainer == null) return this.tier; var energyCont = new EnergyContainerList(energyContainer.stream().filter(IEnergyContainer.class::isInstance) .map(IEnergyContainer.class::cast).toList()); return Math.min(this.tier + 1, Math.max(this.tier, GTUtil.getFloorTierByVoltage(energyCont.getInputVoltage()))); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index feb3174f190..c3496e2dabc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ICentralMonitor; import com.gregtechceu.gtceu.api.capability.IMonitorComponent; @@ -11,13 +12,11 @@ import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.api.item.component.IMonitorModuleItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.*; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -81,8 +80,8 @@ public class CentralMonitorMachine extends WorkableElectricMultiblockMachine private static TraceabilityPredicate MULTI_PREDICATE = null; - public CentralMonitorMachine(IMachineBlockEntity holder) { - super(holder); + public CentralMonitorMachine(BlockEntityCreationInfo info) { + super(info, CentralMonitorLogic::new); } public static TraceabilityPredicate getMultiPredicate() { @@ -112,11 +111,6 @@ public CentralMonitorLogic getRecipeLogic() { return (CentralMonitorLogic) super.getRecipeLogic(); } - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new CentralMonitorLogic(this); - } - public @Nullable EnergyContainerList getFormedEnergyContainer() { return this.energyContainer; } @@ -138,7 +132,7 @@ public void tick() { continue; } module.tick(stack, this, group); - GTNetwork.sendToAllPlayersTrackingChunk(level.getChunkAt(getPos()), + GTNetwork.sendToAllPlayersTrackingChunk(level.getChunkAt(getBlockPos()), new SCPacketMonitorGroupNBTChange(stack, group, this)); } } @@ -158,7 +152,7 @@ protected void clearPatternFindingState() { protected MultiblockState getPatternFindingState() { if (this.patternFindingState == null) { - this.patternFindingState = new MultiblockState(getLevel(), getPos()); + this.patternFindingState = new MultiblockState(getLevel(), getBlockPos()); this.patternFindingState.clean(); } return this.patternFindingState; @@ -188,10 +182,10 @@ public void updateStructureDimensions() { Direction right = RelativeDirection.RIGHT.getRelative(front, spin, false); Direction up = RelativeDirection.UP.getRelative(front, spin, false); Direction down = RelativeDirection.DOWN.getRelative(front, spin, false); - BlockPos.MutableBlockPos posLeft = getPos().mutable().move(left); - BlockPos.MutableBlockPos posRight = getPos().mutable().move(right); - BlockPos.MutableBlockPos posUp = getPos().mutable().move(up); - BlockPos.MutableBlockPos posDown = getPos().mutable().move(down); + BlockPos.MutableBlockPos posLeft = getBlockPos().mutable().move(left); + BlockPos.MutableBlockPos posRight = getBlockPos().mutable().move(right); + BlockPos.MutableBlockPos posUp = getBlockPos().mutable().move(up); + BlockPos.MutableBlockPos posDown = getBlockPos().mutable().move(down); this.leftDist = 0; this.rightDist = 0; this.upDist = 0; @@ -266,7 +260,7 @@ public BlockPos toRelative(BlockPos pos) { Direction right = RelativeDirection.RIGHT.getRelative(front, spin, flipped); Direction up = RelativeDirection.UP.getRelative(front, spin, flipped); - BlockPos tmp = getPos().mutable().move(right, rightDist).move(up, upDist); + BlockPos tmp = getBlockPos().mutable().move(right, rightDist).move(up, upDist); return new BlockPos(Math.abs(tmp.get(right.getAxis()) - pos.get(right.getAxis())), Math.abs(tmp.get(up.getAxis()) - pos.get(up.getAxis())), @@ -286,7 +280,7 @@ public IMonitorComponent getComponent(int row, int col) { Direction up = RelativeDirection.UP.getRelative(front, spin, flipped); col = leftDist + rightDist - col; - BlockPos pos = getPos().relative(left, leftDist - col).relative(up, upDist - row); + BlockPos pos = getBlockPos().relative(left, leftDist - col).relative(up, upDist - row); return GTCapabilityHelper.getMonitorComponent(level, pos, null); } @@ -306,7 +300,7 @@ private IGuiTexture getComponentTexture(int row, int col) { } private boolean isInAnyGroup(IMonitorComponent component) { - return monitorGroups.stream().anyMatch(group -> group.contains(component.getPos())); + return monitorGroups.stream().anyMatch(group -> group.contains(component.getBlockPos())); } @Override @@ -441,7 +435,7 @@ public Widget createUIWidget() { .getString()); for (IMonitorComponent component : selectedComponents) { if (isInAnyGroup(component)) return; - group.add(component.getPos()); + group.add(component.getBlockPos()); } monitorGroups.add(group); addGroupToList.accept(group); @@ -451,18 +445,18 @@ public Widget createUIWidget() { Iterator it = selectedComponents.iterator(); while (it.hasNext()) { IMonitorComponent c = it.next(); - BlockPos rel = toRelative(c.getPos()); + BlockPos rel = toRelative(c.getBlockPos()); imageButtons.get(rel.getY()).get(rel.getX()).accept(it); } if (!selectedTargets.isEmpty()) { - rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); + rightClickCallbacks.getOrDefault(selectedTargets.get(0).getBlockPos(), () -> {}).run(); } }); setTargetButton.setOnPressCallback(click -> { MonitorGroup group = null; for (MonitorGroup group2 : monitorGroups) { for (IMonitorComponent component : selectedComponents) { - if (group2.contains(component.getPos())) { + if (group2.contains(component.getBlockPos())) { group = group2; break; } @@ -472,13 +466,13 @@ public Widget createUIWidget() { if (group == null) return; if (selectedTargets.isEmpty()) group.setTarget(null); else { - group.setTarget(selectedTargets.get(0).getPos()); + group.setTarget(selectedTargets.get(0).getBlockPos()); group.setDataSlot(dataSlot[0] - 1); } }); removeFromGroupButton.setOnPressCallback(click -> { for (MonitorGroup group : monitorGroups) { - for (IMonitorComponent component : selectedComponents) group.remove(component.getPos()); + for (IMonitorComponent component : selectedComponents) group.remove(component.getBlockPos()); } Iterator itg = monitorGroups.iterator(); while (itg.hasNext()) { @@ -497,13 +491,13 @@ public Widget createUIWidget() { Iterator it = selectedComponents.iterator(); while (it.hasNext()) { IMonitorComponent c = it.next(); - BlockPos rel = toRelative(c.getPos()); + BlockPos rel = toRelative(c.getBlockPos()); if (imageButtons.size() - 1 < rel.getY()) continue; if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) continue; imageButtons.get(rel.getY()).get(rel.getX()).accept(it); } if (!selectedTargets.isEmpty()) { - rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); + rightClickCallbacks.getOrDefault(selectedTargets.get(0).getBlockPos(), () -> {}).run(); } }); createGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.create_group")); @@ -570,7 +564,7 @@ public Widget createUIWidget() { } if (isInAnyGroup(component)) { monitorGroups.forEach(group -> { - if (group.contains(component.getPos())) { + if (group.contains(component.getBlockPos())) { img.setHoverTooltips( Component.translatable("gtceu.gui.central_monitor.group", group.getName())); } @@ -582,7 +576,7 @@ public Widget createUIWidget() { }; Runnable rightClickCallback = () -> { if (!selectedTargets.isEmpty()) { - if (selectedTargets.get(0).getPos() == component.getPos()) { + if (selectedTargets.get(0).getBlockPos() == component.getBlockPos()) { selectedTargets.clear(); if (selectedComponents.contains(component)) { ColorRectTexture rect = new ColorRectTexture(Color.RED); @@ -594,12 +588,12 @@ public Widget createUIWidget() { return; } else { try { - rightClickCallbacks.get(selectedTargets.get(0).getPos()).run(); + rightClickCallbacks.get(selectedTargets.get(0).getBlockPos()).run(); } catch (StackOverflowError e) { GTCEu.LOGGER.error( "Stack overflow when right-clicking monitor component {} at {} (selectedTarget is {} at {})", - component, component.getPos(), selectedTargets.get(0), - selectedTargets.get(0).getPos()); + component, component.getBlockPos(), selectedTargets.get(0), + selectedTargets.get(0).getBlockPos()); } } } @@ -616,7 +610,7 @@ public Widget createUIWidget() { MonitorGroup selectedGroup = null; for (MonitorGroup group : monitorGroups) { for (IMonitorComponent c : selectedComponents) { - if (group.contains(c.getPos())) { + if (group.contains(c.getBlockPos())) { if (selectedGroup == null || selectedGroup == group) { selectedGroup = group; } else { @@ -635,7 +629,7 @@ public Widget createUIWidget() { }; if (isInAnyGroup(component)) { monitorGroups.forEach(group -> { - if (group.contains(component.getPos())) img.setHoverTooltips( + if (group.contains(component.getBlockPos())) img.setHoverTooltips( Component.translatable("gtceu.gui.central_monitor.group", group.getName())); }); } else { @@ -648,7 +642,7 @@ public Widget createUIWidget() { }); componentSelection.addWidget(img); GTUtil.getLast(imageButtons).add(callback); - rightClickCallbacks.put(component.getPos(), rightClickCallback); + rightClickCallbacks.put(component.getBlockPos(), rightClickCallback); } } builder.addWidget(main); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index 356b78d757b..c0dc3465dbf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -2,12 +2,12 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.IFilterType; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ICleanroomReceiver; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.SimpleGeneratorMachine; import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; @@ -98,15 +98,15 @@ public class CleanroomMachine extends WorkableElectricMultiblockMachine @Nullable private Collection cleanroomReceivers; - public CleanroomMachine(IMachineBlockEntity metaTileEntityId) { - super(metaTileEntityId); + public CleanroomMachine(BlockEntityCreationInfo info) { + super(info, (m) -> new CleanroomLogic((CleanroomMachine) m)); } ////////////////////////////////////// // ****** Initialization ******// ////////////////////////////////////// - protected RecipeLogic createRecipeLogic(Object... args) { + protected RecipeLogic createRecipeLogic() { return new CleanroomLogic(this); } @@ -166,7 +166,7 @@ public void onStructureInvalid() { public boolean shouldAddPartToController(IMultiPart part) { var cache = getMultiblockState().getCache(); for (Direction side : GTUtil.DIRECTIONS) { - if (!cache.contains(part.self().getPos().relative(side))) { + if (!cache.contains(part.self().getBlockPos().relative(side))) { return true; } } @@ -179,7 +179,7 @@ protected void initializeAbilities() { Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { if (isPartIgnored(part)) continue; - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (io == IO.NONE || io == IO.OUT) continue; var handlerLists = part.getRecipeHandlers(); for (var handlerList : handlerLists) { @@ -218,11 +218,11 @@ public void updateStructureDimensions() { Direction left = front.getCounterClockWise(); Direction right = left.getOpposite(); - BlockPos.MutableBlockPos lPos = getPos().mutable(); - BlockPos.MutableBlockPos rPos = getPos().mutable(); - BlockPos.MutableBlockPos fPos = getPos().mutable(); - BlockPos.MutableBlockPos bPos = getPos().mutable(); - BlockPos.MutableBlockPos hPos = getPos().mutable(); + BlockPos.MutableBlockPos lPos = getBlockPos().mutable(); + BlockPos.MutableBlockPos rPos = getBlockPos().mutable(); + BlockPos.MutableBlockPos fPos = getBlockPos().mutable(); + BlockPos.MutableBlockPos bPos = getBlockPos().mutable(); + BlockPos.MutableBlockPos hPos = getBlockPos().mutable(); // find the distances from the controller to the plascrete blocks on one horizontal axis and the Y axis // repeatable aisles take care of the second horizontal axis @@ -422,8 +422,7 @@ protected TraceabilityPredicate innerPredicate() { Sets::newHashSet); // all non-GTMachines are allowed inside by default BlockEntity blockEntity = blockWorldState.getTileEntity(); - if (blockEntity instanceof IMachineBlockEntity machineBlockEntity) { - var machine = machineBlockEntity.getMetaMachine(); + if (blockEntity instanceof MetaMachine machine) { if (isMachineBanned(machine)) { return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java index cf1ff37b221..b7417d417a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.*; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -47,8 +47,8 @@ public class DistillationTowerMachine extends WorkableElectricMultiblockMachine private IFluidHandler firstValid = null; private final int yOffset; - public DistillationTowerMachine(IMachineBlockEntity holder) { - this(holder, 1); + public DistillationTowerMachine(BlockEntityCreationInfo info) { + this(info, 1); } /** @@ -57,16 +57,11 @@ public DistillationTowerMachine(IMachineBlockEntity holder) { * @param holder BlockEntity holder * @param yOffset The Y difference between the controller and the first fluid output */ - public DistillationTowerMachine(IMachineBlockEntity holder, int yOffset) { - super(holder); + public DistillationTowerMachine(BlockEntityCreationInfo info, int yOffset) { + super(info, DistillationTowerLogic::new); this.yOffset = yOffset; } - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new DistillationTowerLogic(this); - } - @Override public DistillationTowerLogic getRecipeLogic() { return (DistillationTowerLogic) super.getRecipeLogic(); @@ -75,15 +70,15 @@ public DistillationTowerLogic getRecipeLogic() { @Override public void onStructureFormed() { super.onStructureFormed(); - final int startY = getPos().getY() + yOffset; + final int startY = getBlockPos().getY() + yOffset; List parts = getParts().stream() .filter(part -> PartAbility.EXPORT_FLUIDS.isApplicable(part.self().getBlockState().getBlock())) - .filter(part -> part.self().getPos().getY() >= startY) + .filter(part -> part.self().getBlockPos().getY() >= startY) .toList(); if (!parts.isEmpty()) { // Loop from controller y + offset -> the highest output hatch - int maxY = parts.get(parts.size() - 1).self().getPos().getY(); + int maxY = parts.get(parts.size() - 1).self().getBlockPos().getY(); fluidOutputs = new ObjectArrayList<>(maxY - startY); int outputIndex = 0; for (int y = startY; y <= maxY; ++y) { @@ -93,7 +88,7 @@ public void onStructureFormed() { } var part = parts.get(outputIndex); - if (part.self().getPos().getY() == y) { + if (part.self().getBlockPos().getY() == y) { var handler = part.getRecipeHandlers().get(0).getCapability(FluidRecipeCapability.CAP) .stream() .filter(IFluidHandler.class::isInstance) @@ -102,12 +97,12 @@ public void onStructureFormed() { .orElse(VoidFluidHandler.INSTANCE); addOutput(handler); outputIndex++; - } else if (part.self().getPos().getY() > y) { + } else if (part.self().getBlockPos().getY() > y) { fluidOutputs.add(VoidFluidHandler.INSTANCE); } else { GTCEu.LOGGER.error( "The Distillation Tower at {} has a fluid export hatch with an unexpected Y position", - getPos()); + getBlockPos()); onStructureInvalid(); return; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java index 647f0faa3b6..cd114c360ee 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java @@ -2,14 +2,13 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; @@ -41,16 +40,11 @@ public class FluidDrillMachine extends WorkableElectricMultiblockMachine impleme @Getter private final int tier; - public FluidDrillMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public FluidDrillMachine(BlockEntityCreationInfo info, int tier) { + super(info, (m) -> new FluidDrillLogic((FluidDrillMachine) m)); this.tier = tier; } - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new FluidDrillLogic(this); - } - @NotNull @Override public FluidDrillLogic getRecipeLogic() { @@ -59,7 +53,6 @@ public FluidDrillLogic getRecipeLogic() { public int getEnergyTier() { var energyContainer = this.getCapabilitiesFlat(IO.IN, EURecipeCapability.CAP); - if (energyContainer == null) return this.tier; var energyCont = new EnergyContainerList(energyContainer.stream().filter(IEnergyContainer.class::isInstance) .map(IEnergyContainer.class::cast).toList()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java index 5e8b5ddddbd..bf568983ae8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java @@ -2,11 +2,11 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.IFusionCasingType; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; @@ -81,8 +81,8 @@ public class FusionReactorMachine extends WorkableElectricMultiblockMachine impl @Nullable protected TickableSubscription preHeatSubs; - public FusionReactorMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public FusionReactorMachine(BlockEntityCreationInfo info, int tier) { + super(info); this.tier = tier; this.energyContainer = createEnergyContainer(); } @@ -115,7 +115,7 @@ public void onStructureFormed() { Long2ObjectMap ioMap = getMultiblockState().getMatchContext().getOrCreate("ioMap", Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (io == IO.NONE || io == IO.OUT) continue; var handlerLists = part.getRecipeHandlers(); for (var handlerList : handlerLists) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java index dce3e73544d..a2f4a715e9b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.IMiner; @@ -8,11 +9,9 @@ import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.transfer.fluid.FluidHandlerList; import com.gregtechceu.gtceu.common.data.GTBlocks; @@ -66,26 +65,13 @@ public class LargeMinerMachine extends WorkableElectricMultiblockMachine protected FluidHandlerList inputFluidInventory; private final int drillingFluidConsumePerTick; - public LargeMinerMachine(IMachineBlockEntity holder, int tier, int speed, int maximumChunkDiameter, int fortune, + public LargeMinerMachine(BlockEntityCreationInfo info, int tier, int speed, int maximumChunkDiameter, int fortune, int drillingFluidConsumePerTick) { - super(holder, fortune, speed, maximumChunkDiameter); + super(info, (m) -> new LargeMinerLogic(m, fortune, speed, maximumChunkDiameter * CHUNK_LENGTH / 2)); this.tier = tier; this.drillingFluidConsumePerTick = drillingFluidConsumePerTick; } - ////////////////////////////////////// - // ***** Initialization ******// - ////////////////////////////////////// - @Override - protected @NotNull RecipeLogic createRecipeLogic(Object... args) { - if (args[args.length - 3] instanceof Integer fortune && args[args.length - 2] instanceof Integer speed && - args[args.length - 1] instanceof Integer maxRadius) { - return new LargeMinerLogic(this, fortune, speed, maxRadius * CHUNK_LENGTH / 2); - } - throw new IllegalArgumentException( - "MinerMachine need args [inventorySize, fortune, speed, maximumRadius] for initialization"); - } - @Override public LargeMinerLogic getRecipeLogic() { return (LargeMinerLogic) super.getRecipeLogic(); @@ -129,7 +115,7 @@ private void initializeAbilities() { Long2ObjectMap ioMap = getMultiblockState().getMatchContext().getOrCreate("ioMap", Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (io == IO.NONE) continue; var handlerLists = part.getRecipeHandlers(); @@ -151,7 +137,7 @@ private void initializeAbilities() { getRecipeLogic().setVoltageTier(GTUtil.getTierByVoltage(this.energyContainer.getInputVoltage())); getRecipeLogic().setOverclockAmount( Math.max(1, GTUtil.getTierByVoltage(this.energyContainer.getInputVoltage()) - this.tier)); - getRecipeLogic().initPos(getPos(), getRecipeLogic().getCurrentRadius()); + getRecipeLogic().initPos(getBlockPos(), getRecipeLogic().getCurrentRadius()); } public int getEnergyTier() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java index f7229468dde..ac429798ab4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.fluids.PropertyFluidFilter; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; @@ -41,20 +41,11 @@ public class MultiblockTankMachine extends MultiblockControllerMachine implement @NotNull private final NotifiableFluidTank tank; - public MultiblockTankMachine(IMachineBlockEntity holder, int capacity, @Nullable PropertyFluidFilter filter, - Object... args) { - super(holder); + public MultiblockTankMachine(BlockEntityCreationInfo info, int capacity, @Nullable PropertyFluidFilter filter) { + super(info); - this.tank = createTank(capacity, filter, args); - } - - protected NotifiableFluidTank createTank(int capacity, @Nullable PropertyFluidFilter filter, Object... args) { - var fluidTank = new NotifiableFluidTank(this, 1, capacity, IO.BOTH); - - if (filter != null) - fluidTank.setFilter(filter); - - return fluidTank; + this.tank = new NotifiableFluidTank(this, 1, capacity, IO.BOTH); + if (filter != null) tank.setFilter(filter); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java index 4383726a5c9..7f52589b610 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.IEnergyInfoProvider; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; @@ -9,7 +10,6 @@ import com.gregtechceu.gtceu.api.gui.fancy.IFancyUIProvider; import com.gregtechceu.gtceu.api.gui.fancy.TooltipsPanel; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; @@ -86,8 +86,8 @@ public class PowerSubstationMachine extends WorkableMultiblockMachine protected ConditionalSubscriptionHandler tickSubscription; - public PowerSubstationMachine(IMachineBlockEntity holder) { - super(holder); + public PowerSubstationMachine(BlockEntityCreationInfo info) { + super(info); this.tickSubscription = new ConditionalSubscriptionHandler(this, this::transferEnergyTick, this::isFormed); this.energyBank = new PowerStationEnergyBank(this, List.of()); } @@ -100,7 +100,7 @@ public void onStructureFormed() { Long2ObjectMap ioMap = getMultiblockState().getMatchContext().getOrCreate("ioMap", Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (io == IO.NONE) continue; if (part instanceof IMaintenanceMachine maintenanceMachine) { this.maintenance = maintenanceMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java index 7e5317cf63f..d58724da7ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.gcym; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IFluidRenderMulti; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -28,8 +28,8 @@ public class LargeChemicalBathMachine extends WorkableElectricMultiblockMachine @RerenderOnChanged private @NotNull Set fluidBlockOffsets = new HashSet<>(); - public LargeChemicalBathMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public LargeChemicalBathMachine(BlockEntityCreationInfo info) { + super(info); } public void setFluidBlockOffsets(Set offsets) { @@ -58,7 +58,7 @@ public Set saveOffsets() { Direction counterClockWise = RelativeDirection.LEFT.getRelative(getFrontFacing(), getUpwardsFacing(), isFlipped()); - BlockPos pos = getPos(); + BlockPos pos = getBlockPos(); BlockPos center = pos.relative(up); Set offsets = new HashSet<>(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMacerationTowerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMacerationTowerMachine.java index 2fe13c5a49c..f6405f59b40 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMacerationTowerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMacerationTowerMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.gcym; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -28,8 +28,8 @@ public class LargeMacerationTowerMachine extends WorkableElectricMultiblockMachi private TickableSubscription hurtSub; - public LargeMacerationTowerMachine(IMachineBlockEntity holder) { - super(holder); + public LargeMacerationTowerMachine(BlockEntityCreationInfo info) { + super(info); } @Override @@ -61,8 +61,10 @@ public void onUnload() { } private void updateBounds() { - var fl = RelativeDirection.offsetPos(getPos(), getFrontFacing(), getUpwardsFacing(), isFlipped(), 1, 1, -1); - var br = RelativeDirection.offsetPos(getPos(), getFrontFacing(), getUpwardsFacing(), isFlipped(), 1, -2, -4); + var fl = RelativeDirection.offsetPos(getBlockPos(), getFrontFacing(), getUpwardsFacing(), isFlipped(), 1, 1, + -1); + var br = RelativeDirection.offsetPos(getBlockPos(), getFrontFacing(), getUpwardsFacing(), isFlipped(), 1, -2, + -4); grindBound = AABB.of(BoundingBox.fromCorners(fl, br)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java index 5598e8494ad..6f6fb3dde19 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.gcym; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IFluidRenderMulti; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -28,8 +28,8 @@ public class LargeMixerMachine extends WorkableElectricMultiblockMachine impleme @RerenderOnChanged private @NotNull Set fluidBlockOffsets = new HashSet<>(); - public LargeMixerMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public LargeMixerMachine(BlockEntityCreationInfo info) { + super(info); } public void setFluidBlockOffsets(Set offsets) { @@ -57,7 +57,7 @@ public void onStructureInvalid() { Direction counterClockWise = RelativeDirection.LEFT.getRelative(getFrontFacing(), getUpwardsFacing(), isFlipped()); - BlockPos pos = getPos(); + BlockPos pos = getBlockPos(); BlockPos center = pos.relative(up, 3); Set offsets = new HashSet<>(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java index f8f1c104b55..00f643a92c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.research; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; @@ -51,8 +51,8 @@ public class DataBankMachine extends WorkableElectricMultiblockMachine @Nullable protected TickableSubscription tickSubs; - public DataBankMachine(IMachineBlockEntity holder) { - super(holder); + public DataBankMachine(BlockEntityCreationInfo info) { + super(info); this.energyContainer = new EnergyContainerList(new ArrayList<>()); } @@ -63,7 +63,7 @@ public void onStructureFormed() { Long2ObjectMap ioMap = getMultiblockState().getMatchContext().getOrCreate("ioMap", Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (part instanceof IMaintenanceMachine maintenanceMachine) { this.maintenance = maintenanceMachine; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 4c7d39d0d41..833bd7f5ea8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.research; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.*; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; @@ -8,8 +9,6 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.util.TimedProgressSupplier; import com.gregtechceu.gtceu.api.gui.widget.ExtendedProgressWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; @@ -89,8 +88,8 @@ public class HPCAMachine extends WorkableElectricMultiblockMachine @Nullable protected TickableSubscription tickSubs; - public HPCAMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public HPCAMachine(BlockEntityCreationInfo info) { + super(info); this.energyContainer = new EnergyContainerList(new ArrayList<>()); this.progressSupplier = new TimedProgressSupplier(200, 47, false); this.hpcaHandler = new HPCAGridHandler(this); @@ -105,7 +104,7 @@ public void onStructureFormed() { Long2ObjectMap ioMap = getMultiblockState().getMatchContext().getOrCreate("ioMap", Long2ObjectMaps::emptyMap); for (IMultiPart part : getParts()) { - IO io = ioMap.getOrDefault(part.self().getPos().asLong(), IO.BOTH); + IO io = ioMap.getOrDefault(part.self().getBlockPos().asLong(), IO.BOTH); if (part instanceof IHPCAComponentHatch componentHatch) { componentHatches.add(componentHatch); } @@ -264,7 +263,7 @@ public Widget createUIWidget() { // we need to know what components we have on the client if (getLevel().isClientSide) { if (isFormed) { - hpcaHandler.tryGatherClientComponents(this.getLevel(), this.getPos(), this.getFrontFacing(), + hpcaHandler.tryGatherClientComponents(this.getLevel(), this.getBlockPos(), this.getFrontFacing(), this.getUpwardsFacing(), this.isFlipped); } else { hpcaHandler.clearClientComponents(); @@ -733,11 +732,6 @@ public void tryGatherClientComponents(Level world, BlockPos pos, Direction front BlockEntity be = world.getBlockEntity(tempPos); if (be instanceof IHPCAComponentHatch hatch) { components.add(hatch); - } else if (be instanceof IMachineBlockEntity machineBE) { - MetaMachine machine = machineBE.getMetaMachine(); - if (machine instanceof IHPCAComponentHatch hatch) { - components.add(hatch); - } } // if here without a hatch, something went wrong, better to skip than add a null into the mix. } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java index a06ff3d977d..d7b119c7492 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.research; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IOpticalComputationHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -35,8 +35,8 @@ public class NetworkSwitchMachine extends DataBankMachine implements IOpticalCom private final MultipleComputationHandler computationHandler = new MultipleComputationHandler(this); - public NetworkSwitchMachine(IMachineBlockEntity holder) { - super(holder); + public NetworkSwitchMachine(BlockEntityCreationInfo info) { + super(info); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java index 0203d121056..ba746372013 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.research; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IObjectHolder; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalComputationReceiver; @@ -7,7 +8,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; @@ -39,13 +39,8 @@ public class ResearchStationMachine extends WorkableElectricMultiblockMachine @Getter private IObjectHolder objectHolder; - public ResearchStationMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); - } - - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new ResearchStationRecipeLogic(this); + public ResearchStationMachine(BlockEntityCreationInfo info) { + super(info, (m) -> new ResearchStationRecipeLogic((ResearchStationMachine) m)); } @Override @@ -65,7 +60,7 @@ public void onStructureFormed() { this.objectHolder = iObjectHolder; } - part.self().holder.self() + part.self() .getCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER) .ifPresent(provider -> this.computationProvider = provider); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java index 0fbf8088ca0..4895b47a172 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.common.machine.multiblock.generator; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.IFancyTooltip; import com.gregtechceu.gtceu.api.gui.fancy.TooltipsPanel; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; @@ -55,8 +55,8 @@ public class LargeCombustionEngineMachine extends WorkableElectricMultiblockMach private boolean isOxygenBoosted = false; private int runningTimer = 0; - public LargeCombustionEngineMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public LargeCombustionEngineMachine(BlockEntityCreationInfo info, int tier) { + super(info); this.tier = tier; } @@ -65,7 +65,8 @@ private boolean isIntakesObstructed() { for (int j = -1; j < 2; j++) { // Skip the controller block itself if (i == 0 && j == 0) continue; - var blockPos = RelativeDirection.offsetPos(getPos(), getFrontFacing(), getUpwardsFacing(), isFlipped(), + var blockPos = RelativeDirection.offsetPos(getBlockPos(), getFrontFacing(), getUpwardsFacing(), + isFlipped(), i, j, 1); var blockState = this.getLevel().getBlockState(blockPos); if (!blockState.isAir()) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java index f97174fed0c..e41ca126b14 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.generator; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.ITurbineMachine; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; @@ -40,8 +40,8 @@ public class LargeTurbineMachine extends WorkableElectricMultiblockMachine imple @Getter private final int tier; - public LargeTurbineMachine(IMachineBlockEntity holder, int tier) { - super(holder); + public LargeTurbineMachine(BlockEntityCreationInfo info, int tier) { + super(info); this.tier = tier; this.BASE_EU_OUTPUT = GTValues.V[tier] * 2; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/AutoMaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/AutoMaintenanceHatchPartMachine.java index f505bc85c35..2d5d529437b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/AutoMaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/AutoMaintenanceHatchPartMachine.java @@ -1,14 +1,14 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; public class AutoMaintenanceHatchPartMachine extends TieredPartMachine implements IMaintenanceMachine { - public AutoMaintenanceHatchPartMachine(IMachineBlockEntity holder) { - super(holder, GTValues.HV); + public AutoMaintenanceHatchPartMachine(BlockEntityCreationInfo info) { + super(info, GTValues.HV); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CleaningMaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CleaningMaintenanceHatchPartMachine.java index 56a22189527..e6afdd9eabd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CleaningMaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CleaningMaintenanceHatchPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.ICleanroomReceiver; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; @@ -28,8 +28,8 @@ public class CleaningMaintenanceHatchPartMachine extends AutoMaintenanceHatchPar @Getter private final CleanroomType cleanroomType; - public CleaningMaintenanceHatchPartMachine(IMachineBlockEntity holder, CleanroomType cleanroomType) { - super(holder); + public CleaningMaintenanceHatchPartMachine(BlockEntityCreationInfo info, CleanroomType cleanroomType) { + super(info); this.cleanroomType = cleanroomType; DUMMY_CLEANROOM = DummyCleanroom.createForTypes(Collections.singletonList(cleanroomType)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CokeOvenHatch.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CokeOvenHatch.java index 988fa023c7a..935064c453d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CokeOvenHatch.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/CokeOvenHatch.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; @@ -34,8 +34,8 @@ public class CokeOvenHatch extends MultiblockPartMachine { @Nullable protected ISubscription outputInventorySubs, outputTankSubs; - public CokeOvenHatch(IMachineBlockEntity holder, Object... args) { - super(holder); + public CokeOvenHatch(BlockEntityCreationInfo info) { + super(info); this.inputInventory = new ItemHandlerProxyTrait(this, IO.IN); this.outputInventory = new ItemHandlerProxyTrait(this, IO.OUT); this.tank = new FluidTankProxyTrait(this, IO.BOTH); @@ -118,8 +118,9 @@ public void onRotated(Direction oldFacing, Direction newFacing) { protected void updateAutoIOSubscription() { if ((!outputInventory.isEmpty() && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), getFrontFacing())) || - (!tank.isEmpty() && GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), getFrontFacing()))) { + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), getFrontFacing())) || + (!tank.isEmpty() && + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), getFrontFacing()))) { autoIOSubs = subscribeServerTick(autoIOSubs, this::autoIO); } else if (autoIOSubs != null) { autoIOSubs.unsubscribe(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java index 8db127511a7..20a8bce9a08 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java @@ -2,13 +2,13 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IMonitorComponent; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; @@ -56,8 +56,8 @@ public class DataAccessHatchMachine extends TieredPartMachine @SaveField public final NotifiableItemStackHandler importItems; - public DataAccessHatchMachine(IMachineBlockEntity holder, int tier, boolean isCreative) { - super(holder, tier); + public DataAccessHatchMachine(BlockEntityCreationInfo info, int tier, boolean isCreative) { + super(info, tier); this.isCreative = isCreative; this.recipes = isCreative ? Collections.emptySet() : new ObjectOpenHashSet<>(); this.importItems = createImportItemHandler(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java index c0e3e116efd..3b3beef6c15 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java @@ -1,11 +1,12 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.syncsystem.annotations.ClientFieldChangeListener; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; @@ -75,8 +76,8 @@ public static AmpMode getByValue(int amps) { @SaveField(nbtKey = "amp_mode") private int amps; - public DiodePartMachine(IMachineBlockEntity holder, int tier) { - super(holder, tier, IO.BOTH); + public DiodePartMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier, IO.BOTH); long tierVoltage = GTValues.V[getTier()]; this.amps = 1; @@ -139,17 +140,10 @@ protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand h return InteractionResult.CONSUME; } - @SuppressWarnings("unused") - public void onAmpUpdated(int newValue, int oldValue) { - this.scheduleRenderUpdate(); - } - - @Override - public void scheduleRenderUpdate() { - if (!isRemote()) { - setRenderState(getRenderState() - .setValue(GTMachineModelProperties.DIODE_AMP_MODE, AmpMode.getByValue(this.amps))); - super.scheduleRenderUpdate(); - } + @ClientFieldChangeListener(fieldName = "amps") + public void onAmpUpdated() { + setRenderState( + getRenderState().setValue(GTMachineModelProperties.DIODE_AMP_MODE, AmpMode.getByValue(this.amps))); + scheduleRenderUpdate(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java index f23a1287aed..909b4a9a656 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.common.data.GTMachines; @@ -40,9 +40,10 @@ public class DualHatchPartMachine extends ItemBusPartMachine { private boolean hasFluidHandler; private boolean hasItemHandler; - public DualHatchPartMachine(IMachineBlockEntity holder, int tier, IO io, Object... args) { - super(holder, tier, io); - this.tank = createTank(INITIAL_TANK_CAPACITY, (int) Math.sqrt(getInventorySize()), args); + public DualHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io) { + super(info, tier, io); + this.tank = new NotifiableFluidTank(this, (int) Math.sqrt(getInventorySize()), + getTankCapacity(INITIAL_TANK_CAPACITY, getTier()), io); } //////////////////////////////// @@ -58,10 +59,6 @@ public int getInventorySize() { return (int) Math.pow((getTier() - 4), 2); } - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { - return new NotifiableFluidTank(this, slots, getTankCapacity(initialCapacity, getTier()), io); - } - @Override public void onLoad() { super.onLoad(); @@ -86,8 +83,8 @@ protected void updateInventorySubscription() { boolean canOutput = io == IO.OUT && (!tank.isEmpty() || !getInventory().isEmpty()); var level = getLevel(); if (level != null) { - this.hasItemHandler = GTTransferUtils.hasAdjacentItemHandler(level, getPos(), getFrontFacing()); - this.hasFluidHandler = GTTransferUtils.hasAdjacentFluidHandler(level, getPos(), getFrontFacing()); + this.hasItemHandler = GTTransferUtils.hasAdjacentItemHandler(level, getBlockPos(), getFrontFacing()); + this.hasFluidHandler = GTTransferUtils.hasAdjacentFluidHandler(level, getBlockPos(), getFrontFacing()); } else { this.hasItemHandler = false; this.hasFluidHandler = false; @@ -127,7 +124,7 @@ protected void autoIO() { @Override public boolean swapIO() { - BlockPos blockPos = getHolder().pos(); + BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { @@ -141,13 +138,11 @@ public boolean swapIO() { getLevel().setBlockAndUpdate(blockPos, newBlockState); - if (getLevel().getBlockEntity(blockPos) instanceof IMachineBlockEntity newHolder) { - if (newHolder.getMetaMachine() instanceof DualHatchPartMachine newMachine) { - newMachine.setFrontFacing(this.getFrontFacing()); - newMachine.setUpwardsFacing(this.getUpwardsFacing()); - for (int i = 0; i < this.tank.getTanks(); i++) { - newMachine.tank.setFluidInTank(i, this.tank.getFluidInTank(i)); - } + if (getLevel().getBlockEntity(blockPos) instanceof DualHatchPartMachine newMachine) { + newMachine.setFrontFacing(this.getFrontFacing()); + newMachine.setUpwardsFacing(this.getUpwardsFacing()); + for (int i = 0; i < this.tank.getTanks(); i++) { + newMachine.tank.setFluidInTank(i, this.tank.getFluidInTank(i)); } } return true; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java index 5cd2cb0fc06..29ffd939eba 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; @@ -29,17 +29,17 @@ public class EnergyHatchPartMachine extends TieredIOPartMachine implements IExpl @Getter protected int amperage; - public EnergyHatchPartMachine(IMachineBlockEntity holder, int tier, IO io, int amperage, Object... args) { - super(holder, tier, io); + public EnergyHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, int amperage) { + super(info, tier, io); this.amperage = amperage; - this.energyContainer = createEnergyContainer(args); + this.energyContainer = createEnergyContainer(); } ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - protected NotifiableEnergyContainer createEnergyContainer(Object... args) { + protected NotifiableEnergyContainer createEnergyContainer() { NotifiableEnergyContainer container; if (io == IO.OUT) { container = NotifiableEnergyContainer.emitterContainer(this, GTValues.V[tier] * 64L * amperage, diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index 89b49d1f699..3aca8446e80 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.blockentity.IPaintable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; @@ -7,7 +8,6 @@ import com.gregtechceu.gtceu.api.gui.widget.PhantomFluidWidget; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.fancyconfigurator.CircuitFancyConfigurator; @@ -74,22 +74,26 @@ public class FluidHatchPartMachine extends TieredIOPartMachine implements IMachi @SaveField protected final NotifiableItemStackHandler circuitInventory; - // The `Object... args` parameter is necessary in case a superclass needs to pass any args along to createTank(). - // We can't use fields here because those won't be available while createTank() is called. - public FluidHatchPartMachine(IMachineBlockEntity holder, int tier, IO io, int initialCapacity, int slots, - Object... args) { - super(holder, tier, io); + public FluidHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, int initialCapacity, int slots) { + super(info, tier, io); this.slots = slots; - this.tank = createTank(initialCapacity, slots, args); - this.circuitSlotEnabled = true; - this.circuitInventory = createCircuitItemHandler(io).shouldSearchContent(false); + this.tank = createTank(initialCapacity, slots); + + if (io == IO.IN) { + this.circuitSlotEnabled = true; + this.circuitInventory = new NotifiableItemStackHandler(this, 1, IO.IN, IO.NONE) + .setFilter(IntCircuitBehaviour::isIntegratedCircuit).shouldSearchContent(false); + } else { + this.circuitSlotEnabled = false; + this.circuitInventory = new NotifiableItemStackHandler(this, 0, IO.NONE).shouldSearchContent(false); + } } ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { + protected NotifiableFluidTank createTank(int initialCapacity, int slots) { return new NotifiableFluidTank(this, slots, getTankCapacity(initialCapacity, getTier()), io); } @@ -97,15 +101,6 @@ public static int getTankCapacity(int initialCapacity, int tier) { return initialCapacity * (1 << Math.min(9, tier)); } - protected NotifiableItemStackHandler createCircuitItemHandler(Object... args) { - if (args.length > 0 && args[0] instanceof IO io && io == IO.IN) { - return new NotifiableItemStackHandler(this, 1, IO.IN, IO.NONE) - .setFilter(IntCircuitBehaviour::isIntegratedCircuit); - } else { - return new NotifiableItemStackHandler(this, 0, IO.NONE); - } - } - @Override public void onMachineRemoved() { if (!ConfigHolder.INSTANCE.machines.ghostCircuit) { @@ -194,7 +189,7 @@ protected void updateTankSubscription() { protected void updateTankSubscription(Direction newFacing) { if (isWorkingEnabled() && ((io.support(IO.OUT) && !tank.isEmpty()) || io.support(IO.IN)) && - GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), newFacing)) { + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), newFacing)) { autoIOSubs = subscribeServerTick(autoIOSubs, this::autoIO); } else if (autoIOSubs != null) { autoIOSubs.unsubscribe(); @@ -239,7 +234,7 @@ protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand } public boolean swapIO() { - BlockPos blockPos = getHolder().pos(); + BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { @@ -257,14 +252,12 @@ public boolean swapIO() { getLevel().setBlockAndUpdate(blockPos, newBlockState); - if (getLevel().getBlockEntity(blockPos) instanceof IMachineBlockEntity newHolder) { - if (newHolder.getMetaMachine() instanceof FluidHatchPartMachine newMachine) { - newMachine.setFrontFacing(this.getFrontFacing()); - newMachine.setUpwardsFacing(this.getUpwardsFacing()); - newMachine.setPaintingColor(this.getPaintingColor()); - for (int i = 0; i < this.tank.getTanks(); i++) { - newMachine.tank.setFluidInTank(i, this.tank.getFluidInTank(i)); - } + if (getLevel().getBlockEntity(blockPos) instanceof FluidHatchPartMachine newMachine) { + newMachine.setFrontFacing(this.getFrontFacing()); + newMachine.setUpwardsFacing(this.getUpwardsFacing()); + newMachine.setPaintingColor(this.getPaintingColor()); + for (int i = 0; i < this.tank.getTanks(); i++) { + newMachine.tank.setFluidInTank(i, this.tank.getFluidInTank(i)); } } return true; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index e8fe82f3999..eec3a639adb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.blockentity.IPaintable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.ConfiguratorPanel; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.fancyconfigurator.CircuitFancyConfigurator; @@ -75,9 +75,9 @@ public class ItemBusPartMachine extends TieredIOPartMachine @SyncToClient private boolean isDistinct = false; - public ItemBusPartMachine(IMachineBlockEntity holder, int tier, IO io, Object... args) { - super(holder, tier, io); - this.inventory = createInventory(args); + public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io) { + super(info, tier, io); + this.inventory = createInventory(); this.circuitSlotEnabled = true; this.circuitInventory = createCircuitItemHandler(io).shouldSearchContent(false); } @@ -91,12 +91,12 @@ protected int getInventorySize() { return sizeRoot * sizeRoot; } - protected NotifiableItemStackHandler createInventory(Object... args) { + protected NotifiableItemStackHandler createInventory() { return new NotifiableItemStackHandler(this, getInventorySize(), io); } - protected NotifiableItemStackHandler createCircuitItemHandler(Object... args) { - if (args.length > 0 && args[0] instanceof IO io && io == IO.IN) { + protected NotifiableItemStackHandler createCircuitItemHandler(IO io) { + if (io == IO.IN) { return new NotifiableItemStackHandler(this, 1, IO.IN, IO.NONE) .setFilter(IntCircuitBehaviour::isIntegratedCircuit); } else { @@ -215,7 +215,7 @@ protected void updateInventorySubscription() { protected void updateInventorySubscription(Direction newFacing) { if (isWorkingEnabled() && ((io.support(IO.OUT) && !getInventory().isEmpty()) || io.support(IO.IN)) && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), newFacing)) { + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), newFacing)) { autoIOSubs = subscribeServerTick(autoIOSubs, this::autoIO); } else if (autoIOSubs != null) { autoIOSubs.unsubscribe(); @@ -260,7 +260,7 @@ protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand } public boolean swapIO() { - BlockPos blockPos = getHolder().pos(); + BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { newDefinition = GTMachines.ITEM_EXPORT_BUS[this.getTier()]; @@ -273,16 +273,14 @@ public boolean swapIO() { getLevel().setBlockAndUpdate(blockPos, newBlockState); - if (getLevel().getBlockEntity(blockPos) instanceof IMachineBlockEntity newHolder) { - if (newHolder.getMetaMachine() instanceof ItemBusPartMachine newMachine) { - // We don't set the circuit or distinct busses, since - // that doesn't make sense on an output bus. - // Furthermore, existing inventory items - // and conveyors will drop to the floor on block override. - newMachine.setFrontFacing(this.getFrontFacing()); - newMachine.setUpwardsFacing(this.getUpwardsFacing()); - newMachine.setPaintingColor(this.getPaintingColor()); - } + if (getLevel().getBlockEntity(blockPos) instanceof ItemBusPartMachine newMachine) { + // We don't set the circuit or distinct busses, since + // that doesn't make sense on an output bus. + // Furthermore, existing inventory items + // and conveyors will drop to the floor on block override. + newMachine.setFrontFacing(this.getFrontFacing()); + newMachine.setUpwardsFacing(this.getUpwardsFacing()); + newMachine.setPaintingColor(this.getPaintingColor()); } return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java index d60a9e795aa..3033d1d2f57 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableLaserContainer; @@ -28,8 +28,8 @@ public class LaserHatchPartMachine extends TieredIOPartMachine implements IDataI @SaveField private NotifiableLaserContainer buffer; - public LaserHatchPartMachine(IMachineBlockEntity holder, IO io, int tier, int amperage) { - super(holder, tier, io); + public LaserHatchPartMachine(BlockEntityCreationInfo info, IO io, int tier, int amperage) { + super(info, tier, io); if (io == IO.OUT) { this.buffer = NotifiableLaserContainer.emitterContainer(this, GTValues.V[tier] * 64L * amperage, GTValues.V[tier], amperage); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java index a1d5e54e1c0..079a41e05c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -84,8 +84,8 @@ public class MaintenanceHatchPartMachine extends TieredPartMachine @Nullable protected TickableSubscription maintenanceSubs; - public MaintenanceHatchPartMachine(IMachineBlockEntity holder, boolean isConfigurable) { - super(holder, isConfigurable ? GTValues.HV : GTValues.LV); + public MaintenanceHatchPartMachine(BlockEntityCreationInfo info, boolean isConfigurable) { + super(info, isConfigurable ? GTValues.HV : GTValues.LV); this.isConfigurable = isConfigurable; this.itemStackHandler = createInventory(); this.itemStackHandler.setFilter(itemStack -> itemStack.is(GTItems.DUCT_TAPE.get())); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java index 07c03afda2d..4b201fa41ad 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; @@ -45,8 +45,8 @@ public class MufflerPartMachine extends TieredPartMachine implements IMufflerMac private TickableSubscription snowSubscription; - public MufflerPartMachine(IMachineBlockEntity holder, int tier) { - super(holder, tier); + public MufflerPartMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); this.recoveryChance = Math.max(1, tier * 10); this.inventory = new CustomItemStackHandler((int) Math.pow(tier + 1, 2)); } @@ -105,7 +105,7 @@ private void tryBreakSnow() { for (IMultiController controller : getControllers()) { if (controller instanceof IRecipeLogicMachine recipeLogicMachine && recipeLogicMachine.getRecipeLogic().isWorking()) { - BlockPos mufflerPos = getPos().relative(getFrontFacing()); + BlockPos mufflerPos = getBlockPos().relative(getFrontFacing()); GTUtil.tryBreakSnow(getLevel(), mufflerPos, getLevel().getBlockState(mufflerPos), true); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java index 232e209e990..c5fa4fb21c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IObjectHolder; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; @@ -7,7 +8,6 @@ import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IDataItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; @@ -42,8 +42,8 @@ public class ObjectHolderMachine extends MultiblockPartMachine implements IObjec @SyncToClient private boolean isLocked; - public ObjectHolderMachine(IMachineBlockEntity holder) { - super(holder); + public ObjectHolderMachine(BlockEntityCreationInfo info) { + super(info); heldItems = new ObjectHolderHandler(this); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalComputationHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalComputationHatchMachine.java index ebd6f036584..85dddc042c0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalComputationHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalComputationHatchMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableComputationContainer; @@ -23,21 +23,10 @@ public class OpticalComputationHatchMachine extends MultiblockPartMachine { protected NotifiableComputationContainer computationContainer; - public OpticalComputationHatchMachine(IMachineBlockEntity holder, boolean transmitter) { - super(holder); + public OpticalComputationHatchMachine(BlockEntityCreationInfo info, boolean transmitter) { + super(info); this.transmitter = transmitter; - this.computationContainer = createComputationContainer(transmitter); - } - - protected NotifiableComputationContainer createComputationContainer(Object... args) { - IO io = IO.IN; - if (args.length > 1 && args[args.length - 2] instanceof IO newIo) { - io = newIo; - } - if (args.length > 0 && args[args.length - 1] instanceof Boolean transmitter) { - return new NotifiableComputationContainer(this, io, transmitter); - } - throw new IllegalArgumentException(); + this.computationContainer = new NotifiableComputationContainer(this, IO.IN, transmitter); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java index 14b8f3cff1d..a4ca898d5b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalDataAccessHatch; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -34,8 +34,8 @@ public class OpticalDataHatchMachine extends MultiblockPartMachine implements IO @Getter private final boolean isTransmitter; - public OpticalDataHatchMachine(IMachineBlockEntity holder, boolean isTransmitter) { - super(holder); + public OpticalDataHatchMachine(BlockEntityCreationInfo info, boolean isTransmitter) { + super(info); this.isTransmitter = isTransmitter; } @@ -67,7 +67,7 @@ public boolean isRecipeAvailable(@NotNull GTRecipe recipe, @NotNull Collection fluidStack.getFluid().is(GTMaterials.Water.getFluidTag())); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java index 8602416b9e2..f587c3fb9c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; @@ -23,8 +23,8 @@ public class ReservoirHatchPartMachine extends FluidHatchPartMachine { public static final int FLUID_AMOUNT = 2_000_000_000; - public ReservoirHatchPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, GTValues.EV, IO.IN, FLUID_AMOUNT, 1, args); + public ReservoirHatchPartMachine(BlockEntityCreationInfo info) { + super(info, GTValues.EV, IO.IN, FLUID_AMOUNT, 1); } ////////////////////////////////// @@ -32,7 +32,7 @@ public ReservoirHatchPartMachine(IMachineBlockEntity holder, Object... args) { ////////////////////////////////// @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { + protected NotifiableFluidTank createTank(int initialCapacity, int slots) { this.waterTank = new InfiniteWaterTank(initialCapacity); // allow both importing and exporting from the tank return new NotifiableFluidTank(this, Collections.singletonList(waterTank), io, IO.BOTH); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 7a67abd5200..63bb0365b31 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.BlockableSlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -63,8 +63,8 @@ public class RotorHolderPartMachine extends TieredPartMachine @Nullable protected ISubscription rotorInvSubs; - public RotorHolderPartMachine(IMachineBlockEntity holder, int tier) { - super(holder, tier); + public RotorHolderPartMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); this.inventory = new NotifiableItemStackHandler(this, 1, IO.NONE, IO.BOTH); this.maxRotorHolderSpeed = 2000 + 1000 * tier; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java index 8d39234eb77..c7709eb8edf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -26,12 +26,12 @@ public class SteamHatchPartMachine extends FluidHatchPartMachine { public static final int INITIAL_TANK_CAPACITY = 64 * FluidType.BUCKET_VOLUME; public static final boolean IS_STEEL = ConfigHolder.INSTANCE.machines.steelSteamMultiblocks; - public SteamHatchPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, 0, IO.IN, SteamHatchPartMachine.INITIAL_TANK_CAPACITY, 1, args); + public SteamHatchPartMachine(BlockEntityCreationInfo info) { + super(info, 0, IO.IN, SteamHatchPartMachine.INITIAL_TANK_CAPACITY, 1); } @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { + protected NotifiableFluidTank createTank(int initialCapacity, int slots) { return super.createTank(initialCapacity, slots) .setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Steam.getFluidTag())); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java index 59280df5e30..cd7cb1695a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -23,8 +23,8 @@ public class SteamItemBusPartMachine extends ItemBusPartMachine { private final String autoTooltipKey; - public SteamItemBusPartMachine(IMachineBlockEntity holder, IO io, Object... args) { - super(holder, 1, io, args); + public SteamItemBusPartMachine(BlockEntityCreationInfo info, IO io) { + super(info, 1, io); autoTooltipKey = io == IO.IN ? "gtceu.gui.item_auto_input.tooltip" : "gtceu.gui.item_auto_output.tooltip"; } @@ -60,7 +60,7 @@ public ModularUI createUI(@NotNull Player entityPlayer) { @Override public boolean swapIO() { - BlockPos blockPos = getHolder().pos(); + BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { newDefinition = GTMachines.STEAM_EXPORT_BUS; @@ -73,15 +73,13 @@ public boolean swapIO() { getLevel().setBlockAndUpdate(blockPos, newBlockState); - if (getLevel().getBlockEntity(blockPos) instanceof IMachineBlockEntity newHolder) { - if (newHolder.getMetaMachine() instanceof SteamItemBusPartMachine newMachine) { - // We don't set the circuit or distinct busses, since - // that doesn't make sense on an output bus. - // Furthermore, existing inventory items - // and conveyors will drop to the floor on block override. - newMachine.setFrontFacing(this.getFrontFacing()); - newMachine.setUpwardsFacing(this.getUpwardsFacing()); - } + if (getLevel().getBlockEntity(blockPos) instanceof SteamItemBusPartMachine newMachine) { + // We don't set the circuit or distinct busses, since + // that doesn't make sense on an output bus. + // Furthermore, existing inventory items + // and conveyors will drop to the floor on block override. + newMachine.setFrontFacing(this.getFrontFacing()); + newMachine.setUpwardsFacing(this.getUpwardsFacing()); } return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/TankValvePartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/TankValvePartMachine.java index 379ad7db417..cf09021823c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/TankValvePartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/TankValvePartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.trait.FluidTankProxyTrait; @@ -24,21 +24,17 @@ @ParametersAreNonnullByDefault public class TankValvePartMachine extends MultiblockPartMachine { - private FluidTankProxyTrait tankProxy; - private ConditionalSubscriptionHandler autoIOSubscription; + private final FluidTankProxyTrait tankProxy; + private final ConditionalSubscriptionHandler autoIOSubscription; private ISubscription tankChangeListener; - public TankValvePartMachine(IMachineBlockEntity holder, boolean isMetal, Object... args) { - super(holder); + public TankValvePartMachine(BlockEntityCreationInfo info, boolean isMetal) { + super(info); - tankProxy = createTank(args); + tankProxy = new FluidTankProxyTrait(this, IO.BOTH); autoIOSubscription = new ConditionalSubscriptionHandler(this, this::autoIO, this::shouldAutoIO); } - protected FluidTankProxyTrait createTank(Object... args) { - return new FluidTankProxyTrait(this, IO.BOTH); - } - @Override public boolean canShared() { return false; @@ -90,7 +86,8 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { @Nullable private IFluidHandler getTargetTank() { - return GTTransferUtils.getAdjacentFluidHandler(getLevel(), getPos(), getFrontFacing()).resolve().orElse(null); + return GTTransferUtils.getAdjacentFluidHandler(getLevel(), getBlockPos(), getFrontFacing()).resolve() + .orElse(null); } private void autoIO() { @@ -105,8 +102,6 @@ private boolean shouldAutoIO() { if (!isFormed()) return false; if (getFrontFacing() != Direction.DOWN) return false; if (tankProxy.isEmpty()) return false; - if (getTargetTank() == null) return false; - - return true; + return getTargetTank() != null; } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java index 2578adca2fe..43dae5f810f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -14,8 +14,8 @@ @ParametersAreNonnullByDefault public class HPCABridgePartMachine extends HPCAComponentPartMachine { - public HPCABridgePartMachine(IMachineBlockEntity holder) { - super(holder); + public HPCABridgePartMachine(BlockEntityCreationInfo info) { + super(info); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java index 5ae9e511b05..13958d8de16 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IHPCAComponentHatch; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IMachineModifyDrops; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -31,8 +31,8 @@ public abstract class HPCAComponentPartMachine extends MultiblockPartMachine @RerenderOnChanged private boolean damaged; - public HPCAComponentPartMachine(IMachineBlockEntity holder) { - super(holder); + public HPCAComponentPartMachine(BlockEntityCreationInfo info) { + super(info); } public abstract boolean isAdvanced(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java index 69bb815771c..4a055b25c01 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IHPCAComputationProvider; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -20,8 +20,8 @@ public class HPCAComputationPartMachine extends HPCAComponentPartMachine impleme @Getter private final boolean advanced; - public HPCAComputationPartMachine(IMachineBlockEntity holder, boolean advanced) { - super(holder); + public HPCAComputationPartMachine(BlockEntityCreationInfo info, boolean advanced) { + super(info); this.advanced = advanced; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java index 007095b2ebf..18db66576b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IHPCACoolantProvider; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -20,8 +20,8 @@ public class HPCACoolerPartMachine extends HPCAComponentPartMachine implements I @Getter private final boolean advanced; - public HPCACoolerPartMachine(IMachineBlockEntity holder, boolean advanced) { - super(holder); + public HPCACoolerPartMachine(BlockEntityCreationInfo info, boolean advanced) { + super(info); this.advanced = advanced; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java index 132929c7b90..6c5ad385770 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -13,8 +13,8 @@ @ParametersAreNonnullByDefault public class HPCAEmptyPartMachine extends HPCAComponentPartMachine { - public HPCAEmptyPartMachine(IMachineBlockEntity holder) { - super(holder); + public HPCAEmptyPartMachine(BlockEntityCreationInfo info) { + super(info); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java index 2954f696f20..382858b1e6f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.monitor; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -37,8 +37,8 @@ public class AdvancedMonitorPartMachine extends MonitorPartMachine implements II @Nullable private TickableSubscription clickResetSubscription; - public AdvancedMonitorPartMachine(IMachineBlockEntity holder) { - super(holder); + public AdvancedMonitorPartMachine(BlockEntityCreationInfo info) { + super(info); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorComponentPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorComponentPartMachine.java index 220bd378673..e0782836304 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorComponentPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorComponentPartMachine.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.monitor; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IMonitorComponent; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; public abstract class MonitorComponentPartMachine extends MultiblockPartMachine implements IMonitorComponent { - public MonitorComponentPartMachine(IMachineBlockEntity holder) { - super(holder); + public MonitorComponentPartMachine(BlockEntityCreationInfo info) { + super(info); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorPartMachine.java index 4f999166910..6053638864f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/MonitorPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.monitor; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -12,8 +12,8 @@ public class MonitorPartMachine extends MonitorComponentPartMachine { - public MonitorPartMachine(IMachineBlockEntity holder) { - super(holder); + public MonitorPartMachine(BlockEntityCreationInfo info) { + super(info); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java index 325d0dd6d93..36ec8c2fc7e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.item.ComponentItem; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.pattern.BlockPattern; @@ -68,8 +68,8 @@ public class CharcoalPileIgniterMachine extends WorkableMultiblockMachine implem private boolean hasAir = false; - public CharcoalPileIgniterMachine(IMachineBlockEntity holder) { - super(holder); + public CharcoalPileIgniterMachine(BlockEntityCreationInfo info) { + super(info, (m) -> new CharcoalRecipeLogic((CharcoalPileIgniterMachine) m)); } @Override @@ -89,11 +89,6 @@ public void onStructureFormed() { this.getRecipeLogic().setDuration(Math.max(1, (int) Math.sqrt(logPos.size() * 240_000))); } - @Override - protected @NotNull CharcoalRecipeLogic createRecipeLogic(Object @NotNull... args) { - return new CharcoalRecipeLogic(this); - } - @Override public @NotNull CharcoalRecipeLogic getRecipeLogic() { return (CharcoalRecipeLogic) super.getRecipeLogic(); @@ -223,13 +218,13 @@ public void updateDimensions() { Direction left = RelativeDirection.LEFT.getRelativeFacing(front, getUpwardsFacing(), false); Direction right = RelativeDirection.RIGHT.getRelativeFacing(front, getUpwardsFacing(), false); - BlockPos down = getPos().relative(Direction.DOWN); + BlockPos down = getBlockPos().relative(Direction.DOWN); BlockPos.MutableBlockPos lPos = down.mutable(); BlockPos.MutableBlockPos rPos = down.mutable(); BlockPos.MutableBlockPos fPos = down.mutable(); BlockPos.MutableBlockPos bPos = down.mutable(); - BlockPos.MutableBlockPos hPos = getPos().mutable(); + BlockPos.MutableBlockPos hPos = getBlockPos().mutable(); int lDist = 0; int rDist = 0; @@ -284,7 +279,7 @@ private static boolean isBlockFloor(Level level, BlockPos.MutableBlockPos pos) { public void clientTick() { super.clientTick(); if (isActive()) { - var pos = this.getPos(); + var pos = this.getBlockPos(); var facing = Direction.UP; float xPos = facing.getStepX() * 0.76F + pos.getX() + 0.25F + GTValues.RNG.nextFloat() / 2.0F; float yPos = facing.getStepY() * 0.76F + pos.getY() + 0.25F; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java index 6866527ec88..e587e36b14d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -36,8 +36,8 @@ @MethodsReturnNonnullByDefault public class CokeOvenMachine extends PrimitiveWorkableMachine implements IUIMachine { - public CokeOvenMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public CokeOvenMachine(BlockEntityCreationInfo info) { + super(info); } @Override @@ -65,7 +65,7 @@ public ModularUI createUI(Player entityPlayer) { @Override public void animateTick(RandomSource random) { if (this.isActive()) { - final BlockPos pos = getPos(); + final BlockPos pos = getBlockPos(); float x = pos.getX() + 0.5F; float z = pos.getZ() + 0.5F; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java index cb0c2071adf..b21066aeeb0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IFluidRenderMulti; @@ -56,18 +56,18 @@ public class PrimitiveBlastFurnaceMachine extends PrimitiveWorkableMachine imple @RerenderOnChanged private @NotNull Set fluidBlockOffsets = new HashSet<>(); - public PrimitiveBlastFurnaceMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public PrimitiveBlastFurnaceMachine(BlockEntityCreationInfo info) { + super(info); } @Override - protected NotifiableItemStackHandler createImportItemHandler(Object... args) { + protected NotifiableItemStackHandler createImportItemHandler() { return new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN, IO.NONE); } @Override - protected NotifiableItemStackHandler createExportItemHandler(Object... args) { + protected NotifiableItemStackHandler createExportItemHandler() { return new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT, IO.NONE); } @@ -117,7 +117,7 @@ public void notifyStatusChanged(RecipeLogic.Status oldStatus, RecipeLogic.Status public void clientTick() { super.clientTick(); if (isFormed) { - var pos = this.getPos(); + var pos = this.getBlockPos(); var facing = this.getFrontFacing().getOpposite(); float xPos = facing.getStepX() * 0.76F + pos.getX() + 0.5F; float yPos = facing.getStepY() * 0.76F + pos.getY() + 0.25F; @@ -177,7 +177,7 @@ public ModularUI createUI(Player entityPlayer) { @Override public void animateTick(RandomSource random) { if (this.isActive()) { - final BlockPos pos = getPos(); + final BlockPos pos = getBlockPos(); float x = pos.getX() + 0.5F; float z = pos.getZ() + 0.5F; @@ -204,7 +204,7 @@ public void animateTick(RandomSource random) { } private void hurtEntitiesAndBreakSnow() { - BlockPos middlePos = self().getPos().offset(getFrontFacing().getOpposite().getNormal()); + BlockPos middlePos = self().getBlockPos().offset(getFrontFacing().getOpposite().getNormal()); getLevel().getEntities(null, new AABB(middlePos)).forEach(e -> e.hurt(e.damageSources().lava(), 3.0f)); if (getOffsetTimer() % 10 == 0) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java index 923e2394453..1dc01efe414 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; public class PrimitiveFancyUIWorkableMachine extends PrimitiveWorkableMachine implements IFancyUIMachine { - public PrimitiveFancyUIWorkableMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public PrimitiveFancyUIWorkableMachine(BlockEntityCreationInfo info) { + super(info); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java index 19bff9fb510..5b953512d0d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -28,8 +28,8 @@ public class PrimitivePumpMachine extends MultiblockControllerMachine { private NotifiableFluidTank fluidTank; private TickableSubscription produceWaterSubscription; - public PrimitivePumpMachine(IMachineBlockEntity holder) { - super(holder); + public PrimitivePumpMachine(BlockEntityCreationInfo info) { + super(info); } @Override @@ -88,7 +88,7 @@ private void resetState() { private void produceWater() { if (getOffsetTimer() % 20 == 0 && isFormed() && !getMultiblockState().hasError()) { if (biomeModifier == 0) { - biomeModifier = GTUtil.getPumpBiomeModifier(getLevel().getBiome(getPos())); + biomeModifier = GTUtil.getPumpBiomeModifier(getLevel().getBiome(getBlockPos())); } else if (biomeModifier > 0) { if (fluidTank == null) initializeTank(); if (fluidTank != null) { @@ -105,7 +105,7 @@ private boolean isRainingInBiome() { } private Precipitation getBiomePrecipitation() { - return getLevel().getBiome(getPos()).value().getPrecipitationAt(getPos()); + return getLevel().getBiome(getBlockPos()).value().getPrecipitationAt(getBlockPos()); } public int getFluidProduction() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java index 5c160a7b283..66c1086ec72 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; @@ -30,32 +30,32 @@ public class PrimitiveWorkableMachine extends WorkableMultiblockMachine @SaveField public final NotifiableFluidTank exportFluids; - public PrimitiveWorkableMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); - this.importItems = createImportItemHandler(args); - this.exportItems = createExportItemHandler(args); - this.importFluids = createImportFluidHandler(args); - this.exportFluids = createExportFluidHandler(args); + public PrimitiveWorkableMachine(BlockEntityCreationInfo info) { + super(info); + this.importItems = createImportItemHandler(); + this.exportItems = createExportItemHandler(); + this.importFluids = createImportFluidHandler(); + this.exportFluids = createExportFluidHandler(); } ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// - protected NotifiableItemStackHandler createImportItemHandler(Object... args) { + protected NotifiableItemStackHandler createImportItemHandler() { return new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN); } - protected NotifiableItemStackHandler createExportItemHandler(Object... args) { + protected NotifiableItemStackHandler createExportItemHandler() { return new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT); } - protected NotifiableFluidTank createImportFluidHandler(Object... args) { + protected NotifiableFluidTank createImportFluidHandler() { return new NotifiableFluidTank(this, getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), 32 * FluidType.BUCKET_VOLUME, IO.IN); } - protected NotifiableFluidTank createExportFluidHandler(Object... args) { + protected NotifiableFluidTank createExportFluidHandler() { return new NotifiableFluidTank(this, getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), 32 * FluidType.BUCKET_VOLUME, IO.OUT); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index a2ebd69e592..83406826027 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.steam; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.*; 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.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; @@ -58,8 +58,8 @@ public class LargeBoilerMachine extends WorkableMultiblockMachine implements IEx protected TickableSubscription temperatureSubs; private int steamGenerated; - public LargeBoilerMachine(IMachineBlockEntity holder, int maxTemperature, int heatSpeed, Object... args) { - super(holder, args); + public LargeBoilerMachine(BlockEntityCreationInfo info, int maxTemperature, int heatSpeed) { + super(info, LargeBoilerRecipeLogic::new); this.maxTemperature = maxTemperature; this.heatSpeed = heatSpeed; this.throttle = 100; @@ -69,11 +69,6 @@ public LargeBoilerMachine(IMachineBlockEntity holder, int maxTemperature, int he // ****** Recipe Logic ******// ////////////////////////////////////// - @Override - protected RecipeLogic createRecipeLogic(Object... args) { - return new LargeBoilerMachine.LargeBoilerRecipeLogic(this); - } - @Override public LargeBoilerMachine.LargeBoilerRecipeLogic getRecipeLogic() { return (LargeBoilerMachine.LargeBoilerRecipeLogic) super.getRecipeLogic(); @@ -161,7 +156,7 @@ protected void updateCurrentTemperature() { // check explosion if (drained < maxDrain) { doExplosion(2f); - var center = getPos().below().relative(getFrontFacing().getOpposite()); + var center = getBlockPos().below().relative(getFrontFacing().getOpposite()); if (GTValues.RNG.nextInt(100) > 80) { doExplosion(center, 2f); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/SteamParallelMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/SteamParallelMultiblockMachine.java index 6e34aceece9..41b5c56bc50 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/SteamParallelMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/SteamParallelMultiblockMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.multiblock.steam; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -49,7 +49,7 @@ public class SteamParallelMultiblockMachine extends WorkableMultiblockMachine im @Getter @Setter - private int maxParallels = ConfigHolder.INSTANCE.machines.steamMultiParallelAmount; + private int maxParallels; @Nullable private SteamEnergyRecipeHandler steamEnergy = null; @@ -57,11 +57,13 @@ public class SteamParallelMultiblockMachine extends WorkableMultiblockMachine im // if in millibuckets, this is 2.0, Meaning 2mb of steam -> 1 EU public static final double CONVERSION_RATE = 2.0; - public SteamParallelMultiblockMachine(IMachineBlockEntity holder, Object... args) { - super(holder); - if (args.length > 0 && args[0] instanceof Integer i) { - this.maxParallels = i; - } + public SteamParallelMultiblockMachine(BlockEntityCreationInfo info, int maxParallels) { + super(info); + this.maxParallels = maxParallels; + } + + public SteamParallelMultiblockMachine(BlockEntityCreationInfo info) { + this(info, ConfigHolder.INSTANCE.machines.steamMultiParallelAmount); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java index 00f09889c02..aacc33ffdaa 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.machine.steam; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -32,6 +32,7 @@ import java.util.Arrays; import java.util.Collections; +import java.util.Objects; import javax.annotation.ParametersAreNonnullByDefault; @@ -44,9 +45,9 @@ public class SteamLiquidBoilerMachine extends SteamBoilerMachine { @SaveField public final NotifiableFluidTank fuelTank; - public SteamLiquidBoilerMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder, isHighPressure, args); - this.fuelTank = createFuelTank(args).setFilter(fluid -> FUEL_CACHE.computeIfAbsent(fluid.getFluid(), f -> { + public SteamLiquidBoilerMachine(BlockEntityCreationInfo info, boolean isHighPressure) { + super(info, isHighPressure); + this.fuelTank = createFuelTank().setFilter(fluid -> FUEL_CACHE.computeIfAbsent(fluid.getFluid(), f -> { if (isRemote()) return true; return recipeLogic.getRecipeManager().getAllRecipesFor(getRecipeType()).stream().anyMatch(recipe -> { var list = recipe.inputs.getOrDefault(FluidRecipeCapability.CAP, Collections.emptyList()); @@ -63,7 +64,7 @@ public SteamLiquidBoilerMachine(IMachineBlockEntity holder, boolean isHighPressu // ***** Initialization *****// ////////////////////////////////////// - protected NotifiableFluidTank createFuelTank(Object... args) { + protected NotifiableFluidTank createFuelTank() { return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN); } @@ -86,7 +87,8 @@ public ModularUI createUI(Player entityPlayer) { protected void randomDisplayTick(RandomSource random, float x, float y, float z) { super.randomDisplayTick(random, x, y, z); if (random.nextFloat() < 0.3F) { - getLevel().addParticle(ParticleTypes.LAVA, x + random.nextFloat(), y, z + random.nextFloat(), 0.0F, 0.0F, + Objects.requireNonNull(getLevel()).addParticle(ParticleTypes.LAVA, x + random.nextFloat(), y, + z + random.nextFloat(), 0.0F, 0.0F, 0.0F); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index e9837c67c13..a0938438df9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.steam; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IMiner; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -7,13 +8,10 @@ import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.PredicatedImageWidget; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.steam.SteamWorkableMachine; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -35,7 +33,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.Block; -import net.minecraftforge.fluids.FluidType; import net.minecraftforge.fluids.capability.IFluidHandler; import lombok.Getter; @@ -68,43 +65,26 @@ public class SteamMinerMachine extends SteamWorkableMachine implements IMiner, I @Nullable protected ISubscription exportItemSubs; - public SteamMinerMachine(IMachineBlockEntity holder, boolean isHighPressure, int speed, int maximumRadius, + public SteamMinerMachine(BlockEntityCreationInfo info, boolean isHighPressure, int speed, int maximumRadius, int fortune, int energyPerTick) { - super(holder, isHighPressure, fortune, speed, maximumRadius); + super(info, isHighPressure, (m) -> new SteamMinerLogic(m, fortune, speed, maximumRadius)); + this.inventorySize = 4; this.energyPerTick = energyPerTick; this.importItems = createImportItemHandler(); this.exportItems = createExportItemHandler(); } - ////////////////////////////////////// - // ***** Initialization ******// - ////////////////////////////////////// - @Override - protected @NotNull RecipeLogic createRecipeLogic(Object... args) { - if (args.length > 2 && args[args.length - 3] instanceof Integer fortune && - args[args.length - 2] instanceof Integer speed && args[args.length - 1] instanceof Integer maxRadius) { - return new SteamMinerLogic(this, fortune, speed, maxRadius); - } - throw new IllegalArgumentException( - "MinerMachine need args [fortune, speed, maximumRadius] for initialization"); - } - @Override public SteamMinerLogic getRecipeLogic() { return (SteamMinerLogic) super.getRecipeLogic(); } - @Override - protected NotifiableFluidTank createSteamTank(Object... args) { - return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN); - } - - protected NotifiableItemStackHandler createImportItemHandler(@SuppressWarnings("unused") Object... args) { + protected NotifiableItemStackHandler createImportItemHandler() { return new NotifiableItemStackHandler(this, 0, IO.IN); } - protected NotifiableItemStackHandler createExportItemHandler(@SuppressWarnings("unused") Object... args) { + protected NotifiableItemStackHandler createExportItemHandler() { return new NotifiableItemStackHandler(this, inventorySize, IO.OUT); } @@ -146,7 +126,8 @@ public void onUnload() { ////////////////////////////////////// protected void updateAutoOutputSubscription() { var outputFacingItems = getFrontFacing(); - if (!exportItems.isEmpty() && GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacingItems)) { + if (!exportItems.isEmpty() && + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacingItems)) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java index 6cfd39650b2..ccd6bb5309e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.steam; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -10,16 +10,23 @@ import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget; +import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.NotNull; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault public class SteamSolarBoiler extends SteamBoilerMachine { - public SteamSolarBoiler(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder, isHighPressure, args); + public SteamSolarBoiler(BlockEntityCreationInfo info, boolean isHighPressure) { + super(info, isHighPressure); } @Override @@ -36,13 +43,13 @@ protected long getBaseSteamOutput() { @Override protected void updateSteamSubscription() { if (temperatureSubs == null) { - temperatureSubs = subscribeServerTick(temperatureSubs, this::updateCurrentTemperature); + temperatureSubs = subscribeServerTick(null, this::updateCurrentTemperature); } } @Override protected void updateCurrentTemperature() { - if (GTUtil.canSeeSunClearly(getLevel(), getPos())) { + if (GTUtil.canSeeSunClearly(Objects.requireNonNull(getLevel()), getBlockPos())) { recipeLogic.setStatus(RecipeLogic.Status.WORKING); } else { recipeLogic.setStatus(RecipeLogic.Status.IDLE); @@ -63,7 +70,10 @@ protected int getCoolDownRate() { @Override public ModularUI createUI(Player entityPlayer) { return super.createUI(entityPlayer) - .widget(new ProgressWidget(() -> GTUtil.canSeeSunClearly(getLevel(), getPos()) ? 1.0 : 0.0, 114, 44, 20, + .widget(new ProgressWidget( + () -> GTUtil.canSeeSunClearly(Objects.requireNonNull(getLevel()), getBlockPos()) ? 1.0 : 0.0, + 114, + 44, 20, 20) .setProgressTexture( GuiTextures.PROGRESS_BAR_SOLAR_STEAM.get(isHighPressure).getSubTexture(0, 0, 1, 0.5), diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java index b630bb4a8ff..58492063ae8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java @@ -1,13 +1,13 @@ package com.gregtechceu.gtceu.common.machine.steam; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; @@ -43,9 +43,9 @@ public class SteamSolidBoilerMachine extends SteamBoilerMachine implements IMach @SaveField public final NotifiableItemStackHandler fuelHandler, ashHandler; - public SteamSolidBoilerMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { - super(holder, isHighPressure, args); - this.fuelHandler = createFuelHandler(args).setFilter(itemStack -> { + public SteamSolidBoilerMachine(BlockEntityCreationInfo info, boolean isHighPressure) { + super(info, isHighPressure); + this.fuelHandler = createFuelHandler().setFilter(itemStack -> { if (FluidUtil.getFluidContained(itemStack).isPresent()) { return false; } @@ -61,18 +61,18 @@ public SteamSolidBoilerMachine(IMachineBlockEntity holder, boolean isHighPressur }); }); }); - this.ashHandler = createAshHandler(args); + this.ashHandler = createAshHandler(); } ////////////////////////////////////// // ***** Initialization *****// ////////////////////////////////////// - protected NotifiableItemStackHandler createFuelHandler(Object... args) { + protected NotifiableItemStackHandler createFuelHandler() { return new NotifiableItemStackHandler(this, 1, IO.IN, IO.IN); } - protected NotifiableItemStackHandler createAshHandler(Object... args) { + protected NotifiableItemStackHandler createAshHandler() { return new NotifiableItemStackHandler(this, 1, IO.OUT, IO.OUT); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java index c8047a125fc..f0f4fdc9eb9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputBoth; @@ -50,12 +50,12 @@ public class BufferMachine extends TieredMachine implements IMachineLife, IAutoO @SaveField @SyncToClient @RerenderOnChanged - protected Direction outputFacingItems; + protected @Nullable Direction outputFacingItems; @Getter @SaveField @SyncToClient @RerenderOnChanged - protected Direction outputFacingFluids; + protected @Nullable Direction outputFacingFluids; @Getter @SaveField @SyncToClient @@ -89,10 +89,10 @@ public class BufferMachine extends TieredMachine implements IMachineLife, IAutoO @Nullable protected ISubscription invSubs, tankSubs; - public BufferMachine(IMachineBlockEntity holder, int tier, Object... args) { - super(holder, tier); - this.inventory = createInventory(args); - this.tank = createTank(args); + public BufferMachine(BlockEntityCreationInfo info, int tier) { + super(info, tier); + this.inventory = createInventory(); + this.tank = createTank(); } //////////////////////////////// @@ -107,11 +107,11 @@ public static int getTankSize(int tier) { return tier + 2; } - protected NotifiableItemStackHandler createInventory(Object... args) { + protected NotifiableItemStackHandler createInventory() { return new NotifiableItemStackHandler(this, getInventorySize(tier), IO.BOTH); } - protected NotifiableFluidTank createTank(Object... args) { + protected NotifiableFluidTank createTank() { return new NotifiableFluidTank(this, getTankSize(tier), TANK_SIZE, IO.BOTH); } @@ -181,9 +181,9 @@ protected void updateAutoOutputSubscription() { var outputFacingItems = getOutputFacingItems(); var outputFacingFluids = getOutputFacingFluids(); if ((isAutoOutputItems() && !inventory.isEmpty() && outputFacingItems != null && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacingItems)) || + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacingItems)) || (isAutoOutputFluids() && !tank.isEmpty() && outputFacingFluids != null && - GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), outputFacingFluids))) { + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), outputFacingFluids))) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java index 1c0d481ddb4..41106c0e0bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -56,8 +56,8 @@ public class CrateMachine extends MetaMachine implements IUIMachine, IMachineLif @SaveField public final NotifiableItemStackHandler inventory; - public CrateMachine(IMachineBlockEntity holder, Material material, int inventorySize) { - super(holder); + public CrateMachine(BlockEntityCreationInfo info, Material material, int inventorySize) { + super(info); this.material = material; this.inventorySize = inventorySize; this.inventory = new NotifiableItemStackHandler(this, inventorySize, IO.BOTH); @@ -108,7 +108,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play @Override public void onMachinePlaced(@Nullable LivingEntity player, ItemStack stack) { - IMachineLife.super.onMachinePlaced(player, stack); + super.onMachinePlaced(player, stack); CompoundTag tag = stack.getTag(); if (tag != null) { if (tag.contains("taped") && tag.getBoolean("taped")) { 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 47c5aac6ff2..3bc46471d5f 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 @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.storage; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.PhantomSlotWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; @@ -38,12 +38,12 @@ public class CreativeChestMachine extends QuantumChestMachine { @SaveField private int itemsPerCycle, ticksPerCycle = 1; - public CreativeChestMachine(IMachineBlockEntity holder) { - super(holder, GTValues.MAX, -1); + public CreativeChestMachine(BlockEntityCreationInfo info) { + super(info, GTValues.MAX, -1); } @Override - protected ItemCache createCacheItemHandler(Object... args) { + protected ItemCache createCacheItemHandler() { return new InfiniteCache(this); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java index 184b7d4245f..28a6669cb3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; 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.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; @@ -42,8 +42,8 @@ public class CreativeComputationProviderMachine extends MetaMachine @Nullable private TickableSubscription computationSubs; - public CreativeComputationProviderMachine(IMachineBlockEntity holder) { - super(holder); + public CreativeComputationProviderMachine(BlockEntityCreationInfo info) { + super(info); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java index 7911c089769..016cc63bf87 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.storage; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.ILaserContainer; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -49,8 +49,8 @@ public class CreativeEnergyContainerMachine extends TieredMachine implements ILa private long ampsReceived = 0; private boolean doExplosion = false; - public CreativeEnergyContainerMachine(IMachineBlockEntity holder) { - super(holder, GTValues.MAX); + public CreativeEnergyContainerMachine(BlockEntityCreationInfo info) { + super(info, GTValues.MAX); } ////////////////////////////////////// @@ -72,7 +72,8 @@ protected void updateEnergyTick() { this.setIOSpeed(energyIOPerSec / 20); energyIOPerSec = 0; if (doExplosion) { - getLevel().explode(null, getPos().getX() + 0.5, getPos().getY() + 0.5, getPos().getZ() + 0.5, + getLevel().explode(null, getBlockPos().getX() + 0.5, getBlockPos().getY() + 0.5, + getBlockPos().getZ() + 0.5, 1, Level.ExplosionInteraction.NONE); doExplosion = false; } @@ -82,11 +83,12 @@ protected void updateEnergyTick() { int ampsUsed = 0; for (var facing : GTUtil.DIRECTIONS) { var opposite = facing.getOpposite(); - IEnergyContainer container = GTCapabilityHelper.getEnergyContainer(getLevel(), getPos().relative(facing), + IEnergyContainer container = GTCapabilityHelper.getEnergyContainer(getLevel(), + getBlockPos().relative(facing), opposite); // Try to get laser capability if (container == null) - container = GTCapabilityHelper.getLaser(getLevel(), getPos().relative(facing), opposite); + container = GTCapabilityHelper.getLaser(getLevel(), getBlockPos().relative(facing), opposite); if (container != null && container.inputsEnergy(opposite) && container.getEnergyCanBeInserted() > 0) { ampsUsed += container.acceptEnergyFromNetwork(opposite, voltage, amps - ampsUsed); 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 a0eb96fd468..ffdb91938a3 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 @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.storage; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.PhantomFluidWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; @@ -13,6 +13,7 @@ import com.lowdragmc.lowdraglib.gui.texture.TextTexture; import com.lowdragmc.lowdraglib.gui.widget.*; +import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; @@ -29,6 +30,10 @@ import lombok.Getter; import org.jetbrains.annotations.NotNull; +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault public class CreativeTankMachine extends QuantumTankMachine { @Getter @@ -38,11 +43,11 @@ public class CreativeTankMachine extends QuantumTankMachine { @SaveField private int ticksPerCycle = 1; - public CreativeTankMachine(IMachineBlockEntity holder) { - super(holder, GTValues.MAX, 1); + public CreativeTankMachine(BlockEntityCreationInfo info) { + super(info, GTValues.MAX, 1); } - protected FluidCache createCacheFluidHandler(Object... args) { + protected FluidCache createCacheFluidHandler() { return new InfiniteCache(this); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java index d49bd606411..a046eb76f9e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputFluid; @@ -72,18 +72,18 @@ public class DrumMachine extends MetaMachine implements IAutoOutputFluid, IDropS @Getter protected final Material material; - public DrumMachine(IMachineBlockEntity holder, Material material, int maxStoredFluids, Object... args) { - super(holder); + public DrumMachine(BlockEntityCreationInfo info, Material material, int maxStoredFluids) { + super(info); this.material = material; this.maxStoredFluids = maxStoredFluids; - this.cache = createCacheFluidHandler(args); + this.cache = createCacheFluidHandler(); } ////////////////////////////////////// // ***** Initialization *****// ////////////////////////////////////// - protected NotifiableFluidTank createCacheFluidHandler(Object... args) { + protected NotifiableFluidTank createCacheFluidHandler() { return new NotifiableFluidTank(this, 1, maxStoredFluids, IO.BOTH) .setFilter(material.getProperty(PropertyKey.FLUID_PIPE)); } @@ -184,7 +184,7 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingFluids(); if ((isAutoOutputFluids() && !cache.isEmpty()) && outputFacing != null && - GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), outputFacing)) { + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), outputFacing)) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::checkAutoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java index c482140cdd9..fad35a48231 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; @@ -47,8 +47,8 @@ public abstract class LongDistanceEndpointMachine extends MetaMachine implements @Nullable protected TickableSubscription refreshNetSubs; - public LongDistanceEndpointMachine(IMachineBlockEntity holder, LongDistancePipeType pipeType) { - super(holder); + public LongDistanceEndpointMachine(BlockEntityCreationInfo info, LongDistancePipeType pipeType) { + super(info); this.pipeType = Objects.requireNonNull(pipeType); } @@ -72,7 +72,7 @@ public void updateNetwork() { if (isRemote()) { return; } - LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); + LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getBlockPos()); if (network != null) { // manually remove this endpoint from the network network.onRemoveEndpoint(this); @@ -122,7 +122,7 @@ public void onUnload() { invalidateLink(); } setIoType(IO.NONE); - LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); + LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getBlockPos()); // remove endpoint from network if (network != null) network.onRemoveEndpoint(this); } @@ -133,7 +133,7 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { List networks = findNetworks(); this.updateNetwork(); - LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); + LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getBlockPos()); if (network == null) { // shouldn't happen if (networks.isEmpty()) { @@ -165,13 +165,13 @@ private List findNetworks() { List networks = new ArrayList<>(); LongDistanceNetwork network; // only check input and output side - network = LongDistanceNetwork.get(getLevel(), getPos().relative(getFrontFacing())); + network = LongDistanceNetwork.get(getLevel(), getBlockPos().relative(getFrontFacing())); if (network != null && pipeType == network.getPipeType()) { // found a network on the input face, therefore this is an output of the network networks.add(network); setIoType(IO.OUT); } - network = LongDistanceNetwork.get(getLevel(), getPos().relative(getOutputFacing())); + network = LongDistanceNetwork.get(getLevel(), getBlockPos().relative(getOutputFacing())); if (network != null && pipeType == network.getPipeType()) { // found a network on the output face, therefore this is an input of the network networks.add(network); @@ -183,14 +183,14 @@ private List findNetworks() { @Override public ILDEndpoint getLink() { if (link == null) { - LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); + LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getBlockPos()); if (network != null && network.isValid()) { this.link = network.getOtherEndpoint(this); } - } else if (this.link.isInValid()) { + } else if (this.link.isRemoved()) { this.link.invalidateLink(); this.link = null; - LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); + LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getBlockPos()); if (network != null) { network.invalidateEndpoints(); if (network.isValid()) { @@ -222,7 +222,7 @@ public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { if (mode == PortableScannerBehavior.DisplayMode.SHOW_ALL || mode == PortableScannerBehavior.DisplayMode.SHOW_MACHINE_INFO) { - LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); + LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getBlockPos()); if (network == null) { textComponents.add(Component.translatable("block.gtceu.long_distance_item_pipeline_no_network")); } else { @@ -231,9 +231,9 @@ public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { FormattingUtil.formatNumbers(network.getTotalSize()))); ILDEndpoint in = network.getActiveInputIndex(), out = network.getActiveOutputIndex(); textComponents.add(Component.translatable("block.gtceu.long_distance_item_pipeline_input_pos", - Component.literal(in == null ? "none" : in.getPos().toString()))); + Component.literal(in == null ? "none" : in.getBlockPos().toString()))); textComponents.add(Component.translatable("block.gtceu.long_distance_item_pipeline_output_pos", - Component.literal(out == null ? "none" : out.getPos().toString()))); + Component.literal(out == null ? "none" : out.getBlockPos().toString()))); } if (isInput()) { textComponents.add(Component.translatable("block.gtceu.long_distance_item_pipeline_input_endpoint")); 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 bcec81fd3e5..6c8169ce664 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 @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; @@ -7,7 +8,6 @@ import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredMachine; @@ -80,7 +80,7 @@ public class QuantumChestMachine extends TieredMachine implements IAutoOutputIte @SaveField @SyncToClient @RerenderOnChanged - protected Direction outputFacingItems; + protected @Nullable Direction outputFacingItems; @Getter @SaveField @SyncToClient @@ -111,11 +111,11 @@ public class QuantumChestMachine extends TieredMachine implements IAutoOutputIte @Nullable protected TickableSubscription autoOutputSubs; - public QuantumChestMachine(IMachineBlockEntity holder, int tier, long maxAmount, Object... args) { - super(holder, tier); + public QuantumChestMachine(BlockEntityCreationInfo info, int tier, long maxAmount) { + super(info, tier); this.outputFacingItems = getFrontFacing().getOpposite(); this.maxAmount = maxAmount; - this.cache = createCacheItemHandler(args); + this.cache = createCacheItemHandler(); this.lockedItem = new CustomItemStackHandler(); lockedItem.setOnContentsChanged(() -> syncDataHolder.markClientSyncFieldDirty("lockedItem")); } @@ -124,7 +124,7 @@ public QuantumChestMachine(IMachineBlockEntity holder, int tier, long maxAmount, // ***** Initialization ******// ////////////////////////////////////// - protected ItemCache createCacheItemHandler(Object... args) { + protected ItemCache createCacheItemHandler() { return new ItemCache(this); } @@ -223,7 +223,7 @@ public void setWorkingEnabled(boolean isWorkingAllowed) { protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingItems(); if ((isAutoOutputItems() && !stored.isEmpty()) && outputFacing != null && - GTTransferUtils.hasAdjacentItemHandler(getLevel(), getPos(), outputFacing)) { + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), outputFacing)) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::checkAutoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); @@ -289,7 +289,7 @@ public boolean onLeftClick(Player player, Level world, InteractionHand hand, Blo var drained = cache.extractItem(0, player.isShiftKeyDown() ? stored.getMaxStackSize() : 1, false); if (!drained.isEmpty()) { if (!player.addItem(drained)) { - Block.popResourceFromFace(world, getPos(), getFrontFacing(), drained); + Block.popResourceFromFace(world, getBlockPos(), getFrontFacing(), drained); } } } @@ -506,7 +506,7 @@ public boolean isItemValid(int slot, @NotNull ItemStack stack) { public void exportToNearby(@NotNull Direction... facings) { if (stored.isEmpty()) return; var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getItemCapFilter(facing, IO.OUT); GTTransferUtils.getAdjacentItemHandler(level, pos, facing) 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 df064a033c2..db4825061ec 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 @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.storage; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; @@ -71,7 +72,7 @@ public class QuantumTankMachine extends TieredMachine implements IAutoOutputFlui @SaveField @SyncToClient @RerenderOnChanged - protected Direction outputFacingFluids; + protected @Nullable Direction outputFacingFluids; @Getter @SaveField @SyncToClient @@ -103,11 +104,11 @@ public class QuantumTankMachine extends TieredMachine implements IAutoOutputFlui @Nullable protected TickableSubscription autoOutputSubs; - public QuantumTankMachine(IMachineBlockEntity holder, int tier, long maxAmount, Object... args) { - super(holder, tier); + public QuantumTankMachine(BlockEntityCreationInfo info, int tier, long maxAmount) { + super(info, tier); this.outputFacingFluids = getFrontFacing().getOpposite(); this.maxAmount = maxAmount; - this.cache = createCacheFluidHandler(args); + this.cache = createCacheFluidHandler(); this.lockedFluid = new CustomFluidTank(1000); } @@ -115,7 +116,7 @@ public QuantumTankMachine(IMachineBlockEntity holder, int tier, long maxAmount, // ***** Initialization ******// ////////////////////////////////////// - protected FluidCache createCacheFluidHandler(Object... args) { + protected FluidCache createCacheFluidHandler() { return new FluidCache(this); } @@ -202,7 +203,7 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingFluids(); if ((isAutoOutputFluids() && !stored.isEmpty()) && outputFacing != null && - GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getPos(), outputFacing)) { + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), outputFacing)) { autoOutputSubs = subscribeServerTick(autoOutputSubs, this::checkAutoOutput); } else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); @@ -437,7 +438,7 @@ public boolean isFluidValid(int tank, @NotNull FluidStack stack) { public void exportToNearby(@NotNull Direction... facings) { if (stored.isEmpty()) return; var level = getMachine().getLevel(); - var pos = getMachine().getPos(); + var pos = getMachine().getBlockPos(); for (Direction facing : facings) { var filter = getMachine().getFluidCapFilter(facing, IO.OUT); GTTransferUtils.getAdjacentFluidHandler(level, pos, facing) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java index 48b9979aeb6..4deaedb2bae 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java @@ -178,10 +178,10 @@ protected boolean isOverclocked() { } private int getChunkX() { - return SectionPos.blockToSectionCoord(getMachine().getPos().getX()); + return SectionPos.blockToSectionCoord(getMachine().getBlockPos().getX()); } private int getChunkZ() { - return SectionPos.blockToSectionCoord(getMachine().getPos().getZ()); + return SectionPos.blockToSectionCoord(getMachine().getBlockPos().getZ()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java index 23264010093..65bd2a449e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java @@ -53,7 +53,7 @@ public void serverTick() { if (duration > 0) { EnvironmentalHazardSavedData environmentalHazards = EnvironmentalHazardSavedData .getOrCreate((ServerLevel) this.getMachine().getLevel()); - var zone = environmentalHazards.getZoneByContainedPos(getMachine().getPos()); + var zone = environmentalHazards.getZoneByContainedPos(getMachine().getBlockPos()); // all maintenance problems not being fixed or there are environmental hazards in the area // means the machine does not run if (maintenanceMachine == null || maintenanceMachine.getNumMaintenanceProblems() < 6 || zone != null) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java index 881efa11ef5..31bda70a7d8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java @@ -15,6 +15,7 @@ import net.minecraftforge.energy.IEnergyStorage; import lombok.Getter; +import org.jetbrains.annotations.NotNull; public class ConverterTrait extends NotifiableEnergyContainer { @@ -34,7 +35,7 @@ public class ConverterTrait extends NotifiableEnergyContainer { @Getter private final FEContainer feContainer; - public ConverterTrait(ConverterMachine machine, int amps) { + public ConverterTrait(@NotNull ConverterMachine machine, int amps) { super(machine, GTValues.V[machine.getTier()] * 16 * amps, GTValues.V[machine.getTier()], amps, GTValues.V[machine.getTier()], amps); this.amps = amps; @@ -69,7 +70,7 @@ public void serverTick() { } else { // output fe var fontFacing = machine.getFrontFacing(); var energyContainer = GTCapabilityHelper.getForgeEnergy(machine.getLevel(), - machine.getPos().relative(fontFacing), fontFacing.getOpposite()); + machine.getBlockPos().relative(fontFacing), fontFacing.getOpposite()); if (energyContainer != null && energyContainer.canReceive()) { var energyUsed = FeCompat.insertEu(energyContainer, Math.min(getEnergyStored(), voltage * amps), false); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/FluidDrillLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/FluidDrillLogic.java index 8d4f9a2634f..8e12a4b7ccc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/FluidDrillLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/FluidDrillLogic.java @@ -145,10 +145,10 @@ protected boolean isOverclocked() { } private int getChunkX() { - return SectionPos.blockToSectionCoord(getMachine().getPos().getX()); + return SectionPos.blockToSectionCoord(getMachine().getBlockPos().getX()); } private int getChunkZ() { - return SectionPos.blockToSectionCoord(getMachine().getPos().getZ()); + return SectionPos.blockToSectionCoord(getMachine().getBlockPos().getZ()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java index dc7b82a3650..9eae6d74bc6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java @@ -115,7 +115,7 @@ public void setSilkTouchMode(boolean isSilkTouchMode) { @Override public BlockPos getMiningPos() { - return getMachine().getPos().relative(getMachine().getFrontFacing().getOpposite()); + return getMachine().getBlockPos().relative(getMachine().getFrontFacing().getOpposite()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java index 1a6027c7a21..21f2837d64e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java @@ -619,7 +619,7 @@ private void incrementPipeLength() { * @return the position to start mining from */ public BlockPos getMiningPos() { - return getMachine().getPos(); + return getMachine().getBlockPos(); } public void onRemove() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/network/packets/SCPacketMonitorGroupNBTChange.java b/src/main/java/com/gregtechceu/gtceu/common/network/packets/SCPacketMonitorGroupNBTChange.java index 9b7aa42c088..dc46fce0428 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/network/packets/SCPacketMonitorGroupNBTChange.java +++ b/src/main/java/com/gregtechceu/gtceu/common/network/packets/SCPacketMonitorGroupNBTChange.java @@ -25,7 +25,7 @@ public class SCPacketMonitorGroupNBTChange implements GTNetwork.INetPacket { public SCPacketMonitorGroupNBTChange(ItemStack stack, MonitorGroup group, CentralMonitorMachine machine) { this.stack = stack; this.monitorGroupId = machine.getMonitorGroups().indexOf(group); - this.pos = machine.getPos(); + this.pos = machine.getBlockPos(); } public SCPacketMonitorGroupNBTChange(FriendlyByteBuf buf) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetHandler.java index 5501d806104..2fd37891306 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetHandler.java @@ -48,13 +48,13 @@ public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) } long amperesUsed = 0L; - for (EnergyRoutePath path : net.getNetData(cable.getPipePos())) { + for (EnergyRoutePath path : net.getNetData(cable.getBlockPos())) { if (path.getMaxLoss() >= voltage) { // Will lose all the energy with this path, so don't use it continue; } - if (cable.getPipePos().equals(path.getTargetPipePos()) && side == path.getTargetFacing()) { + if (cable.getBlockPos().equals(path.getTargetPipePos()) && side == path.getTargetFacing()) { // Do not insert into source handler continue; } @@ -74,7 +74,7 @@ public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) 45 + 36.5); cable.applyHeat(heat); - cableBroken = cable.isInValid(); + cableBroken = cable.isRemoved(); if (cableBroken) { // a cable burned away (or insulation melted) break; @@ -98,7 +98,7 @@ public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) voltageTraveled -= cable.getNodeData().getLossPerBlock(); if (voltageTraveled <= 0) break; - if (!cable.isInValid()) { + if (!cable.isRemoved()) { cable.incrementAmperage(amps, voltageTraveled); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java index 611446b5457..913860aab60 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import com.gregtechceu.gtceu.common.blockentity.DuctPipeBlockEntity; import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; @@ -40,11 +39,11 @@ public void updateNetwork(DuctPipeNet net) { @Nullable private IHazardParticleContainer getInnerContainer() { - if (net == null || pipe.isInValid() || facing == null || pipe.isBlocked(facing)) { + if (net == null || pipe.isRemoved() || facing == null || pipe.isBlocked(facing)) { return null; } - final List data = net.getNetData(pipe.getPipePos(), facing); + final List data = net.getNetData(pipe.getBlockPos(), facing); if (data == null) { return null; } @@ -66,8 +65,7 @@ public float changeHazard(MedicalCondition condition, float differenceAmount) { IHazardParticleContainer handler = path.getHandler(net.getLevel()); if (handler == null && path.getTargetPipe().isConnected(path.getTargetFacing())) { if (net.getLevel().getBlockEntity(path.getTargetPipePos() - .relative(path.getTargetFacing())) instanceof IMachineBlockEntity machineBE && - machineBE.getMetaMachine() instanceof IEnvironmentalHazardCleaner cleaner) { + .relative(path.getTargetFacing())) instanceof IEnvironmentalHazardCleaner cleaner) { cleaner.cleanHazard(condition, differenceAmount); break; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctRoutePath.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctRoutePath.java index 8488e7e589a..747491e2099 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctRoutePath.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctRoutePath.java @@ -36,7 +36,7 @@ public DuctRoutePath(DuctPipeBlockEntity targetPipe, @NotNull Direction facing, @Override public @NotNull BlockPos getTargetPipePos() { - return targetPipe.getPipePos(); + return targetPipe.getBlockPos(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/fluidpipe/longdistance/LDFluidEndpointMachine.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/fluidpipe/longdistance/LDFluidEndpointMachine.java index 21acb2502da..a420461b8ba 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/fluidpipe/longdistance/LDFluidEndpointMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/fluidpipe/longdistance/LDFluidEndpointMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.pipelike.fluidpipe.longdistance; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.machine.storage.LongDistanceEndpointMachine; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -15,8 +15,8 @@ public class LDFluidEndpointMachine extends LongDistanceEndpointMachine { - public LDFluidEndpointMachine(IMachineBlockEntity holder) { - super(holder, LDFluidPipeType.INSTANCE); + public LDFluidEndpointMachine(BlockEntityCreationInfo info) { + super(info, LDFluidPipeType.INSTANCE); } @Override @@ -28,7 +28,7 @@ public LDFluidEndpointMachine(IMachineBlockEntity holder) { if (endpoint == null) { return null; } - return GTTransferUtils.getAdjacentFluidHandler(getLevel(), endpoint.getPos(), endpoint.getOutputFacing()) + return GTTransferUtils.getAdjacentFluidHandler(getLevel(), endpoint.getBlockPos(), endpoint.getOutputFacing()) .map(LDFluidEndpointMachine.FluidHandlerWrapper::new) .orElse(null); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java index f6f047509d0..7e16934cd12 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java @@ -56,7 +56,7 @@ public ItemNetHandler(ItemPipeNet net, ItemPipeBlockEntity pipe, Direction facin public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { if (stack.isEmpty()) return stack; - if (network == null || pipe == null || pipe.isInValid() || pipe.isBlocked(facing)) { + if (network == null || pipe == null || pipe.isRemoved() || pipe.isBlocked(facing)) { return stack; } @@ -65,7 +65,7 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate simulatedTransfersGlobalRoundRobin.putAll(pipe.getTransferred()); CoverBehavior pipeCover = pipe.getCoverContainer().getCoverAtSide(facing); - CoverBehavior tileCover = getCoverOnNeighbour(pipe.getPipePos(), facing); + CoverBehavior tileCover = getCoverOnNeighbour(pipe.getBlockPos(), facing); ConveyorCover conveyor = null; // abort if there are two conveyors @@ -76,7 +76,7 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate if (pipeCover instanceof ConveyorCover pipeConveyor) conveyor = pipeConveyor; if (tileCover instanceof ConveyorCover tileConveyor) conveyor = tileConveyor; - List routePaths = network.getNetData(pipe.getPipePos(), facing, ItemRoutePathSet.FULL); + List routePaths = network.getNetData(pipe.getBlockPos(), facing, ItemRoutePathSet.FULL); if (routePaths.isEmpty()) return stack; List routePathsCopy = new ArrayList<>(routePaths); @@ -119,7 +119,7 @@ private ItemStack distributeEquallyNoRestrictive(ItemStack stack, boolean simulate) { // Round-robin distribute to all non-Restrictive destinations List routePathsNonRestrictedCopy = new ArrayList<>( - network.getNetData(pipe.getPipePos(), facing, ItemRoutePathSet.NONRESTRICTED)); + network.getNetData(pipe.getBlockPos(), facing, ItemRoutePathSet.NONRESTRICTED)); ItemStack remainsNonRestricted; if (routePathsNonRestrictedCopy.isEmpty()) { remainsNonRestricted = stack; @@ -129,7 +129,7 @@ private ItemStack distributeEquallyNoRestrictive(ItemStack stack, // if anything is left, distribute to Restrictive destinations if (!remainsNonRestricted.isEmpty()) { List routePathsRestrictiveCopy = new ArrayList<>( - network.getNetData(pipe.getPipePos(), facing, ItemRoutePathSet.RESTRICTED)); + network.getNetData(pipe.getBlockPos(), facing, ItemRoutePathSet.RESTRICTED)); return distributeEqually(routePathsRestrictiveCopy, remainsNonRestricted, simulate); } else { return ItemStack.EMPTY; @@ -269,7 +269,7 @@ private ItemStack insertIntoTarget(ItemRoutePath routePath, ItemStack stack, boo } CoverBehavior pipeCover = routePath.getTargetPipe().getCoverContainer() .getCoverAtSide(routePath.getTargetFacing()); - CoverBehavior tileCover = getCoverOnNeighbour(routePath.getTargetPipe().getPipePos(), + CoverBehavior tileCover = getCoverOnNeighbour(routePath.getTargetPipe().getBlockPos(), routePath.getTargetFacing()); if (pipeCover != null) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemRoutePath.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemRoutePath.java index bda0ecea64d..c0070ddccd8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemRoutePath.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemRoutePath.java @@ -51,7 +51,7 @@ public ItemRoutePath(ItemPipeBlockEntity targetPipe, @NotNull Direction facing, @Override public @NotNull BlockPos getTargetPipePos() { - return targetPipe.getPipePos(); + return targetPipe.getBlockPos(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/longdistance/LDItemEndpointMachine.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/longdistance/LDItemEndpointMachine.java index 168e339d654..60eca5fee8c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/longdistance/LDItemEndpointMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/longdistance/LDItemEndpointMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.pipelike.item.longdistance; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.common.machine.storage.LongDistanceEndpointMachine; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -15,8 +15,8 @@ public class LDItemEndpointMachine extends LongDistanceEndpointMachine { - public LDItemEndpointMachine(IMachineBlockEntity metaTileEntityId) { - super(metaTileEntityId, LDItemPipeType.INSTANCE); + public LDItemEndpointMachine(BlockEntityCreationInfo info) { + super(info, LDItemPipeType.INSTANCE); } @Override @@ -28,7 +28,7 @@ public LDItemEndpointMachine(IMachineBlockEntity metaTileEntityId) { if (endpoint == null) { return null; } - return GTTransferUtils.getAdjacentItemHandler(getLevel(), endpoint.getPos(), endpoint.getOutputFacing()) + return GTTransferUtils.getAdjacentItemHandler(getLevel(), endpoint.getBlockPos(), endpoint.getOutputFacing()) .map(ItemHandlerWrapper::new) .orElse(null); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetHandler.java index c83c66c8360..859cb258882 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetHandler.java @@ -38,11 +38,11 @@ private void setPipesActive() { @Nullable private ILaserContainer getInnerContainer() { - if (net == null || pipe == null || pipe.isInValid() || (facing == null || pipe.isBlocked(facing))) { + if (net == null || pipe == null || pipe.isRemoved() || (facing == null || pipe.isBlocked(facing))) { return null; } - LaserRoutePath data = net.getNetData(pipe.getPipePos(), facing); + LaserRoutePath data = net.getNetData(pipe.getBlockPos(), facing); if (data == null) { return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetHandler.java index 9072b18fcfc..571faab6f1d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetHandler.java @@ -75,13 +75,13 @@ private void setPipesActive() { } private boolean isNetInvalidForTraversal() { - return net == null || pipe == null || pipe.isInValid(); + return net == null || pipe == null || pipe.isRemoved(); } private boolean traverseRecipeAvailable(@NotNull GTRecipe recipe, @NotNull Collection seen) { if (isNetInvalidForTraversal()) return false; - OpticalRoutePath inv = net.getNetData(pipe.getPipePos(), facing); + OpticalRoutePath inv = net.getNetData(pipe.getBlockPos(), facing); if (inv == null) return false; IOpticalDataAccessHatch hatch = inv.getDataHatch(); @@ -115,7 +115,7 @@ private boolean traverseCanBridge(@NotNull Collection seen) { if (isNetInvalidForTraversal()) return null; - OpticalRoutePath inv = net.getNetData(pipe.getPipePos(), facing); + OpticalRoutePath inv = net.getNetData(pipe.getBlockPos(), facing); if (inv == null) return null; IOpticalComputationProvider hatch = inv.getComputationHatch(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java index 07ccff2fe64..a05cc0d1718 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java @@ -34,18 +34,18 @@ public OpticalRoutePath(OpticalPipeBlockEntity targetPipe, Direction targetFacin @Nullable public IOpticalDataAccessHatch getDataHatch() { IDataAccessHatch dataAccessHatch = getTargetCapability(GTCapability.CAPABILITY_DATA_ACCESS, - targetPipe.getPipeLevel()); + targetPipe.getLevel()); return dataAccessHatch instanceof IOpticalDataAccessHatch opticalHatch ? opticalHatch : null; } @Nullable public IOpticalComputationProvider getComputationHatch() { - return getTargetCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER, targetPipe.getPipeLevel()); + return getTargetCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER, targetPipe.getLevel()); } @Override public @NotNull BlockPos getTargetPipePos() { - return targetPipe.getPipePos(); + return targetPipe.getBlockPos(); } @Nullable diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java index 338314cf933..8502d903f57 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java @@ -106,7 +106,7 @@ public Component getTooltips() { @Override public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { Level level = recipeLogic.getMachine().getLevel(); - BlockPos pos = recipeLogic.getMachine().getPos(); + BlockPos pos = recipeLogic.getMachine().getBlockPos(); if (level == null) { return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java index 447481e1be2..9c7e6ac0fa7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java @@ -106,7 +106,7 @@ public Component getTooltips() { @Override public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { Level level = recipeLogic.getMachine().getLevel(); - BlockPos pos = recipeLogic.getMachine().getPos(); + BlockPos pos = recipeLogic.getMachine().getBlockPos(); if (level == null) { return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java index 829421c9286..fd128ef260b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java @@ -62,7 +62,7 @@ public Component getTooltips() { public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { Level level = recipeLogic.machine.self().getLevel(); if (level == null) return false; - Holder biome = level.getBiome(recipeLogic.machine.self().getPos()); + Holder biome = level.getBiome(recipeLogic.machine.self().getBlockPos()); return biome.is(this.biome); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java index 3692627d98a..f71e74f47fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java @@ -59,7 +59,7 @@ public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic reci return false; } EnvironmentalHazardSavedData savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); - var zone = savedData.getZoneByContainedPos(recipeLogic.getMachine().getPos()); + var zone = savedData.getZoneByContainedPos(recipeLogic.getMachine().getBlockPos()); return zone != null && zone.strength() > 0; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java index 0f9cd15fcb9..a9f6ada2868 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java @@ -58,7 +58,7 @@ public int getMax() { @Override public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { - int y = recipeLogic.machine.self().getPos().getY(); + int y = recipeLogic.machine.self().getBlockPos().getY(); return y >= this.min && y <= this.max; } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/client/LevelRendererMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/client/LevelRendererMixin.java index 06f24b56d02..c79852c7beb 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/client/LevelRendererMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/client/LevelRendererMixin.java @@ -7,7 +7,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; import com.gregtechceu.gtceu.api.item.tool.aoe.AoESymmetrical; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.steam.SteamMachine; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; @@ -185,12 +185,12 @@ private static void renderShape(PoseStack poseStack, VertexConsumer consumer, Vo if (!materialEntry.isEmpty()) { doRenderColoredOutline = true; rgb = materialEntry.material().getMaterialRGB(); - } else if (level.getBlockEntity(pos) instanceof IMachineBlockEntity mbe) { + } else if (level.getBlockEntity(pos) instanceof MetaMachine mbe) { if (rendererCfg.coloredTieredMachineOutline) { - if (mbe.getMetaMachine() instanceof SteamMachine steam) { + if (mbe instanceof SteamMachine steam) { doRenderColoredOutline = true; rgb = steam.isHighPressure() ? GTValues.VC_HP_STEAM : GTValues.VC_LP_STEAM; - } else if (mbe.getMetaMachine() instanceof ITieredMachine tiered) { + } else if (mbe instanceof ITieredMachine tiered) { doRenderColoredOutline = true; rgb = GTValues.VCM[tiered.getTier()]; } diff --git a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java index beeb8ad9a40..bfd10ab3234 100644 --- a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java @@ -226,7 +226,7 @@ public static void onMobEffectEvent(MobEffectEvent.Applicable event) { public static void onLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { var blockState = event.getLevel().getBlockState(event.getPos()); if (blockState.hasBlockEntity() && blockState.getBlock() instanceof MetaMachineBlock block && - block.getMachine(event.getLevel(), event.getPos()) instanceof IInteractedMachine machine) { + MetaMachine.getMachine(event.getLevel(), event.getPos()) instanceof IInteractedMachine machine) { if (machine.onLeftClick(event.getEntity(), event.getLevel(), event.getHand(), event.getPos(), event.getFace())) { event.setCanceled(true); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java index fc5d0466e2e..b97dabb17b7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.ae2; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; import com.gregtechceu.gtceu.utils.GTStringUtils; @@ -50,16 +49,10 @@ private static IGrid getGrid(PlaceholderContext ctx) throws PlaceholderException if (node != null) return node.getGrid(); } ; BlockEntity blockEntity = ctx.level().getBlockEntity(ctx.pos()); - if (blockEntity instanceof IMachineBlockEntity machineBlockEntity) { - if (machineBlockEntity.getMetaMachine() instanceof IGridConnectedBlockEntity gridMachine) { - IGrid nullable = gridMachine.getMainNode().getGrid(); - if (nullable == null) throw new NoMENetworkException(); - return nullable; - } - } - if (blockEntity instanceof IGridConnectedBlockEntity gridBlockEntity) { - IGridNode node = gridBlockEntity.getGridNode(); - if (node != null) return gridBlockEntity.getGridNode().getGrid(); + if (blockEntity instanceof IGridConnectedBlockEntity gridMachine) { + IGrid nullable = gridMachine.getMainNode().getGrid(); + if (nullable == null) throw new NoMENetworkException(); + return nullable; } throw new NoMENetworkException(); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java index 5fd6062ba4b..56da6c774ca 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.integration.ae2.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.common.machine.multiblock.part.ItemBusPartMachine; import com.gregtechceu.gtceu.integration.ae2.machine.feature.IGridConnectedMachine; import com.gregtechceu.gtceu.integration.ae2.machine.trait.GridNodeHolder; @@ -34,8 +34,8 @@ public abstract class MEBusPartMachine extends ItemBusPartMachine implements IGr protected final IActionSource actionSource; - public MEBusPartMachine(IMachineBlockEntity holder, IO io, Object... args) { - super(holder, GTValues.LuV, io, args); + public MEBusPartMachine(BlockEntityCreationInfo info, IO io) { + super(info, GTValues.LuV, io); this.nodeHolder = createNodeHolder(); this.actionSource = IActionSource.ofMachine(nodeHolder.getMainNode()::getNode); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java index 0cf581461e5..a9ed031e51e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.integration.ae2.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.common.machine.multiblock.part.FluidHatchPartMachine; import com.gregtechceu.gtceu.integration.ae2.machine.feature.IGridConnectedMachine; import com.gregtechceu.gtceu.integration.ae2.machine.trait.GridNodeHolder; @@ -35,8 +35,8 @@ public abstract class MEHatchPartMachine extends FluidHatchPartMachine implement protected final IActionSource actionSource; - public MEHatchPartMachine(IMachineBlockEntity holder, IO io, Object... args) { - super(holder, GTValues.UHV, io, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, CONFIG_SIZE, args); + public MEHatchPartMachine(BlockEntityCreationInfo info, IO io) { + super(info, GTValues.UHV, io, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, CONFIG_SIZE); this.nodeHolder = createNodeHolder(); this.actionSource = IActionSource.ofMachine(nodeHolder.getMainNode()::getNode); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index f2b8ce52b29..c2a08654ab1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -39,8 +39,8 @@ public class MEInputBusPartMachine extends MEBusPartMachine protected ExportOnlyAEItemList aeItemHandler; - public MEInputBusPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, IO.IN, args); + public MEInputBusPartMachine(BlockEntityCreationInfo info) { + super(info, IO.IN); } ///////////////////////////////// @@ -53,7 +53,7 @@ public void onMachineRemoved() { } @Override - protected NotifiableItemStackHandler createInventory(Object... args) { + protected NotifiableItemStackHandler createInventory() { this.aeItemHandler = new ExportOnlyAEItemList(this, CONFIG_SIZE); return this.aeItemHandler; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java index 2f2b56ab523..747b6e45d3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -38,8 +38,8 @@ public class MEInputHatchPartMachine extends MEHatchPartMachine protected ExportOnlyAEFluidList aeFluidHandler; - public MEInputHatchPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, IO.IN, args); + public MEInputHatchPartMachine(BlockEntityCreationInfo info) { + super(info, IO.IN); } ///////////////////////////////// @@ -52,7 +52,7 @@ public void onMachineRemoved() { } @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { + protected NotifiableFluidTank createTank(int initialCapacity, int slots) { this.aeFluidHandler = new ExportOnlyAEFluidList(this, slots); return aeFluidHandler; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java index e14bcc73e44..81c764eb977 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -38,8 +38,8 @@ public class MEOutputBusPartMachine extends MEBusPartMachine implements IMachine @SaveField private KeyStorage internalBuffer; // Do not use KeyCounter, use our simple implementation - public MEOutputBusPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, IO.OUT, args); + public MEOutputBusPartMachine(BlockEntityCreationInfo info) { + super(info, IO.OUT); } ///////////////////////////////// @@ -47,7 +47,7 @@ public MEOutputBusPartMachine(IMachineBlockEntity holder, Object... args) { ///////////////////////////////// @Override - protected NotifiableItemStackHandler createInventory(Object... args) { + protected NotifiableItemStackHandler createInventory() { this.internalBuffer = new KeyStorage(); return new InaccessibleInfiniteHandler(this); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java index 080c73df86c..c19c95fa8e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; @@ -37,8 +37,8 @@ public class MEOutputHatchPartMachine extends MEHatchPartMachine implements IMac @SaveField private KeyStorage internalBuffer; // Do not use KeyCounter, use our simple implementation - public MEOutputHatchPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, IO.OUT, args); + public MEOutputHatchPartMachine(BlockEntityCreationInfo info) { + super(info, IO.OUT); } ///////////////////////////////// @@ -46,17 +46,11 @@ public MEOutputHatchPartMachine(IMachineBlockEntity holder, Object... args) { ///////////////////////////////// @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { + protected NotifiableFluidTank createTank(int initialCapacity, int slots) { this.internalBuffer = new KeyStorage(); return new InaccessibleInfiniteTank(this); } - @Override - public void onLoad() { - super.onLoad(); - if (isRemote()) return; - } - @Override public void onMachineRemoved() { var grid = getMainNode().getGrid(); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 85c7fa146df..e1993c648f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.ConfiguratorPanel; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; @@ -143,9 +143,9 @@ public void setItemDirect(int slotIndex, ItemStack stack) { @Nullable protected TickableSubscription updateSubs; - public MEPatternBufferPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, IO.IN, args); - patternInventory.setOnContentsChanged(() -> syncDataHolder.markClientSyncFieldDirty("patternInventory")); + public MEPatternBufferPartMachine(BlockEntityCreationInfo info) { + super(info, IO.IN); + patternInventory.setOnContentsChanged(() -> getSyncDataHolder().markClientSyncFieldDirty("patternInventory")); this.patternInventory.setFilter(stack -> stack.getItem() instanceof ProcessingPatternItem); for (int i = 0; i < this.internalInventory.length; i++) { this.internalInventory[i] = new InternalSlot(); @@ -223,12 +223,12 @@ protected void update() { } public void addProxy(MEPatternBufferProxyPartMachine proxy) { - proxies.add(proxy.getPos()); + proxies.add(proxy.getBlockPos()); proxyMachines.add(proxy); } public void removeProxy(MEPatternBufferProxyPartMachine proxy) { - proxies.remove(proxy.getPos()); + proxies.remove(proxy.getBlockPos()); proxyMachines.remove(proxy); } @@ -426,7 +426,8 @@ public void onMachineRemoved() { @Override public InteractionResult onDataStickShiftUse(Player player, ItemStack dataStick) { - dataStick.getOrCreateTag().putIntArray("pos", new int[] { getPos().getX(), getPos().getY(), getPos().getZ() }); + dataStick.getOrCreateTag().putIntArray("pos", + new int[] { getBlockPos().getX(), getBlockPos().getY(), getBlockPos().getZ() }); return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java index 21a48d95867..564f04a1dad 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.integration.ae2.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; @@ -48,8 +48,8 @@ public class MEPatternBufferProxyPartMachine extends TieredIOPartMachine private @Nullable MEPatternBufferPartMachine buffer = null; private boolean bufferResolved = false; - public MEPatternBufferProxyPartMachine(IMachineBlockEntity holder) { - super(holder, GTValues.LuV, IO.IN); + public MEPatternBufferProxyPartMachine(BlockEntityCreationInfo info) { + super(info, GTValues.LuV, IO.IN); proxySlotRecipeHandler = new ProxySlotRecipeHandler(this, MEPatternBufferPartMachine.MAX_PATTERN_COUNT); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index 1ff345bcfa6..2d79e13525e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.fancy.ConfiguratorPanel; import com.gregtechceu.gtceu.api.gui.fancy.TabsWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.fancyconfigurator.AutoStockingFancyConfigurator; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; @@ -66,8 +66,8 @@ public class MEStockingBusPartMachine extends MEInputBusPartMachine implements I @Setter private Predicate autoPullTest; - public MEStockingBusPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public MEStockingBusPartMachine(BlockEntityCreationInfo info) { + super(info); this.autoPullTest = $ -> false; } @@ -88,7 +88,7 @@ public void removedFromController(IMultiController controller) { } @Override - protected NotifiableItemStackHandler createInventory(Object... args) { + protected NotifiableItemStackHandler createInventory() { this.aeItemHandler = new ExportOnlyAEStockingItemList(this, CONFIG_SIZE); return this.aeItemHandler; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java index 56d62269d2a..510d1bcb14b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.fancy.ConfiguratorPanel; import com.gregtechceu.gtceu.api.gui.fancy.TabsWidget; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.fancyconfigurator.AutoStockingFancyConfigurator; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; @@ -70,8 +70,8 @@ public class MEStockingHatchPartMachine extends MEInputHatchPartMachine implemen @Setter private Predicate autoPullTest; - public MEStockingHatchPartMachine(IMachineBlockEntity holder, Object... args) { - super(holder, args); + public MEStockingHatchPartMachine(BlockEntityCreationInfo info) { + super(info); this.autoPullTest = $ -> false; } @@ -92,7 +92,7 @@ public void removedFromController(IMultiController controller) { } @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots, Object... args) { + protected NotifiableFluidTank createTank(int initialCapacity, int slots) { this.aeFluidHandler = new ExportOnlyAEStockingFluidList(this, CONFIG_SIZE); return this.aeFluidHandler; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java index 3c1f6bf2ed5..dba156b9d10 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java @@ -47,7 +47,7 @@ protected SerializableManagedGridNode createManagedNode() { } protected void createMainNode() { - this.mainNode.create(machine.getLevel(), machine.getPos()); + this.mainNode.create(machine.getLevel(), machine.getBlockPos()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java index 4cbb22dc63f..7d643bbf81d 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java @@ -23,7 +23,7 @@ public GridNodeHostTrait(MetaMachine machine) { } public void init() { - this.proxy.create(machine.getLevel(), machine.getPos()); + this.proxy.create(machine.getLevel(), machine.getBlockPos()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CoverHolderPeripheral.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CoverHolderPeripheral.java index 0fa39c4c28e..dfa13b075b1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CoverHolderPeripheral.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CoverHolderPeripheral.java @@ -39,7 +39,7 @@ public static MethodResult parsePlaceholders(ICoverable coverable, String face, if (coverable.getCoverAtSide(direction) instanceof ComputerMonitorCover cover) { return MethodResult.of(true, PlaceholderHandler.processPlaceholders(text, new PlaceholderContext( coverable.getLevel(), - coverable.getPos(), + coverable.getBlockPos(), direction, cover.itemStackHandler, cover, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/GTJadePlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/GTJadePlugin.java index 9228bc795a6..bfe68586b62 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/GTJadePlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/GTJadePlugin.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.jade; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.blockentity.FluidPipeBlockEntity; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.integration.jade.provider.*; @@ -50,8 +50,8 @@ public void register(IWailaCommonRegistration registration) { registration.registerBlockDataProvider(new MEPatternBufferProxyProvider(), BlockEntity.class); } - registration.registerItemStorage(GTItemStorageProvider.INSTANCE, MetaMachineBlockEntity.class); - registration.registerFluidStorage(GTFluidStorageProvider.INSTANCE, MetaMachineBlockEntity.class); + registration.registerItemStorage(GTItemStorageProvider.INSTANCE, MetaMachine.class); + registration.registerFluidStorage(GTFluidStorageProvider.INSTANCE, MetaMachine.class); registration.registerFluidStorage(FluidPipeStorageProvider.INSTANCE, FluidPipeBlockEntity.class); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/DataBankBlockProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/DataBankBlockProvider.java index 3e57198f181..6617359f4c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/DataBankBlockProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/DataBankBlockProvider.java @@ -2,8 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.DataBankMachine; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; @@ -27,30 +25,24 @@ public ResourceLocation getUid() { @Override public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof DataBankMachine) { - long energyUsage = blockAccessor.getServerData().getLong("energyUsage"); - String energyFormatted = FormattingUtil.formatNumbers(energyUsage); - // wrap in text component to keep it from being formatted - Component voltageName = Component.literal(GTValues.VNF[GTUtil.getTierByVoltage(energyUsage)]); - Component text = Component.translatable( - "gtceu.multiblock.energy_consumption", - energyFormatted, - voltageName); - - iTooltip.add(text); - } + if (blockAccessor.getBlockEntity() instanceof DataBankMachine) { + long energyUsage = blockAccessor.getServerData().getLong("energyUsage"); + String energyFormatted = FormattingUtil.formatNumbers(energyUsage); + // wrap in text component to keep it from being formatted + Component voltageName = Component.literal(GTValues.VNF[GTUtil.getTierByVoltage(energyUsage)]); + Component text = Component.translatable( + "gtceu.multiblock.energy_consumption", + energyFormatted, + voltageName); + + iTooltip.add(text); } } @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof DataBankMachine dataBank) { - compoundTag.putLong("energyUsage", dataBank.getEnergyUsage()); - } + if (blockAccessor.getBlockEntity() instanceof DataBankMachine dataBank) { + compoundTag.putLong("energyUsage", dataBank.getEnergyUsage()); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/EnergyConverterModeProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/EnergyConverterModeProvider.java index 4eccc045b03..16998d96460 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/EnergyConverterModeProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/EnergyConverterModeProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.common.machine.electric.ConverterMachine; import net.minecraft.nbt.CompoundTag; @@ -30,8 +29,7 @@ public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPlugi @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof MetaMachineBlockEntity blockEntity && - blockEntity.getMetaMachine() instanceof ConverterMachine converter) { + if (blockAccessor.getBlockEntity() instanceof ConverterMachine converter) { compoundTag.putBoolean("converterMode", converter.isFeToEu()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTFluidStorageProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTFluidStorageProvider.java index 69b085bb8a5..c586e9062c4 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTFluidStorageProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTFluidStorageProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.machine.storage.CreativeTankMachine; import com.gregtechceu.gtceu.common.machine.storage.QuantumTankMachine; @@ -38,7 +37,7 @@ * Currently: Quantum Tanks, Pattern Buffer Proxies * Defaults to Jade's normal FluidView provider */ -public enum GTFluidStorageProvider implements IServerExtensionProvider, +public enum GTFluidStorageProvider implements IServerExtensionProvider, IClientExtensionProvider { INSTANCE; @@ -55,8 +54,7 @@ public List> getClientGroups(Accessor accessor, Li @Override public @Nullable List> getGroups(ServerPlayer serverPlayer, ServerLevel serverLevel, - MetaMachineBlockEntity mmbe, boolean b) { - MetaMachine machine = mmbe.getMetaMachine(); + MetaMachine machine, boolean b) { if (machine instanceof QuantumTankMachine qtm) { FluidStack stored = qtm.getStored(); if (stored.isEmpty() && qtm instanceof CreativeTankMachine) return Collections.emptyList(); @@ -77,10 +75,10 @@ public List> getClientGroups(Accessor accessor, Li } else if (GTCEu.Mods.isAE2Loaded() && machine instanceof MEPatternBufferProxyPartMachine proxy) { var buffer = proxy.getBuffer(); if (buffer == null) return Collections.emptyList(); - return FluidStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, buffer.holder, b); + return FluidStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, proxy, b); } - return FluidStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, mmbe, b); + return FluidStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, machine, b); } // FluidView#readDefault can't handle amount > INT_MAX diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTItemStorageProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTItemStorageProvider.java index 6fbb859903f..32c9a275697 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTItemStorageProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/GTItemStorageProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.machine.storage.CreativeChestMachine; import com.gregtechceu.gtceu.common.machine.storage.QuantumChestMachine; @@ -31,7 +30,7 @@ * Currently: Quantum Chests, Pattern Buffer Proxies * Defaults to Jade's normal ItemStack provider */ -public enum GTItemStorageProvider implements IServerExtensionProvider, +public enum GTItemStorageProvider implements IServerExtensionProvider, IClientExtensionProvider { INSTANCE; @@ -48,8 +47,7 @@ public List> getClientGroups(Accessor accessor, Lis @Override public @Nullable List> getGroups(ServerPlayer serverPlayer, ServerLevel serverLevel, - MetaMachineBlockEntity mmbe, boolean b) { - MetaMachine machine = mmbe.getMetaMachine(); + MetaMachine machine, boolean b) { if (machine instanceof QuantumChestMachine qcm) { ItemStack stored = qcm.getStored(); long amount = qcm.getStoredAmount(); @@ -64,9 +62,9 @@ public List> getClientGroups(Accessor accessor, Lis } else if (machine instanceof MEPatternBufferProxyPartMachine proxy) { var buffer = proxy.getBuffer(); if (buffer == null) return Collections.emptyList(); - return ItemStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, buffer.holder, b); + return ItemStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, machine, b); } - return ItemStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, mmbe, b); + return ItemStorageProvider.INSTANCE.getGroups(serverPlayer, serverLevel, machine, b); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java index a8c72156d5e..d0d02160ae4 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import net.minecraft.core.BlockPos; @@ -25,8 +24,7 @@ public HazardCleanerBlockProvider() { @Override protected @Nullable IEnvironmentalHazardCleaner getCapability(Level level, BlockPos pos, @Nullable Direction side) { - return level.getBlockEntity(pos) instanceof MetaMachineBlockEntity mte && - mte.getMetaMachine() instanceof IEnvironmentalHazardCleaner cleaner ? cleaner : null; + return level.getBlockEntity(pos) instanceof IEnvironmentalHazardCleaner cleaner ? cleaner : null; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/LDPEndpointProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/LDPEndpointProvider.java index 9ac7dfc3025..467ceeb10d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/LDPEndpointProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/LDPEndpointProvider.java @@ -1,8 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.machine.storage.LongDistanceEndpointMachine; import com.gregtechceu.gtceu.utils.FormattingUtil; @@ -21,32 +19,26 @@ public class LDPEndpointProvider implements IBlockComponentProvider, IServerData @Override public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof LongDistanceEndpointMachine) { - boolean isFormed = blockAccessor.getServerData().getBoolean("isFormed"); - String ioType = blockAccessor.getServerData().getString("ioType"); - String outputDirection = blockAccessor.getServerData().getString("outputDirection"); - - iTooltip.add(Component.translatable( - isFormed ? "gtceu.top.ldp_endpoint.is_formed" : "gtceu.top.ldp_endpoint.not_formed")); - iTooltip.add(Component.translatable("gtceu.top.ldp_endpoint.io_type", Component.translatable(ioType) - .withStyle(ioType.contains("import") ? ChatFormatting.GREEN : ChatFormatting.RED))); - iTooltip.add(Component.translatable("gtceu.top.ldp_endpoint.output_direction", - FormattingUtil.toEnglishName((outputDirection)))); - } + if (blockAccessor.getBlockEntity() instanceof LongDistanceEndpointMachine machine) { + boolean isFormed = blockAccessor.getServerData().getBoolean("isFormed"); + String ioType = blockAccessor.getServerData().getString("ioType"); + String outputDirection = blockAccessor.getServerData().getString("outputDirection"); + + iTooltip.add(Component.translatable( + isFormed ? "gtceu.top.ldp_endpoint.is_formed" : "gtceu.top.ldp_endpoint.not_formed")); + iTooltip.add(Component.translatable("gtceu.top.ldp_endpoint.io_type", Component.translatable(ioType) + .withStyle(ioType.contains("import") ? ChatFormatting.GREEN : ChatFormatting.RED))); + iTooltip.add(Component.translatable("gtceu.top.ldp_endpoint.output_direction", + FormattingUtil.toEnglishName((outputDirection)))); } } @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof LongDistanceEndpointMachine ldpEndpoint) { - compoundTag.putBoolean("isFormed", ldpEndpoint.getLink() == null ? false : true); - compoundTag.putString("ioType", ldpEndpoint.getIoType().getTooltip()); - compoundTag.putString("outputDirection", ldpEndpoint.getOutputFacing().getName()); - } + if (blockAccessor.getBlockEntity() instanceof LongDistanceEndpointMachine ldpEndpoint) { + compoundTag.putBoolean("isFormed", ldpEndpoint.getLink() == null ? false : true); + compoundTag.putString("ioType", ldpEndpoint.getIoType().getTooltip()); + compoundTag.putString("outputDirection", ldpEndpoint.getOutputFacing().getName()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProvider.java index 762e9d67f65..577a95880d4 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.integration.ae2.machine.MEPatternBufferPartMachine; import com.gregtechceu.gtceu.integration.jade.GTElementHelper; @@ -28,30 +27,26 @@ public class MEPatternBufferProvider implements IBlockComponentProvider, IServer @Override public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof MEPatternBufferPartMachine) { - CompoundTag serverData = blockAccessor.getServerData(); - if (!serverData.getBoolean("formed")) return; + if (blockAccessor.getBlockEntity() instanceof MEPatternBufferPartMachine) { + CompoundTag serverData = blockAccessor.getServerData(); + if (!serverData.getBoolean("formed")) return; - iTooltip.add(Component.translatable("gtceu.top.proxies_bound", serverData.getInt("proxies")) - .withStyle(TooltipHelper.RAINBOW_HSL_SLOW)); - readBufferTag(iTooltip, serverData); - } + iTooltip.add(Component.translatable("gtceu.top.proxies_bound", serverData.getInt("proxies")) + .withStyle(TooltipHelper.RAINBOW_HSL_SLOW)); + readBufferTag(iTooltip, serverData); } } @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof MEPatternBufferPartMachine buffer) { - if (!buffer.isFormed()) { - compoundTag.putBoolean("formed", false); - return; - } - compoundTag.putBoolean("formed", true); - compoundTag.putInt("proxies", buffer.getProxies().size()); - writeBufferTag(compoundTag, buffer); + if (blockAccessor.getBlockEntity() instanceof MEPatternBufferPartMachine buffer) { + if (!buffer.isFormed()) { + compoundTag.putBoolean("formed", false); + return; } + compoundTag.putBoolean("formed", true); + compoundTag.putInt("proxies", buffer.getProxies().size()); + writeBufferTag(compoundTag, buffer); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProxyProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProxyProvider.java index 562b3af3d11..2599381a132 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProxyProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MEPatternBufferProxyProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.integration.ae2.machine.MEPatternBufferProxyPartMachine; @@ -20,44 +19,40 @@ public class MEPatternBufferProxyProvider implements IBlockComponentProvider, IS @Override public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof MEPatternBufferProxyPartMachine) { - CompoundTag serverData = blockAccessor.getServerData(); - if (!serverData.getBoolean("formed")) return; - if (!serverData.getBoolean("bound")) { - iTooltip.add(Component.translatable("gtceu.top.buffer_not_bound").withStyle(ChatFormatting.RED)); - return; - } + if (blockAccessor.getBlockEntity() instanceof MEPatternBufferProxyPartMachine) { + CompoundTag serverData = blockAccessor.getServerData(); + if (!serverData.getBoolean("formed")) return; + if (!serverData.getBoolean("bound")) { + iTooltip.add(Component.translatable("gtceu.top.buffer_not_bound").withStyle(ChatFormatting.RED)); + return; + } - int[] pos = serverData.getIntArray("pos"); - iTooltip.add(Component.translatable("gtceu.top.buffer_bound_pos", pos[0], pos[1], pos[2]) - .withStyle(TooltipHelper.RAINBOW_HSL_SLOW)); + int[] pos = serverData.getIntArray("pos"); + iTooltip.add(Component.translatable("gtceu.top.buffer_bound_pos", pos[0], pos[1], pos[2]) + .withStyle(TooltipHelper.RAINBOW_HSL_SLOW)); - MEPatternBufferProvider.readBufferTag(iTooltip, serverData); - } + MEPatternBufferProvider.readBufferTag(iTooltip, serverData); } } @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof MEPatternBufferProxyPartMachine proxy) { - if (!proxy.isFormed()) { - compoundTag.putBoolean("formed", false); - return; - } - compoundTag.putBoolean("formed", true); - var buffer = proxy.getBuffer(); - if (buffer == null) { - compoundTag.putBoolean("bound", false); - return; - } - compoundTag.putBoolean("bound", true); - - var pos = buffer.getPos(); - compoundTag.putIntArray("pos", new int[] { pos.getX(), pos.getY(), pos.getZ() }); - MEPatternBufferProvider.writeBufferTag(compoundTag, buffer); + if (blockAccessor.getBlockEntity() instanceof MEPatternBufferProxyPartMachine proxy) { + if (!proxy.isFormed()) { + compoundTag.putBoolean("formed", false); + return; } + compoundTag.putBoolean("formed", true); + var buffer = proxy.getBuffer(); + if (buffer == null) { + compoundTag.putBoolean("bound", false); + return; + } + compoundTag.putBoolean("bound", true); + + var pos = buffer.getBlockPos(); + compoundTag.putIntArray("pos", new int[] { pos.getX(), pos.getY(), pos.getZ() }); + MEPatternBufferProvider.writeBufferTag(compoundTag, buffer); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineModeProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineModeProvider.java index 7a8fd66182b..44c43ba3274 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineModeProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineModeProvider.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; @@ -53,11 +53,11 @@ public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPlugi @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof MetaMachineBlockEntity blockEntity) { + if (blockAccessor.getBlockEntity() instanceof MetaMachine blockEntity) { @Nullable - GTRecipeType[] recipeTypes = blockEntity.getMetaMachine().getDefinition().getRecipeTypes(); - if (recipeTypes != null && recipeTypes.length > 1) { - if (blockEntity.getMetaMachine() instanceof IRecipeLogicMachine recipeLogicMachine) { + GTRecipeType[] recipeTypes = blockEntity.getDefinition().getRecipeTypes(); + if (recipeTypes.length > 1) { + if (blockEntity instanceof IRecipeLogicMachine recipeLogicMachine) { ListTag recipeTypesTagList = new ListTag(); GTRecipeType currentRecipeType = recipeLogicMachine.getRecipeType(); int currentRecipeTypeIndex = -1; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MultiblockStructureProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MultiblockStructureProvider.java index cb4c2d5cf31..ddc0602122f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MultiblockStructureProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MultiblockStructureProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import net.minecraft.ChatFormatting; @@ -31,10 +30,8 @@ public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPlugi @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof MetaMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof IMultiController controller) { - compoundTag.putBoolean("hasError", !controller.isFormed()); - } + if (blockAccessor.getBlockEntity() instanceof IMultiController controller) { + compoundTag.putBoolean("hasError", !controller.isFormed()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java index c5c25a645e2..601778931fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.IParallelHatch; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; @@ -63,22 +62,20 @@ public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPlugi @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof MetaMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof IParallelHatch parallelHatch) { - compoundTag.putInt("parallel", parallelHatch.getCurrentParallel()); - } else if (blockEntity.getMetaMachine() instanceof IMultiController controller) { - if (controller instanceof IRecipeLogicMachine rlm && - rlm.getRecipeLogic().isActive() && - rlm.getRecipeLogic().getLastRecipe() != null) { - compoundTag.putInt("parallel", rlm.getRecipeLogic().getLastRecipe().parallels); - compoundTag.putInt("batch", rlm.getRecipeLogic().getLastRecipe().batchParallels); - compoundTag.putInt("subtickParallel", rlm.getRecipeLogic().getLastRecipe().subtickParallels); - compoundTag.putBoolean("exact", true); - } else { - controller.getParallelHatch() - .ifPresent(parallelHatch -> compoundTag.putInt("parallel", - parallelHatch.getCurrentParallel())); - } + if (blockAccessor.getBlockEntity() instanceof IParallelHatch parallelHatch) { + compoundTag.putInt("parallel", parallelHatch.getCurrentParallel()); + } else if (blockAccessor.getBlockEntity() instanceof IMultiController controller) { + if (controller instanceof IRecipeLogicMachine rlm && + rlm.getRecipeLogic().isActive() && + rlm.getRecipeLogic().getLastRecipe() != null) { + compoundTag.putInt("parallel", rlm.getRecipeLogic().getLastRecipe().parallels); + compoundTag.putInt("batch", rlm.getRecipeLogic().getLastRecipe().batchParallels); + compoundTag.putInt("subtickParallel", rlm.getRecipeLogic().getLastRecipe().subtickParallels); + compoundTag.putBoolean("exact", true); + } else { + controller.getParallelHatch() + .ifPresent(parallelHatch -> compoundTag.putInt("parallel", + parallelHatch.getCurrentParallel())); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/PrimitivePumpBlockProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/PrimitivePumpBlockProvider.java index 7d5fa38c0d9..f04a30d66b1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/PrimitivePumpBlockProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/PrimitivePumpBlockProvider.java @@ -1,8 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitivePumpMachine; import com.gregtechceu.gtceu.utils.FormattingUtil; @@ -20,23 +18,17 @@ public class PrimitivePumpBlockProvider implements IBlockComponentProvider, ISer @Override public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof PrimitivePumpMachine pump) { - long water = blockAccessor.getServerData().getLong("waterProduced"); - iTooltip.add(Component.translatable("gtceu.top.primitive_pump_production", - FormattingUtil.formatNumbers(water))); - } + if (blockAccessor.getBlockEntity() instanceof PrimitivePumpMachine pump) { + long water = blockAccessor.getServerData().getLong("waterProduced"); + iTooltip.add(Component.translatable("gtceu.top.primitive_pump_production", + FormattingUtil.formatNumbers(water))); } } @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof PrimitivePumpMachine pump) { - compoundTag.putLong("waterProduced", pump.getFluidProduction()); - } + if (blockAccessor.getBlockEntity() instanceof PrimitivePumpMachine pump) { + compoundTag.putLong("waterProduced", pump.getFluidProduction()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java index 31f2324e24b..0dd1183ea13 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.machine.SimpleGeneratorMachine; import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; @@ -92,15 +91,12 @@ protected void addTooltip(CompoundTag capData, ITooltip tooltip, Player player, boolean isSteam = false; if (EUt > 0) { - if (blockEntity instanceof MetaMachineBlockEntity mbe) { - var machine = mbe.getMetaMachine(); - if (machine instanceof SimpleSteamMachine ssm) { - EUt = (long) Math.ceil(EUt * ssm.getConversionRate()); - isSteam = true; - } else if (machine instanceof SteamParallelMultiblockMachine smb) { - EUt = (long) Math.ceil(EUt * smb.getConversionRate()); - isSteam = true; - } + if (blockEntity instanceof SimpleSteamMachine ssm) { + EUt = (long) Math.ceil(EUt * ssm.getConversionRate()); + isSteam = true; + } else if (blockEntity instanceof SteamParallelMultiblockMachine smb) { + EUt = (long) Math.ceil(EUt * smb.getConversionRate()); + isSteam = true; } MutableComponent text; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/TransformerBlockProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/TransformerBlockProvider.java index 188aaec3e49..c9f927282e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/TransformerBlockProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/TransformerBlockProvider.java @@ -2,8 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.machine.electric.TransformerMachine; import net.minecraft.core.Direction; @@ -26,49 +24,43 @@ public ResourceLocation getUid() { @Override public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof TransformerMachine transformer) { - compoundTag.putInt("side", transformer.getFrontFacing().get3DDataValue()); - compoundTag.putBoolean("transformUp", transformer.isTransformUp()); - compoundTag.putInt("baseAmp", transformer.getBaseAmp()); - compoundTag.putInt("baseVoltage", transformer.getTier()); - } + if (blockAccessor.getBlockEntity() instanceof TransformerMachine transformer) { + compoundTag.putInt("side", transformer.getFrontFacing().get3DDataValue()); + compoundTag.putBoolean("transformUp", transformer.isTransformUp()); + compoundTag.putInt("baseAmp", transformer.getBaseAmp()); + compoundTag.putInt("baseVoltage", transformer.getTier()); } } @Override public void appendTooltip(ITooltip tooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) { - MetaMachine machine = blockEntity.getMetaMachine(); - if (machine instanceof TransformerMachine transformer) { - boolean transformUp = blockAccessor.getServerData().getBoolean("transformUp"); - int voltage = blockAccessor.getServerData().getInt("baseVoltage"); - int amp = blockAccessor.getServerData().getInt("baseAmp"); - if (transformUp) { - tooltip.add(Component.translatable("gtceu.top.transform_up", - (GTValues.VNF[voltage] + " §r(" + amp * 4 + "A) -> " + GTValues.VNF[voltage + 1] + " §r(" + - amp + - "A)"))); - } else { - tooltip.add(Component.translatable("gtceu.top.transform_down", - (GTValues.VNF[voltage + 1] + " §r(" + amp + "A) -> " + GTValues.VNF[voltage] + " §r(" + - amp * 4 + - "A)"))); - } + if (blockAccessor.getBlockEntity() instanceof TransformerMachine transformer) { + boolean transformUp = blockAccessor.getServerData().getBoolean("transformUp"); + int voltage = blockAccessor.getServerData().getInt("baseVoltage"); + int amp = blockAccessor.getServerData().getInt("baseAmp"); + if (transformUp) { + tooltip.add(Component.translatable("gtceu.top.transform_up", + (GTValues.VNF[voltage] + " §r(" + amp * 4 + "A) -> " + GTValues.VNF[voltage + 1] + " §r(" + + amp + + "A)"))); + } else { + tooltip.add(Component.translatable("gtceu.top.transform_down", + (GTValues.VNF[voltage + 1] + " §r(" + amp + "A) -> " + GTValues.VNF[voltage] + " §r(" + + amp * 4 + + "A)"))); + } - if (blockAccessor.getHitResult().getDirection() == - Direction.from3DDataValue(blockAccessor.getServerData().getInt("side"))) { - tooltip.add( - Component.translatable( - (transformUp ? "gtceu.top.transform_output" : "gtceu.top.transform_input"), - (GTValues.VNF[voltage + 1] + " §r(" + amp + "A)"))); - } else { - tooltip.add( - Component.translatable( - (transformUp ? "gtceu.top.transform_input" : "gtceu.top.transform_output"), - (GTValues.VNF[voltage] + " §r(" + amp * 4 + "A)"))); - } + if (blockAccessor.getHitResult().getDirection() == + Direction.from3DDataValue(blockAccessor.getServerData().getInt("side"))) { + tooltip.add( + Component.translatable( + (transformUp ? "gtceu.top.transform_output" : "gtceu.top.transform_input"), + (GTValues.VNF[voltage + 1] + " §r(" + amp + "A)"))); + } else { + tooltip.add( + Component.translatable( + (transformUp ? "gtceu.top.transform_input" : "gtceu.top.transform_output"), + (GTValues.VNF[voltage] + " §r(" + amp * 4 + "A)"))); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java index 9ae91e279bc..ec21eb0bab8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -98,7 +98,7 @@ public MachineDefinition get() { @FunctionalInterface public interface SteamCreationFunction { - MetaMachine create(IMachineBlockEntity holder, boolean isHighPressure); + MetaMachine create(BlockEntityCreationInfo info, boolean isHighPressure); } @FunctionalInterface diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java index 148aa32b922..18b6f520ee7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; @@ -130,13 +130,13 @@ public void generateLang(@NotNull LangEventJS lang) { @FunctionalInterface public interface TieredCreationFunction { - MetaMachine create(IMachineBlockEntity holder, int tier, Int2IntFunction tankScaling); + MetaMachine create(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScaling); } @FunctionalInterface public interface CreationFunction { - T create(IMachineBlockEntity holder); + T create(BlockEntityCreationInfo info); } @FunctionalInterface diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java index f2b4dc7aa65..65a4ab847e6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.registrate.BuilderBase; @@ -93,7 +93,7 @@ public void generateLang(LangEventJS lang) { @FunctionalInterface public interface TieredCreationFunction { - MultiblockControllerMachine create(IMachineBlockEntity holder, int tier); + MultiblockControllerMachine create(BlockEntityCreationInfo info, int tier); } @FunctionalInterface diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java index 113b517de61..14ff3c552a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -77,18 +76,16 @@ public MultiblockMachineDefinition register() { public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id) { return new MultiblockMachineBuilder(GTRegistration.REGISTRATE, id.getPath(), - WorkableElectricMultiblockMachine::new, MetaMachineBlock::new, MetaMachineItem::new, - MetaMachineBlockEntity::new); + WorkableElectricMultiblockMachine::new); } public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id, KJSTieredMachineBuilder.CreationFunction machine) { return new MultiblockMachineBuilder(GTRegistration.REGISTRATE, id.getPath(), - machine::create, MetaMachineBlock::new, MetaMachineItem::new, - MetaMachineBlockEntity::new); + machine::create); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/MachineConstructors.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/MachineConstructors.java index 3316944aa06..622cdb2bcdd 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/MachineConstructors.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/MachineConstructors.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.integration.kjs.helpers; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.common.machine.multiblock.electric.FusionReactorMachine; import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeCombustionEngineMachine; @@ -16,19 +16,19 @@ public final class MachineConstructors { // This one in particular stops a crash when trying to define a new LCE // The crash is caused by the static FluidStack members in LargeCombustionEngine.class - public static MultiblockControllerMachine createLargeCombustionEngine(IMachineBlockEntity holder, int tier) { - return new LargeCombustionEngineMachine(holder, tier); + public static MultiblockControllerMachine createLargeCombustionEngine(BlockEntityCreationInfo info, int tier) { + return new LargeCombustionEngineMachine(info, tier); } - public static MultiblockControllerMachine createLargeTurbine(IMachineBlockEntity holder, int tier) { - return new LargeTurbineMachine(holder, tier); + public static MultiblockControllerMachine createLargeTurbine(BlockEntityCreationInfo info, int tier) { + return new LargeTurbineMachine(info, tier); } - public static MultiblockControllerMachine createFusionReactor(IMachineBlockEntity holder, int tier) { - return new FusionReactorMachine(holder, tier); + public static MultiblockControllerMachine createFusionReactor(BlockEntityCreationInfo info, int tier) { + return new FusionReactorMachine(info, tier); } - public static MultiblockControllerMachine createSteamMultiblock(IMachineBlockEntity holder, int parallels) { - return new SteamParallelMultiblockMachine(holder, parallels); + public static MultiblockControllerMachine createSteamMultiblock(BlockEntityCreationInfo info, int parallels) { + return new SteamParallelMultiblockMachine(info, parallels); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/EnergyConverterModeProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/EnergyConverterModeProvider.java index 6d978358f5a..835f4b0617b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/EnergyConverterModeProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/EnergyConverterModeProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.top.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.common.machine.electric.ConverterMachine; import net.minecraft.network.chat.Component; @@ -25,8 +24,7 @@ public ResourceLocation getID() { @Override public void addProbeInfo(ProbeMode probeMode, IProbeInfo iProbeInfo, Player player, Level level, BlockState blockState, IProbeHitData iProbeHitData) { - if (level.getBlockEntity(iProbeHitData.getPos()) instanceof MetaMachineBlockEntity blockEntity && - blockEntity.getMetaMachine() instanceof ConverterMachine converter) { + if (level.getBlockEntity(iProbeHitData.getPos()) instanceof ConverterMachine converter) { if (converter.isFeToEu()) { iProbeInfo.text(Component.translatable("gtceu.top.convert_fe")); } else { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/HazardCleanerInfoProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/HazardCleanerInfoProvider.java index 6fb64aa38f1..c9ebdd4dfbd 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/HazardCleanerInfoProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/HazardCleanerInfoProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.top.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import net.minecraft.core.BlockPos; @@ -27,8 +26,7 @@ public ResourceLocation getID() { @Nullable @Override protected IEnvironmentalHazardCleaner getCapability(Level level, BlockPos pos, @Nullable Direction side) { - return level.getBlockEntity(pos) instanceof MetaMachineBlockEntity mte && - mte.getMetaMachine() instanceof IEnvironmentalHazardCleaner cleaner ? cleaner : null; + return level.getBlockEntity(pos) instanceof IEnvironmentalHazardCleaner mte ? mte : null; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MachineModeProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MachineModeProvider.java index 8050bda6b7e..9318b39946d 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MachineModeProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MachineModeProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.top.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; @@ -29,32 +28,30 @@ public ResourceLocation getID() { @Override public void addProbeInfo(ProbeMode probeMode, IProbeInfo iProbeInfo, Player player, Level level, BlockState blockState, IProbeHitData iProbeHitData) { - if (level.getBlockEntity(iProbeHitData.getPos()) instanceof MetaMachineBlockEntity blockEntity) { - GTRecipeType[] recipeTypes = blockEntity.getMetaMachine().getDefinition().getRecipeTypes(); + if (level.getBlockEntity(iProbeHitData.getPos()) instanceof IRecipeLogicMachine recipeLogicMachine) { + GTRecipeType[] recipeTypes = recipeLogicMachine.self().getDefinition().getRecipeTypes(); if (recipeTypes.length > 1) { - if (blockEntity.getMetaMachine() instanceof IRecipeLogicMachine recipeLogicMachine) { - GTRecipeType currentRecipeType = recipeLogicMachine.getRecipeType(); - if (player.isShiftKeyDown()) { - iProbeInfo.text(Component.translatable("gtceu.top.machine_mode")); - - for (GTRecipeType recipeType : recipeTypes) { - IProbeInfo horizontalPane = iProbeInfo.horizontal( - iProbeInfo.defaultLayoutStyle().alignment(ElementAlignment.ALIGN_CENTER)); - - if (recipeType == currentRecipeType) { - horizontalPane.text(ChatFormatting.BLUE + " > "); - horizontalPane.text(CompoundText.create().important("%s.%s".formatted( - recipeType.registryName.getNamespace(), recipeType.registryName.getPath()))); - } else { - horizontalPane.text(" "); - horizontalPane.text(CompoundText.create().label("%s.%s".formatted( - recipeType.registryName.getNamespace(), recipeType.registryName.getPath()))); - } + GTRecipeType currentRecipeType = recipeLogicMachine.getRecipeType(); + if (player.isShiftKeyDown()) { + iProbeInfo.text(Component.translatable("gtceu.top.machine_mode")); + + for (GTRecipeType recipeType : recipeTypes) { + IProbeInfo horizontalPane = iProbeInfo.horizontal( + iProbeInfo.defaultLayoutStyle().alignment(ElementAlignment.ALIGN_CENTER)); + + if (recipeType == currentRecipeType) { + horizontalPane.text(ChatFormatting.BLUE + " > "); + horizontalPane.text(CompoundText.create().important("%s.%s".formatted( + recipeType.registryName.getNamespace(), recipeType.registryName.getPath()))); + } else { + horizontalPane.text(" "); + horizontalPane.text(CompoundText.create().label("%s.%s".formatted( + recipeType.registryName.getNamespace(), recipeType.registryName.getPath()))); } - } else { - iProbeInfo.text(Component.translatable("gtceu.top.machine_mode") - .append(Component.translatable(currentRecipeType.registryName.toLanguageKey()))); } + } else { + iProbeInfo.text(Component.translatable("gtceu.top.machine_mode") + .append(Component.translatable(currentRecipeType.registryName.toLanguageKey()))); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MultiblockStructureProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MultiblockStructureProvider.java index 1b0a999953b..718898df5da 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MultiblockStructureProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/MultiblockStructureProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.top.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import net.minecraft.resources.ResourceLocation; @@ -25,13 +24,11 @@ public ResourceLocation getID() { @Override public void addProbeInfo(ProbeMode probeMode, IProbeInfo iProbeInfo, Player player, Level level, BlockState blockState, IProbeHitData iProbeHitData) { - if (level.getBlockEntity(iProbeHitData.getPos()) instanceof MetaMachineBlockEntity blockEntity) { - if (blockEntity.getMetaMachine() instanceof IMultiController controller) { - if (!controller.isFormed()) { - iProbeInfo.text(CompoundText.create().error("gtceu.top.invalid_structure")); - } else { - iProbeInfo.text(CompoundText.create().ok("gtceu.top.valid_structure")); - } + if (level.getBlockEntity(iProbeHitData.getPos()) instanceof IMultiController controller) { + if (!controller.isFormed()) { + iProbeInfo.text(CompoundText.create().error("gtceu.top.invalid_structure")); + } else { + iProbeInfo.text(CompoundText.create().ok("gtceu.top.valid_structure")); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/ParallelProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/ParallelProvider.java index a7eb257361d..6978390b61c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/ParallelProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/ParallelProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.top.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.IParallelHatch; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; @@ -31,59 +30,57 @@ public ResourceLocation getID() { public void addProbeInfo(ProbeMode probeMode, IProbeInfo iProbeInfo, Player player, Level level, BlockState blockState, IProbeHitData iProbeHitData) { BlockEntity blockEntity = level.getBlockEntity(iProbeHitData.getPos()); - if (blockEntity instanceof MetaMachineBlockEntity machineBlockEntity) { - int parallel = 0; - int batch = 0; - int subtickParallel = 0; - int totalRuns = 0; - boolean exact = false; - if (machineBlockEntity.getMetaMachine() instanceof IParallelHatch parallelHatch) { - parallel = parallelHatch.getCurrentParallel(); - } else if (machineBlockEntity.getMetaMachine() instanceof IMultiController controller) { - if (controller instanceof IRecipeLogicMachine rlm && - rlm.getRecipeLogic().isActive() && - rlm.getRecipeLogic().getLastRecipe() != null) { - parallel = rlm.getRecipeLogic().getLastRecipe().parallels; - batch = rlm.getRecipeLogic().getLastRecipe().batchParallels; - subtickParallel = rlm.getRecipeLogic().getLastRecipe().subtickParallels; - totalRuns = rlm.getRecipeLogic().getLastRecipe().getTotalRuns(); - exact = true; - } else { - parallel = controller.getParallelHatch() - .map(IParallelHatch::getCurrentParallel) - .orElse(0); - } + int parallel = 0; + int batch = 0; + int subtickParallel = 0; + int totalRuns = 0; + boolean exact = false; + if (blockEntity instanceof IParallelHatch parallelHatch) { + parallel = parallelHatch.getCurrentParallel(); + } else if (blockEntity instanceof IMultiController controller) { + if (controller instanceof IRecipeLogicMachine rlm && + rlm.getRecipeLogic().isActive() && + rlm.getRecipeLogic().getLastRecipe() != null) { + parallel = rlm.getRecipeLogic().getLastRecipe().parallels; + batch = rlm.getRecipeLogic().getLastRecipe().batchParallels; + subtickParallel = rlm.getRecipeLogic().getLastRecipe().subtickParallels; + totalRuns = rlm.getRecipeLogic().getLastRecipe().getTotalRuns(); + exact = true; + } else { + parallel = controller.getParallelHatch() + .map(IParallelHatch::getCurrentParallel) + .orElse(0); } + } + + if (!exact && parallel > 1) { + Component parallels = Component.literal(FormattingUtil.formatNumbers(parallel)) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.parallel"; + iProbeInfo.text(Component.translatable(key, parallels)); + } else if (totalRuns > 1) { + Component runs = Component.literal(FormattingUtil.formatNumbers(totalRuns)) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.total_runs"; + iProbeInfo.text(Component.translatable(key, runs)); - if (!exact && parallel > 1) { + if (parallel > 1) { Component parallels = Component.literal(FormattingUtil.formatNumbers(parallel)) .withStyle(ChatFormatting.DARK_PURPLE); - String key = "gtceu.multiblock.parallel"; - iProbeInfo.text(Component.translatable(key, parallels)); - } else if (totalRuns > 1) { - Component runs = Component.literal(FormattingUtil.formatNumbers(totalRuns)) + String keyParallel = "gtceu.multiblock.parallel.exact"; + iProbeInfo.text(Component.translatable(keyParallel, parallels)); + } + if (batch > 1) { + Component batches = Component.literal(FormattingUtil.formatNumbers(batch)) + .withStyle(ChatFormatting.DARK_PURPLE); + String keyBatch = "gtceu.multiblock.batch_enabled"; + iProbeInfo.text(Component.translatable(keyBatch, batches)); + } + if (subtickParallel > 1) { + Component subticks = Component.literal(FormattingUtil.formatNumbers(subtickParallel)) .withStyle(ChatFormatting.DARK_PURPLE); - String key = "gtceu.multiblock.total_runs"; - iProbeInfo.text(Component.translatable(key, runs)); - - if (parallel > 1) { - Component parallels = Component.literal(FormattingUtil.formatNumbers(parallel)) - .withStyle(ChatFormatting.DARK_PURPLE); - String keyParallel = "gtceu.multiblock.parallel.exact"; - iProbeInfo.text(Component.translatable(keyParallel, parallels)); - } - if (batch > 1) { - Component batches = Component.literal(FormattingUtil.formatNumbers(batch)) - .withStyle(ChatFormatting.DARK_PURPLE); - String keyBatch = "gtceu.multiblock.batch_enabled"; - iProbeInfo.text(Component.translatable(keyBatch, batches)); - } - if (subtickParallel > 1) { - Component subticks = Component.literal(FormattingUtil.formatNumbers(subtickParallel)) - .withStyle(ChatFormatting.DARK_PURPLE); - String keySubtick = "gtceu.multiblock.subtick_parallels"; - iProbeInfo.text(Component.translatable(keySubtick, subticks)); - } + String keySubtick = "gtceu.multiblock.subtick_parallels"; + iProbeInfo.text(Component.translatable(keySubtick, subticks)); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/RecipeLogicInfoProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/RecipeLogicInfoProvider.java index 7ff00ff3db1..1564129887b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/top/provider/RecipeLogicInfoProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/top/provider/RecipeLogicInfoProvider.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.steam.SimpleSteamMachine; import com.gregtechceu.gtceu.api.machine.steam.SteamMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -54,8 +54,7 @@ protected void addProbeInfo(RecipeLogic capability, IProbeInfo probeInfo, Player } Component text = null; - if (blockEntity instanceof IMachineBlockEntity machineBlockEntity) { - var machine = machineBlockEntity.getMetaMachine(); + if (blockEntity instanceof MetaMachine machine) { long MBt = 0; if (machine instanceof SimpleSteamMachine ssm) { MBt = (long) Math.ceil(EUt.getTotalEU() * ssm.getConversionRate()); diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java index c7d817a21ff..fb696360635 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java @@ -1,5 +1,7 @@ package com.gregtechceu.gtceu.syncsystem; +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.common.network.GTNetwork; import com.gregtechceu.gtceu.syncsystem.network.SPacketUpdateBESyncValue; @@ -30,6 +32,10 @@ public abstract class ManagedSyncBlockEntity extends BlockEntity implements ISyn @Setter private boolean isDirty; + public ManagedSyncBlockEntity(BlockEntityCreationInfo info) { + super(info.type(), info.pos(), info.state()); + } + public ManagedSyncBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } @@ -43,13 +49,12 @@ protected final void saveAdditional(CompoundTag tag) { } @Override - public void load(CompoundTag tag) { + public final void load(CompoundTag tag) { super.load(tag); - getSyncDataHolder().deserializeNBT(tag, false); + getSyncDataHolder().deserializeNBT(tag, + (getLevel() == null ? GTCEu.isClientThread() : getLevel().isClientSide)); } - // Called when a client loads this BlockEntity - @Override public CompoundTag getUpdateTag() { CompoundTag tag = new CompoundTag(); @@ -58,11 +63,6 @@ public CompoundTag getUpdateTag() { return tag; } - @Override - public void handleUpdateTag(CompoundTag tag) { - getSyncDataHolder().deserializeNBT(tag, true); - } - @Override public final void markAsChanged() { isDirty = true; diff --git a/src/main/java/com/gregtechceu/gtceu/utils/DummyMachineBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/utils/DummyMachineBlockEntity.java deleted file mode 100644 index cd062fc3931..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/utils/DummyMachineBlockEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.gregtechceu.gtceu.utils; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; - -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; - -import it.unimi.dsi.fastutil.ints.Int2IntFunction; -import lombok.Getter; -import lombok.Setter; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; - -/** - * Dummy machine BE used for wrapping {@link DummyRecipeLogicMachine}s - */ -public class DummyMachineBlockEntity implements IMachineBlockEntity { - - @Getter - public final DummyRecipeLogicMachine metaMachine; - @Getter - private final MachineDefinition definition; - @Getter - @Setter - private MachineRenderState renderState; - - // TODO: Fix the proxy parameter - public DummyMachineBlockEntity(int tier, GTRecipeType type, Int2IntFunction tankScalingFunction, - Collection handlers, - Object... args) { - this.definition = new MachineDefinition(GTCEu.id("dummy")); - this.definition.setRecipeTypes(new GTRecipeType[] { type }); - this.definition.setTier(tier); - - this.renderState = getDefinition().defaultRenderState(); - this.metaMachine = new DummyRecipeLogicMachine(this, tier, tankScalingFunction, handlers, args); - } - - @Override - public long getOffset() { - return 0; - } - - @Override - public CompoundTag getPersistentData() { - return new CompoundTag(); - } - - @Override - public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { - return LazyOptional.empty(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/utils/DummyRecipeCapabilityHolder.java b/src/main/java/com/gregtechceu/gtceu/utils/DummyRecipeCapabilityHolder.java new file mode 100644 index 00000000000..16d42e98e65 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/utils/DummyRecipeCapabilityHolder.java @@ -0,0 +1,29 @@ +package com.gregtechceu.gtceu.utils; + +import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; +import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; +import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; +import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; + +import lombok.Getter; + +import java.util.EnumMap; +import java.util.List; +import java.util.Map; + +public class DummyRecipeCapabilityHolder implements IRecipeCapabilityHolder { + + @Getter + protected final Map> capabilitiesProxy; + @Getter + protected final Map, List>>> capabilitiesFlat; + + public DummyRecipeCapabilityHolder(RecipeHandlerList... handlers) { + this.capabilitiesProxy = new EnumMap<>(IO.class); + this.capabilitiesFlat = new EnumMap<>(IO.class); + for (RecipeHandlerList handler : handlers) { + addHandlerList(handler); + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/utils/DummyRecipeLogicMachine.java b/src/main/java/com/gregtechceu/gtceu/utils/DummyRecipeLogicMachine.java deleted file mode 100644 index 93e1c6fce45..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/utils/DummyRecipeLogicMachine.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.gregtechceu.gtceu.utils; - -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.WorkableTieredMachine; -import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; - -import it.unimi.dsi.fastutil.ints.Int2IntFunction; - -import java.util.Collection; - -/** - * Dummy machine used for searching recipes outside of a machine. - */ -public class DummyRecipeLogicMachine extends WorkableTieredMachine implements IRecipeLogicMachine { - - public DummyRecipeLogicMachine(IMachineBlockEntity be, int tier, Int2IntFunction tankScalingFunction, - Collection handlers, - Object... args) { - super(be, tier, tankScalingFunction, args); - reinitializeHandlers(handlers); - } - - public void reinitializeHandlers(Collection handlers) { - this.capabilitiesProxy.clear(); - this.capabilitiesFlat.clear(); - for (RecipeHandlerList handlerList : handlers) { - this.addHandlerList(handlerList); - } - } -} diff --git a/src/test/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogicTest.java b/src/test/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogicTest.java index 6bcf3299606..553f4a91edf 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogicTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogicTest.java @@ -20,8 +20,6 @@ import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.gametest.PrefixGameTestTemplate; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; - @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) public class RecipeLogicTest { @@ -65,16 +63,13 @@ private record BusHolder(ItemBusPartMachine inputBus1, ItemBusPartMachine inputB * @return the busses, in the BusHolder record. */ private static RecipeLogicTest.BusHolder getBussesAndForm(GameTestHelper helper) { - WorkableMultiblockMachine controller = (WorkableMultiblockMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 2, 0))); + WorkableMultiblockMachine controller = (WorkableMultiblockMachine) helper.getBlockEntity(new BlockPos(1, 2, 0)); + assert controller != null; TestUtils.formMultiblock(controller); controller.setRecipeType(LCR_RECIPE_TYPE); - ItemBusPartMachine inputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 0))); - ItemBusPartMachine inputBus2 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 2, 0))); - ItemBusPartMachine outputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); + ItemBusPartMachine inputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 0)); + ItemBusPartMachine inputBus2 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 2, 0)); + ItemBusPartMachine outputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); return new RecipeLogicTest.BusHolder(inputBus1, inputBus2, outputBus1, controller); } diff --git a/src/test/java/com/gregtechceu/gtceu/api/recipe/InputSeparationTest.java b/src/test/java/com/gregtechceu/gtceu/api/recipe/InputSeparationTest.java index a9e10bb1b75..458a3362354 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/recipe/InputSeparationTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/recipe/InputSeparationTest.java @@ -18,8 +18,6 @@ import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.gametest.PrefixGameTestTemplate; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; - @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) public class InputSeparationTest { @@ -49,18 +47,14 @@ private record BusHolder(ItemBusPartMachine inputBus1, ItemBusPartMachine inputB * @return the busses, in the BusHolder record. */ private static BusHolder getBussesAndForm(GameTestHelper helper) { - WorkableMultiblockMachine controller = (WorkableMultiblockMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 2, 0))); + WorkableMultiblockMachine controller = (WorkableMultiblockMachine) helper.getBlockEntity(new BlockPos(1, 2, 0)); + assert controller != null; TestUtils.formMultiblock(controller); controller.setRecipeType(LCR_RECIPE_TYPE); - ItemBusPartMachine inputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 0))); - ItemBusPartMachine inputBus2 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 2, 0))); - ItemBusPartMachine outputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - FluidHatchPartMachine outputHatch1 = (FluidHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 2, 0))); + ItemBusPartMachine inputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 0)); + ItemBusPartMachine inputBus2 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 2, 0)); + ItemBusPartMachine outputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + FluidHatchPartMachine outputHatch1 = (FluidHatchPartMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); return new BusHolder(inputBus1, inputBus2, outputBus1, outputHatch1, controller); } diff --git a/src/test/java/com/gregtechceu/gtceu/api/recipe/MultipleEnergyHatchTest.java b/src/test/java/com/gregtechceu/gtceu/api/recipe/MultipleEnergyHatchTest.java index de4f0b46524..cf28284f382 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/recipe/MultipleEnergyHatchTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/recipe/MultipleEnergyHatchTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; @@ -24,7 +23,6 @@ import java.util.Optional; import static com.gregtechceu.gtceu.api.GTValues.*; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) @@ -82,21 +80,19 @@ private record BusHolder(ItemBusPartMachine inputBus, ItemBusPartMachine outputB * @return the busses, in the BusHolder record. */ private static BusHolder getBussesAndForm(GameTestHelper helper) { - WorkableElectricMultiblockMachine controller = (WorkableElectricMultiblockMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 2, 0))); + WorkableElectricMultiblockMachine controller = (WorkableElectricMultiblockMachine) helper + .getBlockEntity(new BlockPos(1, 2, 0)); + assert controller != null; TestUtils.formMultiblock(controller); controller.setRecipeType(LCR_RECIPE_TYPE); - ItemBusPartMachine inputBus = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 0))); - ItemBusPartMachine outputBus = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - EnergyHatchPartMachine energyHatch = (EnergyHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 3, 0))); + ItemBusPartMachine inputBus = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 0)); + ItemBusPartMachine outputBus = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + EnergyHatchPartMachine energyHatch = (EnergyHatchPartMachine) helper.getBlockEntity(new BlockPos(1, 3, 0)); // Some instances don't have a second energy hatch var hatch2BE = helper.getBlockEntity(new BlockPos(1, 3, 0)); - if (hatch2BE instanceof MetaMachineBlockEntity hatch2MMBE) { + if (hatch2BE instanceof EnergyHatchPartMachine hatch2MMBE) { return new BusHolder(inputBus, outputBus, controller, energyHatch, - Optional.of((EnergyHatchPartMachine) hatch2MMBE.getMetaMachine())); + Optional.of(hatch2MMBE)); } return new BusHolder(inputBus, outputBus, controller, energyHatch, Optional.empty()); diff --git a/src/test/java/com/gregtechceu/gtceu/api/recipe/OverclockLogicTest.java b/src/test/java/com/gregtechceu/gtceu/api/recipe/OverclockLogicTest.java index 432b88e9763..cc11effe3b6 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/recipe/OverclockLogicTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/recipe/OverclockLogicTest.java @@ -27,7 +27,6 @@ import static com.gregtechceu.gtceu.api.recipe.OverclockingLogic.*; import static com.gregtechceu.gtceu.common.data.GTRecipeModifiers.*; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.LARGE_CHEMICAL_RECIPES; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) @@ -93,16 +92,13 @@ private record BusHolder(ItemBusPartMachine inputBus1, ItemBusPartMachine inputB * @return the busses, in the BusHolder record. */ private static BusHolder getBussesAndForm(GameTestHelper helper) { - WorkableMultiblockMachine controller = (WorkableMultiblockMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 2, 0))); + WorkableMultiblockMachine controller = (WorkableMultiblockMachine) helper.getBlockEntity(new BlockPos(1, 2, 0)); + assert controller != null; TestUtils.formMultiblock(controller); controller.setRecipeType(LCR_RECIPE_TYPE); - ItemBusPartMachine inputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 0))); - ItemBusPartMachine inputBus2 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 2, 0))); - ItemBusPartMachine outputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); + ItemBusPartMachine inputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 0)); + ItemBusPartMachine inputBus2 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 2, 0)); + ItemBusPartMachine outputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); return new BusHolder(inputBus1, inputBus2, outputBus1, controller); } @@ -310,9 +306,9 @@ public static void overclockLogicEVRecipeHVMachineTest(GameTestHelper helper) { // Test for charge usage of a singleblock HV chemical reactor running an HV recipe @GameTest(template = "singleblock_charged_cr", batch = "OverclockLogic") public static void overclockLogicHVPowerTest(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableEnergyContainer energyContainer = (NotifiableEnergyContainer) machine .getCapabilitiesFlat(IO.IN, EURecipeCapability.CAP).get(0); @@ -342,9 +338,8 @@ public static void overclockLogicHVPowerTest(GameTestHelper helper) { // Test for charge usage of a singleblock HV chemical reactor running an MV recipe @GameTest(template = "singleblock_charged_cr", batch = "OverclockLogic") public static void overclockLogicMVPowerTest(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableEnergyContainer energyContainer = (NotifiableEnergyContainer) machine .getCapabilitiesFlat(IO.IN, EURecipeCapability.CAP).get(0); diff --git a/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderFluidIngredientTest.java b/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderFluidIngredientTest.java index b9ea29bc8ce..e0503efbca2 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderFluidIngredientTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderFluidIngredientTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; @@ -131,7 +130,7 @@ public static void prepare(ServerLevel level) { } private static MetaMachine getMetaMachine(BlockEntity entity) { - return ((MetaMachineBlockEntity) entity).getMetaMachine(); + return (MetaMachine) entity; } private record BusHolder(ItemBusPartMachine inputBus1, FluidHatchPartMachine inputHatch1, diff --git a/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderIngredientTest.java b/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderIngredientTest.java index c2264960355..e69eabbc030 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderIngredientTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntProviderIngredientTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.machine.MetaMachine; @@ -125,7 +124,7 @@ public static void prepare(ServerLevel level) { } private static MetaMachine getMetaMachine(BlockEntity entity) { - return ((MetaMachineBlockEntity) entity).getMetaMachine(); + return (MetaMachine) entity; } private record BusHolder(ItemBusPartMachine inputBus1, FluidHatchPartMachine inputHatch1, diff --git a/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/NBTPredicateTest.java b/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/NBTPredicateTest.java index 5356f73c001..967d4ad63bb 100644 --- a/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/NBTPredicateTest.java +++ b/src/test/java/com/gregtechceu/gtceu/api/recipe/ingredient/NBTPredicateTest.java @@ -24,7 +24,6 @@ import static com.gregtechceu.gtceu.api.recipe.ingredient.nbtpredicate.NBTPredicates.*; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.CHEMICAL_RECIPES; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) @@ -232,9 +231,8 @@ public static void NBTPredicateEmptyTest(GameTestHelper helper) { @GameTest(template = "singleblock_chem_reactor", batch = "NBTPredicateTest") public static void NBTPredicateMachineCRTestSucceeds(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine .getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).get(0); @@ -253,9 +251,8 @@ public static void NBTPredicateMachineCRTestSucceeds(GameTestHelper helper) { @GameTest(template = "singleblock_chem_reactor", batch = "NBTPredicateTest") public static void NBTPredicateMachineCRTestDoesntSucceed(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine .getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).get(0); @@ -274,9 +271,8 @@ public static void NBTPredicateMachineCRTestDoesntSucceed(GameTestHelper helper) @GameTest(template = "singleblock_chem_reactor", batch = "NBTPredicateTest") public static void NBTPredicateMachineCRTestChanced(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine .getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).get(0); @@ -302,9 +298,8 @@ public static void NBTPredicateMachineCRTestChanced(GameTestHelper helper) { @GameTest(template = "singleblock_chem_reactor", batch = "NBTPredicateTest") public static void NBTPredicateMachineCRTestRanged(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine .getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).get(0); @@ -330,9 +325,8 @@ public static void NBTPredicateMachineCRTestRanged(GameTestHelper helper) { @GameTest(template = "singleblock_chem_reactor", batch = "NBTPredicateTest") public static void NBTPredicateMachineCRTestChancedRanged(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + assert machine != null; machine.setRecipeType(CR_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine .getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).get(0); diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/AdvancedDetectorCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/AdvancedDetectorCoverTest.java index 7ba107e0120..cd8c41f40c4 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/AdvancedDetectorCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/AdvancedDetectorCoverTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.IWorkable; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.cover.detector.AdvancedFluidDetectorCover; import com.gregtechceu.gtceu.common.cover.detector.AdvancedItemDetectorCover; @@ -33,7 +32,7 @@ public class AdvancedDetectorCoverTest { @GameTest(template = "electrolyzer", batch = "coverTests") public static void testAdvancedActivityDetectorCoverWithActivity(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); TestUtils.placeCover(helper, machine, GTItems.COVER_ACTIVITY_DETECTOR_ADVANCED.asStack(), Direction.WEST); MutableInt expected = new MutableInt(); helper.runAtTickTime(40 - machine.getOffsetTimer() % 20, () -> { @@ -53,7 +52,7 @@ public static void testAdvancedActivityDetectorCoverWithActivity(GameTestHelper @GameTest(template = "electrolyzer", batch = "coverTests") public static void testAdvancedActivityDetectorCoverWithoutActivity(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); TestUtils.placeCover(helper, machine, GTItems.COVER_ACTIVITY_DETECTOR_ADVANCED.asStack(), Direction.WEST); helper.runAtTickTime(20 - machine.getOffsetTimer() % 20, () -> helper.pullLever(2, 2, 2)); helper.runAtTickTime(45 - machine.getOffsetTimer() % 20, () -> { @@ -65,7 +64,7 @@ public static void testAdvancedActivityDetectorCoverWithoutActivity(GameTestHelp @GameTest(template = "electrolyzer", batch = "coverTests") public static void testAdvancedFluidDetectorCover(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); AdvancedFluidDetectorCover cover = (AdvancedFluidDetectorCover) TestUtils.placeCover(helper, machine, GTItems.COVER_FLUID_DETECTOR_ADVANCED.asStack(), Direction.WEST); cover.setMaxValue(100000); @@ -82,7 +81,7 @@ public static void testAdvancedFluidDetectorCover(GameTestHelper helper) { @GameTest(template = "electrolyzer", batch = "coverTests") public static void testAdvancedItemDetectorCover(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); AdvancedItemDetectorCover cover = (AdvancedItemDetectorCover) TestUtils.placeCover(helper, machine, GTItems.COVER_ITEM_DETECTOR_ADVANCED.asStack(), Direction.WEST); cover.setLatched(true); @@ -95,7 +94,7 @@ public static void testAdvancedItemDetectorCover(GameTestHelper helper) { @GameTest(template = "electrolyzer", batch = "coverTests") public static void testAdvancedItemDetectorCoverBelowThreshold(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); AdvancedItemDetectorCover cover = (AdvancedItemDetectorCover) TestUtils.placeCover(helper, machine, GTItems.COVER_ITEM_DETECTOR_ADVANCED.asStack(), Direction.WEST); cover.setMinValue(1); @@ -109,7 +108,7 @@ public static void testAdvancedItemDetectorCoverBelowThreshold(GameTestHelper he @GameTest(template = "electrolyzer", batch = "coverTests") public static void testAdvancedItemDetectorCoverAboveThreshold(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); machine.getItemHandlerCap(null, false).setStackInSlot(0, new ItemStack(Items.DIRT, 5)); AdvancedItemDetectorCover cover = (AdvancedItemDetectorCover) TestUtils.placeCover(helper, machine, GTItems.COVER_ITEM_DETECTOR_ADVANCED.asStack(), Direction.WEST); diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/ConveyorCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/ConveyorCoverTest.java index fa47dc2bd48..47b9b683a1a 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/ConveyorCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/ConveyorCoverTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMachines; @@ -31,10 +30,8 @@ public static void setupCrates(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void conveyorTransfersItemsTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover ConveyorCover cover = (ConveyorCover) TestUtils.placeCover(helper, crate2, GTItems.CONVEYOR_MODULE_LV.asStack(), @@ -53,10 +50,8 @@ public static void conveyorTransfersItemsTest(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void conveyorTransfersItemsWrongDirectionTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover ConveyorCover cover = (ConveyorCover) TestUtils.placeCover(helper, crate2, GTItems.CONVEYOR_MODULE_LV.asStack(), @@ -77,10 +72,8 @@ public static void conveyorTransfersItemsWrongDirectionTest(GameTestHelper helpe @GameTest(template = "empty_5x5", batch = "coverTests") public static void conveyorPumpDoesntTransferItemsTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover PumpCover cover = (PumpCover) TestUtils.placeCover(helper, crate2, GTItems.ELECTRIC_PUMP_LV.asStack(), diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/DetectorCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/DetectorCoverTest.java index e4f5fd2d487..89d9c124851 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/DetectorCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/DetectorCoverTest.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.cover; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.gametest.util.TestUtils; @@ -20,7 +19,7 @@ public class DetectorCoverTest { @GameTest(template = "electrolyzer", batch = "coverTests") public static void testActivityDetectorCover(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); TestUtils.placeCover(helper, machine, GTItems.COVER_ACTIVITY_DETECTOR.asStack(), Direction.WEST); helper.runAtTickTime(40, () -> { TestUtils.assertLampOn(helper, new BlockPos(0, 2, 1)); @@ -31,7 +30,7 @@ public static void testActivityDetectorCover(GameTestHelper helper) { @GameTest(template = "electrolyzer", batch = "coverTests") public static void testFluidDetectorCover(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); TestUtils.placeCover(helper, machine, GTItems.COVER_FLUID_DETECTOR.asStack(), Direction.WEST); helper.runAtTickTime(40, () -> { TestUtils.assertLampOn(helper, new BlockPos(0, 2, 1)); @@ -42,7 +41,7 @@ public static void testFluidDetectorCover(GameTestHelper helper) { @GameTest(template = "electrolyzer", batch = "coverTests") public static void testItemDetectorCover(GameTestHelper helper) { helper.pullLever(new BlockPos(2, 2, 2)); - MetaMachine machine = ((IMachineBlockEntity) helper.getBlockEntity(new BlockPos(1, 2, 1))).getMetaMachine(); + MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1))); TestUtils.placeCover(helper, machine, GTItems.COVER_ITEM_DETECTOR.asStack(), Direction.WEST); helper.runAtTickTime(40, () -> { TestUtils.assertLampOff(helper, new BlockPos(0, 2, 1)); diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/ItemFilterCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/ItemFilterCoverTest.java index 48240b0b70f..61ea1458ec4 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/ItemFilterCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/ItemFilterCoverTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; import com.gregtechceu.gtceu.common.cover.data.FilterMode; @@ -41,10 +40,8 @@ public static void setupCrates(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void conveyorTransfersFilteredItemsTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 8)); crate1.getInventory().setStackInSlot(1, new ItemStack(Items.DIAMOND, 16)); // LV Cover @@ -68,10 +65,8 @@ public static void conveyorTransfersFilteredItemsTest(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void conveyorDoesntTransferFilteredItemsTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 16)); crate1.getInventory().setStackInSlot(1, new ItemStack(Items.DIAMOND, 16)); // LV Cover diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/PumpCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/PumpCoverTest.java index 12e573d4fcc..d803dafdf8e 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/PumpCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/PumpCoverTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMachines; @@ -34,10 +33,8 @@ public static void setupCrates(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void pumpTransfersFluidsTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getFluidHandlerCap(Direction.NORTH, false).setFluidInTank(0, new FluidStack(Fluids.WATER, 1000)); // LV Cover PumpCover cover = (PumpCover) TestUtils.placeCover(helper, crate2, GTItems.ELECTRIC_PUMP_LV.asStack(), @@ -56,10 +53,8 @@ public static void pumpTransfersFluidsTest(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void pumpTransfersFluidsWrongDirectionTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getFluidHandlerCap(Direction.NORTH, false).setFluidInTank(0, new FluidStack(Fluids.WATER, 1000)); // LV Cover PumpCover cover = (PumpCover) TestUtils.placeCover(helper, crate2, GTItems.ELECTRIC_PUMP_LV.asStack(), @@ -80,10 +75,8 @@ public static void pumpTransfersFluidsWrongDirectionTest(GameTestHelper helper) @GameTest(template = "empty_5x5", batch = "coverTests") public static void pumpDoesntTransferItemsTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover PumpCover cover = (PumpCover) TestUtils.placeCover(helper, crate2, GTItems.ELECTRIC_PUMP_LV.asStack(), diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/RobotArmTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/RobotArmTest.java index 275cb2e1801..55ae819ce60 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/RobotArmTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/RobotArmTest.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.cover; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.common.cover.data.TransferMode; import com.gregtechceu.gtceu.common.data.GTItems; @@ -18,8 +17,6 @@ import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.gametest.PrefixGameTestTemplate; -import static com.gregtechceu.gtceu.common.data.GTCovers.*; - @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) public class RobotArmTest { @@ -33,10 +30,8 @@ public static void setupCrates(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void robotArmKeepExactTest(GameTestHelper helper) { setupCrates(helper); - CrateMachine crate1 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - CrateMachine crate2 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate1 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + CrateMachine crate2 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.inventory.setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover RobotArmCover cover = (RobotArmCover) TestUtils.placeCover(helper, crate2, GTItems.ROBOT_ARM_LV.asStack(), @@ -58,10 +53,8 @@ public static void robotArmKeepExactTest(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void robotArmTransferExactTest(GameTestHelper helper) { setupCrates(helper); - CrateMachine crate1 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - CrateMachine crate2 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate1 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + CrateMachine crate2 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.inventory.setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover RobotArmCover cover = (RobotArmCover) TestUtils.placeCover(helper, crate2, GTItems.ROBOT_ARM_LV.asStack(), @@ -83,10 +76,8 @@ public static void robotArmTransferExactTest(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void robotArmTransferAnyTest(GameTestHelper helper) { setupCrates(helper); - CrateMachine crate1 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - CrateMachine crate2 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate1 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + CrateMachine crate2 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.inventory.setStackInSlot(0, new ItemStack(Items.FLINT, 16)); // LV Cover RobotArmCover cover = (RobotArmCover) TestUtils.placeCover(helper, crate2, GTItems.ROBOT_ARM_LV.asStack(), diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/ShutterCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/ShutterCoverTest.java index 13dbaaa770a..a47d11dde62 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/ShutterCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/ShutterCoverTest.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMachines; @@ -30,10 +29,8 @@ public static void setupCrates(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "coverTests") public static void shutterCoverBlocksTransferTest(GameTestHelper helper) { setupCrates(helper); - BufferMachine crate1 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - BufferMachine crate2 = (BufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + BufferMachine crate1 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + BufferMachine crate2 = (BufferMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); crate1.getInventory().setStackInSlot(0, new ItemStack(Items.FLINT, 16)); crate1.getInventory().setStackInSlot(1, new ItemStack(Items.DIAMOND, 16)); // LV Cover diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/SolarPanelTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/SolarPanelTest.java index 85296199fe1..c6745954560 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/SolarPanelTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/SolarPanelTest.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.cover; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.common.machine.electric.BatteryBufferMachine; import net.minecraft.core.BlockPos; @@ -16,9 +15,7 @@ public class SolarPanelTest { private static BatteryBufferMachine getBatteryBuffer(GameTestHelper helper) { - // noinspection DataFlowIssue - return (BatteryBufferMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); + return (BatteryBufferMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); } @GameTest(template = "solar", batch = "coverTests") diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java index 33f64bc7683..ac944a3a5a7 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java @@ -25,16 +25,13 @@ public class WirelessTransmitterCoverTest { @GameTest(template = "central_monitor", batch = "coverTests") public static void wirelessTransmitterCoverTest(GameTestHelper helper) { - CentralMonitorMachine machine = (CentralMonitorMachine) TestUtils - .getMetaMachine(helper.getBlockEntity(new BlockPos(1, 3, 2))); - DataAccessHatchMachine dataHatch = (DataAccessHatchMachine) TestUtils - .getMetaMachine(helper.getBlockEntity(new BlockPos(1, 2, 2))); - BatteryBufferMachine batteryBuffer = (BatteryBufferMachine) TestUtils - .getMetaMachine(helper.getBlockEntity(new BlockPos(2, 2, 3))); + CentralMonitorMachine machine = (CentralMonitorMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); + DataAccessHatchMachine dataHatch = (DataAccessHatchMachine) helper.getBlockEntity(new BlockPos(1, 2, 2)); + BatteryBufferMachine batteryBuffer = (BatteryBufferMachine) helper.getBlockEntity(new BlockPos(2, 2, 3)); WirelessTransmitterCover cover = (WirelessTransmitterCover) batteryBuffer.getCoverContainer() .getCoverAtSide(Direction.UP); MonitorGroup group = machine.getMonitorGroups().get(0); - group.setTarget(dataHatch.getPos()); + group.setTarget(dataHatch.getBlockPos()); Supplier module = () -> group.getItemStackHandler().getStackInSlot(0); ItemStack stack = dataHatch.getDataItems().getStackInSlot(3); // noinspection DataFlowIssue diff --git a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineTests.java b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineTests.java index 11a0b54e1e9..2727d79d1ff 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineTests.java +++ b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineTests.java @@ -22,7 +22,6 @@ import net.minecraftforge.gametest.PrefixGameTestTemplate; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.ASSEMBLY_LINE_RECIPES; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) @@ -56,28 +55,19 @@ private record BusHolder(ItemBusPartMachine inputBus1, ItemBusPartMachine inputB * @return the busses, in the BusHolder record. */ private static BusHolder getBussesAndForm(GameTestHelper helper) { - WorkableMultiblockMachine controller = (WorkableMultiblockMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 3, 0))); + WorkableMultiblockMachine controller = (WorkableMultiblockMachine) helper.getBlockEntity(new BlockPos(0, 3, 0)); + assert controller != null; TestUtils.formMultiblock(controller); controller.setRecipeType(ASSLINE_RECIPE_TYPE); - ItemBusPartMachine inputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 1))); - ItemBusPartMachine inputBus2 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); - ItemBusPartMachine inputBus3 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 1))); - ItemBusPartMachine inputBus4 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(3, 1, 1))); - ItemBusPartMachine outputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(4, 1, 1))); - FluidHatchPartMachine inputHatch1 = (FluidHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - FluidHatchPartMachine inputHatch2 = (FluidHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 0))); - FluidHatchPartMachine inputHatch3 = (FluidHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 0))); - FluidHatchPartMachine inputHatch4 = (FluidHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(3, 1, 0))); + ItemBusPartMachine inputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 1)); + ItemBusPartMachine inputBus2 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); + ItemBusPartMachine inputBus3 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 1)); + ItemBusPartMachine inputBus4 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(3, 1, 1)); + ItemBusPartMachine outputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(4, 1, 1)); + FluidHatchPartMachine inputHatch1 = (FluidHatchPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + FluidHatchPartMachine inputHatch2 = (FluidHatchPartMachine) helper.getBlockEntity(new BlockPos(1, 1, 0)); + FluidHatchPartMachine inputHatch3 = (FluidHatchPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 0)); + FluidHatchPartMachine inputHatch4 = (FluidHatchPartMachine) helper.getBlockEntity(new BlockPos(3, 1, 0)); return new BusHolder(inputBus1, inputBus2, inputBus3, inputBus4, inputHatch1, inputHatch2, inputHatch3, inputHatch4, outputBus1, controller); } diff --git a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachineTest.java b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachineTest.java index 125e389b19b..629c07d4b2a 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachineTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachineTest.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.machine.storage.CrateMachine; import com.gregtechceu.gtceu.gametest.util.TestUtils; @@ -29,11 +28,9 @@ public static void prepare(ServerLevel level) {} public static void ItemBusPartMachineAutoImportTest(GameTestHelper helper) { helper.setBlock(new BlockPos(0, 1, 0), GTMachines.BRONZE_CRATE.getBlock()); helper.setBlock(new BlockPos(0, 2, 0), GTMachines.ITEM_IMPORT_BUS[1].getBlock()); - CrateMachine crate = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - ItemBusPartMachine itemBus = (ItemBusPartMachine) ((MetaMachineBlockEntity) helper - .getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + ItemBusPartMachine itemBus = (ItemBusPartMachine) helper + .getBlockEntity(new BlockPos(0, 2, 0)); itemBus.setFrontFacing(Direction.DOWN); crate.inventory.setStackInSlot(0, new ItemStack(Blocks.STONE, 16)); helper.succeedWhen(() -> { @@ -48,11 +45,9 @@ public static void ItemBusPartMachineAutoImportTest(GameTestHelper helper) { public static void ItemBusPartMachineAutoImportFalseWhenOffTest(GameTestHelper helper) { helper.setBlock(new BlockPos(0, 1, 0), GTMachines.BRONZE_CRATE.getBlock()); helper.setBlock(new BlockPos(0, 2, 0), GTMachines.ITEM_IMPORT_BUS[1].getBlock()); - CrateMachine crate = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - ItemBusPartMachine itemBus = (ItemBusPartMachine) ((MetaMachineBlockEntity) helper - .getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + ItemBusPartMachine itemBus = (ItemBusPartMachine) helper + .getBlockEntity(new BlockPos(0, 2, 0)); itemBus.setFrontFacing(Direction.DOWN); itemBus.setWorkingEnabled(false); crate.inventory.setStackInSlot(0, new ItemStack(Blocks.STONE, 16)); @@ -69,11 +64,9 @@ public static void ItemBusPartMachineAutoImportFalseWhenOffTest(GameTestHelper h public static void ItemBusPartMachineAutoExportTest(GameTestHelper helper) { helper.setBlock(new BlockPos(0, 1, 0), GTMachines.BRONZE_CRATE.getBlock()); helper.setBlock(new BlockPos(0, 2, 0), GTMachines.ITEM_EXPORT_BUS[1].getBlock()); - CrateMachine crate = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - ItemBusPartMachine itemBus = (ItemBusPartMachine) ((MetaMachineBlockEntity) helper - .getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + ItemBusPartMachine itemBus = (ItemBusPartMachine) helper + .getBlockEntity(new BlockPos(0, 2, 0)); itemBus.setFrontFacing(Direction.DOWN); itemBus.getInventory().setStackInSlot(0, new ItemStack(Blocks.STONE, 16)); helper.succeedWhen(() -> { @@ -88,11 +81,9 @@ public static void ItemBusPartMachineAutoExportTest(GameTestHelper helper) { public static void ItemBusPartMachineAutoExportFalseWhenOffTest(GameTestHelper helper) { helper.setBlock(new BlockPos(0, 1, 0), GTMachines.BRONZE_CRATE.getBlock()); helper.setBlock(new BlockPos(0, 2, 0), GTMachines.ITEM_EXPORT_BUS[1].getBlock()); - CrateMachine crate = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - ItemBusPartMachine itemBus = (ItemBusPartMachine) ((MetaMachineBlockEntity) helper - .getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); + CrateMachine crate = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + ItemBusPartMachine itemBus = (ItemBusPartMachine) helper + .getBlockEntity(new BlockPos(0, 2, 0)); itemBus.setFrontFacing(Direction.DOWN); itemBus.setWorkingEnabled(false); itemBus.getInventory().setStackInSlot(0, new ItemStack(Blocks.STONE, 16)); @@ -110,13 +101,10 @@ public static void ItemBusPartMachineAutoPassthroughTest(GameTestHelper helper) helper.setBlock(new BlockPos(0, 1, 0), GTMachines.BRONZE_CRATE.getBlock()); helper.setBlock(new BlockPos(0, 2, 0), GTMachines.ITEM_PASSTHROUGH_HATCH[1].getBlock()); helper.setBlock(new BlockPos(0, 3, 0), GTMachines.BRONZE_CRATE.getBlock()); - CrateMachine crate = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - ItemBusPartMachine itemBus = (ItemBusPartMachine) ((MetaMachineBlockEntity) helper - .getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); - CrateMachine crate2 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 3, 0))) - .getMetaMachine(); + CrateMachine crate = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + ItemBusPartMachine itemBus = (ItemBusPartMachine) helper + .getBlockEntity(new BlockPos(0, 2, 0)); + CrateMachine crate2 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 3, 0)); itemBus.setFrontFacing(Direction.DOWN); crate.inventory.setStackInSlot(0, new ItemStack(Blocks.STONE, 16)); helper.succeedWhen(() -> { @@ -132,13 +120,10 @@ public static void ItemBusPartMachineAutoPassthroughFalseWhenOffTest(GameTestHel helper.setBlock(new BlockPos(0, 1, 0), GTMachines.BRONZE_CRATE.getBlock()); helper.setBlock(new BlockPos(0, 2, 0), GTMachines.ITEM_PASSTHROUGH_HATCH[1].getBlock()); helper.setBlock(new BlockPos(0, 3, 0), GTMachines.BRONZE_CRATE.getBlock()); - CrateMachine crate = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 1, 0))) - .getMetaMachine(); - ItemBusPartMachine itemBus = (ItemBusPartMachine) ((MetaMachineBlockEntity) helper - .getBlockEntity(new BlockPos(0, 2, 0))) - .getMetaMachine(); - CrateMachine crate2 = (CrateMachine) ((MetaMachineBlockEntity) helper.getBlockEntity(new BlockPos(0, 3, 0))) - .getMetaMachine(); + CrateMachine crate = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + ItemBusPartMachine itemBus = (ItemBusPartMachine) helper + .getBlockEntity(new BlockPos(0, 2, 0)); + CrateMachine crate2 = (CrateMachine) helper.getBlockEntity(new BlockPos(0, 3, 0)); itemBus.setFrontFacing(Direction.DOWN); itemBus.setWorkingEnabled(false); crate.inventory.setStackInSlot(0, new ItemStack(Blocks.STONE, 16)); diff --git a/src/test/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidConditionTest.java b/src/test/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidConditionTest.java index f72991eaae5..fc9e3a3cd0a 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidConditionTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidConditionTest.java @@ -22,8 +22,6 @@ import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.gametest.PrefixGameTestTemplate; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; - @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) public class AdjacentFluidConditionTest { @@ -59,8 +57,7 @@ public static void adjacentFluidConditionCorrectFluidPresentTest(GameTestHelper // Machine is at 1,1,1 so 0,1,1 is next to it helper.setBlock(new BlockPos(0, 1, 1), Blocks.WATER); - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine @@ -81,8 +78,7 @@ public static void adjacentFluidConditionCorrectFluidPresentTest(GameTestHelper // Test for checking if the rock breaker works when there are no fluids @GameTest(template = "charged_hv_rock_breaker", batch = "AdjacentFluidCondition") public static void adjacentFluidConditionNoFluidPresentTest(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine @@ -104,8 +100,7 @@ public static void adjacentFluidConditionNoFluidPresentTest(GameTestHelper helpe public static void adjacentFluidConditionWrongFluidPresentTest(GameTestHelper helper) { // Machine is at 1,1,1 so 0,1,1 is next to it helper.setBlock(new BlockPos(0, 1, 1), Blocks.LAVA); - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine @@ -129,8 +124,7 @@ public static void adjacentFluidConditionTwoFluidCorrectFluidsPresentTest(GameTe // Machine is at 1,1,1 so 0,1,1 and 1,1,0 are next to it helper.setBlock(new BlockPos(0, 1, 1), Blocks.LAVA); helper.setBlock(new BlockPos(1, 1, 0), Blocks.WATER); - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine @@ -153,8 +147,7 @@ public static void adjacentFluidConditionTwoFluidCorrectFluidsPresentTest(GameTe public static void adjacentFluidConditionTwoFluidNr1FluidPresentTest(GameTestHelper helper) { // Machine is at 1,1,1 so 0,1,1 and 1,1,0 are next to it helper.setBlock(new BlockPos(1, 1, 0), Blocks.WATER); - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine @@ -176,8 +169,7 @@ public static void adjacentFluidConditionTwoFluidNr1FluidPresentTest(GameTestHel public static void adjacentFluidConditionTwoFluidNr2FluidPresentTest(GameTestHelper helper) { // Machine is at 1,1,1 so 0,1,1 and 1,1,0 are next to it helper.setBlock(new BlockPos(1, 1, 0), Blocks.LAVA); - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine @@ -197,8 +189,7 @@ public static void adjacentFluidConditionTwoFluidNr2FluidPresentTest(GameTestHel // Test for checking if the rock breaker works when one of the two fluids are present @GameTest(template = "charged_hv_rock_breaker", batch = "AdjacentFluidCondition") public static void adjacentFluidConditionTwoFluidNoFluidPresentTest(GameTestHelper helper) { - SimpleTieredMachine machine = (SimpleTieredMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 1, 1))); + SimpleTieredMachine machine = (SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 1, 1)); machine.setRecipeType(ROCK_BREAKER_RECIPE_TYPE); NotifiableItemStackHandler itemIn = (NotifiableItemStackHandler) machine diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java index 8b51ec7161c..b5c84c1c22a 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; @@ -10,7 +9,6 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -29,7 +27,6 @@ import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.RedstoneLampBlock; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.Nullable; @@ -237,7 +234,7 @@ public static CoverBehavior placeCover(GameTestHelper helper, MetaMachine machin public static MetaMachine setMachine(GameTestHelper helper, BlockPos pos, MachineDefinition machineDefinition) { helper.setBlock(pos, machineDefinition.getBlock()); - return ((IMachineBlockEntity) Objects.requireNonNull(helper.getBlockEntity(pos))).getMetaMachine(); + return ((MetaMachine) Objects.requireNonNull(helper.getBlockEntity(pos))); } public static void assertEqual(GameTestHelper helper, List text, String s) { @@ -266,16 +263,6 @@ public static void assertLampOff(GameTestHelper helper, BlockPos pos) { helper.assertBlockProperty(pos, RedstoneLampBlock.LIT, false); } - /** - * Shortcut function to retrieve a metamachine from a blockentity's - * - * @param entity The MetaMachineBlockEntity - * @return the machine held, if any - */ - public static MetaMachine getMetaMachine(BlockEntity entity) { - return ((MetaMachineBlockEntity) entity).getMetaMachine(); - } - /** * Helper function to succeed after the test is over * diff --git a/src/test/java/com/gregtechceu/gtceu/integration/ae2/machine/PatternBufferTest.java b/src/test/java/com/gregtechceu/gtceu/integration/ae2/machine/PatternBufferTest.java index d1e7ca4a4f5..46f42cde0ea 100644 --- a/src/test/java/com/gregtechceu/gtceu/integration/ae2/machine/PatternBufferTest.java +++ b/src/test/java/com/gregtechceu/gtceu/integration/ae2/machine/PatternBufferTest.java @@ -34,8 +34,6 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import static com.gregtechceu.gtceu.gametest.util.TestUtils.getMetaMachine; - @PrefixGameTestTemplate(false) @GameTestHolder(GTCEu.MOD_ID) public class PatternBufferTest { @@ -67,20 +65,16 @@ private record BusHolder(ItemBusPartMachine inputBus1, ItemBusPartMachine inputB * @return the busses, in the BusHolder record. */ private static BusHolder getBussesAndForm(GameTestHelper helper) { - WorkableMultiblockMachine controller = (WorkableMultiblockMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(1, 2, 0))); + WorkableMultiblockMachine controller = (WorkableMultiblockMachine) helper.getBlockEntity(new BlockPos(1, 2, 0)); + assert controller != null; TestUtils.formMultiblock(controller); controller.setRecipeType(LCR_RECIPE_TYPE); - ItemBusPartMachine inputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 1, 0))); - ItemBusPartMachine inputBus2 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 2, 0))); - ItemBusPartMachine outputBus1 = (ItemBusPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 1, 0))); - FluidHatchPartMachine outputHatch1 = (FluidHatchPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(0, 2, 0))); - MEPatternBufferPartMachine patternBuffer = (MEPatternBufferPartMachine) getMetaMachine( - helper.getBlockEntity(new BlockPos(2, 2, 1))); + ItemBusPartMachine inputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 1, 0)); + ItemBusPartMachine inputBus2 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(2, 2, 0)); + ItemBusPartMachine outputBus1 = (ItemBusPartMachine) helper.getBlockEntity(new BlockPos(0, 1, 0)); + FluidHatchPartMachine outputHatch1 = (FluidHatchPartMachine) helper.getBlockEntity(new BlockPos(0, 2, 0)); + MEPatternBufferPartMachine patternBuffer = (MEPatternBufferPartMachine) helper + .getBlockEntity(new BlockPos(2, 2, 1)); return new BusHolder(inputBus1, inputBus2, outputBus1, outputHatch1, patternBuffer, controller); }