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.syncher.*;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.EntityPlayer;
import net.minecraft.server.level.WorldServer;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EnumItemSlot;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.world.entity.EquipmentSlot;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack;
import org.bukkit.craftbukkit.v1_19_R2.CraftServer;
import org.bukkit.craftbukkit.v1_19_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@ -29,60 +29,62 @@ import java.util.List;
import java.util.UUID;
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;
}
public static void createNPC(Player player, String name) { // name must be less than 16 characters including color codes
EntityPlayer sp = ((CraftPlayer) player).getHandle();
MinecraftServer server = sp.c;
WorldServer level = ((CraftWorld) player.getLocation().getWorld()).getHandle();
ServerPlayer sp = ((CraftPlayer) player).getHandle();
MinecraftServer server = sp.server;
ServerLevel level = ((CraftWorld) player.getLocation().getWorld()).getHandle();
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(name));
String[] skin = Skin.getSkin(player);
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();
npc.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
npc.setPos(location.getX(), location.getY(), location.getZ());
addNPCPacket(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]);
}
public static void addNPCPacket(EntityPlayer npc) {
public static void addNPCPacket(ServerPlayer npc) {
for (Player player : Bukkit.getOnlinePlayers()) {
PlayerConnection pc = ((CraftPlayer) player).getHandle().b;
pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, npc));
pc.a(new PacketPlayOutNamedEntitySpawn(npc));
pc.a(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
DataWatcher watcher = npc.ai();
watcher.b(new DataWatcherObject<>(17, DataWatcherRegistry.a), (byte) 127);
pc.a(new PacketPlayOutEntityMetadata(npc.ae(), watcher, true));
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50);
ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
pc.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, npc));
pc.send(new ClientboundAddPlayerPacket(npc));
pc.send(new ClientboundRotateHeadPacket(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
SynchedEntityData watcher = npc.getEntityData();
watcher.set(new EntityDataAccessor<>(17, EntityDataSerializers.BYTE), (byte) 127);
List<SynchedEntityData.DataValue<?>> list = watcher.getNonDefaultValues();
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 anotherAxe = new ItemStack(Material.NETHERITE_INGOT);
List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>();
list.add(new Pair<>(EnumItemSlot.a, CraftItemStack.asNMSCopy(netheriteAxe)));
list.add(new Pair<>(EnumItemSlot.b, CraftItemStack.asNMSCopy(anotherAxe)));
pc.a(new PacketPlayOutEntityEquipment(npc.ae(), list));
List<Pair<EquipmentSlot, net.minecraft.world.item.ItemStack>> itemList = new ArrayList<>();
itemList.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(netheriteAxe)));
itemList.add(new Pair<>(EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(anotherAxe)));
pc.send(new ClientboundSetEquipmentPacket(npc.getBukkitEntity().getEntityId(), itemList));
}
}
public static void addJoinPacket(Player player) {
for (EntityPlayer npc : NPCs) {
PlayerConnection pc = ((CraftPlayer) player).getHandle().b;
pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, npc));
pc.a(new PacketPlayOutNamedEntitySpawn(npc));
pc.a(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
DataWatcher watcher = npc.ai();
watcher.b(new DataWatcherObject<>(17, DataWatcherRegistry.a), (byte) 127);
pc.a(new PacketPlayOutEntityMetadata(npc.ae(), watcher, true));
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50);
for (ServerPlayer npc : NPCs) {
ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
pc.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, npc));
pc.send(new ClientboundAddPlayerPacket(npc));
pc.send(new ClientboundRotateHeadPacket(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
SynchedEntityData watcher = npc.getEntityData();
watcher.set(new EntityDataAccessor<>(17, EntityDataSerializers.BYTE), (byte) 127);
List<SynchedEntityData.DataValue<?>> list = watcher.getNonDefaultValues();
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 anotherAxe = new ItemStack(Material.NETHERITE_INGOT);
List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>();
list.add(new Pair<>(EnumItemSlot.a, CraftItemStack.asNMSCopy(netheriteAxe)));
list.add(new Pair<>(EnumItemSlot.b, CraftItemStack.asNMSCopy(anotherAxe)));
pc.a(new PacketPlayOutEntityEquipment(npc.ae(), list));
List<Pair<EquipmentSlot, net.minecraft.world.item.ItemStack>> itemList = new ArrayList<>();
itemList.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(netheriteAxe)));
itemList.add(new Pair<>(EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(anotherAxe)));
pc.send(new ClientboundSetEquipmentPacket(npc.getBukkitEntity().getEntityId(), itemList));
}
}
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.getProperties().put("textures", new Property("textures", (String) npc.get("texture"), (String) npc.get("signature")));
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
WorldServer w = ((CraftWorld) location.getWorld()).getHandle();
EntityPlayer ep = new EntityPlayer(server, w, gameProfile, null);
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
ServerLevel w = ((CraftWorld) location.getWorld()).getHandle();
ServerPlayer ep = new ServerPlayer(server, w, gameProfile);
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);
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.entities.npcs.NPCManager;
import me.night.nullvalkyrie.util.Util;
import net.minecraft.network.protocol.game.PacketPlayOutEntity;
import net.minecraft.network.protocol.game.PacketPlayOutEntityHeadRotation;
import net.minecraft.server.network.PlayerConnection;
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.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -17,7 +17,7 @@ public class NPCEvents implements Listener {
@EventHandler
public void onClick(RightClickNPCEvent e) {
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"));
}
}
@ -29,9 +29,9 @@ public class NPCEvents implements Listener {
location.setDirection(e.getPlayer().getLocation().subtract(location).toVector());
float yaw = location.getYaw();
float pitch = location.getPitch();
PlayerConnection con = ((CraftPlayer) e.getPlayer()).getHandle().b;
con.a(new PacketPlayOutEntityHeadRotation(npc, (byte) ((yaw % 360) * 256 / 360)));
con.a(new PacketPlayOutEntity.PacketPlayOutEntityLook(npc.ae(), (byte) ((yaw % 360) * 256 / 360), (byte) ((pitch % 360) * 256 / 360), false));
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));
});
}
}

View file

@ -10,6 +10,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerResourcePackStatusEvent;
import org.bukkit.event.server.ServerListPingEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
@ -18,25 +19,29 @@ import java.io.File;
public class ServerEvents implements Listener {
public final BossBar bossbar;
public final PacketInjector injector;
public ServerEvents() {
bossbar = Bukkit.createBossBar(ChatColor.GOLD + "Kuudra", BarColor.RED, BarStyle.SEGMENTED_12);
this.injector = new PacketInjector();
}
@EventHandler
public void onJoin(PlayerJoinEvent e) {
bossbar.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
public void onQuit(PlayerQuitEvent e) {
injector.removePlayer(e.getPlayer());
}
@EventHandler
public void onPing(ServerListPingEvent e) {
e.setMaxPlayers(8964);
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);
try {
e.setServerIcon(Bukkit.loadServerIcon(new File("nuke.png")));
@ -44,6 +49,7 @@ public class ServerEvents implements Listener {
ee.printStackTrace();
}
}
@EventHandler
public void onClickHologram(InteractHologramEvent e) {
if (e.getHologram().getCustomName() == null) return;
@ -51,8 +57,16 @@ public class ServerEvents implements Listener {
// TODO: change hologram things
}
}
@EventHandler
public void onWeatherChange(WeatherChangeEvent e) {
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!");
}
}
}