Skip to content

Commit be9a97b

Browse files
committed
Fix duplication bug when spam clicking items around in the inventory (Fixes #84)
1 parent 3b606b5 commit be9a97b

3 files changed

Lines changed: 20 additions & 0 deletions

File tree

src/main/java/com/mikedeejay2/simplestack/listeners/player/InventoryClickListener.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mikedeejay2.simplestack.util.CancelUtils;
55
import com.mikedeejay2.simplestack.util.CheckUtils;
66
import com.mikedeejay2.simplestack.util.ClickUtils;
7+
import com.mikedeejay2.simplestack.util.MoveUtils;
78
import org.bukkit.entity.Player;
89
import org.bukkit.event.EventHandler;
910
import org.bukkit.event.EventPriority;
@@ -36,6 +37,11 @@ public InventoryClickListener(Simplestack plugin)
3637
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
3738
public void stackEvent(InventoryClickEvent event)
3839
{
40+
if(MoveUtils.doNotMove.contains(event.getWhoClicked()))
41+
{
42+
event.setCancelled(true);
43+
return;
44+
}
3945
Player player = (Player) event.getWhoClicked();
4046
InventoryAction action = event.getAction();
4147
CheckUtils.updateGUIManual(plugin, player.getOpenInventory().getTopInventory());

src/main/java/com/mikedeejay2/simplestack/listeners/player/InventoryDragListener.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ public InventoryDragListener(Simplestack plugin)
3939
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
4040
public void inventoryDragEvent(InventoryDragEvent event)
4141
{
42+
if(MoveUtils.doNotMove.contains(event.getWhoClicked()))
43+
{
44+
event.setCancelled(true);
45+
return;
46+
}
4247
if(event.getType() != DragType.EVEN) return;
4348
InventoryView inventoryView = event.getView();
4449
if(event.getInventory() instanceof BrewerInventory || event.getInventory() instanceof BeaconInventory) return;

src/main/java/com/mikedeejay2/simplestack/util/MoveUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
import org.bukkit.inventory.meta.BlockStateMeta;
1919
import org.bukkit.scheduler.BukkitRunnable;
2020

21+
import java.util.ArrayList;
2122
import java.util.Arrays;
23+
import java.util.List;
2224

2325
/**
2426
* Utilities for moving items from one location to another
@@ -27,6 +29,11 @@
2729
*/
2830
public final class MoveUtils
2931
{
32+
/**
33+
* A list holding all players whose movements should not be processed
34+
*/
35+
public static final List<Player> doNotMove = new ArrayList<>();
36+
3037
/**
3138
* Emulates picking up an item that is regularly unstackable from the ground
3239
* and attempting to stack it with other items in the player's inventory.
@@ -419,6 +426,7 @@ public static void moveAllItemsToPlayerInv(Simplestack plugin, Inventory invToMo
419426
*/
420427
public static void dragItemsSurvival(Simplestack plugin, InventoryDragEvent event, InventoryView inventoryView, Player player, ItemStack cursor)
421428
{
429+
doNotMove.add(player);
422430
Integer[] slots = event.getNewItems().keySet().toArray(new Integer[0]);
423431
ItemStack[] newItems = event.getNewItems().values().toArray(new ItemStack[0]);
424432
for(int i = 0; i < slots.length; i++)
@@ -471,6 +479,7 @@ public void run()
471479
ItemStack newCursor = cursor.clone();
472480
newCursor.setAmount(amountLeft + finalNewExtraAmount);
473481
player.setItemOnCursor(newCursor);
482+
doNotMove.remove(player);
474483
}
475484
}.runTask(plugin);
476485
}

0 commit comments

Comments
 (0)