Skip to content

Commit 9230e5f

Browse files
committed
switch to new machine traits
1 parent 8131afe commit 9230e5f

File tree

72 files changed

+404
-208
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+404
-208
lines changed

src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,9 @@ public static MetaMachine getMachine(BlockGetter level, BlockPos pos) {
472472
return null;
473473
}
474474

475-
public final void attachTraits(MachineTrait... traitsToAdd) {
475+
public final void attachTrait(MachineTrait... traitsToAdd) {
476476
for (var t: traitsToAdd) {
477+
if (traits.contains(t)) continue;
477478
t.attachToMachine(this);
478479
t.onAttachedToMachine();
479480
traits.add(t);

src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,16 @@ public int getSlotLimit(int slot) {
121121
(ConfigHolder.INSTANCE.compat.energy.nativeEUToFE &&
122122
GTCapabilityHelper.getForgeEnergyItem(item) != null));
123123

124-
this.circuitInventory = new NotifiableItemStackHandler(this, 1, IO.IN, IO.NONE)
124+
this.circuitInventory = new NotifiableItemStackHandler(1, IO.IN, IO.NONE)
125125
.setFilter(IntCircuitBehaviour::isIntegratedCircuit);
126126
}
127127

128+
@Override
129+
protected void constructTraits() {
130+
super.constructTraits();
131+
attachTrait(circuitInventory);
132+
}
133+
128134
//////////////////////////////////////
129135
// ***** Initialization ******//
130136
//////////////////////////////////////

src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import net.minecraft.MethodsReturnNonnullByDefault;
1919
import net.minecraft.util.Mth;
2020

21-
import java.util.function.Function;
22-
2321
import javax.annotation.ParametersAreNonnullByDefault;
2422

2523
@ParametersAreNonnullByDefault
@@ -31,25 +29,28 @@ public class TieredEnergyMachine extends TieredMachine implements ITieredMachine
3129
public final NotifiableEnergyContainer energyContainer;
3230
protected TickableSubscription explosionSub;
3331

34-
public TieredEnergyMachine(BlockEntityCreationInfo info, int tier,
35-
Function<TieredEnergyMachine, NotifiableEnergyContainer> energyContainerSupplier) {
32+
public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, NotifiableEnergyContainer container) {
3633
super(info, tier);
37-
energyContainer = energyContainerSupplier.apply(this);
34+
energyContainer = container;
3835
}
3936

4037
public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) {
4138
super(info, tier);
4239

4340
long tierVoltage = GTValues.V[tier];
4441
if (isEnergyEmitter()) {
45-
energyContainer = NotifiableEnergyContainer.emitterContainer(this,
46-
tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage());
42+
energyContainer = NotifiableEnergyContainer.emitterContainer(tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage());
4743
} else {
48-
energyContainer = NotifiableEnergyContainer.receiverContainer(this,
49-
tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage());
44+
energyContainer = NotifiableEnergyContainer.receiverContainer(tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage());
5045
}
5146
}
5247

48+
@Override
49+
protected void constructTraits() {
50+
super.constructTraits();
51+
attachTrait(energyContainer);
52+
}
53+
5354
//////////////////////////////////////
5455
// ***** Initialization ******//
5556
//////////////////////////////////////

src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.jetbrains.annotations.VisibleForTesting;
2222

2323
import java.util.*;
24-
import java.util.function.Function;
2524

2625
import javax.annotation.ParametersAreNonnullByDefault;
2726

@@ -64,7 +63,7 @@ public abstract class WorkableTieredMachine extends TieredEnergyMachine implemen
6463
protected boolean isMuffled;
6564
protected boolean previouslyMuffled = true;
6665

67-
public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Function<WorkableTieredMachine, RecipeLogic> recipeLogicSupplier, int importSlots, int exportSlots,
66+
public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, RecipeLogic logic, int importSlots, int exportSlots,
6867
int fluidImportSlots, int fluidExportSlots, Int2IntFunction tankScalingFunction) {
6968
super(info, tier);
7069
this.overclockTier = getMaxOverclockTier();
@@ -73,13 +72,13 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Function<Wo
7372
this.capabilitiesProxy = new EnumMap<>(IO.class);
7473
this.capabilitiesFlat = new EnumMap<>(IO.class);
7574
this.traitSubscriptions = new ArrayList<>();
76-
this.recipeLogic = recipeLogicSupplier.apply(this);
77-
this.importItems = new NotifiableItemStackHandler(this, importSlots, IO.IN, IO.BOTH);
78-
this.exportItems = new NotifiableItemStackHandler(this, exportSlots, IO.OUT);
79-
this.importFluids = new NotifiableFluidTank(this, fluidImportSlots, tankScalingFunction.applyAsInt(getTier()), IO.IN, IO.BOTH);
80-
this.exportFluids = new NotifiableFluidTank(this, fluidExportSlots, tankScalingFunction.applyAsInt(getTier()), IO.OUT);
81-
this.importComputation = new NotifiableComputationContainer(this, IO.IN, true);
82-
this.exportComputation = new NotifiableComputationContainer(this, IO.OUT, false);
75+
this.recipeLogic = logic;
76+
this.importItems = new NotifiableItemStackHandler(importSlots, IO.IN, IO.BOTH);
77+
this.exportItems = new NotifiableItemStackHandler(exportSlots, IO.OUT);
78+
this.importFluids = new NotifiableFluidTank(fluidImportSlots, tankScalingFunction.applyAsInt(getTier()), IO.IN, IO.BOTH);
79+
this.exportFluids = new NotifiableFluidTank(fluidExportSlots, tankScalingFunction.applyAsInt(getTier()), IO.OUT);
80+
this.importComputation = new NotifiableComputationContainer(IO.IN, true);
81+
this.exportComputation = new NotifiableComputationContainer(IO.OUT, false);
8382
}
8483

