@@ -108,24 +108,24 @@ public void addDetailedTooltips(ItemStack itemStack, @Nullable Player player, Li
108108 // region Interactions
109109
110110 @ Override
111- public InteractionResult interactLivingEntity (ItemStack pStack , Player pPlayer , LivingEntity pInteractionTarget ,
112- InteractionHand pUsedHand ) {
113- if (pPlayer .level ().isClientSide ) {
111+ public InteractionResult interactLivingEntity (ItemStack stack , Player player , LivingEntity interactionTarget ,
112+ InteractionHand usedHand ) {
113+ if (player .level ().isClientSide ) {
114114 return InteractionResult .FAIL ;
115115 }
116116
117- Optional <ItemStack > itemStack = catchEntity (pStack , pInteractionTarget ,
118- component -> pPlayer .displayClientMessage (component , true ));
117+ Optional <ItemStack > itemStack = catchEntity (stack , interactionTarget ,
118+ component -> player .displayClientMessage (component , true ));
119119 if (itemStack .isPresent ()) {
120120 ItemStack filledVial = itemStack .get ();
121- ItemStack hand = pPlayer .getItemInHand (pUsedHand );
121+ ItemStack hand = player .getItemInHand (usedHand );
122122 if (hand .isEmpty ()) {
123123 hand .setCount (1 ); // Forge will fire the destroyItemEvent and vanilla replaces it to
124124 // ItemStack.EMPTY if this isn't done
125- pPlayer .setItemInHand (pUsedHand , filledVial );
125+ player .setItemInHand (usedHand , filledVial );
126126 } else {
127- if (!pPlayer .addItem (filledVial )) {
128- pPlayer .drop (filledVial , false );
127+ if (!player .addItem (filledVial )) {
128+ player .drop (filledVial , false );
129129 }
130130 }
131131 return InteractionResult .SUCCESS ;
@@ -134,20 +134,25 @@ public InteractionResult interactLivingEntity(ItemStack pStack, Player pPlayer,
134134 }
135135
136136 @ Override
137- public InteractionResult useOn (UseOnContext pContext ) {
138- if (pContext .getLevel ().isClientSide ) {
137+ public InteractionResult useOn (UseOnContext context ) {
138+ if (context .getLevel ().isClientSide ) {
139139 return InteractionResult .FAIL ;
140140 }
141141
142- Player player = pContext .getPlayer ();
142+ Player player = context .getPlayer ();
143143
144144 // Only players may use the soul vial
145145 if (player == null ) {
146146 return InteractionResult .FAIL ;
147147 }
148148
149- return releaseEntity (pContext .getLevel (), pContext .getItemInHand (), pContext .getClickedFace (),
150- pContext .getClickedPos (), emptyVial -> player .setItemInHand (pContext .getHand (), emptyVial ));
149+ return releaseEntity (context .getLevel (), context .getItemInHand (), context .getClickedFace (), context .getClickedPos (), () -> {
150+ context .getItemInHand ().shrink (1 );
151+ var emptyVial = EIOItems .SOUL_VIAL .get ().getDefaultInstance ();
152+ if (!player .addItem (emptyVial )) {
153+ player .drop (emptyVial , false );
154+ }
155+ });
151156 }
152157
153158 /**
@@ -199,7 +204,7 @@ private static Optional<ItemStack> catchEntity(ItemStack soulVial, LivingEntity
199204 }
200205
201206 private static InteractionResult releaseEntity (Level level , ItemStack filledVial , Direction face , BlockPos pos ,
202- Consumer < ItemStack > emptyVialSetter ) {
207+ Runnable vialConsumed ) {
203208 var storedSoul = filledVial .get (EIODataComponents .SOUL );
204209
205210 if (storedSoul != null && storedSoul .hasEntity ()) {
@@ -220,7 +225,8 @@ private static InteractionResult releaseEntity(Level level, ItemStack filledVial
220225 ent .setYRot (rotation );
221226 level .addFreshEntity (ent );
222227 });
223- emptyVialSetter .accept (EIOItems .SOUL_VIAL .get ().getDefaultInstance ());
228+
229+ vialConsumed .run ();
224230 }
225231
226232 return InteractionResult .SUCCESS ;
@@ -261,7 +267,7 @@ public static void onLivingInteract(PlayerInteractEvent.EntityInteractSpecific e
261267 stack = stack .copy ();
262268 }
263269
264- if (stack .is (EIOItems .SOUL_VIAL . get () )) {
270+ if (stack .is (EIOItems .SOUL_VIAL )) {
265271 if (event .getTarget () instanceof AbstractHorse || event .getTarget () instanceof Villager
266272 || event .getTarget () instanceof WanderingTrader || event .getTarget () instanceof Wolf ) {
267273 stack .interactLivingEntity (event .getEntity (), (LivingEntity ) event .getTarget (), event .getHand ());
@@ -291,10 +297,12 @@ protected ItemStack execute(BlockSource source, ItemStack stack) {
291297
292298 private ItemStack release (BlockSource source , ItemStack stack ) {
293299 Direction dispenserDirection = source .state ().getValue (DispenserBlock .FACING );
294- AtomicReference <ItemStack > emptyVial = new AtomicReference <>();
295- releaseEntity (source .level (), stack , dispenserDirection , source .pos (), emptyVial ::set );
296- if (emptyVial .get () != null ) {
297- return emptyVial .get ();
300+ AtomicReference <ItemStack > resultStack = new AtomicReference <>();
301+ releaseEntity (source .level (), stack , dispenserDirection , source .pos (),
302+ () -> this .consumeWithRemainder (source , stack , EIOItems .SOUL_VIAL .get ().getDefaultInstance ()));
303+
304+ if (resultStack .get () != null ) {
305+ return resultStack .get ();
298306 } else {
299307 this .setSuccess (false );
300308 return stack ;
@@ -308,8 +316,7 @@ private ItemStack capture(BlockSource source, ItemStack stack) {
308316 living -> !(living instanceof Player ))) {
309317
310318 // Copy, consumeWithRemainder will shrink the stack.
311- Optional <ItemStack > filledVial = catchEntity (stack .copy (), livingentity , component -> {
312- });
319+ Optional <ItemStack > filledVial = catchEntity (stack .copy (), livingentity , component -> {});
313320 if (filledVial .isPresent ()) {
314321 return this .consumeWithRemainder (source , stack , filledVial .get ());
315322 }
0 commit comments