Advertisement
Phe0X

Sleep Animation Snippet Skript (FR)

Jun 18th, 2020
2,152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. option ver:
  2.     get:
  3.         return console.getServer().getClass().getPackage().getName().split("\.")[3] #Permet de connaître la version du serveur utilisé (pour les NMS)
  4. import:
  5.     java.util.Optional
  6.     net.minecraft.server.{@ver}.BlockPosition #Nécessaire pour la position du lit
  7.     net.minecraft.server.{@ver}.EntityPose #La pose du joueur (ici Sleeping, mais il existe aussi swimming etc..)
  8.     com.comphenix.protocol.wrappers.WrappedDataWatcher #Importer les fonctionnalités de protocollib qui permettent de modifier la metadata du joueur
  9.     com.comphenix.protocol.wrappers.WrappedDataWatcher$Registry as DataWatcherRegistry
  10.     com.comphenix.protocol.wrappers.WrappedDataWatcher$WrappedDataWatcherObject as DataWatcherObject
  11. effect (make|force) [the] %players% [to] sleep at %location% for %players% [to not be stuck in bed %-boolean%]:
  12.     trigger:
  13.         set {_stuck} to expression-4 ? false #On définit sur false si le "ton not be stuck.." n'est pas définies
  14.         set {_PacketMetadata} to new play_server_entity_metadata packet
  15.         set {_OptionalBlockPos} to Optional.of(new BlockPosition(x location of expression-2, (y location of expression-2) - 0.5 and z location of expression-2)) #La position précisé en 2nde expression est utilisé via un Optionalof BlockPosition
  16.         set {_WDW} to new WrappedDataWatcher() #On crée le wrappeddatawatcher
  17.         set {_Serializer} to DataWatcherRegistry.getBlockPositionSerializer(true)
  18.         set {_DWO} to new DataWatcherObject(13 and {_Serializer})
  19.         {_WDW}.setObject({_DWO} and {_OptionalBlockPos}) #On définit l'objet 13 à la position du lit
  20.         {_WDW}.setObject(6, DataWatcherRegistry.get(EntityPose) and EntityPose.SLEEPING) #On définit l'objet 6 (la pose du joueur) à EntityPose.SLEEPING
  21.         set watchable collection field 0 of {_PacketMetadata} to {_WDW}
  22.         loop expressions-1:
  23.             set int pnum 0 of {_PacketMetadata} to (loop-value-1).getEntityId() #Envoyer le packet aux joueurs concernés contenant les infos des joueurs concernés (mojang, pourquoi pas une int array ici, pour modifier plusieurs metadata d'un coup ? :) )
  24.             if {_stuck} is false:
  25.                 loop expressions-3:
  26.                     send packet {_PacketMetadata} to loop-value-2
  27.                     set {IsSleeping::%(loop-value-1).getEntityId()%::%loop-value-2%} to true #variable permettant de réafficher le joueur en train de dormir
  28.                 wait 2 ticks #Permet d'eviter que certains joueurs n'apparaissent pas comme allongés si vous essayez d'en faire dormir plusieurs à la fois
  29.             else:
  30.                 loop expressions-3:
  31.                     loop-value-1 is not loop-value-2 #Eviter d'envoyer le packet au joueur censé dormir, pour qu'il ne soit pas bloqué
  32.                     send packet {_PacketMetadata} to loop-value-2
  33.                     set {IsSleeping::%(loop-value-1).getEntityId()%::%loop-value-2%} to true
  34. effect wake [the][up] %players% [up] for %players%:
  35.     trigger:
  36.         set {_PacketMetadata} to new play_server_entity_metadata packet
  37.         set {_OptionalBlockPos} to Optional.empty() #Simuler un "leave bed"
  38.         set {_WDW} to new WrappedDataWatcher()
  39.         set {_Serializer} to DataWatcherRegistry.getBlockPositionSerializer(true)
  40.         set {_DWO} to new DataWatcherObject(13 and {_Serializer})
  41.         {_WDW}.setObject({_DWO} and {_OptionalBlockPos})       
  42.         {_WDW}.setObject(6, DataWatcherRegistry.get(EntityPose) and EntityPose.STANDING)
  43.         set watchable collection field 0 of {_PacketMetadata} to {_WDW}
  44.         loop expressions-1:
  45.             set int pnum 0 of {_PacketMetadata} to (loop-value-1).getEntityId()
  46.             loop expressions-2:
  47.                 clear {IsSleeping::%(loop-value-1).getEntityId()%::%loop-value-2%}
  48.                 send packet {_PacketMetadata} to loop-value-2
  49. on packet event play_server_entity_metadata: #Eviter que le joueur ne soit plus allongé s'il change de position (sneak par exemple)
  50.     {IsSleeping::%int pnum 0 of event-packet%::%player%} is true
  51.     set {_WC} to watchable collection field 0 of event-packet
  52.     "%{_WC}.getObject(6)%" is not "SLEEPING" or "<none>"
  53.     cancel event #Il faut cancel car remplacer ici le field en question peut faire des bugs visuels pour le joueur
  54. on packet event play_server_named_entity_spawn: #Faire que le joueur dorme s'il apparait dans le champs de vision d'un autre joueur
  55.     {IsSleeping::%int pnum 0 of event-packet%::%player%} is true
  56.     make {Id::%int pnum 0 of event-packet%} sleep at {Id::%int pnum 0 of event-packet%}'s location for player
  57. on quit: #Enlever le fait que le joueur dormait s'il se déconnecte
  58.     clear {IsSleeping::%player.getEntityId()%::*}
  59. on join: #Obligatoire pour convertir un entity id en joueur sans loop all players
  60.     set {Id::%player.getEntityId()%} to player
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement