NullValkyrie

Minecraft 1.19 multipurpose plugin for spigot servers with a lot of features where most modern servers have.
git clone https://codeberg.org/night0721/NullValkyrie
Log | Files | Refs | README | LICENSE

commit ce5ad393029c839b7f90b1799be09f2d29c46e5d
parent 6525ea9f65e8e70d1621aa849ce11d61cda6c147
Author: NK <[email protected]>
Date:   Tue, 27 Dec 2022 19:44:15 +0000

npcs

Diffstat:
Msrc/main/java/me/night/nullvalkyrie/NullValkyrie.java | 2+-
Msrc/main/java/me/night/nullvalkyrie/entities/npcs/NPCManager.java | 4+++-
Asrc/main/java/me/night/nullvalkyrie/events/listeners/CustomEvents.java | 46++++++++++++++++++++++++++++++++++++++++++++++
Dsrc/main/java/me/night/nullvalkyrie/events/listeners/NPCEvents.java | 37-------------------------------------
Msrc/main/java/me/night/nullvalkyrie/events/listeners/ServerEvents.java | 9---------
Msrc/main/java/me/night/nullvalkyrie/packets/handle/PacketHandler.java | 23+++++------------------
6 files changed, 55 insertions(+), 66 deletions(-)

diff --git a/src/main/java/me/night/nullvalkyrie/NullValkyrie.java b/src/main/java/me/night/nullvalkyrie/NullValkyrie.java @@ -24,7 +24,7 @@ public final class NullValkyrie extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new ScoreboardListener(), this); Bukkit.getPluginManager().registerEvents(new CustomItemEvents(), this); Bukkit.getPluginManager().registerEvents(new DamageEffectEvents(), this); - Bukkit.getPluginManager().registerEvents(new NPCEvents(), this); + Bukkit.getPluginManager().registerEvents(new CustomEvents(), this); new DiscordClientManager(); NPCDataManager.reloadNPC(); CryptoMiner.reloadMiner(); diff --git a/src/main/java/me/night/nullvalkyrie/entities/npcs/NPCManager.java b/src/main/java/me/night/nullvalkyrie/entities/npcs/NPCManager.java @@ -102,5 +102,7 @@ public class NPCManager { NPCs.put(ep.getId(), ep); } } - + public static ServerPlayer getNPC(int id) { + return NPCs.get(id); + } } diff --git a/src/main/java/me/night/nullvalkyrie/events/listeners/CustomEvents.java b/src/main/java/me/night/nullvalkyrie/events/listeners/CustomEvents.java @@ -0,0 +1,46 @@ +package me.night.nullvalkyrie.events.listeners; + +import me.night.nullvalkyrie.entities.holograms.PerPlayerHologram; +import me.night.nullvalkyrie.events.custom.InteractHologramEvent; +import me.night.nullvalkyrie.events.custom.RightClickNPCEvent; +import me.night.nullvalkyrie.entities.npcs.NPCManager; +import me.night.nullvalkyrie.util.Util; +import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket; +import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class CustomEvents implements Listener { + @EventHandler + public void onClick(RightClickNPCEvent e) { + Player player = e.getPlayer(); + if (e.getNPC().getBukkitEntity().getName().contains("VETTEL")) { + player.sendMessage(Util.color("Hi")); + } + } + @EventHandler + public void onClickHologram(InteractHologramEvent e) { + if (e.getHologram().getCustomName() == null) return; + if (e.getHologram().getCustomName().equals(ChatColor.GOLD + ChatColor.BOLD.toString() + "CLICK")) { + e.getHologram().getNearbyEntities(0, 5, 0).forEach(entity -> new PerPlayerHologram(e.getPlayer(), new String[]{ChatColor.RED + "Player Info:", ChatColor.GOLD + "Name: " + ChatColor.AQUA + e.getPlayer().getName(), ChatColor.BLUE + "IP: " + e.getPlayer().getAddress()})); + } + } + @EventHandler + public void onMove(PlayerMoveEvent e) { + NPCManager.getNPCs().values().forEach(npc -> { + Location location = npc.getBukkitEntity().getLocation(); + location.setDirection(e.getPlayer().getLocation().subtract(location).toVector()); + float yaw = location.getYaw(); + float pitch = location.getPitch(); + ServerGamePacketListenerImpl con = ((CraftPlayer) e.getPlayer()).getHandle().connection; + con.send(new ClientboundRotateHeadPacket(npc, (byte) ((yaw % 360) * 256 / 360))); + con.send(new ClientboundMoveEntityPacket.Rot(npc.getBukkitEntity().getEntityId(), (byte) ((yaw % 360) * 256 / 360), (byte) ((pitch % 360) * 256 / 360), false)); + }); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/events/listeners/NPCEvents.java b/src/main/java/me/night/nullvalkyrie/events/listeners/NPCEvents.java @@ -1,37 +0,0 @@ -package me.night.nullvalkyrie.events.listeners; - -import me.night.nullvalkyrie.events.custom.RightClickNPCEvent; -import me.night.nullvalkyrie.entities.npcs.NPCManager; -import me.night.nullvalkyrie.util.Util; -import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket; -import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; - -public class NPCEvents implements Listener { - @EventHandler - public void onClick(RightClickNPCEvent e) { - Player player = e.getPlayer(); - if (e.getNPC().getBukkitEntity().getName().contains("SAI")) { - player.sendMessage(Util.color("Hi")); - } - } - - @EventHandler - public void onMove(PlayerMoveEvent e) { - NPCManager.getNPCs().values().forEach(npc -> { - Location location = npc.getBukkitEntity().getLocation(); - location.setDirection(e.getPlayer().getLocation().subtract(location).toVector()); - float yaw = location.getYaw(); - float pitch = location.getPitch(); - ServerGamePacketListenerImpl con = ((CraftPlayer) e.getPlayer()).getHandle().connection; - con.send(new ClientboundRotateHeadPacket(npc, (byte) ((yaw % 360) * 256 / 360))); - con.send(new ClientboundMoveEntityPacket.Rot(npc.getBukkitEntity().getEntityId(), (byte) ((yaw % 360) * 256 / 360), (byte) ((pitch % 360) * 256 / 360), false)); - }); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/events/listeners/ServerEvents.java b/src/main/java/me/night/nullvalkyrie/events/listeners/ServerEvents.java @@ -1,7 +1,5 @@ package me.night.nullvalkyrie.events.listeners; -import me.night.nullvalkyrie.entities.holograms.PerPlayerHologram; -import me.night.nullvalkyrie.events.custom.InteractHologramEvent; import me.night.nullvalkyrie.packets.handle.PacketInjector; import me.night.nullvalkyrie.util.Util; import org.bukkit.Bukkit; @@ -49,13 +47,6 @@ public class ServerEvents implements Listener { ee.printStackTrace(); } } - @EventHandler - public void onClickHologram(InteractHologramEvent e) { - if (e.getHologram().getCustomName() == null) return; - if (e.getHologram().getCustomName().equals(ChatColor.GOLD + ChatColor.BOLD.toString() + "CLICK")) { - e.getHologram().getNearbyEntities(0, 5, 0).forEach(entity -> new PerPlayerHologram(e.getPlayer(), new String[]{ChatColor.RED + "Player Info:", ChatColor.GOLD + "Name: " + ChatColor.AQUA + e.getPlayer().getName(), ChatColor.BLUE + "IP: " + e.getPlayer().getAddress()})); - } - } @EventHandler public void onWeatherChange(WeatherChangeEvent e) { diff --git a/src/main/java/me/night/nullvalkyrie/packets/handle/PacketHandler.java b/src/main/java/me/night/nullvalkyrie/packets/handle/PacketHandler.java @@ -66,16 +66,6 @@ public class PacketHandler extends ChannelDuplexHandler { if (packet.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInUseEntity")) { ServerboundInteractPacket pk = (ServerboundInteractPacket) packet; int entityID = (int) Util.getFieldValue(packet, "a"); -// if (pk.getType() == ServerboundInteractPacket.Action.INTERACT) { -// Entity entity = ((CraftWorld) player.getWorld()).getHandle().getEntity(entityID); -// if (entity == null) return; -// if (entity instanceof ArmorStand) { -// Bukkit.getPluginManager().callEvent(new InteractHologramEvent(player, entity)); -// } -// if (NPCManager.isNPC(entity)) { -// Bukkit.getPluginManager().callEvent(new RightClickNPCEvent(player, entity)); -// } -// } boolean sneak = (boolean) Util.getFieldValue(packet, "c"); Bukkit.getScheduler().scheduleSyncDelayedTask(NullValkyrie.getPlugin(NullValkyrie.class), () -> { net.minecraft.world.entity.decoration.ArmorStand[] stands = PerPlayerHologram.getHolograms().get(entityID); @@ -86,18 +76,15 @@ public class PacketHandler extends ChannelDuplexHandler { } }, 0); Object data = Util.getFieldValue(pk, "b"); - if (data.toString().split("\\$")[1].charAt(0) == 'e') - return; + if (data.toString().split("\\$")[1].charAt(0) == 'e') return; try { Object hand = Util.getFieldValue(data, "a"); if (!hand.toString().equals("MAIN_HAND")) return; + ServerPlayer npc = NPCManager.getNPC(entityID); + if (npc == null) return; //Right Click - for (ServerPlayer npcs : NPCManager.getNPCs().values()) { - if (npcs.getBukkitEntity().getEntityId() == entityID && sneak) { - Bukkit.getScheduler().scheduleSyncDelayedTask(NullValkyrie.getPlugin(NullValkyrie.class), () -> Bukkit.getPluginManager().callEvent(new RightClickNPCEvent(player, npcs)), 0); - - } - } + if (npc.getBukkitEntity().getEntityId() == entityID && sneak) + Bukkit.getScheduler().scheduleSyncDelayedTask(NullValkyrie.getPlugin(NullValkyrie.class), () -> Bukkit.getPluginManager().callEvent(new RightClickNPCEvent(player, npc)), 0); } catch (NoSuchFieldException x) { //Left Click }