Skip to content

Commit f7ff1ae

Browse files
committed
Fix shulker boxes unstacking items upon an explosion (Fixes #85)
1 parent df6dc37 commit f7ff1ae

File tree

5 files changed

+95
-4
lines changed

5 files changed

+95
-4
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void onEnable()
4040
{
4141
super.onEnable();
4242

43-
setPrefix("&b[&9" + this.getDescription().getName() + "&b]&r");
43+
setPrefix("&b[&9" + this.getDescription().getName() + "&b]&r ");
4444

4545
this.commandManager = new CommandManager(this, "simplestack");
4646
commandManager.setDefaultSubCommand("help");
@@ -77,6 +77,8 @@ public void onEnable()
7777
registerEvent(new InventoryPickupItemListener(this));
7878
registerEvent(new PlayerItemConsumeListener(this));
7979
registerEvent(new ItemSpawnListener(this));
80+
registerEvent(new BlockExplodeListener(this));
81+
registerEvent(new EntityExplodeListener(this));
8082
if(MinecraftVersion.getVersionShort() >= 16)
8183
{
8284
registerEvent(new PrepareSmithingListener(this));
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.mikedeejay2.simplestack.listeners;
2+
3+
import com.mikedeejay2.simplestack.Simplestack;
4+
import com.mikedeejay2.simplestack.util.CancelUtils;
5+
import com.mikedeejay2.simplestack.util.MoveUtils;
6+
import com.mikedeejay2.simplestack.util.ShulkerBoxes;
7+
import org.bukkit.block.Block;
8+
import org.bukkit.entity.Player;
9+
import org.bukkit.event.EventHandler;
10+
import org.bukkit.event.EventPriority;
11+
import org.bukkit.event.Listener;
12+
import org.bukkit.event.block.BlockBreakEvent;
13+
import org.bukkit.event.block.BlockExplodeEvent;
14+
15+
/**
16+
* Listens for block explode events
17+
*
18+
* @author Mikedeejay2
19+
*/
20+
public class BlockExplodeListener implements Listener
21+
{
22+
private final Simplestack plugin;
23+
24+
public BlockExplodeListener(Simplestack plugin)
25+
{
26+
this.plugin = plugin;
27+
}
28+
29+
/**
30+
* BlockExplodeEvent
31+
* This is needed for when a shulker box breaks, because by default Minecraft
32+
* unstacks items inside of a shulker box automatically
33+
*
34+
* @param event The event being activated
35+
*/
36+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
37+
public void blockExplodeEvent(BlockExplodeEvent event)
38+
{
39+
for(Block block : event.blockList())
40+
{
41+
if(!ShulkerBoxes.isShulkerBox(block.getType())) continue;
42+
MoveUtils.preserveShulkerBox(block);
43+
}
44+
}
45+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.mikedeejay2.simplestack.listeners;
2+
3+
import com.mikedeejay2.simplestack.Simplestack;
4+
import com.mikedeejay2.simplestack.util.MoveUtils;
5+
import com.mikedeejay2.simplestack.util.ShulkerBoxes;
6+
import org.bukkit.block.Block;
7+
import org.bukkit.event.EventHandler;
8+
import org.bukkit.event.EventPriority;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.block.BlockExplodeEvent;
11+
import org.bukkit.event.entity.EntityExplodeEvent;
12+
13+
/**
14+
* Listens for block explode events
15+
*
16+
* @author Mikedeejay2
17+
*/
18+
public class EntityExplodeListener implements Listener
19+
{
20+
private final Simplestack plugin;
21+
22+
public EntityExplodeListener(Simplestack plugin)
23+
{
24+
this.plugin = plugin;
25+
}
26+
27+
/**
28+
* BlockExplodeEvent
29+
* This is needed for when a shulker box breaks, because by default Minecraft
30+
* unstacks items inside of a shulker box automatically
31+
*
32+
* @param event The event being activated
33+
*/
34+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
35+
public void blockExplodeEvent(EntityExplodeEvent event)
36+
{
37+
for(Block block : event.blockList())
38+
{
39+
if(!ShulkerBoxes.isShulkerBox(block.getType())) continue;
40+
MoveUtils.preserveShulkerBox(block);
41+
}
42+
}
43+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public void blockBreakEvent(BlockBreakEvent event)
4141
if(!ShulkerBoxes.isShulkerBox(block.getType())) return;
4242
if(CancelUtils.cancelPlayerCheck(plugin, player)) return;
4343

44-
MoveUtils.preserveShulkerBox(event, block);
44+
MoveUtils.preserveShulkerBox(block);
45+
event.setCancelled(true);
4546
}
4647
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.bukkit.entity.Player;
1414
import org.bukkit.event.Cancellable;
1515
import org.bukkit.event.block.BlockBreakEvent;
16+
import org.bukkit.event.block.BlockExplodeEvent;
1617
import org.bukkit.event.inventory.InventoryDragEvent;
1718
import org.bukkit.inventory.*;
1819
import org.bukkit.inventory.meta.BlockStateMeta;
@@ -366,7 +367,7 @@ public static boolean combineItemInternal(Simplestack plugin, ItemStack itemInSl
366367
* @param event Event that this method is being run in
367368
* @param block The block to check
368369
*/
369-
public static void preserveShulkerBox(BlockBreakEvent event, Block block)
370+
public static void preserveShulkerBox(Block block)
370371
{
371372
Location location = block.getLocation();
372373
World world = location.getWorld();
@@ -385,7 +386,6 @@ public static void preserveShulkerBox(BlockBreakEvent event, Block block)
385386

386387
world.dropItemNaturally(location, item);
387388
block.setType(Material.AIR);
388-
event.setCancelled(true);
389389
}
390390

391391

0 commit comments

Comments
 (0)