soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.server.commands;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
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.Dynamic2CommandExceptionType;
import com.mojang.brigadier.exceptions.Dynamic3CommandExceptionType;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import com.mojang.brigadier.suggestion.SuggestionProvider;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Map.Entry;
import net.minecraft.commands.CommandBuildContext;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraft.commands.arguments.EntityArgument;
import net.minecraft.commands.arguments.ResourceOrIdArgument;
import net.minecraft.commands.arguments.SlotArgument;
import net.minecraft.commands.arguments.coordinates.BlockPosArgument;
import net.minecraft.commands.arguments.item.ItemArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.server.ReloadableServerRegistries;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.Container;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.SlotAccess;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.LootParams;
import net.minecraft.world.level.storage.loot.functions.LootItemFunction;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
public class ItemCommands {
static final Dynamic3CommandExceptionType ERROR_TARGET_NOT_A_CONTAINER = new Dynamic3CommandExceptionType(
(p_308755_, p_308756_, p_308757_) -> Component.translatableEscape("commands.item.target.not_a_container", p_308755_, p_308756_, p_308757_)
);
static final Dynamic3CommandExceptionType ERROR_SOURCE_NOT_A_CONTAINER = new Dynamic3CommandExceptionType(
(p_308752_, p_308753_, p_308754_) -> Component.translatableEscape("commands.item.source.not_a_container", p_308752_, p_308753_, p_308754_)
);
static final DynamicCommandExceptionType ERROR_TARGET_INAPPLICABLE_SLOT = new DynamicCommandExceptionType(
p_308758_ -> Component.translatableEscape("commands.item.target.no_such_slot", p_308758_)
);
private static final DynamicCommandExceptionType ERROR_SOURCE_INAPPLICABLE_SLOT = new DynamicCommandExceptionType(
p_308749_ -> Component.translatableEscape("commands.item.source.no_such_slot", p_308749_)
);
private static final DynamicCommandExceptionType ERROR_TARGET_NO_CHANGES = new DynamicCommandExceptionType(
p_308748_ -> Component.translatableEscape("commands.item.target.no_changes", p_308748_)
);
private static final Dynamic2CommandExceptionType ERROR_TARGET_NO_CHANGES_KNOWN_ITEM = new Dynamic2CommandExceptionType(
(p_308750_, p_308751_) -> Component.translatableEscape("commands.item.target.no_changed.known_item", p_308750_, p_308751_)
);
private static final SuggestionProvider<CommandSourceStack> SUGGEST_MODIFIER = (p_326278_, p_326279_) -> {
ReloadableServerRegistries.Holder reloadableserverregistries$holder = p_326278_.getSource().getServer().reloadableRegistries();
return SharedSuggestionProvider.suggestResource(reloadableserverregistries$holder.getKeys(Registries.ITEM_MODIFIER), p_326279_);
};
public static void register(CommandDispatcher<CommandSourceStack> p_214449_, CommandBuildContext p_214450_) {
p_214449_.register(
Commands.literal("item")
.requires(p_180256_ -> p_180256_.hasPermission(2))
.then(
Commands.literal("replace")
.then(
Commands.literal("block")
.then(
Commands.argument("pos", BlockPosArgument.blockPos())
.then(
Commands.argument("slot", SlotArgument.slot())
.then(
Commands.literal("with")
.then(
Commands.argument("item", ItemArgument.item(p_214450_))
.executes(
p_180383_ -> setBlockItem(
p_180383_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_180383_, "pos"),
SlotArgument.getSlot(p_180383_, "slot"),
ItemArgument.getItem(p_180383_, "item").createItemStack(1, false)
)
)
.then(
Commands.argument("count", IntegerArgumentType.integer(1, 99))
.executes(
p_180381_ -> setBlockItem(
p_180381_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_180381_, "pos"),
SlotArgument.getSlot(p_180381_, "slot"),
ItemArgument.getItem(p_180381_, "item")
.createItemStack(IntegerArgumentType.getInteger(p_180381_, "count"), true)
)
)
)
)
)
.then(
Commands.literal("from")
.then(
Commands.literal("block")
.then(
Commands.argument("source", BlockPosArgument.blockPos())
.then(
Commands.argument("sourceSlot", SlotArgument.slot())
.executes(
p_180379_ -> blockToBlock(
p_180379_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_180379_, "source"),
SlotArgument.getSlot(p_180379_, "sourceSlot"),
BlockPosArgument.getLoadedBlockPos(p_180379_, "pos"),
SlotArgument.getSlot(p_180379_, "slot")
)
)
.then(
Commands.argument("modifier", ResourceOrIdArgument.lootModifier(p_214450_))
.suggests(SUGGEST_MODIFIER)
.executes(
p_326276_ -> blockToBlock(
(CommandSourceStack)p_326276_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_326276_, "source"),
SlotArgument.getSlot(p_326276_, "sourceSlot"),
BlockPosArgument.getLoadedBlockPos(p_326276_, "pos"),
SlotArgument.getSlot(p_326276_, "slot"),
ResourceOrIdArgument.getLootModifier(p_326276_, "modifier")
)
)
)
)
)
)
.then(
Commands.literal("entity")
.then(
Commands.argument("source", EntityArgument.entity())
.then(
Commands.argument("sourceSlot", SlotArgument.slot())
.executes(
p_180375_ -> entityToBlock(
p_180375_.getSource(),
EntityArgument.getEntity(p_180375_, "source"),
SlotArgument.getSlot(p_180375_, "sourceSlot"),
BlockPosArgument.getLoadedBlockPos(p_180375_, "pos"),
SlotArgument.getSlot(p_180375_, "slot")
)
)
.then(
Commands.argument("modifier", ResourceOrIdArgument.lootModifier(p_214450_))
.suggests(SUGGEST_MODIFIER)
.executes(
p_326280_ -> entityToBlock(
(CommandSourceStack)p_326280_.getSource(),
EntityArgument.getEntity(p_326280_, "source"),
SlotArgument.getSlot(p_326280_, "sourceSlot"),
BlockPosArgument.getLoadedBlockPos(p_326280_, "pos"),
SlotArgument.getSlot(p_326280_, "slot"),
ResourceOrIdArgument.getLootModifier(p_326280_, "modifier")
)
)
)
)
)
)
)
)
)
)
.then(
Commands.literal("entity")
.then(
Commands.argument("targets", EntityArgument.entities())
.then(
Commands.argument("slot", SlotArgument.slot())
.then(
Commands.literal("with")
.then(
Commands.argument("item", ItemArgument.item(p_214450_))
.executes(
p_180371_ -> setEntityItem(
p_180371_.getSource(),
EntityArgument.getEntities(p_180371_, "targets"),
SlotArgument.getSlot(p_180371_, "slot"),
ItemArgument.getItem(p_180371_, "item").createItemStack(1, false)
)
)
.then(
Commands.argument("count", IntegerArgumentType.integer(1, 99))
.executes(
p_180369_ -> setEntityItem(
p_180369_.getSource(),
EntityArgument.getEntities(p_180369_, "targets"),
SlotArgument.getSlot(p_180369_, "slot"),
ItemArgument.getItem(p_180369_, "item")
.createItemStack(IntegerArgumentType.getInteger(p_180369_, "count"), true)
)
)
)
)
)
.then(
Commands.literal("from")
.then(
Commands.literal("block")
.then(
Commands.argument("source", BlockPosArgument.blockPos())
.then(
Commands.argument("sourceSlot", SlotArgument.slot())
.executes(
p_180367_ -> blockToEntities(
p_180367_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_180367_, "source"),
SlotArgument.getSlot(p_180367_, "sourceSlot"),
EntityArgument.getEntities(p_180367_, "targets"),
SlotArgument.getSlot(p_180367_, "slot")
)
)
.then(
Commands.argument("modifier", ResourceOrIdArgument.lootModifier(p_214450_))
.suggests(SUGGEST_MODIFIER)
.executes(
p_326277_ -> blockToEntities(
(CommandSourceStack)p_326277_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_326277_, "source"),
SlotArgument.getSlot(p_326277_, "sourceSlot"),
EntityArgument.getEntities(p_326277_, "targets"),
SlotArgument.getSlot(p_326277_, "slot"),
ResourceOrIdArgument.getLootModifier(p_326277_, "modifier")
)
)
)
)
)
)
.then(
Commands.literal("entity")
.then(
Commands.argument("source", EntityArgument.entity())
.then(
Commands.argument("sourceSlot", SlotArgument.slot())
.executes(
p_180363_ -> entityToEntities(
p_180363_.getSource(),
EntityArgument.getEntity(p_180363_, "source"),
SlotArgument.getSlot(p_180363_, "sourceSlot"),
EntityArgument.getEntities(p_180363_, "targets"),
SlotArgument.getSlot(p_180363_, "slot")
)
)
.then(
Commands.argument("modifier", ResourceOrIdArgument.lootModifier(p_214450_))
.suggests(SUGGEST_MODIFIER)
.executes(
p_326275_ -> entityToEntities(
(CommandSourceStack)p_326275_.getSource(),
EntityArgument.getEntity(p_326275_, "source"),
SlotArgument.getSlot(p_326275_, "sourceSlot"),
EntityArgument.getEntities(p_326275_, "targets"),
SlotArgument.getSlot(p_326275_, "slot"),
ResourceOrIdArgument.getLootModifier(p_326275_, "modifier")
)
)
)
)
)
)
)
)
)
)
)
.then(
Commands.literal("modify")
.then(
Commands.literal("block")
.then(
Commands.argument("pos", BlockPosArgument.blockPos())
.then(
Commands.argument("slot", SlotArgument.slot())
.then(
Commands.argument("modifier", ResourceOrIdArgument.lootModifier(p_214450_))
.suggests(SUGGEST_MODIFIER)
.executes(
p_326282_ -> modifyBlockItem(
(CommandSourceStack)p_326282_.getSource(),
BlockPosArgument.getLoadedBlockPos(p_326282_, "pos"),
SlotArgument.getSlot(p_326282_, "slot"),
ResourceOrIdArgument.getLootModifier(p_326282_, "modifier")
)
)
)
)
)
)
.then(
Commands.literal("entity")
.then(
Commands.argument("targets", EntityArgument.entities())
.then(
Commands.argument("slot", SlotArgument.slot())
.then(
Commands.argument("modifier", ResourceOrIdArgument.lootModifier(p_214450_))
.suggests(SUGGEST_MODIFIER)
.executes(
p_326281_ -> modifyEntityItem(
(CommandSourceStack)p_326281_.getSource(),
EntityArgument.getEntities(p_326281_, "targets"),
SlotArgument.getSlot(p_326281_, "slot"),
ResourceOrIdArgument.getLootModifier(p_326281_, "modifier")
)
)
)
)
)
)
)
);
}
private static int modifyBlockItem(CommandSourceStack p_180297_, BlockPos p_180298_, int p_180299_, Holder<LootItemFunction> p_332634_) throws CommandSyntaxException {
Container container = getContainer(p_180297_, p_180298_, ERROR_TARGET_NOT_A_CONTAINER);
if (p_180299_ >= 0 && p_180299_ < container.getContainerSize()) {
ItemStack itemstack = applyModifier(p_180297_, p_332634_, container.getItem(p_180299_));
container.setItem(p_180299_, itemstack);
p_180297_.sendSuccess(
() -> Component.translatable(
"commands.item.block.set.success", p_180298_.getX(), p_180298_.getY(), p_180298_.getZ(), itemstack.getDisplayName()
),
true
);
return 1;
} else {
throw ERROR_TARGET_INAPPLICABLE_SLOT.create(p_180299_);
}
}
private static int modifyEntityItem(CommandSourceStack p_180337_, Collection<? extends Entity> p_180338_, int p_180339_, Holder<LootItemFunction> p_333636_) throws CommandSyntaxException {
Map<Entity, ItemStack> map = Maps.newHashMapWithExpectedSize(p_180338_.size());
for (Entity entity : p_180338_) {
SlotAccess slotaccess = entity.getSlot(p_180339_);
if (slotaccess != SlotAccess.NULL) {
ItemStack itemstack = applyModifier(p_180337_, p_333636_, slotaccess.get().copy());
if (slotaccess.set(itemstack)) {
map.put(entity, itemstack);
if (entity instanceof ServerPlayer) {
((ServerPlayer)entity).containerMenu.broadcastChanges();
}
}
}
}
if (map.isEmpty()) {
throw ERROR_TARGET_NO_CHANGES.create(p_180339_);
} else {
if (map.size() == 1) {
Entry<Entity, ItemStack> entry = map.entrySet().iterator().next();
p_180337_.sendSuccess(
() -> Component.translatable("commands.item.entity.set.success.single", entry.getKey().getDisplayName(), entry.getValue().getDisplayName()), true
);
} else {
p_180337_.sendSuccess(() -> Component.translatable("commands.item.entity.set.success.multiple", map.size()), true);
}
return map.size();
}
}
private static int setBlockItem(CommandSourceStack p_180292_, BlockPos p_180293_, int p_180294_, ItemStack p_180295_) throws CommandSyntaxException {
Container container = getContainer(p_180292_, p_180293_, ERROR_TARGET_NOT_A_CONTAINER);
if (p_180294_ >= 0 && p_180294_ < container.getContainerSize()) {
container.setItem(p_180294_, p_180295_);
p_180292_.sendSuccess(
() -> Component.translatable(
"commands.item.block.set.success", p_180293_.getX(), p_180293_.getY(), p_180293_.getZ(), p_180295_.getDisplayName()
),
true
);
return 1;
} else {
throw ERROR_TARGET_INAPPLICABLE_SLOT.create(p_180294_);
}
}
static Container getContainer(CommandSourceStack p_180328_, BlockPos p_180329_, Dynamic3CommandExceptionType p_180330_) throws CommandSyntaxException {
BlockEntity blockentity = p_180328_.getLevel().getBlockEntity(p_180329_);
if (!(blockentity instanceof Container)) {
throw p_180330_.create(p_180329_.getX(), p_180329_.getY(), p_180329_.getZ());
} else {
return (Container)blockentity;
}
}
private static int setEntityItem(CommandSourceStack p_180332_, Collection<? extends Entity> p_180333_, int p_180334_, ItemStack p_180335_) throws CommandSyntaxException {
List<Entity> list = Lists.newArrayListWithCapacity(p_180333_.size());
for (Entity entity : p_180333_) {
SlotAccess slotaccess = entity.getSlot(p_180334_);
if (slotaccess != SlotAccess.NULL && slotaccess.set(p_180335_.copy())) {
list.add(entity);
if (entity instanceof ServerPlayer) {
((ServerPlayer)entity).containerMenu.broadcastChanges();
}
}
}
if (list.isEmpty()) {
throw ERROR_TARGET_NO_CHANGES_KNOWN_ITEM.create(p_180335_.getDisplayName(), p_180334_);
} else {
if (list.size() == 1) {
p_180332_.sendSuccess(
() -> Component.translatable("commands.item.entity.set.success.single", list.iterator().next().getDisplayName(), p_180335_.getDisplayName()), true
);
} else {
p_180332_.sendSuccess(() -> Component.translatable("commands.item.entity.set.success.multiple", list.size(), p_180335_.getDisplayName()), true);
}
return list.size();
}
}
private static int blockToEntities(CommandSourceStack p_180315_, BlockPos p_180316_, int p_180317_, Collection<? extends Entity> p_180318_, int p_180319_) throws CommandSyntaxException {
return setEntityItem(p_180315_, p_180318_, p_180319_, getBlockItem(p_180315_, p_180316_, p_180317_));
}
private static int blockToEntities(
CommandSourceStack p_180321_,
BlockPos p_180322_,
int p_180323_,
Collection<? extends Entity> p_180324_,
int p_180325_,
Holder<LootItemFunction> p_329510_
) throws CommandSyntaxException {
return setEntityItem(p_180321_, p_180324_, p_180325_, applyModifier(p_180321_, p_329510_, getBlockItem(p_180321_, p_180322_, p_180323_)));
}
private static int blockToBlock(CommandSourceStack p_180302_, BlockPos p_180303_, int p_180304_, BlockPos p_180305_, int p_180306_) throws CommandSyntaxException {
return setBlockItem(p_180302_, p_180305_, p_180306_, getBlockItem(p_180302_, p_180303_, p_180304_));
}
private static int blockToBlock(
CommandSourceStack p_180308_, BlockPos p_180309_, int p_180310_, BlockPos p_180311_, int p_180312_, Holder<LootItemFunction> p_330732_
) throws CommandSyntaxException {
return setBlockItem(p_180308_, p_180311_, p_180312_, applyModifier(p_180308_, p_330732_, getBlockItem(p_180308_, p_180309_, p_180310_)));
}
private static int entityToBlock(CommandSourceStack p_180258_, Entity p_180259_, int p_180260_, BlockPos p_180261_, int p_180262_) throws CommandSyntaxException {
return setBlockItem(p_180258_, p_180261_, p_180262_, getEntityItem(p_180259_, p_180260_));
}
private static int entityToBlock(
CommandSourceStack p_180264_, Entity p_180265_, int p_180266_, BlockPos p_180267_, int p_180268_, Holder<LootItemFunction> p_327828_
) throws CommandSyntaxException {
return setBlockItem(p_180264_, p_180267_, p_180268_, applyModifier(p_180264_, p_327828_, getEntityItem(p_180265_, p_180266_)));
}
private static int entityToEntities(CommandSourceStack p_180271_, Entity p_180272_, int p_180273_, Collection<? extends Entity> p_180274_, int p_180275_) throws CommandSyntaxException {
return setEntityItem(p_180271_, p_180274_, p_180275_, getEntityItem(p_180272_, p_180273_));
}
private static int entityToEntities(
CommandSourceStack p_180277_,
Entity p_180278_,
int p_180279_,
Collection<? extends Entity> p_180280_,
int p_180281_,
Holder<LootItemFunction> p_333656_
) throws CommandSyntaxException {
return setEntityItem(p_180277_, p_180280_, p_180281_, applyModifier(p_180277_, p_333656_, getEntityItem(p_180278_, p_180279_)));
}
private static ItemStack applyModifier(CommandSourceStack p_180284_, Holder<LootItemFunction> p_334601_, ItemStack p_180286_) {
ServerLevel serverlevel = p_180284_.getLevel();
LootParams lootparams = new LootParams.Builder(serverlevel)
.withParameter(LootContextParams.ORIGIN, p_180284_.getPosition())
.withOptionalParameter(LootContextParams.THIS_ENTITY, p_180284_.getEntity())
.create(LootContextParamSets.COMMAND);
LootContext lootcontext = new LootContext.Builder(lootparams).create(Optional.empty());
lootcontext.pushVisitedElement(LootContext.createVisitedEntry(p_334601_.value()));
ItemStack itemstack = p_334601_.value().apply(p_180286_, lootcontext);
itemstack.limitSize(itemstack.getMaxStackSize());
return itemstack;
}
private static ItemStack getEntityItem(Entity p_180246_, int p_180247_) throws CommandSyntaxException {
SlotAccess slotaccess = p_180246_.getSlot(p_180247_);
if (slotaccess == SlotAccess.NULL) {
throw ERROR_SOURCE_INAPPLICABLE_SLOT.create(p_180247_);
} else {
return slotaccess.get().copy();
}
}
private static ItemStack getBlockItem(CommandSourceStack p_180288_, BlockPos p_180289_, int p_180290_) throws CommandSyntaxException {
Container container = getContainer(p_180288_, p_180289_, ERROR_SOURCE_NOT_A_CONTAINER);
if (p_180290_ >= 0 && p_180290_ < container.getContainerSize()) {
return container.getItem(p_180290_).copy();
} else {
throw ERROR_SOURCE_INAPPLICABLE_SLOT.create(p_180290_);
}
}
}