Skip to content

Commit e38d8fd

Browse files
committed
Add filtering option on creative inventory interaction
1 parent 58523d6 commit e38d8fd

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/main/java/me/minoneer/bukkit/bookexploit/BookListener.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package me.minoneer.bukkit.bookexploit;
22

33
import org.bukkit.Material;
4+
import org.bukkit.entity.HumanEntity;
45
import org.bukkit.entity.Player;
56
import org.bukkit.event.EventHandler;
67
import org.bukkit.event.EventPriority;
78
import org.bukkit.event.Listener;
89
import org.bukkit.event.block.Action;
10+
import org.bukkit.event.inventory.InventoryCreativeEvent;
911
import org.bukkit.event.player.PlayerEditBookEvent;
1012
import org.bukkit.event.player.PlayerInteractEvent;
1113
import org.bukkit.inventory.EquipmentSlot;
@@ -85,4 +87,32 @@ public void onBookRead(@NotNull final PlayerInteractEvent event) {
8587
}
8688
}
8789
}
90+
91+
@EventHandler(priority = EventPriority.LOW)
92+
public void onCreativeInventory(@NotNull final InventoryCreativeEvent event) {
93+
if (!config.isOnCreativeInventory()) {
94+
return;
95+
}
96+
final HumanEntity clicker = event.getWhoClicked();
97+
if (!(clicker instanceof Player)) {
98+
return;
99+
}
100+
final Player player = (Player) clicker;
101+
if (player.hasPermission("bookfilter.overridefilter")) {
102+
return;
103+
}
104+
final ItemStack eventItem = event.getCurrentItem();
105+
final ItemStack filteredEventItem = bookFilter.filterBook(eventItem);
106+
if (filteredEventItem != null) {
107+
logger.log(Level.WARNING, "Player {0} has a book with illegal click events!", player);
108+
event.setCurrentItem(filteredEventItem);
109+
}
110+
111+
final ItemStack cursorItem = event.getCurrentItem();
112+
final ItemStack filteredCursorItem = bookFilter.filterBook(cursorItem);
113+
if (filteredCursorItem != null) {
114+
logger.log(Level.WARNING, "Player {0} has a book with illegal click events!", player);
115+
event.setCursor(filteredCursorItem);
116+
}
117+
}
88118
}

src/main/java/me/minoneer/bukkit/bookexploit/ConfigHandler.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class ConfigHandler extends AbstractConfigHandler {
1414
private static final String PATH_WARNING = "chat_warning";
1515
private static final String PATH_ON_CREATION = "activate.on_creation";
1616
private static final String PATH_ON_READ = "activate.on_read";
17+
private static final String PATH_ON_CREATIVE_INVENTORY = "activate.on_creative_inventory";
1718
private static final String PATH_DEBUG = "log_debug";
1819

1920
private static final List<String> DEF_FILTER = Arrays.asList(
@@ -38,6 +39,7 @@ public final class ConfigHandler extends AbstractConfigHandler {
3839
private List<String> chatWarning;
3940
private boolean onCreation;
4041
private boolean onRead;
42+
private boolean onCreativeInventory;
4143
private boolean debug;
4244

4345
public ConfigHandler(@NotNull final Plugin plugin) {
@@ -67,6 +69,8 @@ protected void loadData() {
6769

6870
onRead = config.getBoolean(PATH_ON_READ);
6971

72+
onCreativeInventory = config.getBoolean(PATH_ON_CREATIVE_INVENTORY);
73+
7074
debug = config.getBoolean(PATH_DEBUG);
7175
}
7276

@@ -75,6 +79,7 @@ protected void addDefaults() {
7579
config.addDefault(PATH_FILTER, DEF_FILTER);
7680
config.addDefault(PATH_WARNING, DEF_WARNING);
7781
config.addDefault(PATH_ON_CREATION, true);
82+
config.addDefault(PATH_ON_CREATIVE_INVENTORY, true);
7883
config.addDefault(PATH_ON_READ, false);
7984
config.addDefault(PATH_DEBUG, false);
8085
}
@@ -97,6 +102,10 @@ public boolean isOnRead() {
97102
return onRead;
98103
}
99104

105+
public boolean isOnCreativeInventory() {
106+
return onCreativeInventory;
107+
}
108+
100109
public boolean isDebug() {
101110
return debug;
102111
}

0 commit comments

Comments
 (0)