package net.minecraft.server.commands; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; import java.util.Collection; import java.util.Collections; import java.util.function.Predicate; 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.item.ItemPredicateArgument; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; public class ClearInventoryCommands { private static final DynamicCommandExceptionType ERROR_SINGLE = new DynamicCommandExceptionType( p_308637_ -> Component.translatableEscape("clear.failed.single", p_308637_) ); private static final DynamicCommandExceptionType ERROR_MULTIPLE = new DynamicCommandExceptionType( p_308634_ -> Component.translatableEscape("clear.failed.multiple", p_308634_) ); public static void register(CommandDispatcher p_214421_, CommandBuildContext p_214422_) { p_214421_.register( Commands.literal("clear") .requires(p_136704_ -> p_136704_.hasPermission(2)) .executes(p_326228_ -> clearUnlimited(p_326228_.getSource(), Collections.singleton(p_326228_.getSource().getPlayerOrException()), p_180029_ -> true)) .then( Commands.argument("targets", EntityArgument.players()) .executes(p_326232_ -> clearUnlimited(p_326232_.getSource(), EntityArgument.getPlayers(p_326232_, "targets"), p_180027_ -> true)) .then( Commands.argument("item", ItemPredicateArgument.itemPredicate(p_214422_)) .executes( p_326233_ -> clearUnlimited( p_326233_.getSource(), EntityArgument.getPlayers(p_326233_, "targets"), ItemPredicateArgument.getItemPredicate(p_326233_, "item") ) ) .then( Commands.argument("maxCount", IntegerArgumentType.integer(0)) .executes( p_326231_ -> clearInventory( p_326231_.getSource(), EntityArgument.getPlayers(p_326231_, "targets"), ItemPredicateArgument.getItemPredicate(p_326231_, "item"), IntegerArgumentType.getInteger(p_326231_, "maxCount") ) ) ) ) ) ); } private static int clearUnlimited(CommandSourceStack p_333436_, Collection p_334305_, Predicate p_336088_) throws CommandSyntaxException { return clearInventory(p_333436_, p_334305_, p_336088_, -1); } private static int clearInventory(CommandSourceStack p_136706_, Collection p_136707_, Predicate p_136708_, int p_136709_) throws CommandSyntaxException { int i = 0; for (ServerPlayer serverplayer : p_136707_) { i += serverplayer.getInventory().clearOrCountMatchingItems(p_136708_, p_136709_, serverplayer.inventoryMenu.getCraftSlots()); serverplayer.containerMenu.broadcastChanges(); serverplayer.inventoryMenu.slotsChanged(serverplayer.getInventory()); } if (i == 0) { if (p_136707_.size() == 1) { throw ERROR_SINGLE.create(p_136707_.iterator().next().getName()); } else { throw ERROR_MULTIPLE.create(p_136707_.size()); } } else { int j = i; if (p_136709_ == 0) { if (p_136707_.size() == 1) { p_136706_.sendSuccess(() -> Component.translatable("commands.clear.test.single", j, p_136707_.iterator().next().getDisplayName()), true); } else { p_136706_.sendSuccess(() -> Component.translatable("commands.clear.test.multiple", j, p_136707_.size()), true); } } else if (p_136707_.size() == 1) { p_136706_.sendSuccess(() -> Component.translatable("commands.clear.success.single", j, p_136707_.iterator().next().getDisplayName()), true); } else { p_136706_.sendSuccess(() -> Component.translatable("commands.clear.success.multiple", j, p_136707_.size()), true); } return i; } } }