Skip to content

Commit 1d37443

Browse files
committed
Get the backTool preview rendering to work
Fix the BackToolFeatureRenderer still directly depending on the HeldTools map right now there are many areas that can get clean up and I swear I will do it, once I got a working version of the code ™️
1 parent c2d1261 commit 1d37443

4 files changed

Lines changed: 452 additions & 227 deletions

File tree

src/main/java/com/daniking/backtools/BackToolFeatureRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void render(final @NotNull MatrixStack matrixStack, final @NotNull Vertex
4141
final boolean shouldRenderBack = (!playerRenderState.capeVisible || playerRenderState.skinTextures.capeTexture() == null || BackTools.getConfigHandler().shouldRenderWithCapes()) &&
4242
playerRenderState.sleepingDirection == null;
4343

44-
if (!playerRenderState.invisible && BackTools.HELD_TOOLS.containsKey(playerRenderState.name)) {
44+
if (!playerRenderState.invisible) {
4545
final @Nullable IItemContext itemContext = itemContextGetter.apply(playerRenderState.name);
4646

4747
if (itemContext != null && itemContext.isValid()) {

src/main/java/com/daniking/backtools/config/ToolTransformation.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public boolean isBlacklisted() {
315315
return isBlacklisted;
316316
}
317317

318-
public boolean isInvalid() {
318+
public boolean isValid() {
319319
return invalidComponentChanges == null;
320320
}
321321

@@ -400,6 +400,14 @@ public boolean isInvalid() {
400400
return this;
401401
}
402402

403+
public @NotNull ItemStack createStack(final @NotNull Item item) {
404+
if (changes == null) {
405+
return new ItemStack(item);
406+
} else {
407+
return new ItemStack(Registries.ITEM.getEntry(item), 1, changes); // todo use dynamic registry from ConfigHandler
408+
}
409+
}
410+
403411
public @NotNull ToolTransformation build() {
404412
return new ToolTransformation(
405413
changes, invalidComponentChanges,

src/main/java/com/daniking/backtools/config/menu/ModMenuIntegration.java

Lines changed: 11 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@
44
import com.daniking.backtools.config.AItemLike;
55
import com.daniking.backtools.config.ToolTransformation;
66
import com.daniking.backtools.config.menu.yacl.ButtonList;
7-
import com.daniking.backtools.config.menu.yacl.ItemTagControllerBuilder;
7+
import com.daniking.backtools.config.menu.yacl.ToolTransformationScreen;
88
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
99
import com.terraformersmc.modmenu.api.ModMenuApi;
1010
import dev.isxander.yacl3.api.*;
1111
import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
12-
import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder;
13-
import dev.isxander.yacl3.api.controller.StringControllerBuilder;
14-
import dev.isxander.yacl3.impl.SimpleStateManager;
1512
import net.fabricmc.api.EnvType;
1613
import net.fabricmc.api.Environment;
1714
import net.minecraft.client.MinecraftClient;
@@ -20,7 +17,6 @@
2017
import org.jetbrains.annotations.NotNull;
2118

2219
import java.util.*;
23-
import java.util.concurrent.atomic.AtomicReference;
2420
import java.util.function.Consumer;
2521
import java.util.function.Supplier;
2622

@@ -70,7 +66,7 @@ public ConfigScreenFactory<?> getModConfigScreenFactory() {
7066
ConfigCategory.createBuilder().
7167
name(Text.literal("back tools")).
7268
group(ButtonList.createBuilder().
73-
state(new ListStateManager(
69+
state(StateManager.createSimple(
7470
new ListBinding(
7571
() -> BackTools.getConfigHandler().rawBackTools(),
7672
newMap -> BackTools.getConfigHandler().rawBackTools(newMap))
@@ -98,21 +94,22 @@ public Map.Entry<AItemLike, ToolTransformation> defaultValue() {
9894
(yaclScreen, entryListButtonOption) -> {
9995
Map.Entry<AItemLike, ToolTransformation> pendingValue = entryListButtonOption.pendingValue();
10096
MinecraftClient.getInstance().setScreen(
101-
buildTransformationScreen(
97+
ToolTransformationScreen.createToolTransformationScreen(
98+
yaclScreen,
99+
false,
102100
pendingValue.getKey(),
103101
pendingValue.getValue(),
104-
Text.literal("back tools"),
105102
BackTools.getConfigHandler().isAdvancedMenu(),
106103
entryListButtonOption::requestSet
107-
).generateScreen(yaclScreen)
104+
)
108105
);
109106
}).build()
110107
).build()
111108
).category(
112109
ConfigCategory.createBuilder().
113110
name(Text.literal("belt tools")).
114111
group(ButtonList.createBuilder().
115-
state(new ListStateManager(
112+
state(StateManager.createSimple(
116113
new ListBinding(
117114
() -> BackTools.getConfigHandler().rawBeltTools(),
118115
newMap -> BackTools.getConfigHandler().rawBeltTools(newMap))
@@ -140,157 +137,21 @@ public Map.Entry<AItemLike, ToolTransformation> defaultValue() {
140137
(yaclScreen, entryListButtonOption) -> {
141138
Map.Entry<AItemLike, ToolTransformation> pendingValue = entryListButtonOption.pendingValue();
142139
MinecraftClient.getInstance().setScreen(
143-
buildTransformationScreen(
140+
ToolTransformationScreen.createToolTransformationScreen(
141+
yaclScreen,
142+
true,
144143
pendingValue.getKey(),
145144
pendingValue.getValue(),
146-
Text.literal("belt tools"),
147145
BackTools.getConfigHandler().isAdvancedMenu(),
148146
entryListButtonOption::requestSet
149-
).generateScreen(yaclScreen)
147+
)
150148
);
151149
}).build()
152150
).build()
153151
).build().
154152
generateScreen(parent);
155153
}
156154

157-
private static @NotNull YetAnotherConfigLib buildTransformationScreen(final @NotNull AItemLike initialItemLike,
158-
final @NotNull ToolTransformation toolTransformation,
159-
final Text toolPlacementType,
160-
final boolean advancedMode,
161-
final @NotNull Consumer<Map.Entry<AItemLike, ToolTransformation>> resultConsumer) { // todo translations
162-
final @NotNull AtomicReference<@NotNull AItemLike> itemLikeReference = new AtomicReference<>(initialItemLike);
163-
final @NotNull ToolTransformation.ToolTransformationBuilder toolTransformationBuilder = toolTransformation.toBuilder();
164-
final @NotNull AtomicReference<@NotNull String> rawComponentReference = new AtomicReference<>("{}"); // todo
165-
166-
return YetAnotherConfigLib.createBuilder().
167-
title(toolPlacementType).
168-
category(ConfigCategory.createBuilder().
169-
name(toolPlacementType).
170-
option(
171-
Option.<AItemLike>createBuilder().
172-
name(Text.literal("item (tag)")).
173-
binding(AItemLike.fromItem(Items.STONE_SWORD),
174-
itemLikeReference::get,
175-
itemLikeReference::set
176-
).
177-
controller(ItemTagControllerBuilder::create).//description(OptionDescription.createBuilder().).
178-
build()
179-
).optionIf(advancedMode, Option.<String>createBuilder().
180-
name(Text.literal("components")).
181-
controller(StringControllerBuilder::create).
182-
binding(
183-
"{}", // todo
184-
rawComponentReference::get,
185-
rawComponentReference::set
186-
).build()
187-
).groupIf(advancedMode,
188-
OptionGroup.createBuilder().
189-
name(Text.literal("Offset")).
190-
option(Option.<Float>createBuilder().
191-
name(Text.literal("X")).
192-
controller(FloatFieldControllerBuilder::create).
193-
binding(0F,
194-
toolTransformationBuilder::offsetX,
195-
toolTransformationBuilder::offsetX
196-
).build()
197-
).
198-
option(Option.<Float>createBuilder().
199-
name(Text.literal("Y")).
200-
controller(FloatFieldControllerBuilder::create).
201-
binding(0F,
202-
toolTransformationBuilder::offsetY,
203-
toolTransformationBuilder::offsetY
204-
).build()
205-
).
206-
option(Option.<Float>createBuilder().
207-
name(Text.literal("Z")).
208-
controller(FloatFieldControllerBuilder::create).
209-
binding(0F,
210-
toolTransformationBuilder::offsetZ,
211-
toolTransformationBuilder::offsetZ
212-
).build()
213-
).build()
214-
).group(OptionGroup.createBuilder().
215-
name(Text.literal("rotation")).
216-
optionIf(advancedMode, Option.<Float>createBuilder().
217-
name(Text.literal("X")).
218-
controller(FloatFieldControllerBuilder::create).
219-
binding(0F,
220-
toolTransformationBuilder::rotationX,
221-
toolTransformationBuilder::rotationX
222-
).build()).
223-
optionIf(advancedMode, Option.<Float>createBuilder().
224-
name(Text.literal("Y")).
225-
controller(FloatFieldControllerBuilder::create).
226-
binding(0F,
227-
toolTransformationBuilder::rotationY,
228-
toolTransformationBuilder::rotationY
229-
).build()).
230-
option(Option.<Float>createBuilder().
231-
name(Text.literal("Z")).
232-
controller(FloatFieldControllerBuilder::create).
233-
binding(0F,
234-
toolTransformationBuilder::rotationZ,
235-
toolTransformationBuilder::rotationZ
236-
).build()).
237-
build()
238-
).groupIf(advancedMode,
239-
OptionGroup.createBuilder().
240-
name(Text.literal("Scale")).
241-
option(Option.<Float>createBuilder().
242-
name(Text.literal("X")).
243-
controller(FloatFieldControllerBuilder::create).
244-
binding(1F,
245-
toolTransformationBuilder::scaleX,
246-
toolTransformationBuilder::scaleX
247-
).build()
248-
).
249-
option(Option.<Float>createBuilder().
250-
name(Text.literal("Y")).
251-
controller(FloatFieldControllerBuilder::create).
252-
binding(1F,
253-
toolTransformationBuilder::scaleY,
254-
toolTransformationBuilder::scaleY
255-
).build()
256-
).
257-
option(Option.<Float>createBuilder().
258-
name(Text.literal("Z")).
259-
controller(FloatFieldControllerBuilder::create).
260-
binding(1F,
261-
toolTransformationBuilder::scaleZ,
262-
toolTransformationBuilder::scaleZ
263-
).build()
264-
).build()
265-
).optionIf(advancedMode, Option.<Boolean>createBuilder().
266-
name(Text.literal("is symmetric")).
267-
controller(option -> BooleanControllerBuilder.create(option).
268-
trueFalseFormatter()
269-
).binding(
270-
true,
271-
toolTransformationBuilder::isSymmetric,
272-
toolTransformationBuilder::isSymmetric
273-
).build()
274-
).option(Option.<Boolean>createBuilder().
275-
name(Text.literal("is blacklisted")).
276-
controller(option -> BooleanControllerBuilder.create(option).
277-
trueFalseFormatter()
278-
).binding(
279-
false,
280-
toolTransformationBuilder::isBlacklisted,
281-
toolTransformationBuilder::isBlacklisted
282-
).build()
283-
).build()
284-
).save(() -> resultConsumer.accept(Map.entry(itemLikeReference.get(), toolTransformationBuilder.build()))).
285-
build();
286-
}
287-
288-
private static class ListStateManager extends SimpleStateManager<@NotNull List<Map.@NotNull Entry<@NotNull AItemLike, @NotNull ToolTransformation>>> { // todo????
289-
public ListStateManager(final @NotNull ListBinding binding) {
290-
super(binding);
291-
}
292-
}
293-
294155
private static class ListBinding implements Binding<@NotNull List<Map.@NotNull Entry<@NotNull AItemLike, @NotNull ToolTransformation>>> {
295156
private final @NotNull Supplier<@NotNull SequencedMap<@NotNull AItemLike, @NotNull ToolTransformation>> mapGetter;
296157
private final @NotNull Consumer<@NotNull LinkedHashMap<@NotNull AItemLike, @NotNull ToolTransformation>> mapSetter;

0 commit comments

Comments
 (0)