511 lines
36 KiB
Java
511 lines
36 KiB
Java
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_);
|
|
}
|
|
}
|
|
} |