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 63d599bf6a1..7dfb31788f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java @@ -351,8 +351,8 @@ public ResourceTexture getPipeTexture(boolean isBlock) { } @Override - public Pair onToolClick(Set toolTypes, ItemStack itemStack, - UseOnContext context) { + public Pair<@Nullable GTToolType, InteractionResult> onToolClick(Set toolTypes, ItemStack itemStack, + UseOnContext context) { // the side hit from the machine grid var playerIn = context.getPlayer(); if (playerIn == null) return Pair.of(null, InteractionResult.PASS); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java index 49ba637ac4d..1bf8262ac7e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -70,11 +69,6 @@ public static IControllable getControllable(Level level, BlockPos pos, @Nullable return getBlockEntityCapability(GTCapability.CAPABILITY_CONTROLLABLE, level, pos, side); } - @Nullable - public static RecipeLogic getRecipeLogic(Level level, BlockPos pos, @Nullable Direction side) { - return getBlockEntityCapability(GTCapability.CAPABILITY_RECIPE_LOGIC, level, pos, side); - } - @Nullable public static IEnergyStorage getForgeEnergy(Level level, BlockPos pos, @Nullable Direction side) { if (level.getBlockState(pos).hasBlockEntity()) { @@ -86,11 +80,6 @@ public static IEnergyStorage getForgeEnergy(Level level, BlockPos pos, @Nullable return null; } - @Nullable - public static ICleanroomReceiver getCleanroomReceiver(Level level, BlockPos pos, @Nullable Direction side) { - return getBlockEntityCapability(GTCapability.CAPABILITY_CLEANROOM_RECEIVER, level, pos, side); - } - @Nullable public static IMaintenanceMachine getMaintenanceMachine(Level level, BlockPos pos, @Nullable Direction side) { return getBlockEntityCapability(GTCapability.CAPABILITY_MAINTENANCE_MACHINE, level, pos, side); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/ICleanroomReceiver.java b/src/main/java/com/gregtechceu/gtceu/api/capability/ICleanroomReceiver.java deleted file mode 100644 index 2d2bd5d51b3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/ICleanroomReceiver.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.gregtechceu.gtceu.api.capability; - -import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; - -import org.jetbrains.annotations.Nullable; - -/** - * Implement this interface in order to make a BlockEntity into a block that recieves a cleanroom from other blocks - */ -public interface ICleanroomReceiver { - - /** - * - * @return the cleanroom the machine is receiving from - */ - @Nullable - ICleanroomProvider getCleanroom(); - - /** - * sets the machine's cleanroom to the provided one - * - * @param provider the cleanroom to assign to this machine - */ - void setCleanroom(ICleanroomProvider provider); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/ITurbineMachine.java b/src/main/java/com/gregtechceu/gtceu/api/capability/ITurbineMachine.java deleted file mode 100644 index c1fe3cfa157..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/ITurbineMachine.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gregtechceu.gtceu.api.capability; - -/** - * For the large gas turbine / large plasma turbine - */ -public interface ITurbineMachine extends IWorkable { - - /** - * @return true if the machine has a roter installed - */ - boolean hasRotor(); - - /** - * @return the current rotor speed or 0 when no rotor is installed - */ - int getRotorSpeed(); - - /** - * @return the maximum rotor speed or 0 when no rotor is installed - */ - int getMaxRotorHolderSpeed(); - - /** - * @return the total efficiency the rotor holder and rotor provide in % or -1 when no rotor is installed - */ - int getTotalEfficiency(); - - /** - * @return the current energy production - */ - long getCurrentProduction(); - - /** - * @return the maximum energy production - */ - long getOverclockVoltage(); - - /** - * @return the rotor durability in % or -1 when no rotor is installed - */ - int getRotorDurabilityPercent(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java index 18e989bda1e..f26b143cd3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.capability.*; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityManager; @@ -20,16 +19,10 @@ public class GTCapability { public static final Capability CAPABILITY_WORKABLE = CapabilityManager.get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_CONTROLLABLE = CapabilityManager .get(new CapabilityToken<>() {}); - public static final Capability CAPABILITY_RECIPE_LOGIC = CapabilityManager - .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_ELECTRIC_ITEM = CapabilityManager .get(new CapabilityToken<>() {}); - public static final Capability CAPABILITY_CLEANROOM_RECEIVER = CapabilityManager - .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_MAINTENANCE_MACHINE = CapabilityManager .get(new CapabilityToken<>() {}); - public static final Capability CAPABILITY_TURBINE_MACHINE = CapabilityManager - .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_LASER = CapabilityManager .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_COMPUTATION_PROVIDER = CapabilityManager @@ -40,8 +33,6 @@ public class GTCapability { .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_MONITOR_COMPONENT = CapabilityManager .get(new CapabilityToken<>() {}); - public static final Capability CAPABILITY_CENTRAL_MONITOR = CapabilityManager - .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_MEDICAL_CONDITION_TRACKER = CapabilityManager .get(new CapabilityToken<>() {}); @@ -53,17 +44,13 @@ public static void register(RegisterCapabilitiesEvent event) { event.register(IToolable.class); event.register(IWorkable.class); event.register(IControllable.class); - event.register(RecipeLogic.class); event.register(IElectricItem.class); - event.register(ICleanroomReceiver.class); event.register(IMaintenanceMachine.class); - event.register(ITurbineMachine.class); event.register(ILaserContainer.class); event.register(IOpticalComputationProvider.class); event.register(IDataAccessHatch.class); event.register(IMedicalConditionTracker.class); event.register(IHazardParticleContainer.class); event.register(IMonitorComponent.class); - event.register(ICentralMonitor.class); } } 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 8e0593be36b..6b3b1c21f55 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -23,7 +23,6 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitHolder; -import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.machine.trait.feature.IFrontFacingTrait; import com.gregtechceu.gtceu.api.machine.trait.feature.IInteractionTrait; import com.gregtechceu.gtceu.api.machine.trait.feature.IRenderingTrait; @@ -290,8 +289,9 @@ private void executeTick() { * animations will be played */ @Override - public final Pair onToolClick(Set toolType, ItemStack itemStack, - UseOnContext context) { + public final Pair<@Nullable GTToolType, InteractionResult> onToolClick(Set toolType, + ItemStack itemStack, + UseOnContext context) { // the side hit from the machine grid var playerIn = context.getPlayer(); if (playerIn == null) return Pair.of(null, InteractionResult.PASS); @@ -303,7 +303,7 @@ public final Pair onToolClick(Set too CoverBehavior coverBehavior = gridSide == null ? null : coverContainer.getCoverAtSide(gridSide); if (gridSide == null) gridSide = hitResult.getDirection(); - Pair result = null; + Pair<@Nullable GTToolType, InteractionResult> result = null; // Prioritize covers where they apply (Screwdriver, Soft Mallet) if (toolType.isEmpty() && playerIn.isShiftKeyDown()) { @@ -970,12 +970,6 @@ private static List getCapabilitiesFromTraits(List traits, return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable)); } } - } else if (cap == GTCapability.CAPABILITY_RECIPE_LOGIC) { - for (MachineTrait trait : machine.traitHolder.getAllTraits()) { - 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)); @@ -995,21 +989,11 @@ private static List getCapabilitiesFromTraits(List traits, 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) { @@ -1064,14 +1048,6 @@ private static List getCapabilitiesFromTraits(List traits, 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.traitHolder.getAllTraits(), 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); 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 4c0546d46f3..48dec4acd99 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -17,7 +17,6 @@ import lombok.Setter; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.VisibleForTesting; import java.util.*; @@ -40,10 +39,8 @@ public abstract class WorkableTieredMachine extends TieredEnergyMachine implemen @Setter @SaveField public int activeRecipeType; - @Nullable @Getter - @Setter - private ICleanroomProvider cleanroom; + protected final CleanroomReceiverTrait cleanroomReceiver; @SaveField public final NotifiableItemStackHandler importItems, exportItems; @SaveField @@ -75,6 +72,7 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); this.traitSubscriptions = new ArrayList<>(); + this.cleanroomReceiver = new CleanroomReceiverTrait(this); this.recipeLogic = recipeLogicSupplier.apply(this); this.importItems = new NotifiableItemStackHandler(this, importSlots, IO.IN, IO.BOTH); this.exportItems = new NotifiableItemStackHandler(this, exportSlots, IO.OUT); @@ -94,6 +92,7 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunc this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); this.traitSubscriptions = new ArrayList<>(); + this.cleanroomReceiver = new CleanroomReceiverTrait(this); this.recipeLogic = new RecipeLogic(this); this.importItems = new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ICleanroomProvider.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ICleanroomProvider.java deleted file mode 100644 index 38379cf73ff..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ICleanroomProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; - -import java.util.Set; - -/** - * Implement this interface in order to make a Machine into a block that provides a Cleanroom to other blocks - */ -public interface ICleanroomProvider extends IMachineFeature { - - /** - * @return a {@link Set} of {@link CleanroomType} which the cleanroom provides - */ - Set getTypes(); - - /** - * @return whether the cleanroom is currently clean - */ - boolean isClean(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java index ef5d3cc0b4d..dc42605e28d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.machine.feature; -import com.gregtechceu.gtceu.api.capability.ICleanroomReceiver; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -16,8 +15,7 @@ /** * A machine can handle recipes. */ -public interface IRecipeLogicMachine extends IRecipeCapabilityHolder, IMachineFeature, IWorkable, ICleanroomReceiver, - IVoidable { +public interface IRecipeLogicMachine extends IRecipeCapabilityHolder, IMachineFeature, IWorkable, IVoidable { /** * RecipeType held diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/DummyCleanroom.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/DummyCleanroom.java deleted file mode 100644 index ae209aedfb6..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/DummyCleanroom.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.multiblock; - -import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; - -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -public final class DummyCleanroom implements ICleanroomProvider { - - private final boolean allowsAllTypes; - private final Collection allowedTypes; - - /** - * Create a Dummy Cleanroom that provides specific types - * - * @param types the types to provide - */ - @NotNull - public static DummyCleanroom createForTypes(@NotNull Collection types) { - return new DummyCleanroom(types, false); - } - - /** - * Create a Dummy Cleanroom that provides all types - */ - @NotNull - public static DummyCleanroom createForAllTypes() { - return new DummyCleanroom(Collections.emptyList(), true); - } - - private DummyCleanroom(@NotNull Collection allowedTypes, boolean allowsAllTypes) { - this.allowedTypes = allowedTypes; - this.allowsAllTypes = allowsAllTypes; - } - - @Override - public boolean isClean() { - return true; - } - - @Override - public Set getTypes() { - return allowsAllTypes ? CleanroomType.getAllTypes() : new HashSet<>(allowedTypes); - } -} 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 b6800847825..1f795e5aeed 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 @@ -5,15 +5,11 @@ 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.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.IMufflableMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; -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.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; @@ -46,10 +42,8 @@ public abstract class WorkableMultiblockMachine extends MultiblockControllerMachine implements IWorkableMultiController, IMufflableMachine { - @Nullable @Getter - @Setter - private ICleanroomProvider cleanroom; + protected final CleanroomReceiverTrait cleanroomReceiver; @Getter @SaveField @SyncToClient @@ -84,6 +78,7 @@ public WorkableMultiblockMachine(BlockEntityCreationInfo info, super(info); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; + this.cleanroomReceiver = new CleanroomReceiverTrait(this); this.recipeLogic = recipeLogicSupplier.apply(this); this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); 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 e224f75d785..aad87a197c9 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 @@ -6,7 +6,6 @@ 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.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; @@ -45,10 +44,8 @@ public abstract class SteamWorkableMachine extends SteamMachine implements IRecipeLogicMachine, IMufflableMachine, IMachineLife { - @Nullable @Getter - @Setter - private ICleanroomProvider cleanroom; + protected final CleanroomReceiverTrait cleanroomReceiver; @Getter @SaveField @SyncToClient @@ -77,9 +74,10 @@ public abstract class SteamWorkableMachine extends SteamMachine public SteamWorkableMachine(BlockEntityCreationInfo info, boolean isHighPressure, Function recipeLogicSupplier, Function steamTankFactory) { - super(info, isHighPressure); + super(info, isHighPressure, steamTankFactory); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; + this.cleanroomReceiver = new CleanroomReceiverTrait(this); this.recipeLogic = recipeLogicSupplier.apply(this); this.capabilitiesProxy = new EnumMap<>(IO.class); this.capabilitiesFlat = new EnumMap<>(IO.class); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/CleanroomProviderTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/CleanroomProviderTrait.java new file mode 100644 index 00000000000..f6e35b1b7dd --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/CleanroomProviderTrait.java @@ -0,0 +1,38 @@ +package com.gregtechceu.gtceu.api.machine.trait; + +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; + +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import lombok.Getter; +import lombok.Setter; + +import java.util.Set; + +public class CleanroomProviderTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>( + CleanroomProviderTrait.class, false); + + @Getter + @Setter + private Set providedTypes; + @Getter + @Setter + private boolean isActive; + + public CleanroomProviderTrait(MetaMachine machine, Set providedTypes) { + super(machine); + this.providedTypes = new ObjectOpenHashSet<>(providedTypes); + this.isActive = false; + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public CleanroomProviderTrait(MetaMachine machine) { + this(machine, Set.of(CleanroomType.CLEANROOM)); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/CleanroomReceiverTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/CleanroomReceiverTrait.java new file mode 100644 index 00000000000..a3b2edfe7bb --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/CleanroomReceiverTrait.java @@ -0,0 +1,35 @@ +package com.gregtechceu.gtceu.api.machine.trait; + +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; + +import lombok.Setter; +import org.jetbrains.annotations.Nullable; + +public class CleanroomReceiverTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>( + CleanroomReceiverTrait.class, false); + + @Setter + protected @Nullable CleanroomProviderTrait cleanroomProvider; + + public CleanroomReceiverTrait(MetaMachine machine) { + super(machine); + cleanroomProvider = null; + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public boolean hasActiveCleanroom(CleanroomType type) { + return cleanroomProvider != null && cleanroomProvider.isActive() && + cleanroomProvider.getProvidedTypes().contains(type); + } + + public void removeCleanroom() { + cleanroomProvider = null; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java b/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java index 00e671aab77..b339e801d9c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java +++ b/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java @@ -35,19 +35,19 @@ private static class ProspectingShareTask implements Runnable { private final List prospectionData; private final UUID sender; - private final UUID reciever; + private final UUID receiver; - public ProspectingShareTask(UUID sender, UUID reciever) { + public ProspectingShareTask(UUID sender, UUID receiver) { prospectionData = ClientCacheManager.getProspectionShareData(); this.sender = sender; - this.reciever = reciever; + this.receiver = receiver; } @Override public void run() { boolean first = true; for (ClientCacheManager.ProspectionInfo info : prospectionData) { - GTNetwork.sendToServer(new SCPacketShareProspection(sender, reciever, info.cacheName, info.key, + GTNetwork.sendToServer(new SCPacketShareProspection(sender, receiver, info.cacheName, info.key, info.isDimCache, info.dim, info.data, first)); first = false; 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 39f78a3ea12..b23654b2d24 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java @@ -317,10 +317,8 @@ public int addScannerInfo(Player player, Level level, BlockPos pos, DisplayMode } // Recipe logic for EU production/consumption - Optional recipeLogicCap = tileEntity.getCapability(GTCapability.CAPABILITY_RECIPE_LOGIC) - .resolve(); - if (recipeLogicCap.isPresent()) { - RecipeLogic recipeLogic = recipeLogicCap.get(); + RecipeLogic recipeLogic = machine.getTraitHolder().getTrait(RecipeLogic.TYPE); + if (recipeLogic != null) { GTRecipe recipe = recipeLogic.getLastRecipe(); if (recipeLogic.getStatus().equals(RecipeLogic.Status.WAITING)) { list.add(Component.translatable("behavior.portable_scanner.divider")); 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 926805a98db..c1ae2a8a6c2 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 @@ -3,14 +3,11 @@ 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.MetaMachine; import com.gregtechceu.gtceu.api.machine.SimpleGeneratorMachine; -import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; @@ -19,7 +16,8 @@ import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; 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.machine.trait.CleanroomProviderTrait; +import com.gregtechceu.gtceu.api.machine.trait.CleanroomReceiverTrait; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.BlockPattern; import com.gregtechceu.gtceu.api.pattern.FactoryBlockPattern; @@ -76,7 +74,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class CleanroomMachine extends WorkableElectricMultiblockMachine - implements ICleanroomProvider, IDisplayUIMachine, IDataInfoProvider { + implements IDisplayUIMachine, IDataInfoProvider { public static final int CLEAN_AMOUNT_THRESHOLD = 95; public static final int MIN_CLEAN_AMOUNT = 0; @@ -96,18 +94,13 @@ public class CleanroomMachine extends WorkableElectricMultiblockMachine private EnergyContainerList inputEnergyContainers; @Getter @Nullable - private Collection cleanroomReceivers; + private Collection cleanroomReceivers; + + private final CleanroomProviderTrait cleanroomProviderTrait; public CleanroomMachine(BlockEntityCreationInfo info) { super(info, (m) -> new CleanroomLogic((CleanroomMachine) m)); - } - - ////////////////////////////////////// - // ****** Initialization ******// - ////////////////////////////////////// - - protected RecipeLogic createRecipeLogic() { - return new CleanroomLogic(this); + this.cleanroomProviderTrait = new CleanroomProviderTrait(this); } @Override @@ -130,16 +123,17 @@ public void onStructureFormed() { } else { this.cleanroomType = CleanroomType.CLEANROOM; } + cleanroomProviderTrait.setProvidedTypes(Set.of(this.cleanroomType)); // bind cleanroom if (cleanroomReceivers != null) { - this.cleanroomReceivers.forEach(receiver -> receiver.setCleanroom(null)); + this.cleanroomReceivers.forEach(CleanroomReceiverTrait::removeCleanroom); this.cleanroomReceivers = null; } - Set receivers = getMultiblockState().getMatchContext().getOrCreate("cleanroomReceiver", + Set receivers = getMultiblockState().getMatchContext().getOrCreate("cleanroomReceiver", Sets::newHashSet); this.cleanroomReceivers = ImmutableSet.copyOf(receivers); - this.cleanroomReceivers.forEach(receiver -> receiver.setCleanroom(this)); + this.cleanroomReceivers.forEach(receiver -> receiver.setCleanroomProvider(cleanroomProviderTrait)); // max progress is based roughly on the dimensions of the structure: ((w * d) ^ .8 * h) // taller cleanrooms take longer than wider ones @@ -156,8 +150,9 @@ public void onStructureInvalid() { super.onStructureInvalid(); this.inputEnergyContainers = null; this.cleanAmount = MIN_CLEAN_AMOUNT; + cleanroomProviderTrait.setActive(false); if (cleanroomReceivers != null) { - this.cleanroomReceivers.forEach(receiver -> receiver.setCleanroom(null)); + this.cleanroomReceivers.forEach(CleanroomReceiverTrait::removeCleanroom); this.cleanroomReceivers = null; } } @@ -418,7 +413,7 @@ private TraceabilityPredicate getValidFloorBlocks() { @NotNull protected TraceabilityPredicate innerPredicate() { return new TraceabilityPredicate(blockWorldState -> { - Set receivers = blockWorldState.getMatchContext().getOrCreate("cleanroomReceiver", + Set receivers = blockWorldState.getMatchContext().getOrCreate("cleanroomReceiver", Sets::newHashSet); // all non-GTMachines are allowed inside by default BlockEntity blockEntity = blockWorldState.getTileEntity(); @@ -426,13 +421,8 @@ protected TraceabilityPredicate innerPredicate() { if (isMachineBanned(machine)) { return false; } - } - if (blockEntity != null) { - var receiver = GTCapabilityHelper.getCleanroomReceiver(blockWorldState.getWorld(), - blockWorldState.getPos(), null); - if (receiver != null) { - receivers.add(receiver); - } + CleanroomReceiverTrait receiverTrait = machine.getTraitHolder().getTrait(CleanroomReceiverTrait.TYPE); + if (receiverTrait != null) receivers.add(receiverTrait); } return true; }, null) { @@ -451,7 +441,7 @@ public boolean addCache() { protected boolean isMachineBanned(MetaMachine machine) { // blacklisted machines: mufflers and all generators, miners/drills, primitives - if (machine instanceof ICleanroomProvider) return true; + if (machine.getTraitHolder().getTrait(CleanroomProviderTrait.TYPE) != null) return true; if (machine instanceof IMufflerMachine) return true; if (machine instanceof SimpleGeneratorMachine) return true; if (machine instanceof LargeCombustionEngineMachine) return true; @@ -499,8 +489,11 @@ public void addDisplayText(List textList) { .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); } - if (isClean()) textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); - else textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); + if (cleanroomProviderTrait.isActive()) { + textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); + } else { + textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); + } textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, @@ -514,11 +507,6 @@ public void addDisplayText(List textList) { } } - @Override - public Set getTypes() { - return this.cleanroomType == null ? Set.of() : Set.of(this.cleanroomType); - } - /** * Adjust the cleanroom's clean amount * @@ -527,11 +515,7 @@ public Set getTypes() { public void adjustCleanAmount(int amount) { // do not allow negative cleanliness nor cleanliness above 100 this.cleanAmount = Mth.clamp(this.cleanAmount + amount, 0, 100); - } - - @Override - public boolean isClean() { - return this.cleanAmount >= CLEAN_AMOUNT_THRESHOLD; + cleanroomProviderTrait.setActive(this.cleanAmount >= CLEAN_AMOUNT_THRESHOLD); } @NotNull @@ -540,7 +524,8 @@ public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { if (mode == PortableScannerBehavior.DisplayMode.SHOW_ALL || mode == PortableScannerBehavior.DisplayMode.SHOW_MACHINE_INFO) { return Collections.singletonList(Component.translatable( - isClean() ? "gtceu.multiblock.cleanroom.clean_state" : "gtceu.multiblock.cleanroom.dirty_state")); + cleanroomProviderTrait.isActive() ? "gtceu.multiblock.cleanroom.clean_state" : + "gtceu.multiblock.cleanroom.dirty_state")); } return new ArrayList<>(); } 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 e41ca126b14..93f3c41bc5f 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 @@ -2,7 +2,6 @@ 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.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; @@ -32,7 +31,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class LargeTurbineMachine extends WorkableElectricMultiblockMachine implements ITieredMachine, ITurbineMachine { +public class LargeTurbineMachine extends WorkableElectricMultiblockMachine implements ITieredMachine { public static final int MIN_DURABILITY_TO_WARN = 10; @@ -78,13 +77,11 @@ protected double productionBoost() { return 0; } - @Override public boolean hasRotor() { var rotorHolder = getRotorHolder(); return rotorHolder != null && rotorHolder.hasRotor(); } - @Override public int getRotorSpeed() { var rotorHolder = getRotorHolder(); if (rotorHolder != null && rotorHolder.hasRotor()) { @@ -93,7 +90,6 @@ public int getRotorSpeed() { return 0; } - @Override public int getMaxRotorHolderSpeed() { var rotorHolder = getRotorHolder(); if (rotorHolder != null && rotorHolder.hasRotor()) { @@ -102,7 +98,6 @@ public int getMaxRotorHolderSpeed() { return 0; } - @Override public int getTotalEfficiency() { var rotorHolder = getRotorHolder(); if (rotorHolder != null && rotorHolder.hasRotor()) { @@ -111,13 +106,11 @@ public int getTotalEfficiency() { return -1; } - @Override public long getCurrentProduction() { return isActive() && recipeLogic.getLastRecipe() != null ? recipeLogic.getLastRecipe().getOutputEUt().voltage() : 0; } - @Override public int getRotorDurabilityPercent() { var rotorHolder = getRotorHolder(); if (rotorHolder != null && rotorHolder.hasRotor()) { 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 e6afdd9eabd..82c4311212a 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,17 +1,16 @@ 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.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; -import com.gregtechceu.gtceu.api.machine.multiblock.DummyCleanroom; +import com.gregtechceu.gtceu.api.machine.trait.CleanroomProviderTrait; +import com.gregtechceu.gtceu.api.machine.trait.CleanroomReceiverTrait; import net.minecraft.MethodsReturnNonnullByDefault; import lombok.Getter; -import java.util.Collections; +import java.util.Set; import javax.annotation.ParametersAreNonnullByDefault; @@ -22,8 +21,7 @@ @MethodsReturnNonnullByDefault public class CleaningMaintenanceHatchPartMachine extends AutoMaintenanceHatchPartMachine { - // must come after the static block - private final ICleanroomProvider DUMMY_CLEANROOM; + private final CleanroomProviderTrait cleanroomProvider; @Getter private final CleanroomType cleanroomType; @@ -31,23 +29,22 @@ public class CleaningMaintenanceHatchPartMachine extends AutoMaintenanceHatchPar public CleaningMaintenanceHatchPartMachine(BlockEntityCreationInfo info, CleanroomType cleanroomType) { super(info); this.cleanroomType = cleanroomType; - DUMMY_CLEANROOM = DummyCleanroom.createForTypes(Collections.singletonList(cleanroomType)); + this.cleanroomProvider = new CleanroomProviderTrait(this, Set.of(cleanroomType)); + cleanroomProvider.setActive(true); } @Override public void addedToController(IMultiController controller) { super.addedToController(controller); - if (controller instanceof ICleanroomReceiver receiver) { - receiver.setCleanroom(DUMMY_CLEANROOM); - } + CleanroomReceiverTrait receiverTrait = controller.self().getTraitHolder().getTrait(CleanroomReceiverTrait.TYPE); + if (receiverTrait != null) receiverTrait.setCleanroomProvider(cleanroomProvider); } @Override public void removedFromController(IMultiController controller) { super.removedFromController(controller); - if (controller instanceof ICleanroomReceiver receiver && receiver.getCleanroom() == DUMMY_CLEANROOM) { - receiver.setCleanroom(null); - } + CleanroomReceiverTrait receiverTrait = controller.self().getTraitHolder().getTrait(CleanroomReceiverTrait.TYPE); + if (receiverTrait != null) receiverTrait.removeCleanroom(); } @Override 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 873bcb06b78..e1312c5b519 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 @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; +import com.gregtechceu.gtceu.api.machine.trait.CleanroomProviderTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; @@ -112,11 +113,12 @@ protected void adjustCleanAmount(boolean declined) { } protected boolean consumeEnergy() { - var cleanroom = getMachine(); + var cleanroomTrait = getMachine().getTraitHolder().getTrait(CleanroomProviderTrait.TYPE); + if (cleanroomTrait == null) return false; // clamp to max for VA indexing - var tier = Mth.clamp(cleanroom.getTier(), GTValues.ULV, GTValues.MAX); + var tier = Mth.clamp(getMachine().getTier(), GTValues.ULV, GTValues.MAX); // use 3/16th an amp when fully clean otherwise 15/16th an amp during cleaning - long energyToDrain = cleanroom.isClean() ? Math.max(8, (3 * GTValues.V[tier] / 16)) : + long energyToDrain = cleanroomTrait.isActive() ? Math.max(8, (3 * GTValues.V[tier] / 16)) : GTValues.VA[tier]; if (energyContainer != null) { long resultEnergy = energyContainer.getEnergyStored() - energyToDrain; diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java index f38b713d5b3..656f5e76040 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java @@ -1,10 +1,9 @@ package com.gregtechceu.gtceu.common.recipe.condition; -import com.gregtechceu.gtceu.api.capability.ICleanroomReceiver; import com.gregtechceu.gtceu.api.machine.MetaMachine; -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; +import com.gregtechceu.gtceu.api.machine.trait.CleanroomReceiverTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; @@ -52,16 +51,14 @@ public Component getTooltips() { @Override public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { - if (!ConfigHolder.INSTANCE.machines.enableCleanroom) return true; MetaMachine machine = recipeLogic.getMachine(); - if (machine instanceof ICleanroomReceiver receiver && this.cleanroom != null) { - if (ConfigHolder.INSTANCE.machines.cleanMultiblocks && machine instanceof IMultiController) return true; - ICleanroomProvider provider = receiver.getCleanroom(); - if (provider == null) return false; + if (!ConfigHolder.INSTANCE.machines.enableCleanroom) return true; + if (ConfigHolder.INSTANCE.machines.cleanMultiblocks && machine instanceof IMultiController) return true; + + CleanroomReceiverTrait receiverTrait = machine.getTraitHolder().getTrait(CleanroomReceiverTrait.TYPE); - return provider.isClean() && provider.getTypes().contains(this.cleanroom); - } + if (receiverTrait != null && this.cleanroom != null) return receiverTrait.hasActiveCleanroom(cleanroom); return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java index 5df5704c76a..69329403884 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java @@ -22,10 +22,8 @@ public static void init() { ComputerCraftAPI.registerGenericSource(new CentralMonitorPeripheral()); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CONTROLLABLE); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER); - ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_TURBINE_MACHINE); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_WORKABLE); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_COVERABLE); - ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CENTRAL_MONITOR); PlaceholderHandler.addPlaceholder(new Placeholder("bufferText") { @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CentralMonitorPeripheral.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CentralMonitorPeripheral.java index 62105f05bb0..1415b440d5b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CentralMonitorPeripheral.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CentralMonitorPeripheral.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.integration.cctweaked.peripherals; -import com.gregtechceu.gtceu.api.capability.ICentralMonitor; import com.gregtechceu.gtceu.api.item.ComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.api.item.component.IMonitorModuleItem; import com.gregtechceu.gtceu.common.item.modules.ImageModuleBehaviour; import com.gregtechceu.gtceu.common.item.modules.TextModuleBehaviour; +import com.gregtechceu.gtceu.common.machine.multiblock.electric.CentralMonitorMachine; import com.gregtechceu.gtceu.common.machine.multiblock.electric.monitor.MonitorGroup; import net.minecraft.world.item.ItemStack; @@ -22,7 +22,7 @@ public String id() { } @LuaFunction - public static MethodResult getGroups(ICentralMonitor centralMonitor) { + public static MethodResult getGroups(CentralMonitorMachine centralMonitor) { return MethodResult.of(centralMonitor.getMonitorGroups().stream().map(LuaMonitorGroup::new).toList()); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/TurbineMachinePeripheral.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/TurbineMachinePeripheral.java index 555d17301a2..7460f2c5806 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/TurbineMachinePeripheral.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/TurbineMachinePeripheral.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.integration.cctweaked.peripherals; -import com.gregtechceu.gtceu.api.capability.ITurbineMachine; +import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeTurbineMachine; import dan200.computercraft.api.lua.LuaFunction; import dan200.computercraft.api.lua.MethodResult; @@ -13,37 +13,37 @@ public String id() { } @LuaFunction - public static MethodResult hasRotor(ITurbineMachine turbine) { + public static MethodResult hasRotor(LargeTurbineMachine turbine) { return MethodResult.of(turbine.hasRotor()); } @LuaFunction - public static MethodResult getRotorSpeed(ITurbineMachine turbine) { + public static MethodResult getRotorSpeed(LargeTurbineMachine turbine) { return MethodResult.of(turbine.getRotorSpeed()); } @LuaFunction - public static MethodResult getMaxRotorHolderSpeed(ITurbineMachine turbine) { + public static MethodResult getMaxRotorHolderSpeed(LargeTurbineMachine turbine) { return MethodResult.of(turbine.getMaxRotorHolderSpeed()); } @LuaFunction - public static MethodResult getTotalEfficiency(ITurbineMachine turbine) { + public static MethodResult getTotalEfficiency(LargeTurbineMachine turbine) { return MethodResult.of(turbine.getTotalEfficiency()); } @LuaFunction - public static MethodResult getCurrentProduction(ITurbineMachine turbine) { + public static MethodResult getCurrentProduction(LargeTurbineMachine turbine) { return MethodResult.of(turbine.getCurrentProduction()); } @LuaFunction - public static MethodResult getOverclockVoltage(ITurbineMachine turbine) { + public static MethodResult getOverclockVoltage(LargeTurbineMachine turbine) { return MethodResult.of(turbine.getOverclockVoltage()); } @LuaFunction - public static MethodResult getRotorDurabilityPercent(ITurbineMachine turbine) { + public static MethodResult getRotorDurabilityPercent(LargeTurbineMachine turbine) { return MethodResult.of(turbine.getRotorDurabilityPercent()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineTraitProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineTraitProvider.java index 209f0803135..1ed9d65afc0 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineTraitProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/MachineTraitProvider.java @@ -44,7 +44,7 @@ public void appendTooltip(ITooltip iTooltip, BlockAccessor block, IPluginConfig public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { var be = blockAccessor.getBlockEntity(); if (be instanceof MetaMachine machine) { - var t = machine.getTraitHolder().getTrait(traitType); + T t = machine.getTraitHolder().getTrait(traitType); if (t != null) write(compoundTag.getCompound(uid.toString()), t); } } 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 0f717a8d0d9..e39657b0d4b 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.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.machine.steam.SimpleSteamMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.RecipeHelper; @@ -12,31 +11,24 @@ import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.ChatFormatting; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import org.jetbrains.annotations.Nullable; import snownee.jade.api.BlockAccessor; import snownee.jade.api.ITooltip; import snownee.jade.api.config.IPluginConfig; -public class RecipeLogicProvider extends CapabilityBlockProvider { +import javax.annotation.ParametersAreNonnullByDefault; - public RecipeLogicProvider() { - super(GTCEu.id("recipe_logic_provider")); - } +@ParametersAreNonnullByDefault +public class RecipeLogicProvider extends MachineTraitProvider { - @Nullable - @Override - protected RecipeLogic getCapability(Level level, BlockPos pos, @Nullable Direction side) { - return GTCapabilityHelper.getRecipeLogic(level, pos, side); + public RecipeLogicProvider() { + super(GTCEu.id("recipe_logic_provider"), RecipeLogic.TYPE); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeOutputProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeOutputProvider.java index e01867d3da9..3d6baeada20 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeOutputProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeOutputProvider.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -15,8 +14,6 @@ import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.ChatFormatting; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtOps; @@ -28,13 +25,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.fluids.FluidStack; import com.google.gson.JsonObject; import com.mojang.serialization.JsonOps; -import org.jetbrains.annotations.Nullable; import snownee.jade.api.BlockAccessor; import snownee.jade.api.ITooltip; import snownee.jade.api.config.IPluginConfig; @@ -45,15 +40,13 @@ import java.util.ArrayList; import java.util.List; -public class RecipeOutputProvider extends CapabilityBlockProvider { +import javax.annotation.ParametersAreNonnullByDefault; - public RecipeOutputProvider() { - super(GTCEu.id("recipe_output_info")); - } +@ParametersAreNonnullByDefault +public class RecipeOutputProvider extends MachineTraitProvider { - @Override - protected @Nullable RecipeLogic getCapability(Level level, BlockPos pos, @Nullable Direction side) { - return GTCapabilityHelper.getRecipeLogic(level, pos, side); + public RecipeOutputProvider() { + super(GTCEu.id("recipe_output_info"), RecipeLogic.TYPE); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/package-info.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/package-info.java new file mode 100644 index 00000000000..c5898dea68f --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.integration.jade.provider; + +import org.jetbrains.annotations.NotNullByDefault;