Use reflection based legacy detection (fix #12)
This commit is contained in:
+15
-13
@@ -12,18 +12,20 @@
|
|||||||
|
|
||||||
<artifactId>npclib-commons</artifactId>
|
<artifactId>npclib-commons</artifactId>
|
||||||
|
|
||||||
<!--<build>-->
|
<!--
|
||||||
<!--<resources>-->
|
<build>
|
||||||
<!--<resource>-->
|
<resources>
|
||||||
<!--<targetPath>.</targetPath>-->
|
<resource>
|
||||||
<!--<directory>${basedir}/src/main/java/net/jitse/npclib</directory>-->
|
<targetPath>.</targetPath>
|
||||||
<!--<filtering>true</filtering>-->
|
<directory>${basedir}/src/main/java/net/jitse/npclib</directory>
|
||||||
<!--<includes>-->
|
<filtering>true</filtering>
|
||||||
<!--<include>NPCLib.java</include>-->
|
<includes>
|
||||||
<!--</includes>-->
|
<include>NPCLib.java</include>
|
||||||
<!--</resource>-->
|
</includes>
|
||||||
<!--</resources>-->
|
</resource>
|
||||||
<!--</build>-->
|
</resources>
|
||||||
|
</build>
|
||||||
|
-->
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -36,7 +38,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.netty</groupId>
|
<groupId>io.netty</groupId>
|
||||||
<artifactId>netty-all</artifactId>
|
<artifactId>netty-all</artifactId>
|
||||||
<version>4.1.33.Final</version>
|
<version>4.0.23.Final</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ import net.jitse.npclib.listeners.PacketListener;
|
|||||||
import net.jitse.npclib.listeners.PlayerListener;
|
import net.jitse.npclib.listeners.PlayerListener;
|
||||||
import net.jitse.npclib.logging.NPCLibLogger;
|
import net.jitse.npclib.logging.NPCLibLogger;
|
||||||
import net.jitse.npclib.skin.Skin;
|
import net.jitse.npclib.skin.Skin;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Server;
|
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
@@ -24,7 +22,6 @@ import java.util.logging.Logger;
|
|||||||
*/
|
*/
|
||||||
public class NPCLib {
|
public class NPCLib {
|
||||||
|
|
||||||
private final Server server;
|
|
||||||
private final JavaPlugin plugin;
|
private final JavaPlugin plugin;
|
||||||
private final Class<?> npcClass;
|
private final Class<?> npcClass;
|
||||||
|
|
||||||
@@ -32,13 +29,12 @@ public class NPCLib {
|
|||||||
|
|
||||||
public NPCLib(JavaPlugin plugin) {
|
public NPCLib(JavaPlugin plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.server = plugin.getServer();
|
|
||||||
this.logger = new NPCLibLogger(plugin);
|
this.logger = new NPCLibLogger(plugin);
|
||||||
|
|
||||||
// TODO: Change this variable to a dynamic variable (maven file filtering?).
|
// TODO: Change this variable to a dynamic variable (maven file filtering?).
|
||||||
// logger.info("Initiating NPCLib v1.4");
|
// 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;
|
Class<?> npcClass = null;
|
||||||
|
|
||||||
@@ -62,13 +58,13 @@ public class NPCLib {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerInternal() {
|
private void registerInternal() {
|
||||||
PluginManager pluginManager = server.getPluginManager();
|
PluginManager pluginManager = plugin.getServer().getPluginManager();
|
||||||
|
|
||||||
pluginManager.registerEvents(new PlayerListener(), plugin);
|
pluginManager.registerEvents(new PlayerListener(), plugin);
|
||||||
pluginManager.registerEvents(new ChunkListener(), plugin);
|
pluginManager.registerEvents(new ChunkListener(), plugin);
|
||||||
|
|
||||||
// Boot the according packet listener.
|
// Boot the according packet listener.
|
||||||
new PacketListener().start(plugin, Bukkit.getBukkitVersion().contains("1.7"));
|
new PacketListener().start(plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import net.jitse.npclib.events.NPCInteractEvent;
|
|||||||
import net.jitse.npclib.events.click.ClickType;
|
import net.jitse.npclib.events.click.ClickType;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -34,40 +34,26 @@ public class PacketListener {
|
|||||||
// Prevent players from clicking at very high speeds.
|
// Prevent players from clicking at very high speeds.
|
||||||
private final Set<UUID> delay = new HashSet<>();
|
private final Set<UUID> delay = new HashSet<>();
|
||||||
|
|
||||||
public void start(JavaPlugin plugin, boolean is1_7) {
|
private Plugin plugin;
|
||||||
if (is1_7) {
|
|
||||||
|
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.
|
// 1.7 R4 packet interaction.
|
||||||
new LegacyTinyProtocol(plugin) {
|
new LegacyTinyProtocol(plugin) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object onPacketInAsync(Player player, Object packet) {
|
public Object onPacketInAsync(Player player, Object packet) {
|
||||||
|
return handleInteractPacket(player, packet) ? super.onPacketInAsync(player, packet) : null;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
@@ -76,7 +62,13 @@ public class PacketListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object onPacketInAsync(Player player, Object packet) {
|
public Object onPacketInAsync(Player player, Object packet) {
|
||||||
|
return handleInteractPacket(player, packet) ? super.onPacketInAsync(player, packet) : null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleInteractPacket(Player player, Object packet) {
|
||||||
if (packetPlayInUseEntityClazz.isInstance(packet)) {
|
if (packetPlayInUseEntityClazz.isInstance(packet)) {
|
||||||
NPC npc = NPCManager.getAllNPCs().stream().filter(
|
NPC npc = NPCManager.getAllNPCs().stream().filter(
|
||||||
check -> check.isActuallyShown(player) && check.getEntityId() == (int) entityIdField.get(packet))
|
check -> check.isActuallyShown(player) && check.getEntityId() == (int) entityIdField.get(packet))
|
||||||
@@ -84,11 +76,11 @@ public class PacketListener {
|
|||||||
|
|
||||||
if (npc == null) {
|
if (npc == null) {
|
||||||
// Default player, not doing magic with the packet.
|
// Default player, not doing magic with the packet.
|
||||||
return super.onPacketInAsync(player, packet);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delay.contains(player.getUniqueId())) {
|
if (delay.contains(player.getUniqueId())) {
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClickType clickType = actionField.get(packet).toString()
|
ClickType clickType = actionField.get(packet).toString()
|
||||||
@@ -99,12 +91,9 @@ public class PacketListener {
|
|||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
delay.add(uuid);
|
delay.add(uuid);
|
||||||
Bukkit.getScheduler().runTask(plugin, () -> delay.remove(uuid));
|
Bukkit.getScheduler().runTask(plugin, () -> delay.remove(uuid));
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.onPacketInAsync(player, packet);
|
return true;
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user