Aller au contenu

Question

Posté(e)

Version de Minecraft : 1.12.2
Version de Skript : 2.5-alpha2

Addons utilisés: ThatPacketAddon, ProtocolLib...

Type du skript : Script permettant de modifier les lignes d'un panneau

Description du script :

Hey ! Je suis en train de faire un script permettant d'ouvrir un panneau et de définir le texte à l'intérieur. Tout est bon sauf une seule chose : Je n'arrive pas à définir les lignes du panneau une fois celui-ci ouvert. Voici mon code:

Command /sign:
	trigger:
		set {sign::%player%} to true
		set {_sign} to new play_server_open_sign_editor packet
		send packet {_sign} to player

On packet event play_client_update_sign:
	{sign::%player%} is true
	set {_lines::*} to string array pinfo 0 of event-packet
	set {_el} to 1
	loop 4 times:
		set {_line%{_el}%} to element {_el} of {_lines::*}
		add 1 to {_el}
	if {_line1} is not set:
		play sound "entity.villager.no" with volume 0.8 and pitch 1 at player for player
		message "{@error} Veuillez indiquer quelque chose sur la première ligne"
	if {_line1} is set:
		broadcast "C'est bon :)"
	clear {sign::%player%}

 

9 réponses à cette question

Messages recommandés

  • 0
Posté(e)
Le 16/03/2020 à 18:39, TitiLaPierre a dit :

Version de Minecraft : 1.12.2
Version de Skript : 2.5-alpha2

Addons utilisés: ThatPacketAddon, ProtocolLib...

Type du skript : Script permettant de modifier les lignes d'un panneau

Description du script :

Hey ! Je suis en train de faire un script permettant d'ouvrir un panneau et de définir le texte à l'intérieur. Tout est bon sauf une seule chose : Je n'arrive pas à définir les lignes du panneau une fois celui-ci ouvert. Voici mon code:


Command /sign:
	trigger:
		set {sign::%player%} to true
		set {_sign} to new play_server_open_sign_editor packet
		send packet {_sign} to player

On packet event play_client_update_sign:
	{sign::%player%} is true
	set {_lines::*} to string array pinfo 0 of event-packet
	set {_el} to 1
	loop 4 times:
		set {_line%{_el}%} to element {_el} of {_lines::*}
		add 1 to {_el}
	if {_line1} is not set:
		play sound "entity.villager.no" with volume 0.8 and pitch 1 at player for player
		message "{@error} Veuillez indiquer quelque chose sur la première ligne"
	if {_line1} is set:
		broadcast "C'est bon :)"
	clear {sign::%player%}

 

Salut,
Tu peux faire via les packets ou avec skript-mirror l'ouverture du panneau.
Ensuite, tu peux utiliser l'événement on sign edit: pour récupérer les lignes. 😛 

  • 0
Posté(e)
Il y a 3 heures, Romitou a dit :

Salut,
Tu peux faire via les packets ou avec skript-mirror l'ouverture du panneau.
Ensuite, tu peux utiliser l'événement on sign edit: pour récupérer les lignes. 😛 

Aie, tu n'as pas compris ma demande :

Le code que j'ai mis fonctionne très bien, tout ce que je souhaite, c'est définir les lignes du panneau que le joueur ouvre avec les packets de ThatPacketsAddon

  • 0
Posté(e) (modifié)
Il y a 8 heures, TitiLaPierre a dit :

Aie, tu n'as pas compris ma demande :

Le code que j'ai mis fonctionne très bien, tout ce que je souhaite, c'est définir les lignes du panneau que le joueur ouvre avec les packets de ThatPacketsAddon

Oups ! J'ai lu trop vite.
Je vais voir ça ! 😄

EDIT: c.f. 
https://wiki.vg/Protocol#Update_Sign

Modifié par Romitou
  • 0
Posté(e)