8584
public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) {
@@ -90,13 +89,19 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunc
9089
this.capabilitiesProxy = new EnumMap<>(IO.class);
9190
this.capabilitiesFlat = new EnumMap<>(IO.class);
9291
this.traitSubscriptions = new ArrayList<>();
93-
this.recipeLogic = new RecipeLogic(this);
94-
this.importItems = new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN);
95-
this.exportItems = new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT);
96-
this.importFluids = new NotifiableFluidTank(this, getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.IN);
97-
this.exportFluids = new NotifiableFluidTank(this, getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.OUT);
98-
this.importComputation = new NotifiableComputationContainer(this, IO.IN, true);
99-
this.exportComputation = new NotifiableComputationContainer(this, IO.OUT, false);
92+
this.recipeLogic = new RecipeLogic();
93+
this.importItems = new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN);
94+
this.exportItems = new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT);
95+
this.importFluids = new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.IN);
96+
this.exportFluids = new NotifiableFluidTank(getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.OUT);
97+
this.importComputation = new NotifiableComputationContainer(IO.IN, true);
98+
this.exportComputation = new NotifiableComputationContainer(IO.OUT, false);
99+
}
100+
101+
@Override
102+
protected void constructTraits() {
103+
super.constructTraits();
104+
attachTrait(recipeLogic, importItems, importFluids, exportItems, exportFluids, importComputation, exportComputation);
100105
}
101106

102107
//////////////////////////////////////

src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ public class WorkableElectricMultiblockMachine extends WorkableMultiblockMachine
5353
protected boolean batchEnabled;
5454

5555
public WorkableElectricMultiblockMachine(BlockEntityCreationInfo info,
56-
Function<WorkableMultiblockMachine, RecipeLogic> recipeLogicSupplier) {
57-
super(info, recipeLogicSupplier);
56+
RecipeLogic logic) {
57+
super(info, logic);
5858
}
5959

6060
public WorkableElectricMultiblockMachine(BlockEntityCreationInfo info) {

src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.jetbrains.annotations.VisibleForTesting;
3838

3939
import java.util.*;
40-
import java.util.function.Function;
4140

4241
import javax.annotation.ParametersAreNonnullByDefault;
4342

@@ -80,18 +79,24 @@ public abstract class WorkableMultiblockMachine extends MultiblockControllerMach
8079
protected VoidingMode voidingMode = VoidingMode.VOID_NONE;
8180

8281
public WorkableMultiblockMachine(BlockEntityCreationInfo info,
83-
Function<WorkableMultiblockMachine, RecipeLogic> recipeLogicSupplier) {
82+
RecipeLogic logic) {
8483
super(info);
8584
this.recipeTypes = getDefinition().getRecipeTypes();
8685
this.activeRecipeType = 0;
87-
this.recipeLogic = recipeLogicSupplier.apply(this);
86+
this.recipeLogic = logic;
8887
this.capabilitiesProxy = new EnumMap<>(IO.class);
8988
this.capabilitiesFlat = new EnumMap<>(IO.class);
9089
this.traitSubscriptions = new ArrayList<>();
9190
}
9291

9392
public WorkableMultiblockMachine(BlockEntityCreationInfo info) {
94-
this(info, RecipeLogic::new);
93+
this(info, new RecipeLogic());
94+
}
95+
96+
@Override
97+
protected void constructTraits() {
98+
super.constructTraits();
99+
attachTrait(recipeLogic);
95100
}
96101

97102
public void setMuffled(boolean muffled) {

src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,22 @@ public SimpleSteamMachine(BlockEntityCreationInfo info, boolean isHighPressure)
6666
}
6767
}
6868

