Skip to content

Commit c1a02c8

Browse files
committed
Fix bug where consuming stews and soups would replace the entire stack with a bowl (Fixes #55)
1 parent 945c080 commit c1a02c8

File tree

4 files changed

+97
-2
lines changed

4 files changed

+97
-2
lines changed

src/main/java/com/mikedeejay2/simplestack/Simplestack.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.mikedeejay2.simplestack;
22

33
import com.mikedeejay2.mikedeejay2lib.PluginBase;
4+
import com.mikedeejay2.mikedeejay2lib.runnable.EnhancedRunnable;
45
import com.mikedeejay2.simplestack.commands.*;
56
import com.mikedeejay2.simplestack.config.Config;
67
import com.mikedeejay2.simplestack.listeners.*;
78
import com.mikedeejay2.simplestack.listeners.player.*;
89
import com.mikedeejay2.simplestack.runnables.GroundItemStacker;
10+
import org.bukkit.Bukkit;
11+
import org.bukkit.World;
12+
import org.bukkit.entity.FallingBlock;
913

1014
/**
1115
* Simple Stack plugin for Minecraft 1.14 - 1.16.4
@@ -56,6 +60,7 @@ public void onEnable()
5660
listenerManager.addListener(new PlayerBucketEmptyListener(this));
5761
listenerManager.addListener(new ItemMergeListener(this));
5862
listenerManager.addListener(new InventoryPickupItemListener(this));
63+
listenerManager.addListener(new PlayerItemConsumeListener(this));
5964
if(getMCVersion()[1] >= 16)
6065
{
6166
listenerManager.addListener(new PrepareSmithingListener(this));

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ public void playerBucketEmptyEvent(PlayerBucketEmptyEvent event)
4949
PlayerInventory inv = player.getInventory();
5050
if(stack.getAmount() <= 1) return;
5151
stack.setAmount(stack.getAmount()-1);
52-
MoveUtils.moveItem(plugin, new ItemStack(Material.BUCKET), inv, slot, inv, 0, 36, false);
53-
52+
MoveUtils.moveItem(plugin, new ItemStack(Material.BUCKET, 1), inv);
5453

5554
int finalSlot = slot;
5655
ItemStack finalStack = stack;
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.mikedeejay2.simplestack.listeners.player;
2+
3+
import com.mikedeejay2.simplestack.Simplestack;
4+
import com.mikedeejay2.simplestack.util.CancelUtils;
5+
import com.mikedeejay2.simplestack.util.MoveUtils;
6+
import org.bukkit.GameMode;
7+
import org.bukkit.Material;
8+
import org.bukkit.entity.Player;
9+
import org.bukkit.event.EventHandler;
10+
import org.bukkit.event.Listener;
11+
import org.bukkit.event.player.PlayerBucketEmptyEvent;
12+
import org.bukkit.event.player.PlayerItemConsumeEvent;
13+
import org.bukkit.inventory.ItemStack;
14+
import org.bukkit.inventory.PlayerInventory;
15+
import org.bukkit.scheduler.BukkitRunnable;
16+
17+
/**
18+
* Listens for Player Bucket Empty events
19+
*
20+
* @author Mikedeejay2
21+
*/
22+
public class PlayerItemConsumeListener implements Listener
23+
{
24+
private final Simplestack plugin;
25+
26+
public PlayerItemConsumeListener(Simplestack plugin)
27+
{
28+
this.plugin = plugin;
29+
}
30+
31+
/**
32+
* Fix bug where stews would replace the rest of the
33+
*
34+
* @param event The event being called
35+
*/
36+
@EventHandler
37+
public void playerItemConsumeEvent(PlayerItemConsumeEvent event)
38+
{
39+
Player player = event.getPlayer();
40+
ItemStack stack = event.getItem();
41+
if(!stack.getType().toString().endsWith("_STEW") && !stack.getType().toString().endsWith("_SOUP")) return;
42+
if(player.getGameMode() == GameMode.CREATIVE) return;
43+
if(CancelUtils.cancelPlayerCheck(plugin, player)) return;
44+
PlayerInventory inv = player.getInventory();
45+
int slot = inv.getHeldItemSlot();
46+
if(!stack.equals(inv.getItemInMainHand()))
47+
{
48+
slot = 40;
49+
}
50+
if(CancelUtils.cancelStackCheck(plugin, stack)) return;
51+
if(stack.getAmount() <= 1) return;
52+
stack.setAmount(stack.getAmount()-1);
53+
MoveUtils.moveItem(plugin, new ItemStack(Material.BOWL, 1), inv);
54+
55+
int finalSlot = slot;
56+
ItemStack finalStack = stack;
57+
new BukkitRunnable()
58+
{
59+
@Override
60+
public void run()
61+
{
62+
inv.setItem(finalSlot, finalStack);
63+
player.updateInventory();
64+
}
65+
}.runTask(plugin);
66+
}
67+
}

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,30 @@ public static void moveItemToInventory(Simplestack plugin, ItemStack item, Inven
133133
removeItemFromInventory(origItem, fromInv, amountBeingMoved - amountLeft);
134134
}
135135

136+
/**
137+
* Move an item to an inventory. The item has no original location.
138+
*
139+
* @param item The ItemStack being moved
140+
* @param inv The inventory to move the item into
141+
*/
142+
public static void moveItem(Simplestack plugin, ItemStack item, Inventory inv)
143+
{
144+
if(item.getType() == Material.AIR) return;
145+
for(int i = 0; i < inv.getStorageContents().length; ++i)
146+
{
147+
if(combineItemInternal(plugin, item, inv, i)) break;
148+
}
149+
if(item.getAmount() != 0)
150+
{
151+
for(int i = 0; i < inv.getStorageContents().length; ++i)
152+
{
153+
if(inv.getItem(i) != null) continue;
154+
inv.setItem(i, item);
155+
break;
156+
}
157+
}
158+
}
159+
136160
/**
137161
* Manually remove an item from an inventory if the current slot that the item
138162
* exists in is unknown.

0 commit comments

Comments
 (0)