diff --git a/commons/pom.xml b/commons/pom.xml
index 981a1a5..b05b704 100755
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -12,18 +12,20 @@
npclib-commons
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -36,7 +38,7 @@
io.netty
netty-all
- 4.1.33.Final
+ 4.0.23.Final
provided
diff --git a/commons/src/main/java/net/jitse/npclib/NPCLib.java b/commons/src/main/java/net/jitse/npclib/NPCLib.java
index c3e5843..6df0fba 100755
--- a/commons/src/main/java/net/jitse/npclib/NPCLib.java
+++ b/commons/src/main/java/net/jitse/npclib/NPCLib.java
@@ -10,8 +10,6 @@ import net.jitse.npclib.listeners.PacketListener;
import net.jitse.npclib.listeners.PlayerListener;
import net.jitse.npclib.logging.NPCLibLogger;
import net.jitse.npclib.skin.Skin;
-import org.bukkit.Bukkit;
-import org.bukkit.Server;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
@@ -24,7 +22,6 @@ import java.util.logging.Logger;
*/
public class NPCLib {
- private final Server server;
private final JavaPlugin plugin;
private final Class> npcClass;
@@ -32,13 +29,12 @@ public class NPCLib {
public NPCLib(JavaPlugin plugin) {
this.plugin = plugin;
- this.server = plugin.getServer();
this.logger = new NPCLibLogger(plugin);
// TODO: Change this variable to a dynamic variable (maven file filtering?).
// logger.info("Initiating NPCLib v1.4");
- String versionName = server.getClass().getPackage().getName().split("\\.")[3];
+ String versionName = plugin.getServer().getClass().getPackage().getName().split("\\.")[3];
Class> npcClass = null;
@@ -62,13 +58,13 @@ public class NPCLib {
}
private void registerInternal() {
- PluginManager pluginManager = server.getPluginManager();
+ PluginManager pluginManager = plugin.getServer().getPluginManager();
pluginManager.registerEvents(new PlayerListener(), plugin);
pluginManager.registerEvents(new ChunkListener(), plugin);
// Boot the according packet listener.
- new PacketListener().start(plugin, Bukkit.getBukkitVersion().contains("1.7"));
+ new PacketListener().start(plugin);
}
/**
diff --git a/commons/src/main/java/net/jitse/npclib/listeners/PacketListener.java b/commons/src/main/java/net/jitse/npclib/listeners/PacketListener.java
index 5e700d0..f79b004 100755
--- a/commons/src/main/java/net/jitse/npclib/listeners/PacketListener.java
+++ b/commons/src/main/java/net/jitse/npclib/listeners/PacketListener.java
@@ -13,7 +13,7 @@ import net.jitse.npclib.events.NPCInteractEvent;
import net.jitse.npclib.events.click.ClickType;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.plugin.Plugin;
import java.util.HashSet;
import java.util.Set;
@@ -34,40 +34,26 @@ public class PacketListener {
// Prevent players from clicking at very high speeds.
private final Set delay = new HashSet<>();
- public void start(JavaPlugin plugin, boolean is1_7) {
- if (is1_7) {
+ private Plugin plugin;
+
+ public void start(Plugin plugin) {
+ this.plugin = plugin;
+
+ boolean legacyProtocol = false;
+
+ try {
+ Class.forName("io.netty.channel.Channel");
+ } catch (ClassNotFoundException e) {
+ legacyProtocol = true;
+ }
+
+ if (legacyProtocol) {
// 1.7 R4 packet interaction.
new LegacyTinyProtocol(plugin) {
@Override
public Object onPacketInAsync(Player player, Object packet) {
-
- if (packetPlayInUseEntityClazz.isInstance(packet)) {
- NPC npc = NPCManager.getAllNPCs().stream().filter(
- check -> check.isActuallyShown(player) && check.getEntityId() == (int) entityIdField.get(packet))
- .findFirst().orElse(null);
-
- if (npc == null) {
- // Default player, not doing magic with the packet.
- return super.onPacketInAsync(player, packet);
- }
-
- if (delay.contains(player.getUniqueId())) {
- return null;
- }
-
- ClickType clickType = actionField.get(packet).toString()
- .equals("ATTACK") ? ClickType.LEFT_CLICK : ClickType.RIGHT_CLICK;
-
- Bukkit.getPluginManager().callEvent(new NPCInteractEvent(player, clickType, npc));
-
- UUID uuid = player.getUniqueId();
- delay.add(uuid);
- Bukkit.getScheduler().runTask(plugin, () -> delay.remove(uuid));
- return null;
- }
-
- return super.onPacketInAsync(player, packet);
+ return handleInteractPacket(player, packet) ? super.onPacketInAsync(player, packet) : null;
}
};
} else {
@@ -76,35 +62,38 @@ public class PacketListener {
@Override
public Object onPacketInAsync(Player player, Object packet) {
-
- if (packetPlayInUseEntityClazz.isInstance(packet)) {
- NPC npc = NPCManager.getAllNPCs().stream().filter(
- check -> check.isActuallyShown(player) && check.getEntityId() == (int) entityIdField.get(packet))
- .findFirst().orElse(null);
-
- if (npc == null) {
- // Default player, not doing magic with the packet.
- return super.onPacketInAsync(player, packet);
- }
-
- if (delay.contains(player.getUniqueId())) {
- return null;
- }
-
- ClickType clickType = actionField.get(packet).toString()
- .equals("ATTACK") ? ClickType.LEFT_CLICK : ClickType.RIGHT_CLICK;
-
- Bukkit.getPluginManager().callEvent(new NPCInteractEvent(player, clickType, npc));
-
- UUID uuid = player.getUniqueId();
- delay.add(uuid);
- Bukkit.getScheduler().runTask(plugin, () -> delay.remove(uuid));
- return null;
- }
-
- return super.onPacketInAsync(player, packet);
+ return handleInteractPacket(player, packet) ? super.onPacketInAsync(player, packet) : null;
}
};
}
}
+
+ private boolean handleInteractPacket(Player player, Object packet) {
+ if (packetPlayInUseEntityClazz.isInstance(packet)) {
+ NPC npc = NPCManager.getAllNPCs().stream().filter(
+ check -> check.isActuallyShown(player) && check.getEntityId() == (int) entityIdField.get(packet))
+ .findFirst().orElse(null);
+
+ if (npc == null) {
+ // Default player, not doing magic with the packet.
+ return true;
+ }
+
+ if (delay.contains(player.getUniqueId())) {
+ return false;
+ }
+
+ ClickType clickType = actionField.get(packet).toString()
+ .equals("ATTACK") ? ClickType.LEFT_CLICK : ClickType.RIGHT_CLICK;
+
+ Bukkit.getPluginManager().callEvent(new NPCInteractEvent(player, clickType, npc));
+
+ UUID uuid = player.getUniqueId();
+ delay.add(uuid);
+ Bukkit.getScheduler().runTask(plugin, () -> delay.remove(uuid));
+ return false;
+ }
+
+ return true;
+ }
}