Comment puis-je appliquer un effet lorsque un joueur clique avec le bouton droit / clique droit avec un élément en main?

Existe-t-il un moyen pour que je le réalise quand j'ai laissé un clic / clic droit avec un certain élément, il applique un effet? Je sais que vous pouvez appliquer des attributs à l'armure et aux objets, mais je le veux, alors, lorsque vous utilisez l'objet, il applique un effet sur votre lecteur.

Par exemple, disons que je veux quelque chose de sorte que lorsque je clique droit avec un certain élément (disons un lingot de fer qui m'a été donné), je vais faire un saut pendant 10 secondes. Un peu comme une potion d'une manière.

Est-ce possible avec des blocs de commandes / commandes / des mods?

Il existe une façon de le faire en utilisant des commandes à la vanille. J'ai eu l'idée générale de Betathedata sur Reddit , mais les commandes ci-dessous sont ma propre mise en œuvre de la technique.

Cette méthode repose sur le fait qu'un villageois sans offre commerciale n'a pas d'interface commerciale , mais en cliquant avec le bouton droit de la souris, il comptera encore «parler». Par conséquent, avoir un villageois invisible à votre emplacement tout en tenant un objet spécifique fera l'affaire.

Objectifs du tableau de bord

Pour que cela fonctionne, nous avons besoin de trois objectifs mis en place.

scoreboard objectives add holdingItem dummy scoreboard objectives add holdTime stat.playOneMinute scoreboard objectives add rightClick stat.talkedToVillager 

Les deux premiers sont pour le suivi lorsqu'un joueur vient de sélectionner un élément spécifique, le troisième est ce que nous voulons définir discrètement à 1.

Commandes d'horloge

Tout d'abord, configurez une horloge de remplissage assez grande pour exécuter au moins 8 commandes. Commencez avec

 scoreboard players set @a holdingItem 0 scoreboard players set @a holdingItem 1 {SelectedItem:{id:minecraft:iron_ingot}} scoreboard players reset @a[score_holdingItem=0] holdTime 

Remplacez la balise SelectedItem par ce que vous voulez. Vous pouvez ajouter plusieurs de cette deuxième commande si vous voulez qu'elle fonctionne pour plusieurs éléments.

 execute @a[score_holdTime=1] ~ ~ ~ summon Villager ~ ~ ~ {CustomName:"RightClicky",Offers:{Recipes:[]},NoAI:1,Silent:1,ActiveEffects:[{Id:14,Duration:9999,ShowParticles:0b},{Id:11,Amplifier:4,Duration:9999,ShowParticles:0b}]} execute @a[score_holdTime_min=2] ~ ~ ~ tp @e[type=Villager,name=RightClicky,r=2,c=1] @a[c=1] execute @a[score_holdingItem=0] ~ ~ ~ tp @e[type=Villager,name=RightClicky,r=2,c=1] ~ -100 ~ 

Le premier convoquera un villageois appelé RightClicky, qui ne se déplace pas, ne parle pas et a Invisibilité et Résistance V (= Invulnerabilité), lorsque vous échangez le (s) élément (s) que vous avez spécifié ci-dessus.

Les deuxième et troisième commandes seront soit téléportés contre ce village, soit dans le vide (le tuant sans affichage des particules), selon que vous maintenez toujours votre objet ou non. Cette téléportation provoque un retard du villageois derrière vous, de sorte qu'il ne fonctionne pas toujours lorsque vous exécutez.

Après avoir placé ces commandes, votre score RightClick augmentera chaque fois que vous cliquez droit tout en maintenant votre objet. À ce stade, placez les commandes censées être déclenchées par le clic droit. Utilisez @a[score_RightClick_min=1] pour le ciblage. Par exemple:

 effect @a[score_RightClick_min=1] minecraft:jump_boost 10 5 

À la fin de votre horloge, courez

 scoreboard players set @a RightClick 0 

Pour réinitialiser le système pour détecter un autre clic droit.


La détection d'un clic gauche devrait également être possible. Après avoir convoqué le villageois, vous pouvez détecter si un joueur le frappe , tel que détaillé dans cette question . Mettre les deux ensemble est laissé comme un exercice au lecteur.

Il existe un critère de tableau de bord qui teste si un joueur clique droit et une étiquette de données testfor pour tenir un élément. Si vous attachez une porte ET pour tester si un joueur tient un lingot de fer et un clic droit, il devrait être possible.

Je ne suis pas sûr de comprendre, mais si vous êtes sur un serveur, vous pouvez utiliser le plugin appelé "Skript", il est vraiment utile et vous pouvez faire beaucoup de choses avec lui!