Skip to content

Commit db208a6

Browse files
committed
Fix anvil feature
1 parent bb9453e commit db208a6

1 file changed

Lines changed: 23 additions & 50 deletions

File tree

minestomAnvilInput/src/main/java/me/devnatan/AnvilInputFeature.java

Lines changed: 23 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55
import me.devnatan.inventoryframework.feature.Feature;
66
import me.devnatan.inventoryframework.pipeline.PipelineInterceptor;
77
import me.devnatan.inventoryframework.pipeline.StandardPipelinePhases;
8-
import me.devnatan.inventoryframework.state.State;
9-
import me.devnatan.inventoryframework.state.StateValue;
10-
import me.devnatan.inventoryframework.state.StateValueHost;
11-
import me.devnatan.inventoryframework.state.StateWatcher;
128
import net.kyori.adventure.text.Component;
139
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
1410
import net.minestom.server.component.DataComponents;
1511
import net.minestom.server.entity.Player;
12+
import net.minestom.server.event.EventFilter;
13+
import net.minestom.server.event.EventNode;
14+
import net.minestom.server.event.player.PlayerAnvilInputEvent;
1615
import net.minestom.server.inventory.Inventory;
1716
import net.minestom.server.inventory.type.AnvilInventory;
1817
import net.minestom.server.item.ItemStack;
@@ -106,20 +105,26 @@ private void handleClick(PlatformView view) {
106105

107106
final int resultSlot = context.getContainer().getType().getResultSlots()[0];
108107
if (context.getClickedSlot() != resultSlot) return;
109-
IFDebug.debug("context clicked slot: %d", context.getClickedSlot());
110108

111-
final ItemStack resultItem = context.getItem();
112-
IFDebug.debug("result item: %s", resultItem);
113-
if (resultItem.material() == Material.AIR) return;
109+
final MinestomViewContainer container = (MinestomViewContainer) context.getContainer();
110+
111+
ItemStack itemStack = container.inventory().getItemStack(resultSlot);
112+
113+
if (itemStack.material() == Material.AIR) {
114+
IFDebug.debug("No valid item found, aborting");
115+
return;
116+
}
114117

115-
final String text = PlainTextComponentSerializer.plainText().serialize(requireNonNull(resultItem.get(DataComponents.ITEM_NAME)));
116-
final Inventory clickedInventory =
117-
(Inventory) requireNonNull(context.getClickOrigin().getInventory(), "Clicked inventory cannot be null");
118-
ItemStack ingredientItem = requireNonNull(clickedInventory.getItemStack(INGREDIENT_SLOT));
118+
Component itemName = itemStack.get(DataComponents.ITEM_NAME);
119+
if (itemName == null) {
120+
IFDebug.debug("Item has no name component");
121+
return;
122+
}
123+
124+
final String text = PlainTextComponentSerializer.plainText().serialize(itemName);
125+
IFDebug.debug("Extracted text: '%s'", text);
119126

120-
ingredientItem = ingredientItem.with(DataComponents.ITEM_NAME, Component.text(text));
121127
context.updateState(anvilInput, text);
122-
clickedInventory.setItemStack(INGREDIENT_SLOT, ingredientItem);
123128

124129
if (config.closeOnSelect) {
125130
context.closeForPlayer();
@@ -137,42 +142,12 @@ private void handleOpen(PlatformView view) {
137142

138143
// Forces internal state initialization
139144
context.getInternalStateValue(anvilInput);
140-
IFDebug.debug("handle open");
141-
IFDebug.debug("watching state %d", anvilInput.internalId());
142-
context.watchState(anvilInput.internalId(), new StateWatcher() {
143-
@Override
144-
public void stateRegistered(@NotNull State<?> state, Object caller) {
145-
IFDebug.debug("State registered");
146-
}
147-
148-
@Override
149-
public void stateUnregistered(@NotNull State<?> state, Object caller) {
150-
IFDebug.debug("State unregistered");
151-
}
152-
153-
@Override
154-
public void stateValueGet(
155-
@NotNull State<?> state,
156-
@NotNull StateValueHost host,
157-
@NotNull StateValue internalValue,
158-
Object rawValue) {
159-
IFDebug.debug("State value get: %s", rawValue);
160-
}
161-
162-
@Override
163-
public void stateValueSet(
164-
@NotNull StateValueHost host,
165-
@NotNull StateValue value,
166-
Object rawOldValue,
167-
Object rawNewValue) {
168-
IFDebug.debug("State value set: %s -> %s", rawOldValue, rawNewValue);
169-
updatePhysicalResult((String) rawNewValue, ((IFRenderContext) host).getContainer());
170-
}
171-
});
172145

173146
final String globalInitialInput = config.initialInput;
174147
final String scopedInitialInput = anvilInput.get(context);
175148

149+
context.getPlayer().eventNode().addChild(EventNode.type("anvil", EventFilter.PLAYER).addListener(PlayerAnvilInputEvent.class, event -> context.updateState(anvilInput, event.getInput())));
150+
176151
final Inventory inventory = openInventory(
177152
context.getPlayer(),
178153
context.getConfig().getTitle(),
@@ -196,7 +171,7 @@ private void handleClose(PlatformView view) {
196171
final ItemStack item = container.inventory().getItemStack(slot);
197172

198173
if (item.material() == Material.AIR) return;
199-
174+
context.getPlayer().eventNode().removeChildren("anvil");
200175
final String input = PlainTextComponentSerializer.plainText().serialize(requireNonNull(item.get(DataComponents.ITEM_NAME)));
201176
context.updateState(anvilInput, input);
202177
});
@@ -212,9 +187,7 @@ private Inventory openInventory(Player player, Object title, String initialInput
212187
}
213188
final AnvilInventory inventory = new AnvilInventory(component);
214189

215-
ItemStack item = ItemStack.builder(Material.PAPER)
216-
.set(DataComponents.DAMAGE, 0)
217-
.set(DataComponents.ITEM_NAME, Component.text(initialInput)).build();
190+
ItemStack item = ItemStack.builder(Material.PAPER).set(DataComponents.ITEM_NAME, Component.text(initialInput)).build();
218191
inventory.setItemStack(0, item);
219192
player.openInventory(inventory);
220193

0 commit comments

Comments
 (0)