Merge pull request #13 from MrMicky-FR/master

Merge @MrMicky-FR's NPCLib updates
This commit is contained in:
Jitse Boonstra
2019-02-21 22:21:46 +01:00
committed by GitHub
5 changed files with 69 additions and 92 deletions
+15 -13
View File
@@ -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);
} }
/** /**
@@ -132,9 +132,7 @@ public abstract class NPC implements PacketHandler, ActionHandler {
shown.add(player.getUniqueId()); shown.add(player.getUniqueId());
} }
if (!autoHidden.contains(player.getUniqueId())) { autoHidden.add(player.getUniqueId());
autoHidden.add(player.getUniqueId());
}
return; return;
} }
@@ -154,9 +152,7 @@ public abstract class NPC implements PacketHandler, ActionHandler {
if (player.getLocation().distance(location) <= autoHideDistance) { if (player.getLocation().distance(location) <= autoHideDistance) {
sendShowPackets(player); sendShowPackets(player);
} else { } 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) { if (player.getWorld().equals(location.getWorld()) && player.getLocation().distance(location) <= autoHideDistance) {
sendHidePackets(player, scheduler); sendHidePackets(player, scheduler);
} else { } else {
if (autoHidden.contains(player.getUniqueId())) { autoHidden.remove(player.getUniqueId());
autoHidden.remove(player.getUniqueId());
}
} }
} }
} }
@@ -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,35 +62,38 @@ 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;
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);
} }
}; };
} }
} }
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;
}
} }
@@ -25,14 +25,10 @@ public class PlayerListener implements Listener {
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
for (NPC npc : NPCManager.getAllNPCs()) { 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. // 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());
}
} }
} }