|
61 | 61 | import org.bukkit.inventory.ItemStack; |
62 | 62 | import org.bukkit.inventory.PlayerInventory; |
63 | 63 |
|
| 64 | +import java.util.Map; |
| 65 | + |
64 | 66 |
|
65 | 67 | public class PlayerListener implements Listener { |
66 | 68 |
|
@@ -232,20 +234,34 @@ public void onPlayerItemConsume(PlayerItemConsumeEvent event) { |
232 | 234 | event.setCancelled(true); |
233 | 235 | return; |
234 | 236 | } |
235 | | - /*if (player.getGameMode() != org.bukkit.GameMode.CREATIVE) { |
236 | | - brew.remove(item); |
237 | | - }*/ |
238 | 237 | if (VERSION.isOrLater(MinecraftVersion.V1_9)) { |
239 | | - if (player.getGameMode() != GameMode.CREATIVE) { |
240 | | -// replace the potion with an empty potion to avoid effects |
241 | | - event.setItem(new ItemStack(Material.POTION)); |
| 238 | + event.setCancelled(true); |
| 239 | + |
| 240 | + if (player.getGameMode() == GameMode.CREATIVE) |
| 241 | + return; |
| 242 | + |
| 243 | + ItemStack remaining = event.getItem().clone(); |
| 244 | + |
| 245 | + int amount = remaining.getAmount(); |
| 246 | + |
| 247 | + if (amount <= 1) { |
| 248 | + player.getInventory().setItem(event.getHand(), new ItemStack(Material.GLASS_BOTTLE)); |
242 | 249 | } else { |
243 | | -// Don't replace the item when keeping the potion, just cancel the event |
244 | | - event.setCancelled(true); |
| 250 | + remaining.setAmount(amount - 1); |
| 251 | + player.getInventory().setItem(event.getHand(), remaining); |
| 252 | + |
| 253 | + var leftovers = player.getInventory().addItem(new ItemStack(Material.GLASS_BOTTLE)); |
| 254 | + |
| 255 | + for (ItemStack leftover : leftovers.values()) { |
| 256 | + player.getWorld().dropItemNaturally(player.getLocation(), leftover); |
| 257 | + } |
245 | 258 | } |
246 | 259 | } |
247 | 260 | } |
248 | | - } else if (BUtil.getMaterialMap(config.getDrainItems()).containsKey(item.getType())) { |
| 261 | + return; |
| 262 | + } |
| 263 | + |
| 264 | + if (BUtil.getMaterialMap(config.getDrainItems()).containsKey(item.getType())) { |
249 | 265 | BPlayer bplayer = BPlayer.get(player); |
250 | 266 | if (bplayer != null) { |
251 | 267 | bplayer.drainByItem(player, item.getType()); |
|
0 commit comments