Bonjour, vous avez plusieurs options:

  1. Placer un sign à un endroit précis avec le texte que vous souhaitez et ouvrir cette pancarte au joueur
  2. Quelque chose de similaire, mais cette fois en simulant la présence d'un sign à l'endroit en question via un packet (Ce qui permet de ne garder de pancarte dans le monde (même si ça reste quelque chose de peu d'importance si ce dernier est "caché"
  3. Concevoir un faux panneau sans intercepter de packet (Ce qui ajoutera comme dépendance skript-mirror afin de créer un NBTCompound)
     

Les options sont ordonnées par complexité croissante du code.
Laquelle préférez vous ?

  • 0
Posté(e)
Il y a 2 heures, Rush2Fer a dit :

Bonjour, vous avez plusieurs options:

  1. Placer un sign à un endroit précis avec le texte que vous souhaitez et ouvrir cette pancarte au joueur
  2. Quelque chose de similaire, mais cette fois en simulant la présence d'un sign à l'endroit en question via un packet (Ce qui permet de ne garder de pancarte dans le monde (même si ça reste quelque chose de peu d'importance si ce dernier est "caché"
  3. Concevoir un faux panneau sans intercepter de packet (Ce qui ajoutera comme dépendance skript-mirror afin de créer un NBTCompound)
     

Les options sont ordonnées par complexité croissante du code.
Laquelle préférez vous ?

Salut ! Merci de ta réponse.

La 2e option me semble bien (Si j'ai bien compris, le panneau ne sera pas visible dans le monde, si ce n'est pas cela, je choisi la 3e option)

  • 0
Posté(e)
Le 01/04/2020 à 18:55, TitiLaPierre a dit :

Salut ! Merci de ta réponse.

La 2e option me semble bien (Si j'ai bien compris, le panneau ne sera pas visible dans le monde, si ce n'est pas cela, je choisi la 3e option)

Bien, je vous fait ça;
EDIT:

command /sign:
	trigger:
		set {_bc} to new play_server_block_change packet
		set blockdata field 0 of {_bc} to wall sign
		set location field 0 of {_bc} to {NBT::loc}
		send packet {_bc} to player
		set {_data} to new play_server_tile_entity_data packet
		set location field 0 of {_data} to {NBT::loc}
		set int field 0 of {_data} to 9
		set nbt field 0 of {_data} to {NBT::default}
		send packet {_data} to player
		set {_sign} to new play_server_open_sign_editor packet
		set location field 0 of {_sign} to {NBT::loc}
		send packet {_sign} to player
		#Partie Facultative ----------------------------------------------- #
		set {_remove} to new play_server_block_change packet   				#
		set blockdata field 0 of {_remove} to type of block at {NBT::loc}	#
		set location field 0 of {_remove} to {NBT::loc}		   				#
		send packet {_remove} to player						   				#
		# ------------------------------------------------------------------#
on packet event play_server_tile_entity_data:
	int field 0 of event-packet is 9
	set {_d} to "%nbt field 0 of event-packet%"
	length of {_d} > 494 #Verification de sign non vide
	event-player has permission "sign.edit"
	event-player has bedrock  #Vous devez avoir de la bedrock dans votre inventaire pour modifier le panneau
	set {NBT::default} to nbt field 0 of event-packet
	set {NBT::loc} to location field 0 of event-packet
	remove all bedrock from player
	send "§cNBT defined for Sign GUI"
on packet event play_client_update_sign:
	if location field 0 of event-packet is {NBT::loc}:
		set {_lines::*} to string array pinfo 0 of event-packet
		if {_lines::1} is "":
			play sound "entity.villager.no" with volume 0.8 and pitch 1 at player for player
			message "{@error} Veuillez indiquer quelque chose sur la première ligne"
		else:
			broadcast "C'est bon :) -> %{_lines::1}%"

Fonctionnement:
- Placer une pancarte en ayant de la bedrock dans l'inventaire et la permission "sign.edit"
(La pancarte peut être placée à la couche 0 (bedrock) ou n'importe où en hauteur où un joueur n'a pas la possibilité de poser/casser des blocs (spawn par exemple)
- Ecrire les lignes que l'on souhaite comme "Modèle" puis enregistrer la pancarte (Done.)

- Casser la pancarte et éventuellement remettre de la bedrock si vous aviez choisi la première option de placement
- Utiliser la commande /sign
________________________________________________________________________________________________________________________________________

⚠️⚠️ A tous les curieux qui viendraient par la suite; ce code a été conçu pour la demande spécifique de l'auteur de ce post, c'est à dire pour fonctionner avec les caractéristiques de son serveur (Versions de Spigot;ThatPacketAddon et ProtocolLib). Étant donné les conflits que rencontre actuellement ThatPacketAddon avec ProtocolLib il se peut ce code ne soit pas fonctionnel pour vous.⚠️⚠️

Résolu @TitiLaPierre ?

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.