resource pack + npcs 1.19.3

This commit is contained in:
NK 2022-12-22 23:42:47 +00:00
parent 3771481d17
commit 8aa9266b17
3 changed files with 69 additions and 53 deletions

View file

@ -9,17 +9,17 @@ import me.night.nullvalkyrie.util.*;
import net.minecraft.network.protocol.game.*; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.syncher.*; import net.minecraft.network.syncher.*;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.EntityPlayer; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.WorldServer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.PlayerConnection; import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.world.entity.EnumItemSlot; import net.minecraft.world.entity.EquipmentSlot;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_19_R1.CraftServer; import org.bukkit.craftbukkit.v1_19_R2.CraftServer;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.craftbukkit.v1_19_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -29,60 +29,62 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
public class NPCManager { public class NPCManager {
private static final List<EntityPlayer> NPCs = new ArrayList<>(); private static final List<ServerPlayer> NPCs = new ArrayList<>();
public static List<EntityPlayer> getNPCs() { public static List<ServerPlayer> getNPCs() {
return NPCs; return NPCs;
} }
public static void createNPC(Player player, String name) { // name must be less than 16 characters including color codes public static void createNPC(Player player, String name) { // name must be less than 16 characters including color codes
EntityPlayer sp = ((CraftPlayer) player).getHandle(); ServerPlayer sp = ((CraftPlayer) player).getHandle();
MinecraftServer server = sp.c; MinecraftServer server = sp.server;
WorldServer level = ((CraftWorld) player.getLocation().getWorld()).getHandle(); ServerLevel level = ((CraftWorld) player.getLocation().getWorld()).getHandle();
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(name)); GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(name));
String[] skin = Skin.getSkin(player); String[] skin = Skin.getSkin(player);
gameProfile.getProperties().put("textures", new Property("textures", skin[0], skin[1])); gameProfile.getProperties().put("textures", new Property("textures", skin[0], skin[1]));
EntityPlayer npc = new EntityPlayer(server, level, gameProfile, null); ServerPlayer npc = new ServerPlayer(server, level, gameProfile);
Location location = player.getLocation(); Location location = player.getLocation();
npc.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); npc.setPos(location.getX(), location.getY(), location.getZ());
addNPCPacket(npc); addNPCPacket(npc);
NPCs.add(npc); NPCs.add(npc);
NPCDataManager.setNPC(name, (int) player.getLocation().getX(), (int) player.getLocation().getY(), (int) player.getLocation().getZ(), (int) player.getLocation().getPitch(), (int) player.getLocation().getYaw(), player.getLocation().getWorld().getName(), skin[0], skin[1]); NPCDataManager.setNPC(name, (int) player.getLocation().getX(), (int) player.getLocation().getY(), (int) player.getLocation().getZ(), (int) player.getLocation().getPitch(), (int) player.getLocation().getYaw(), player.getLocation().getWorld().getName(), skin[0], skin[1]);
} }
public static void addNPCPacket(EntityPlayer npc) { public static void addNPCPacket(ServerPlayer npc) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
PlayerConnection pc = ((CraftPlayer) player).getHandle().b; ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, npc)); pc.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, npc));
pc.a(new PacketPlayOutNamedEntitySpawn(npc)); pc.send(new ClientboundAddPlayerPacket(npc));
pc.a(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.getBukkitYaw() * 256 / 360))); pc.send(new ClientboundRotateHeadPacket(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
DataWatcher watcher = npc.ai(); SynchedEntityData watcher = npc.getEntityData();
watcher.b(new DataWatcherObject<>(17, DataWatcherRegistry.a), (byte) 127); watcher.set(new EntityDataAccessor<>(17, EntityDataSerializers.BYTE), (byte) 127);
pc.a(new PacketPlayOutEntityMetadata(npc.ae(), watcher, true)); List<SynchedEntityData.DataValue<?>> list = watcher.getNonDefaultValues();
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50); pc.send(new ClientboundSetEntityDataPacket(npc.getBukkitEntity().getEntityId(), list));
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.send(new ClientboundPlayerInfoRemovePacket(List.of(npc.getUUID()))), 50);
ItemStack netheriteAxe = new ItemStack(Material.NETHERITE_AXE); ItemStack netheriteAxe = new ItemStack(Material.NETHERITE_AXE);
ItemStack anotherAxe = new ItemStack(Material.NETHERITE_INGOT); ItemStack anotherAxe = new ItemStack(Material.NETHERITE_INGOT);
List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>(); List<Pair<EquipmentSlot, net.minecraft.world.item.ItemStack>> itemList = new ArrayList<>();
list.add(new Pair<>(EnumItemSlot.a, CraftItemStack.asNMSCopy(netheriteAxe))); itemList.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(netheriteAxe)));
list.add(new Pair<>(EnumItemSlot.b, CraftItemStack.asNMSCopy(anotherAxe))); itemList.add(new Pair<>(EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(anotherAxe)));
pc.a(new PacketPlayOutEntityEquipment(npc.ae(), list)); pc.send(new ClientboundSetEquipmentPacket(npc.getBukkitEntity().getEntityId(), itemList));
} }
} }
public static void addJoinPacket(Player player) { public static void addJoinPacket(Player player) {
for (EntityPlayer npc : NPCs) { for (ServerPlayer npc : NPCs) {
PlayerConnection pc = ((CraftPlayer) player).getHandle().b; ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, npc)); pc.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, npc));
pc.a(new PacketPlayOutNamedEntitySpawn(npc)); pc.send(new ClientboundAddPlayerPacket(npc));
pc.a(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.getBukkitYaw() * 256 / 360))); pc.send(new ClientboundRotateHeadPacket(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
DataWatcher watcher = npc.ai(); SynchedEntityData watcher = npc.getEntityData();
watcher.b(new DataWatcherObject<>(17, DataWatcherRegistry.a), (byte) 127); watcher.set(new EntityDataAccessor<>(17, EntityDataSerializers.BYTE), (byte) 127);
pc.a(new PacketPlayOutEntityMetadata(npc.ae(), watcher, true)); List<SynchedEntityData.DataValue<?>> list = watcher.getNonDefaultValues();
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50); pc.send(new ClientboundSetEntityDataPacket(npc.getBukkitEntity().getEntityId(), list));
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.send(new ClientboundPlayerInfoRemovePacket(List.of(npc.getUUID()))), 50);
ItemStack netheriteAxe = new ItemStack(Material.NETHERITE_AXE); ItemStack netheriteAxe = new ItemStack(Material.NETHERITE_AXE);
ItemStack anotherAxe = new ItemStack(Material.NETHERITE_INGOT); ItemStack anotherAxe = new ItemStack(Material.NETHERITE_INGOT);
List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>(); List<Pair<EquipmentSlot, net.minecraft.world.item.ItemStack>> itemList = new ArrayList<>();
list.add(new Pair<>(EnumItemSlot.a, CraftItemStack.asNMSCopy(netheriteAxe))); itemList.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(netheriteAxe)));
list.add(new Pair<>(EnumItemSlot.b, CraftItemStack.asNMSCopy(anotherAxe))); itemList.add(new Pair<>(EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(anotherAxe)));
pc.a(new PacketPlayOutEntityEquipment(npc.ae(), list)); pc.send(new ClientboundSetEquipmentPacket(npc.getBukkitEntity().getEntityId(), itemList));
} }
} }
public static void reloadNPC(List<HashMap<String, Object>> npcs) { public static void reloadNPC(List<HashMap<String, Object>> npcs) {
@ -91,9 +93,9 @@ public class NPCManager {
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color((String) npc.get("name"))); GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color((String) npc.get("name")));
gameProfile.getProperties().put("textures", new Property("textures", (String) npc.get("texture"), (String) npc.get("signature"))); gameProfile.getProperties().put("textures", new Property("textures", (String) npc.get("texture"), (String) npc.get("signature")));
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
WorldServer w = ((CraftWorld) location.getWorld()).getHandle(); ServerLevel w = ((CraftWorld) location.getWorld()).getHandle();
EntityPlayer ep = new EntityPlayer(server, w, gameProfile, null); ServerPlayer ep = new ServerPlayer(server, w, gameProfile);
ep.a(location.getX(), location.getY(), location.getZ(), location.getPitch(), location.getPitch()); // NMS: 1.19.2 https://nms.screamingsandals.org/1.19.2/net/minecraft/world/entity/Entity.html absMoveTo ep.setPos(location.getX(), location.getY(), location.getZ()); // NMS: 1.19.2 https://nms.screamingsandals.org/1.19.2/net/minecraft/world/entity/Entity.html absMoveTo
addNPCPacket(ep); addNPCPacket(ep);
NPCs.add(ep); NPCs.add(ep);
} }

View file

@ -3,11 +3,11 @@ package me.night.nullvalkyrie.events.listeners;
import me.night.nullvalkyrie.events.custom.RightClickNPCEvent; import me.night.nullvalkyrie.events.custom.RightClickNPCEvent;
import me.night.nullvalkyrie.entities.npcs.NPCManager; import me.night.nullvalkyrie.entities.npcs.NPCManager;
import me.night.nullvalkyrie.util.Util; import me.night.nullvalkyrie.util.Util;
import net.minecraft.network.protocol.game.PacketPlayOutEntity; import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket;
import net.minecraft.network.protocol.game.PacketPlayOutEntityHeadRotation; import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket;
import net.minecraft.server.network.PlayerConnection; import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -17,7 +17,7 @@ public class NPCEvents implements Listener {
@EventHandler @EventHandler
public void onClick(RightClickNPCEvent e) { public void onClick(RightClickNPCEvent e) {
Player player = e.getPlayer(); Player player = e.getPlayer();
if (e.getNPC().getBukkitEntity().getName().equalsIgnoreCase(Util.color("&1&lRB18"))) { if (e.getNPC().getBukkitEntity().getName().contains("SAI")) {
player.sendMessage(Util.color("Hi")); player.sendMessage(Util.color("Hi"));
} }
} }
@ -29,9 +29,9 @@ public class NPCEvents implements Listener {
location.setDirection(e.getPlayer().getLocation().subtract(location).toVector()); location.setDirection(e.getPlayer().getLocation().subtract(location).toVector());
float yaw = location.getYaw(); float yaw = location.getYaw();
float pitch = location.getPitch(); float pitch = location.getPitch();
PlayerConnection con = ((CraftPlayer) e.getPlayer()).getHandle().b; ServerGamePacketListenerImpl con = ((CraftPlayer) e.getPlayer()).getHandle().connection;
con.a(new PacketPlayOutEntityHeadRotation(npc, (byte) ((yaw % 360) * 256 / 360))); con.send(new ClientboundRotateHeadPacket(npc, (byte) ((yaw % 360) * 256 / 360)));
con.a(new PacketPlayOutEntity.PacketPlayOutEntityLook(npc.ae(), (byte) ((yaw % 360) * 256 / 360), (byte) ((pitch % 360) * 256 / 360), false)); con.send(new ClientboundMoveEntityPacket.Rot(npc.getBukkitEntity().getEntityId(), (byte) ((yaw % 360) * 256 / 360), (byte) ((pitch % 360) * 256 / 360), false));
}); });
} }
} }

