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/api/NPC.java b/commons/src/main/java/net/jitse/npclib/api/NPC.java
index 5d3d59d..a37227a 100755
--- a/commons/src/main/java/net/jitse/npclib/api/NPC.java
+++ b/commons/src/main/java/net/jitse/npclib/api/NPC.java
@@ -132,9 +132,7 @@ public abstract class NPC implements PacketHandler, ActionHandler {
shown.add(player.getUniqueId());
}
- if (!autoHidden.contains(player.getUniqueId())) {
- autoHidden.add(player.getUniqueId());
- }
+ autoHidden.add(player.getUniqueId());
return;
}
@@ -154,9 +152,7 @@ public abstract class NPC implements PacketHandler, ActionHandler {
if (player.getLocation().distance(location) <= autoHideDistance) {
sendShowPackets(player);
} else {
- if (!autoHidden.contains(player.getUniqueId())) {
- autoHidden.add(player.getUniqueId());
- }
+ autoHidden.add(player.getUniqueId());
}
}
}
@@ -189,9 +185,7 @@ public abstract class NPC implements PacketHandler, ActionHandler {
if (player.getWorld().equals(location.getWorld()) && player.getLocation().distance(location) <= autoHideDistance) {
sendHidePackets(player, scheduler);
} else {
- if (autoHidden.contains(player.getUniqueId())) {
- autoHidden.remove(player.getUniqueId());
- }
+ autoHidden.remove(player.getUniqueId());
}
}
}
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;
+ }
}
diff --git a/commons/src/main/java/net/jitse/npclib/listeners/PlayerListener.java b/commons/src/main/java/net/jitse/npclib/listeners/PlayerListener.java
index 18a5995..e613ad2 100755
--- a/commons/src/main/java/net/jitse/npclib/listeners/PlayerListener.java
+++ b/commons/src/main/java/net/jitse/npclib/listeners/PlayerListener.java
@@ -25,14 +25,10 @@ public class PlayerListener implements Listener {
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
for (NPC npc : NPCManager.getAllNPCs()) {
- if (npc.getAutoHidden().contains(player.getUniqueId())) {
- npc.getAutoHidden().remove(player.getUniqueId());
- }
+ npc.getAutoHidden().remove(player.getUniqueId());
// Don't need to use NPC#hide since the entity is not registered in the NMS server.
- if (npc.getShown().contains(player.getUniqueId())) {
- npc.getShown().remove(player.getUniqueId());
- }
+ npc.getShown().remove(player.getUniqueId());
}
}