how do i make it so that my diamond sword can give player potion effects?

Solution 1:

The way I know how to do this is to track who gave damage and is holding a poison sword, then execute that target and give poison to the nearest player who has taken damage.

To track who has given or taken damage, use the following scoreboard:

/scoreboard objectives add dealt minecraft.custom:minecraft.damage_dealt
/scoreboard objectives add taken minecraft.custom:minecraft.damage_taken

These scoreboards accumulate player scores for damage they give and take.

Then place these command blocks in a repeating chain:

execute as @a[scores={dealt=1..},nbt={SelectedItem:{id:"minecraft:diamond_sword",tag:{display:{Name:"\"Poison Sword\""}}}}] at @s run effect give @a[scores={taken=1..},limit=1,sort=nearest] poison

This lets players who have given damage and is holding a diamond "Poison Sword" to give poison to the nearest player who has taken damage.

scoreboard players reset @a taken
scoreboard players reset @a dealt

These two commands refresh the scoreboards so the machine can run again later.

Name a diamond sword "Poison Sword" and try it out. If you don't want the name to be specified, replace the first command with:

execute as @a[scores={dealt=1..},nbt={SelectedItem:{id:"minecraft:diamond_sword"}}] at @s run effect give @a[scores={taken=1..},limit=1,sort=nearest] poison

(NOTE: There might be a more efficient method than this out there, but I never had the need to learn such a method so I'm sure this will do well for now.)