View file

@ -10,6 +10,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerResourcePackStatusEvent;
import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.event.server.ServerListPingEvent;
import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.event.weather.WeatherChangeEvent;
@ -18,25 +19,29 @@ import java.io.File;
public class ServerEvents implements Listener { public class ServerEvents implements Listener {
public final BossBar bossbar; public final BossBar bossbar;
public final PacketInjector injector; public final PacketInjector injector;
public ServerEvents() { public ServerEvents() {
bossbar = Bukkit.createBossBar(ChatColor.GOLD + "Kuudra", BarColor.RED, BarStyle.SEGMENTED_12); bossbar = Bukkit.createBossBar(ChatColor.GOLD + "Kuudra", BarColor.RED, BarStyle.SEGMENTED_12);
this.injector = new PacketInjector(); this.injector = new PacketInjector();
} }
@EventHandler @EventHandler
public void onJoin(PlayerJoinEvent e) { public void onJoin(PlayerJoinEvent e) {
bossbar.addPlayer(e.getPlayer()); bossbar.addPlayer(e.getPlayer());
injector.addPlayer(e.getPlayer()); injector.addPlayer(e.getPlayer());
e.getPlayer().setResourcePack("https://www.dropbox.com/s/7y7p93xzhar6vvw/%C2%A7b%C2%A7lNKRP%201.19.3.zip?dl=1");
} }
@EventHandler @EventHandler
public void onQuit(PlayerQuitEvent e) { public void onQuit(PlayerQuitEvent e) {
injector.removePlayer(e.getPlayer()); injector.removePlayer(e.getPlayer());
} }
@EventHandler @EventHandler
public void onPing(ServerListPingEvent e) { public void onPing(ServerListPingEvent e) {
e.setMaxPlayers(8964); e.setMaxPlayers(8964);
String s = Util.centerText("Vanadium", 45); String s = Util.centerText("Vanadium", 45);
String s2 = Util.centerText("Support 1.19.2", 45); String s2 = Util.centerText("Support 1.19.3", 45);
e.setMotd(ChatColor.AQUA.toString() + ChatColor.BOLD + s + "\n" + ChatColor.GOLD + ChatColor.BOLD + s2); e.setMotd(ChatColor.AQUA.toString() + ChatColor.BOLD + s + "\n" + ChatColor.GOLD + ChatColor.BOLD + s2);
try { try {
e.setServerIcon(Bukkit.loadServerIcon(new File("nuke.png"))); e.setServerIcon(Bukkit.loadServerIcon(new File("nuke.png")));
@ -44,6 +49,7 @@ public class ServerEvents implements Listener {
ee.printStackTrace(); ee.printStackTrace();
} }
} }
@EventHandler @EventHandler
public void onClickHologram(InteractHologramEvent e) { public void onClickHologram(InteractHologramEvent e) {
if (e.getHologram().getCustomName() == null) return; if (e.getHologram().getCustomName() == null) return;
@ -51,8 +57,16 @@ public class ServerEvents implements Listener {
// TODO: change hologram things // TODO: change hologram things
} }
} }
@EventHandler @EventHandler
public void onWeatherChange(WeatherChangeEvent e) { public void onWeatherChange(WeatherChangeEvent e) {
e.setCancelled(true); e.setCancelled(true);
} }
@EventHandler
public void onResourcePackChange(PlayerResourcePackStatusEvent e) {
if (e.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED || e.getStatus() == PlayerResourcePackStatusEvent.Status.FAILED_DOWNLOAD) {
e.getPlayer().kickPlayer("You must download the resource pack to play on this server!");
}
}
} }