55import me .devnatan .inventoryframework .feature .Feature ;
66import me .devnatan .inventoryframework .pipeline .PipelineInterceptor ;
77import 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 ;
128import net .kyori .adventure .text .Component ;
139import net .kyori .adventure .text .serializer .plain .PlainTextComponentSerializer ;
1410import net .minestom .server .component .DataComponents ;
1511import 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 ;
1615import net .minestom .server .inventory .Inventory ;
1716import net .minestom .server .inventory .type .AnvilInventory ;
1817import 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