Skip to content

Commit 93596b3

Browse files
Fix wrong shop removing when fire FakeBlockBreakEvent
1 parent 05cf95c commit 93596b3

File tree

4 files changed

+54
-30
lines changed

4 files changed

+54
-30
lines changed

src/main/java/org/maxgamer/quickshop/listener/BlockListener.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.maxgamer.quickshop.api.shop.Shop;
4545
import org.maxgamer.quickshop.api.shop.ShopAction;
4646
import org.maxgamer.quickshop.util.MsgUtil;
47+
import org.maxgamer.quickshop.util.PermissionChecker;
4748
import org.maxgamer.quickshop.util.Util;
4849
import org.maxgamer.quickshop.util.logging.container.ShopRemoveLog;
4950
import org.maxgamer.quickshop.util.reload.ReloadResult;
@@ -71,6 +72,9 @@ private void init() {
7172
*/
7273
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
7374
public void onBreak(BlockBreakEvent e) {
75+
if (e instanceof PermissionChecker.FakeBlockBreakEvent) {
76+
return;
77+
}
7478
final Block b = e.getBlock();
7579
final Player p = e.getPlayer();
7680
// If the shop was a chest

src/main/java/org/maxgamer/quickshop/listener/LockListener.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.maxgamer.quickshop.Cache;
3737
import org.maxgamer.quickshop.QuickShop;
3838
import org.maxgamer.quickshop.api.shop.Shop;
39+
import org.maxgamer.quickshop.util.PermissionChecker;
3940
import org.maxgamer.quickshop.util.Util;
4041
import org.maxgamer.quickshop.util.reload.ReloadResult;
4142
import org.maxgamer.quickshop.util.reload.ReloadStatus;
@@ -66,10 +67,13 @@ public ReloadResult reloadModule() {
6667
}
6768

6869
/*
69-
* Removes chests when they're destroyed.
70+
* Removes sign when shop owner destroyed.
7071
*/
7172
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
7273
public void onBreak(BlockBreakEvent e) {
74+
if (e instanceof PermissionChecker.FakeBlockBreakEvent) {
75+
return;
76+
}
7377
Block b = e.getBlock();
7478
BlockState state = PaperLib.getBlockState(b, false).getState();
7579
if (state instanceof Sign) {

src/main/java/org/maxgamer/quickshop/listener/PlayerListener.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@
3333
import org.bukkit.event.block.Action;
3434
import org.bukkit.event.block.BlockBreakEvent;
3535
import org.bukkit.event.inventory.InventoryCloseEvent;
36-
import org.bukkit.event.player.*;
36+
import org.bukkit.event.player.PlayerAnimationEvent;
37+
import org.bukkit.event.player.PlayerInteractEvent;
38+
import org.bukkit.event.player.PlayerJoinEvent;
39+
import org.bukkit.event.player.PlayerLocaleChangeEvent;
40+
import org.bukkit.event.player.PlayerMoveEvent;
41+
import org.bukkit.event.player.PlayerQuitEvent;
42+
import org.bukkit.event.player.PlayerTeleportEvent;
3743
import org.bukkit.inventory.EquipmentSlot;
3844
import org.bukkit.inventory.Inventory;
3945
import org.bukkit.inventory.ItemStack;
@@ -48,6 +54,7 @@
4854
import org.maxgamer.quickshop.shop.SimpleInfo;
4955
import org.maxgamer.quickshop.util.InteractUtil;
5056
import org.maxgamer.quickshop.util.MsgUtil;
57+
import org.maxgamer.quickshop.util.PermissionChecker;
5158
import org.maxgamer.quickshop.util.Util;
5259
import org.maxgamer.quickshop.util.reload.ReloadResult;
5360
import org.maxgamer.quickshop.util.reload.ReloadStatus;
@@ -403,7 +410,7 @@ public void onTeleport(PlayerTeleportEvent e) {
403410
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
404411
public void onPlayerBreakShopCreationChest(BlockBreakEvent event) {
405412
@Nullable Player player = event.getPlayer();
406-
if (player == null) {
413+
if (event instanceof PermissionChecker.FakeBlockBreakEvent || player == null) {
407414
return;
408415
}
409416
Map<UUID, Info> actionMap = plugin.getShopManager().getActions();

src/main/java/org/maxgamer/quickshop/util/PermissionChecker.java

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -139,33 +139,7 @@ public Result canBuild(@NotNull Player player, @NotNull Block block) {
139139

140140
BlockBreakEvent beMainHand;
141141

142-
beMainHand = new BlockBreakEvent(block, player) {
143-
144-
@Override
145-
public void setCancelled(boolean cancel) {
146-
//tracking cancel plugin
147-
if (cancel && !isCancelled()) {
148-
Util.debugLog("An plugin blocked the protection checking event! See this stacktrace:");
149-
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
150-
Util.debugLog(element.getClassName() + "." + element.getMethodName() + "(" + element.getLineNumber() + ")");
151-
}
152-
isCanBuild.setMessage(Thread.currentThread().getStackTrace()[2].getClassName());
153-
out:
154-
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
155-
156-
for (RegisteredListener listener : getHandlerList().getRegisteredListeners()) {
157-
if (listener.getListener().getClass().getName().equals(element.getClassName())) {
158-
isCanBuild.setResult(false);
159-
isCanBuild.setMessage(listener.getPlugin().getName());
160-
isCanBuild.setListener(listener.getListener().getClass().getName());
161-
break out;
162-
}
163-
}
164-
}
165-
}
166-
super.setCancelled(cancel);
167-
}
168-
};
142+
beMainHand = new FakeBlockBreakEvent(block, player, isCanBuild);
169143
// Call for event for protection check start
170144
this.eventManager.callEvent(new ShopProtectionCheckEvent(block.getLocation(), player, ProtectionCheckStatus.BEGIN, beMainHand));
171145
beMainHand.setDropItems(false);
@@ -196,6 +170,41 @@ public void onTestEvent(BlockBreakEvent event) {
196170
return isCanBuild;
197171
}
198172

173+
public static class FakeBlockBreakEvent extends BlockBreakEvent {
174+
175+
private final org.maxgamer.quickshop.util.holder.Result isCanBuild;
176+
177+
public FakeBlockBreakEvent(@NotNull Block theBlock, @NotNull Player player, @NotNull org.maxgamer.quickshop.util.holder.Result isCanBuild) {
178+
super(theBlock, player);
179+
this.isCanBuild = isCanBuild;
180+
}
181+
182+
@Override
183+
public void setCancelled(boolean cancel) {
184+
//tracking cancel plugin
185+
if (cancel && !isCancelled()) {
186+
Util.debugLog("An plugin blocked the protection checking event! See this stacktrace:");
187+
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
188+
Util.debugLog(element.getClassName() + "." + element.getMethodName() + "(" + element.getLineNumber() + ")");
189+
}
190+
isCanBuild.setMessage(Thread.currentThread().getStackTrace()[2].getClassName());
191+
out:
192+
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
193+
194+
for (RegisteredListener listener : getHandlerList().getRegisteredListeners()) {
195+
if (listener.getListener().getClass().getName().equals(element.getClassName())) {
196+
isCanBuild.setResult(false);
197+
isCanBuild.setMessage(listener.getPlugin().getName());
198+
isCanBuild.setListener(listener.getListener().getClass().getName());
199+
break out;
200+
}
201+
}
202+
}
203+
}
204+
super.setCancelled(cancel);
205+
}
206+
}
207+
199208
/**
200209
* Callback for reloading
201210
*

0 commit comments

Comments
 (0)