1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Comment le détécter ?

Discussion dans 'Commands blocks & Redstone' créé par Aerosmite, 3 Jan 2015.

  1. Aerosmite

    Aerosmite Mineur de Fer

    Inscrit:
    18 Nov 2014
    Messages:
    611
    Points:
    86
    Sexe:
    Homme
    Salut :), je suis en train de créer un jump un peu spécial : sur certains blocks une clock détécte via un testfor si un joueur se situe dessus. Ensuite après un petit délai je supprime le block, je le remplace par un fallingsand qui a pour ID ce block et je remet le block intial 5 secondes plus tard. Tout fonctionne bien mais à force de mettre des clocks ca finit par laguer... Y a-t-il une solution pour détécter le joueur autrement que par une clock ? J aimerais ne pas utiliser de ressource pack pour changer de texture le command block. Merci d avance, Aerosmite :)
     
  2. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Tu peux utiliser un /execute detect pour détecter quand un joueur est sur un bloc, puis réaliser une action (je pense notamment à invoquer un ArmorStand qui te permet ensuite au bout d'un temps de faire tomber le bloc, puis le replacer, puis killer le stand).
    Il te faudra de toute façon des clocks pour ces actions mais probablement beaucoup moins qu'actuellement (et surtout une seule pour tous les blocs).
    Code (cpp):
    /execute @a ~ ~ ~ detect ~ ~-1 ~ <Nom_du_bloc> <Damage_Value> summon ArmorStand ~ ~ ~ {Marker:true,NoGravity:true}
    /scoreboard players add @e[type=ArmorStand] System 1
    /execute @e[type=ArmorStand,score_System_min=2] ~ ~ ~ kill @e[type=ArmorStand,score_System=1,r=2]
    Le score augmente de 10 par seconde, donc pour que le bloc tombe au bout de 1 seconde et se replace après au bout de 5 tu dois mettre les commandes suivantes.
    Code (cpp):
    /execute @e[type=ArmorStand,score_System_min=10,score_System=10] ~ ~ ~ setblock ~ ~-1 ~ minecraft:air
    /execute @e[type=ArmorStand,score_System_min=10,score_System=10] ~ ~ ~ summon FallingSand ~ ~-1 ~
    /execute @e[type=ArmorStand,score_System_min=60,score_System=60] ~ ~ ~ setblock ~ ~-1 ~ <Nom_du_bloc>
    /kill @e[type=ArmorStand,score_System_min=60]
    Tu peux bien sur rajouter un NBT tag à ton FallingSand pour le transforme en le bloc de ton choix.

    Si tu as plusieurs types de blocs sur le parcours il va te falloir un moyen de différencier les ArmorStand, tu peux utiliser un autre scoreboard mais je te conseille plutôt de faire plusieurs fois le premier execute avec des Nom_de_bloc différents et invoquant des Stand avec un CustomName dépendant du bloc, tu as ensuite juste à refaire les quatre commandes ci-dessus avec un selecteur de nom et des Nom_de_bloc et FallingSand différents.

    Il reste toujours le problème de "l'accumulation", cela va probablement surcharger le scoreboard car un score est créé à chaque bloc, ce qui n'est pas très grave mais qui peut te gêner si tu veux identifier par la suite un problème.
    Pour remédier à cela tu peux remplacer la dernière commande /kill par ces commandes.
    Cela rajoute quelques commandes et donc quelques clocks donc c'est optionnel.

    Code (cpp):
    /execute @e[type=ArmorStand,score_System_min=60] ~ ~ ~ summon ArmorStand ~ ~ ~ {Marker:true,NoGravity:true,CustomName:"Kill"}
    /execute @e[type=ArmorStand,name=Kill] ~ ~ ~ scoreboard players reset @e[type=ArmorStand,r=2] System
    /execute @e[type=ArmorStand,name=Kill] ~ ~ ~ kill @e[type=ArmorStand,r=2]
    Ici j'invoque un Stand avec un CustomName pour le différencier (comme je t'ai proposé plus haut), il reset le score des Stand sur lui puis les kill (et se kill lui-même au passage).

    De même pour le premier kill qui empêche d'avoir plusieurs Stands au même endroit si tu veux éviter l'encombrement tu peux modifier la dernière commande des trois par celles-ci.
    Code (cpp):
    /execute @e[type=ArmorStand,score_System_min=2] ~ ~ ~ entitydata @e[type=ArmorStand,score_System=1,r=2] {CustomName:"Surplus"}
    /scoreboard players reset @e[name=Surplus] System
    /kill @e[name=Surplus]

    Toutes ces commandes doivent bien sur s'activer dans l'ordre dans lequel je les ai cités (et les commandes optionnelles à la suite des autres), sinon le système va faire n'importe quoi et ton monde pourrait se remplir très vite de Stand.
     
    • J'aime J'aime x 1
    • J'approuve J'approuve x 1
    #2 Calambiel, 3 Jan 2015
    Dernière édition: 3 Jan 2015
  3. Aerosmite

    Aerosmite Mineur de Fer

    Inscrit:
    18 Nov 2014
    Messages:
    611
    Points:
    86
    Sexe:
    Homme
    C est bien ce que je pensais, c est donc
    impossible en 1.7 :/ Je pense qu il est temps pour moi de passer en 1.8 ^^ Je vais tester ça, merci beaucoup pour ta réponse rapide ! :)
     
  4. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    J'ai fais une petite erreur en oubliant d'empêcher qu'il y ait plusieurs Stand pour le même bloc, je te rajoute des commandes d'ici peu.
     
    • J'aime J'aime x 2
  5. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Tu peux aussi utiliser un spawner meme si je ne pense que ca lag beaucoup moins :D
    En 1.7 :
    /setblock ~ ~-1 ~ minecraft:mob_spawner 0 replace {EntityId:FallingSand,Delay:1,MinSpawnDelay:10,MaxSpawnDelay:10,RequiredPlayerRange:2,MaxNearbyEntities:1,SpawnData:{Time:1,Tile:152,Pos:[-410.5,56.5,1135.5],DropItem:0},SpawnCount:1}

    En 1.8 :
    /setblock ~ ~-1 ~ minecraft:mob_spawner 0 replace {EntityId:FallingSand,Delay:1,MinSpawnDelay:10,MaxSpawnDelay:10,RequiredPlayerRange:2,MaxNearbyEntities:1,SpawnData:{Time:1,Block:minecraft:redstone_block,Pos:[-410.5,56.5,1135.5],DropItem:0},SpawnCount:1}

    Tu n'a qu'a mettre le spawner au dessus du bloc a tester, a adapter le rayon après RequiredPlayerRange: puis a mettre les coordonnées dans Pos ou tu veux mettre le bloc de redstone (sans oublier que se sont des decimaux)

    Dans ton cas ca semble peux adapté mais sait-on jamais. ;)
     
  6. Aerosmite

    Aerosmite Mineur de Fer

    Inscrit:
    18 Nov 2014
    Messages:
    611
    Points:
    86
    Sexe:
    Homme
    Houlala faut vraiment que je me mette au mob spawner je sens que je rate des trucs ^^
    Je vais essayer j ai hâte de voir ce que ca donne merci ! :)
    Petit HS : Ton aide serais le bienvenue pour finir le Quizz xD Reviens sur le serveur petit galopin :P
     
    • J'aime J'aime x 1
  7. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Mince j'ai été repéré ! :D
    bon la je pense que les spawners ca peut pas marcher; non seulement ca lag mais en plus il faut mettre les spawners dessous (dessus ca serais faussé) et tu ne pourrais pas faire tomber les joueurs dans le vide=> c'est moins marrant :diable:
     
    • J'aime J'aime x 1

Partager cette page