Version de Minecraft : 1.8.9
Version de Skript : 2.6.5-for-1.8 Matocolotoe patch
Type du skript : Quelques fonctions de base pour entretenir un NPC de type 'PLAYER'
Description du script :
Salut à tous !
Aujourd'hui je me tourne vers vous parce que je suis face à une colle..
J'ai acquis un certain niveau en skript au fil des années en ayant commencé en 2016, j'ai repris y'a quelques temps et le modernisme m'a amené à apprendre skript-reflect ainsi que l'envie de tester un patch qui permet d'utiliser skript 2.6.4 sur minecraft 1.8 (version 2.6.5 de Matocolotoe sortie tout juste hier d'ailleurs). Le problème est que je veux tester des trucs avec un NPC, mais l'addon skript-npc n'est plus mis à jour et est incompatible avec ma version de skript désormais.. Skript-citizens me balance une énorme erreur en console lors du démarrage également. Aussi, qu'on se le dise, skRayFall et Skelett sont nuls pour les NPC, du coup j'aimerais savoir si les plus adeptes de skript-reflect parmi vous sauraient comment importer des trucs pour créer des NPC avec skript-reflect. J'ai cherché un peu partout sur la toile sur le forum anglophone skunity et leur discord mais je n'ai pas trouvé grand chose si ce n'est des ébauches..
J'ai trouvé par exemple ce code que je n'ai pas encore très bien compris et qui me kick illico en tapant une commande qui fait SpawnNPC("test", player, player's location) :
import:
org.bukkit.Bukkit
option nms:
get:
set {_nms version} to Bukkit.getServer().getClass().getPackage().getName().split("\.")[3]
return "net.minecraft.server.%{_nms version}%"
import:
java.util.UUID
java.util.Arrays
java.lang.Byte
org.bukkit.Location
com.mojang.authlib.GameProfile
com.mojang.authlib.properties.Property
{@nms}.MinecraftServer
{@nms}.WorldServer
{@nms}.PlayerInteractManager
{@nms}.EntityPlayer
org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer
{@nms}.PacketPlayOutPlayerInfo
{@nms}.PacketPlayOutAnimation
{@nms}.PacketPlayOutNamedEntitySpawn
{@nms}.PacketPlayOutEntityHeadRotation
{@nms}.PacketPlayOutPlayerInfo$EnumPlayerInfoAction
{@nms}.PacketPlayOutEntityMetadata
{@nms}.DataWatcher
function SpawnNPC(name: text, pl: player, loc: location):
set {_uuid} to random uuid
set {_uuid} to UUID.fromString({_uuid})
wait 1 tick
replace all "&" with "§" in {_name}
set {_profile} to new GameProfile({_uuid}, "%{_name}%")
{_profile}.getProperties().clear()
{_profile}.getProperties().put("textures", new Property("textures", {_value}, {_signature}))
set {_server} to MinecraftServer.getServer()
set {_world} to {_server}.getWorldServer(0)
set {_manager} to new PlayerInteractManager({_world})
set {_player} to new EntityPlayer({_server}, {_world}, {_profile}, {_manager})
set {npc::%{_pl}%::%{_name}%} to {_id}
{_player}.setLocation({_loc}.getX(), {_loc}.getY(), {_loc}.getZ(), {_loc}.getYaw(), {_loc}.getPitch())
set {_packet} to new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, {_player})
set {_packet2} to new PacketPlayOutNamedEntitySpawn({_player})
{_pl}.getHandle().playerConnection.sendPacket({_packet})
{_pl}.getHandle().playerConnection.sendPacket({_packet2})
J'ai trouvé ce type de code aussi :
import:
com.comphenix.protocol.ProtocolLibrary
com.comphenix.protocol.PacketType
command /etest:
trigger:
set {_loc} to player's location
set {_packet} to ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.NAMED_ENTITY_SPAWN)
{_packet}.getIntegers().write(0, 1)
{_packet}.getUUIDs().write(0, "e3ad3599-4691-2f8b-93bf-838687927fdd")
{_packet}.getIntegers().write(1, {_loc}.getX())
{_packet}.getIntegers().write(2, {_loc}.getY())
{_packet}.getIntegers().write(3, {_loc}.getZ())
{_packet}.getBytes().write(0, {_loc}.getYaw())
{_packet}.getBytes().write(1, {_loc}.getPitch())
ProtocolLibrary.getProtocolManager().sendServerPacket(player, {_packet})
Aucun de ces codes ne me donne d'erreurs lors du /sk reload MAIS le premier me kick et le deuxième ne fait rien 😕
J'espère que certains d'entre vous pourront m'éclairer en me donnant quelques fonctions !
Merci d'avance et bonne fin de vacances de Toussaint à tous
EDIT : Petite précision, ce NPC n'a pas pour vocation d'être un truc de ouf, il sera immobile et invulnérable, il faudra juste pouvoir détecter les clics droits sur un NPC unique qui serait reconnaissable avec possibilité de changer le skin. Je pense qu'avec des packets server side ou même client side si c'est mieux, ce serait faisable