69+
@Override
70+
protected void constructTraits() {
71+
super.constructTraits();
72+
attachTrait(importItems, exportItems);
73+
}
74+
6975
//////////////////////////////////////
7076
// ***** Initialization *****//
7177
//////////////////////////////////////
7278

7379
protected NotifiableItemStackHandler createImportItemHandler() {
74-
return new NotifiableItemStackHandler(this, getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN);
80+
return new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN);
7581
}
7682

7783
protected NotifiableItemStackHandler createExportItemHandler() {
78-
return new NotifiableItemStackHandler(this, getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT);
84+
return new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT);
7985
}
8086

8187
@Override

src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public abstract class SteamBoilerMachine extends SteamWorkableMachine
7070
IInteractedMachine {
7171

7272
@SaveField
73-
public final NotifiableFluidTank waterTank;
73+
public final NotifiableFluidTank waterTank = new NotifiableFluidTank(1, 16 * FluidType.BUCKET_VOLUME, IO.IN);
7474
@SaveField
7575
@SyncToClient
7676
@Getter
@@ -87,18 +87,19 @@ public abstract class SteamBoilerMachine extends SteamWorkableMachine
8787

8888
public SteamBoilerMachine(BlockEntityCreationInfo info, boolean isHighPressure) {
8989
super(info, isHighPressure);
90-
this.waterTank = createWaterTank();
9190
this.waterTank.setFilter(fluid -> fluid.getFluid().is(GTMaterials.Water.getFluidTag()));
9291
}
9392

93+
@Override
94+
protected void constructTraits() {
95+
super.constructTraits();
96+
attachTrait(waterTank);
97+
}
98+
9499
//////////////////////////////////////
95100
// ***** Initialization *****//
96101
//////////////////////////////////////
97102

98-
protected NotifiableFluidTank createWaterTank() {
99-
return new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN);
100-
}
101-
102103
@Override
103104
public void onLoad() {
104105
super.onLoad();

src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,16 @@ public abstract class SteamMachine extends MetaMachine implements ITieredMachine
3131
public SteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) {
3232
super(info);
3333
this.isHighPressure = isHighPressure;
34-
this.steamTank = new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME, IO.IN)
34+
this.steamTank = new NotifiableFluidTank( 1, 16 * FluidType.BUCKET_VOLUME, IO.IN)
3535
.setFilter(f -> f.getFluid().is(GTMaterials.Steam.getFluidTag()));
3636
}
3737

38+
@Override
39+
protected void constructTraits() {
40+
super.constructTraits();
41+
attachTrait(steamTank);
42+
}
43+
3844
//////////////////////////////////////
3945
// ***** Initialization *****//
4046
//////////////////////////////////////

src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
import org.jetbrains.annotations.Nullable;
3636

3737
import java.util.*;
38-
import java.util.function.Function;
3938

39+
import javax.annotation.OverridingMethodsMustInvokeSuper;
4040
import javax.annotation.ParametersAreNonnullByDefault;
4141

4242
@ParametersAreNonnullByDefault
@@ -74,19 +74,25 @@ public abstract class SteamWorkableMachine extends SteamMachine
7474
protected final List<ISubscription> traitSubscriptions;
7575

7676
public SteamWorkableMachine(BlockEntityCreationInfo info, boolean isHighPressure,
77-
Function<SteamWorkableMachine, RecipeLogic> recipeLogicSupplier) {
77+
RecipeLogic logic) {
7878
super(info, isHighPressure);
7979
this.recipeTypes = getDefinition().getRecipeTypes();
8080
this.activeRecipeType = 0;
81-
this.recipeLogic = recipeLogicSupplier.apply(this);
81+
this.recipeLogic = logic;
8282
this.capabilitiesProxy = new EnumMap<>(IO.class);
8383
this.capabilitiesFlat = new EnumMap<>(IO.class);
8484
this.traitSubscriptions = new ArrayList<>();
8585
this.outputFacing = hasFrontFacing() ? getFrontFacing().getOpposite() : Direction.UP;
8686
}
8787

8888
public SteamWorkableMachine(BlockEntityCreationInfo info, boolean isHighPressure) {
89-
this(info, isHighPressure, RecipeLogic::new);
89+
this(info, isHighPressure, new RecipeLogic());
90+
}
91+
92+
@Override
93+
@OverridingMethodsMustInvokeSuper
94+
protected void constructTraits() {
95+
attachTrait(recipeLogic);
9096
}
9197

9298
//////////////////////////////////////

0 commit comments

Comments
 (0)