package net.minecraft.server.commands; import com.google.common.collect.ImmutableList; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import java.util.Collection; import javax.annotation.Nullable; import net.minecraft.commands.CommandBuildContext; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.commands.arguments.ResourceArgument; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; public class EffectCommands { private static final SimpleCommandExceptionType ERROR_GIVE_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.effect.give.failed")); private static final SimpleCommandExceptionType ERROR_CLEAR_EVERYTHING_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.effect.clear.everything.failed")); private static final SimpleCommandExceptionType ERROR_CLEAR_SPECIFIC_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.effect.clear.specific.failed")); public static void register(CommandDispatcher p_136954_, CommandBuildContext p_251610_) { p_136954_.register( Commands.literal("effect") .requires(p_136958_ -> p_136958_.hasPermission(2)) .then( Commands.literal("clear") .executes(p_136984_ -> clearEffects(p_136984_.getSource(), ImmutableList.of(p_136984_.getSource().getEntityOrException()))) .then( Commands.argument("targets", EntityArgument.entities()) .executes(p_136982_ -> clearEffects(p_136982_.getSource(), EntityArgument.getEntities(p_136982_, "targets"))) .then( Commands.argument("effect", ResourceArgument.resource(p_251610_, Registries.MOB_EFFECT)) .executes( p_248126_ -> clearEffect( p_248126_.getSource(), EntityArgument.getEntities(p_248126_, "targets"), ResourceArgument.getMobEffect(p_248126_, "effect") ) ) ) ) ) .then( Commands.literal("give") .then( Commands.argument("targets", EntityArgument.entities()) .then( Commands.argument("effect", ResourceArgument.resource(p_251610_, Registries.MOB_EFFECT)) .executes( p_248127_ -> giveEffect( p_248127_.getSource(), EntityArgument.getEntities(p_248127_, "targets"), ResourceArgument.getMobEffect(p_248127_, "effect"), null, 0, true ) ) .then( Commands.argument("seconds", IntegerArgumentType.integer(1, 1000000)) .executes( p_248124_ -> giveEffect( p_248124_.getSource(), EntityArgument.getEntities(p_248124_, "targets"), ResourceArgument.getMobEffect(p_248124_, "effect"), IntegerArgumentType.getInteger(p_248124_, "seconds"), 0, true ) ) .then( Commands.argument("amplifier", IntegerArgumentType.integer(0, 255)) .executes( p_248123_ -> giveEffect( p_248123_.getSource(), EntityArgument.getEntities(p_248123_, "targets"), ResourceArgument.getMobEffect(p_248123_, "effect"), IntegerArgumentType.getInteger(p_248123_, "seconds"), IntegerArgumentType.getInteger(p_248123_, "amplifier"), true ) ) .then( Commands.argument("hideParticles", BoolArgumentType.bool()) .executes( p_248125_ -> giveEffect( p_248125_.getSource(), EntityArgument.getEntities(p_248125_, "targets"), ResourceArgument.getMobEffect(p_248125_, "effect"), IntegerArgumentType.getInteger(p_248125_, "seconds"), IntegerArgumentType.getInteger(p_248125_, "amplifier"), !BoolArgumentType.getBool(p_248125_, "hideParticles") ) ) ) ) ) .then( Commands.literal("infinite") .executes( p_267907_ -> giveEffect( p_267907_.getSource(), EntityArgument.getEntities(p_267907_, "targets"), ResourceArgument.getMobEffect(p_267907_, "effect"), -1, 0, true ) ) .then( Commands.argument("amplifier", IntegerArgumentType.integer(0, 255)) .executes( p_267908_ -> giveEffect( p_267908_.getSource(), EntityArgument.getEntities(p_267908_, "targets"), ResourceArgument.getMobEffect(p_267908_, "effect"), -1, IntegerArgumentType.getInteger(p_267908_, "amplifier"), true ) ) .then( Commands.argument("hideParticles", BoolArgumentType.bool()) .executes( p_267909_ -> giveEffect( p_267909_.getSource(), EntityArgument.getEntities(p_267909_, "targets"), ResourceArgument.getMobEffect(p_267909_, "effect"), -1, IntegerArgumentType.getInteger(p_267909_, "amplifier"), !BoolArgumentType.getBool(p_267909_, "hideParticles") ) ) ) ) ) ) ) ) ); } private static int giveEffect( CommandSourceStack p_250553_, Collection p_250411_, Holder p_249495_, @Nullable Integer p_249652_, int p_251498_, boolean p_249944_ ) throws CommandSyntaxException { MobEffect mobeffect = p_249495_.value(); int i = 0; int j; if (p_249652_ != null) { if (mobeffect.isInstantenous()) { j = p_249652_; } else if (p_249652_ == -1) { j = -1; } else { j = p_249652_ * 20; } } else if (mobeffect.isInstantenous()) { j = 1; } else { j = 600; } for (Entity entity : p_250411_) { if (entity instanceof LivingEntity) { MobEffectInstance mobeffectinstance = new MobEffectInstance(p_249495_, j, p_251498_, false, p_249944_); if (((LivingEntity)entity).addEffect(mobeffectinstance, p_250553_.getEntity())) { i++; } } } if (i == 0) { throw ERROR_GIVE_FAILED.create(); } else { if (p_250411_.size() == 1) { p_250553_.sendSuccess( () -> Component.translatable("commands.effect.give.success.single", mobeffect.getDisplayName(), p_250411_.iterator().next().getDisplayName(), j / 20), true ); } else { p_250553_.sendSuccess(() -> Component.translatable("commands.effect.give.success.multiple", mobeffect.getDisplayName(), p_250411_.size(), j / 20), true); } return i; } } private static int clearEffects(CommandSourceStack p_136960_, Collection p_136961_) throws CommandSyntaxException { int i = 0; for (Entity entity : p_136961_) { if (entity instanceof LivingEntity && ((LivingEntity)entity).removeAllEffects()) { i++; } } if (i == 0) { throw ERROR_CLEAR_EVERYTHING_FAILED.create(); } else { if (p_136961_.size() == 1) { p_136960_.sendSuccess(() -> Component.translatable("commands.effect.clear.everything.success.single", p_136961_.iterator().next().getDisplayName()), true); } else { p_136960_.sendSuccess(() -> Component.translatable("commands.effect.clear.everything.success.multiple", p_136961_.size()), true); } return i; } } private static int clearEffect(CommandSourceStack p_250069_, Collection p_248561_, Holder p_249198_) throws CommandSyntaxException { MobEffect mobeffect = p_249198_.value(); int i = 0; for (Entity entity : p_248561_) { if (entity instanceof LivingEntity && ((LivingEntity)entity).removeEffect(p_249198_)) { i++; } } if (i == 0) { throw ERROR_CLEAR_SPECIFIC_FAILED.create(); } else { if (p_248561_.size() == 1) { p_250069_.sendSuccess( () -> Component.translatable("commands.effect.clear.specific.success.single", mobeffect.getDisplayName(), p_248561_.iterator().next().getDisplayName()), true ); } else { p_250069_.sendSuccess(() -> Component.translatable("commands.effect.clear.specific.success.multiple", mobeffect.getDisplayName(), p_248561_.size()), true); } return i; } } }