Skip to content

Commit fdc2ac6

Browse files
authored
Merge pull request #5 from minoneer/protocol-lib
Add support for book creation in creative via optional ProtocolLib
2 parents cf71d2e + 11e957e commit fdc2ac6

File tree

4 files changed

+75
-1
lines changed

4 files changed

+75
-1
lines changed

pom.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,31 @@
125125
<artifactId>annotations</artifactId>
126126
<version>20.1.0</version>
127127
</dependency>
128+
<dependency>
129+
<groupId>com.comphenix.protocol</groupId>
130+
<artifactId>ProtocolLib</artifactId>
131+
<version>4.5.0</version>
132+
<exclusions>
133+
<exclusion>
134+
<groupId>org.spigotmc</groupId>
135+
<artifactId>spigot</artifactId>
136+
</exclusion>
137+
<exclusion>
138+
<groupId>org.spigotmc</groupId>
139+
<artifactId>spigot-api</artifactId>
140+
</exclusion>
141+
</exclusions>
142+
</dependency>
128143
</dependencies>
129144

130145
<repositories>
131146
<repository>
132147
<id>spigot-repo</id>
133148
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
134149
</repository>
150+
<repository>
151+
<id>dmulloy2-repo</id>
152+
<url>https://repo.dmulloy2.net/nexus/repository/public/</url>
153+
</repository>
135154
</repositories>
136155
</project>

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public void onEnable() {
2424

2525
registerEvents(config, filter);
2626

27+
enableProtocolLib(config, filter);
28+
2729
getLogger().log(Level.INFO, "{0} by minoneer activated", getDescription().getFullName());
2830
}
2931

@@ -42,6 +44,15 @@ private void registerEvents(final ConfigHandler config, final BookFilter filter)
4244
Bukkit.getPluginManager().registerEvents(listener, this);
4345
}
4446

47+
private void enableProtocolLib(ConfigHandler config, BookFilter filter) {
48+
if (getServer().getPluginManager().isPluginEnabled("ProtocolLib")) {
49+
getLogger().info("Found ProtocolLib, enabling advanced protection features.");
50+
ProtocolLibHook.activate(this, filter, config, getLogger());
51+
} else {
52+
getLogger().warning("Missing ProtocolLib dependency, some protections are not available.");
53+
}
54+
}
55+
4556
@Nullable
4657
public static String limitLoggingString(@Nullable final String input) {
4758
if (input == null) {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package me.minoneer.bukkit.bookexploit;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.ProtocolLibrary;
5+
import com.comphenix.protocol.ProtocolManager;
6+
import com.comphenix.protocol.events.ListenerPriority;
7+
import com.comphenix.protocol.events.PacketAdapter;
8+
import com.comphenix.protocol.events.PacketEvent;
9+
import org.bukkit.inventory.ItemStack;
10+
import org.bukkit.plugin.Plugin;
11+
12+
import java.util.logging.Level;
13+
import java.util.logging.Logger;
14+
15+
public final class ProtocolLibHook {
16+
17+
public static void activate(
18+
final Plugin plugin,
19+
final BookFilter bookFilter,
20+
final ConfigHandler config,
21+
final Logger logger
22+
) {
23+
if (!config.isOnCreation()) {
24+
return;
25+
}
26+
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
27+
manager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.LOW,
28+
PacketType.Play.Client.SET_CREATIVE_SLOT
29+
) {
30+
@Override
31+
public void onPacketReceiving(PacketEvent event) {
32+
ItemStack item = event.getPacket().getItemModifier().readSafely(0);
33+
ItemStack filteredItem = bookFilter.filterBook(item);
34+
if (filteredItem != null) {
35+
event.setCancelled(true);
36+
event.getPlayer().updateInventory();
37+
logger.log(Level.WARNING, "Player {0} {1} tried to create a book with illegal click events!",
38+
new Object[]{event.getPlayer().getName(), event.getPlayer().getUniqueId()});
39+
}
40+
}
41+
});
42+
}
43+
}

src/main/resources/plugin.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ author: minoneer
55
description: ${project.description}
66
website: '${project.url}'
77
api-version: 1.13
8+
softdepend: [ ProtocolLib ]
89
commands:
910
filter:
10-
aliases: [bookfilter, filterbook]
11+
aliases: [ bookfilter, filterbook ]
1112
usage: /<command>
1213
permission: bookfilter.filter

0 commit comments

Comments
 (0)