0

I’m making something that effects a person with the amplifier accordingly to what amount the score is. (So if the score is 5 you get poison 5)

Is it possible to contain all of this in one command block without the use of redstone/comparators or functions

2 Answers 2

1

You would have to have to create a function or command block chain for this. Something like:

  • effect give @a[scores={<objective_name>=1}] minecraft:poison <duration> 0 true
  • effect give @a[scores={<objective_name>=2}] minecraft:poison <duration> 1 true
  • effect give @a[scores={<objective_name>=3}] minecraft:poison <duration> 2 true
  • and so on...

(Effect amplifiers start at 0 in commands, an amplifier of 0 shows up as 1 in the status effect list on the side of your inventory screen, an amplifier of 1 shows up as 2, and so on...)

You might have been able to do this with only one command if /data allowed modifying player data, but that might not ever be a feature...

1

If you don't need too many levels of poison, the previously posted answer is the best way to approach this. However, should you need upwards of 10 or so levels of poison, you could do something dynamic.

You'll need a second scoreboard objective for tracking the player's actual poison amplifier, which I've called poison_real

In a repeating chain, here's what you could do:

  • execute as @a store result score @s poison_real run data get entity @s ActiveEffects[{Id:19b}].Amplifier
  • effect give @a[scores={poison_level=1}] minecraft:poison 999999 0 (only applies when setting someone's score from 0 to 1)
  • scoreboard players remove @a poison_level 1
  • execute as @a at @s unless entity @e[type=minecraft:area_effect_cloud,name="poison_cloud",distance=..0.1] unless score @s poison_level = @s poison_real run effect clear @s minecraft:poison
  • execute as @a[scores={poison_level=0..}] at @s unless score @s poison_level = @s poison_real run summon minecraft:area_effect_cloud ~ ~ ~ {Radius:0.1f,CustomName:'"poison_cloud"',Duration:7b,Effects:[{Id:19b,Amplifier:0,Duration:999999}]}
  • execute as @e[type=minecraft:area_effect_cloud,name="poison_cloud"] at @s store result entity @s Effects[{Id:19b}].Amplifier int 1 run scoreboard players get @p poison_level
  • scoreboard players add @a poison_level 1

This chain detects a change in the poison_level score, and if there is a change, it summons an area effect cloud with an Amplifier of the player's poison_level.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .