Skip to content

Commit 5838cd8

Browse files
authored
Make gui configuration mutable (#135)
1 parent acc4f6d commit 5838cd8

File tree

4 files changed

+22
-42
lines changed

4 files changed

+22
-42
lines changed

src/main/java/net/swedz/tesseract/neoforge/compat/mi/machine/builder/MachineGuiConfiguration.java

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,6 @@
2020
import java.util.function.Consumer;
2121
import java.util.function.Supplier;
2222

23-
/**
24-
* <p>Represents a GUI configuration for a machine.</p>
25-
*
26-
* <p>This is effectively immutable and should be treated as such. Whenever a modification is made, a copy is created
27-
* and the modification is applied to the copy, rather than the original. This allows for branching of GUI
28-
* configurations without modifying the original instance. That capability is important for being able to add a steam
29-
* input slot, for example, without the steam slot also being included in the electric machines.</p>
30-
*/
3123
public final class MachineGuiConfiguration
3224
{
3325
private final boolean isMultiblock;
@@ -53,7 +45,7 @@ public final class MachineGuiConfiguration
5345
this.recipeType = recipeType;
5446
}
5547

56-
private MachineGuiConfiguration copy()
48+
public MachineGuiConfiguration copy()
5749
{
5850
var copy = new MachineGuiConfiguration(isMultiblock, steamMode, recipeType);
5951
copy.guiHeight = guiHeight;
@@ -124,37 +116,32 @@ public MachineRecipePredicate getPredicate()
124116

125117
public MachineGuiConfiguration guiHeight(int guiHeight)
126118
{
127-
var copy = this.copy();
128-
copy.guiHeight = guiHeight;
129-
return copy;
119+
this.guiHeight = guiHeight;
120+
return this;
130121
}
131122

132123
public MachineGuiConfiguration lockButton(boolean lockButton)
133124
{
134-
var copy = this.copy();
135-
copy.lockButton = lockButton;
136-
return copy;
125+
this.lockButton = lockButton;
126+
return this;
137127
}
138128

139129
public MachineGuiConfiguration inventoryOnlySlots(Consumer<MachineSlotConfiguration.Builder> builder)
140130
{
141-
var copy = this.copy();
142-
builder.accept(copy.inventoryOnlySlots);
143-
return copy;
131+
builder.accept(inventoryOnlySlots);
132+
return this;
144133
}
145134

146135
public MachineGuiConfiguration slots(Consumer<MachineSlotConfiguration.Builder> builder)
147136
{
148-
var copy = this.copy();
149-
builder.accept(copy.slots);
150-
return copy;
137+
builder.accept(slots);
138+
return this;
151139
}
152140

153141
public MachineGuiConfiguration progressBar(int renderX, int renderY, String progressBarType, boolean isVertical)
154142
{
155-
var copy = this.copy();
156-
copy.progressBar = new ProgressBar.Parameters(renderX, renderY, progressBarType, isVertical);
157-
return copy;
143+
this.progressBar = new ProgressBar.Parameters(renderX, renderY, progressBarType, isVertical);
144+
return this;
158145
}
159146

160147
public MachineGuiConfiguration progressBar(int renderX, int renderY, String progressBarType)
@@ -164,24 +151,21 @@ public MachineGuiConfiguration progressBar(int renderX, int renderY, String prog
164151

165152
public MachineGuiConfiguration energyBar(int renderX, int renderY)
166153
{
167-
var copy = this.copy();
168-
copy.energyBar = new EnergyBar.Parameters(renderX, renderY);
169-
return copy;
154+
this.energyBar = new EnergyBar.Parameters(renderX, renderY);
155+
return this;
170156
}
171157

172158
public MachineGuiConfiguration efficiencyBar(int renderX, int renderY)
173159
{
174-
var copy = this.copy();
175-
copy.efficiencyBar = new RecipeEfficiencyBar.Parameters(renderX, renderY);
176-
return copy;
160+
this.efficiencyBar = new RecipeEfficiencyBar.Parameters(renderX, renderY);
161+
return this;
177162
}
178163

179164
public MachineGuiConfiguration predicate(MachineRecipePredicate predicate)
180165
{
181166
Assert.notNull(predicate);
182-
var copy = this.copy();
183-
copy.predicate = predicate;
184-
return copy;
167+
this.predicate = predicate;
168+
return this;
185169
}
186170

187171
public MachineGuiParameters createGuiParams(ResourceLocation blockId)

src/main/java/net/swedz/tesseract/neoforge/compat/mi/machine/builder/MachineWithGuiBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ protected T gui(boolean isMultiblock, SteamMode steamMode, MachineRecipeType rec
1919
MachineGuiConfigurator builder)
2020
{
2121
Assert.noneNull(steamMode, builder);
22-
gui = builder.configure(new MachineGuiConfiguration(isMultiblock, steamMode, recipeType));
22+
gui = new MachineGuiConfiguration(isMultiblock, steamMode, recipeType);
23+
builder.configure(gui);
2324
return (T) this;
2425
}
2526
}

src/main/java/net/swedz/tesseract/neoforge/compat/mi/machine/builder/SingleBlockCraftingMachineBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ protected void internalRegister()
131131
int steamBuckets = index == 0 ? 2 : 4;
132132
String id = prefix + "_" + name;
133133
var guiParams = gui.createGuiParams(hook.id(id));
134-
var steamGui = gui.inventoryOnlySlots((s) -> s.fluidInput(steamX, steamY, MIFluids.STEAM::asFluid, steamBuckets));
134+
var steamGui = gui.copy().inventoryOnlySlots((s) -> s.fluidInput(steamX, steamY, MIFluids.STEAM::asFluid, steamBuckets));
135135

136136
HackedMachineRegistrationHelper.registerMachine(
137137
hook,

src/main/java/net/swedz/tesseract/neoforge/compat/mi/machine/builder/function/MachineGuiConfigurator.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,9 @@
66
public interface MachineGuiConfigurator
77
{
88
/**
9-
* <p>Configures the machine's gui configuration.</p>
10-
*
11-
* <p>It is extremely important you return the returned value of the last chained call of the configuration. Since
12-
* it is immutable, if you return an instance from earlier in the chain, you will not make use of the subsequent
13-
* modifications.</p>
9+
* Configures the machine's gui configuration.
1410
*
1511
* @param gui the machine gui configuration instance
16-
* @return the resulting gui configuration
1712
*/
18-
MachineGuiConfiguration configure(MachineGuiConfiguration gui);
13+
void configure(MachineGuiConfiguration gui);
1914
}

0 commit comments

Comments
 (0)