Spaces:
Build error
Build error
package net.minecraft.server.commands; | |
import com.google.common.annotations.VisibleForTesting; | |
import com.google.common.collect.Lists; | |
import com.mojang.brigadier.Command; | |
import com.mojang.brigadier.CommandDispatcher; | |
import com.mojang.brigadier.RedirectModifier; | |
import com.mojang.brigadier.arguments.DoubleArgumentType; | |
import com.mojang.brigadier.builder.ArgumentBuilder; | |
import com.mojang.brigadier.builder.LiteralArgumentBuilder; | |
import com.mojang.brigadier.context.CommandContext; | |
import com.mojang.brigadier.context.ContextChain; | |
import com.mojang.brigadier.exceptions.CommandSyntaxException; | |
import com.mojang.brigadier.exceptions.Dynamic2CommandExceptionType; | |
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; | |
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; | |
import com.mojang.brigadier.suggestion.SuggestionProvider; | |
import com.mojang.brigadier.suggestion.SuggestionsBuilder; | |
import com.mojang.brigadier.tree.CommandNode; | |
import com.mojang.brigadier.tree.LiteralCommandNode; | |
import it.unimi.dsi.fastutil.ints.IntList; | |
import java.util.ArrayList; | |
import java.util.Collection; | |
import java.util.Collections; | |
import java.util.List; | |
import java.util.Optional; | |
import java.util.OptionalInt; | |
import java.util.function.Function; | |
import java.util.function.IntFunction; | |
import java.util.function.IntPredicate; | |
import java.util.function.Predicate; | |
import java.util.stream.Stream; | |
import javax.annotation.Nullable; | |
import net.minecraft.advancements.critereon.MinMaxBounds; | |
import net.minecraft.commands.CommandBuildContext; | |
import net.minecraft.commands.CommandResultCallback; | |
import net.minecraft.commands.CommandSourceStack; | |
import net.minecraft.commands.Commands; | |
import net.minecraft.commands.ExecutionCommandSource; | |
import net.minecraft.commands.FunctionInstantiationException; | |
import net.minecraft.commands.SharedSuggestionProvider; | |
import net.minecraft.commands.arguments.DimensionArgument; | |
import net.minecraft.commands.arguments.EntityAnchorArgument; | |
import net.minecraft.commands.arguments.EntityArgument; | |
import net.minecraft.commands.arguments.HeightmapTypeArgument; | |
import net.minecraft.commands.arguments.NbtPathArgument; | |
import net.minecraft.commands.arguments.ObjectiveArgument; | |
import net.minecraft.commands.arguments.RangeArgument; | |
import net.minecraft.commands.arguments.ResourceArgument; | |
import net.minecraft.commands.arguments.ResourceLocationArgument; | |
import net.minecraft.commands.arguments.ResourceOrIdArgument; | |
import net.minecraft.commands.arguments.ResourceOrTagArgument; | |
import net.minecraft.commands.arguments.ScoreHolderArgument; | |
import net.minecraft.commands.arguments.SlotsArgument; | |
import net.minecraft.commands.arguments.blocks.BlockPredicateArgument; | |
import net.minecraft.commands.arguments.coordinates.BlockPosArgument; | |
import net.minecraft.commands.arguments.coordinates.RotationArgument; | |
import net.minecraft.commands.arguments.coordinates.SwizzleArgument; | |
import net.minecraft.commands.arguments.coordinates.Vec3Argument; | |
import net.minecraft.commands.arguments.item.FunctionArgument; | |
import net.minecraft.commands.arguments.item.ItemPredicateArgument; | |
import net.minecraft.commands.execution.ChainModifiers; | |
import net.minecraft.commands.execution.CustomModifierExecutor; | |
import net.minecraft.commands.execution.ExecutionControl; | |
import net.minecraft.commands.execution.tasks.BuildContexts; | |
import net.minecraft.commands.execution.tasks.CallFunction; | |
import net.minecraft.commands.execution.tasks.FallthroughTask; | |
import net.minecraft.commands.execution.tasks.IsolatedCall; | |
import net.minecraft.commands.functions.CommandFunction; | |
import net.minecraft.commands.functions.InstantiatedFunction; | |
import net.minecraft.commands.synchronization.SuggestionProviders; | |
import net.minecraft.core.BlockPos; | |
import net.minecraft.core.Holder; | |
import net.minecraft.core.RegistryAccess; | |
import net.minecraft.core.SectionPos; | |
import net.minecraft.core.registries.Registries; | |
import net.minecraft.nbt.ByteTag; | |
import net.minecraft.nbt.CompoundTag; | |
import net.minecraft.nbt.DoubleTag; | |
import net.minecraft.nbt.FloatTag; | |
import net.minecraft.nbt.IntTag; | |
import net.minecraft.nbt.LongTag; | |
import net.minecraft.nbt.ShortTag; | |
import net.minecraft.nbt.Tag; | |
import net.minecraft.network.chat.Component; | |
import net.minecraft.server.ReloadableServerRegistries; | |
import net.minecraft.server.bossevents.CustomBossEvent; | |
import net.minecraft.server.commands.data.DataAccessor; | |
import net.minecraft.server.commands.data.DataCommands; | |
import net.minecraft.server.level.FullChunkStatus; | |
import net.minecraft.server.level.ServerLevel; | |
import net.minecraft.util.Mth; | |
import net.minecraft.world.Container; | |
import net.minecraft.world.entity.Attackable; | |
import net.minecraft.world.entity.Entity; | |
import net.minecraft.world.entity.EntityType; | |
import net.minecraft.world.entity.Leashable; | |
import net.minecraft.world.entity.OwnableEntity; | |
import net.minecraft.world.entity.SlotAccess; | |
import net.minecraft.world.entity.Targeting; | |
import net.minecraft.world.entity.TraceableEntity; | |
import net.minecraft.world.inventory.SlotRange; | |
import net.minecraft.world.item.ItemStack; | |
import net.minecraft.world.level.ChunkPos; | |
import net.minecraft.world.level.block.Blocks; | |
import net.minecraft.world.level.block.entity.BlockEntity; | |
import net.minecraft.world.level.block.state.BlockState; | |
import net.minecraft.world.level.block.state.pattern.BlockInWorld; | |
import net.minecraft.world.level.chunk.LevelChunk; | |
import net.minecraft.world.level.levelgen.structure.BoundingBox; | |
import net.minecraft.world.level.storage.loot.LootContext; | |
import net.minecraft.world.level.storage.loot.LootParams; | |
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; | |
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; | |
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; | |
import net.minecraft.world.phys.Vec3; | |
import net.minecraft.world.scores.Objective; | |
import net.minecraft.world.scores.ReadOnlyScoreInfo; | |
import net.minecraft.world.scores.ScoreAccess; | |
import net.minecraft.world.scores.ScoreHolder; | |
import net.minecraft.world.scores.Scoreboard; | |
public class ExecuteCommand { | |
private static final int MAX_TEST_AREA = 32768; | |
private static final Dynamic2CommandExceptionType ERROR_AREA_TOO_LARGE = new Dynamic2CommandExceptionType( | |
(p_308669_, p_308670_) -> Component.translatableEscape("commands.execute.blocks.toobig", p_308669_, p_308670_) | |
); | |
private static final SimpleCommandExceptionType ERROR_CONDITIONAL_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.execute.conditional.fail")); | |
private static final DynamicCommandExceptionType ERROR_CONDITIONAL_FAILED_COUNT = new DynamicCommandExceptionType( | |
p_308680_ -> Component.translatableEscape("commands.execute.conditional.fail_count", p_308680_) | |
); | |
public static final Dynamic2CommandExceptionType ERROR_FUNCTION_CONDITION_INSTANTATION_FAILURE = new Dynamic2CommandExceptionType( | |
(p_308676_, p_308677_) -> Component.translatableEscape("commands.execute.function.instantiationFailure", p_308676_, p_308677_) | |
); | |
private static final SuggestionProvider<CommandSourceStack> SUGGEST_PREDICATE = (p_326244_, p_326245_) -> { | |
ReloadableServerRegistries.Holder reloadableserverregistries$holder = p_326244_.getSource().getServer().reloadableRegistries(); | |
return SharedSuggestionProvider.suggestResource(reloadableserverregistries$holder.getKeys(Registries.PREDICATE), p_326245_); | |
}; | |
public static void register(CommandDispatcher<CommandSourceStack> p_214435_, CommandBuildContext p_214436_) { | |
LiteralCommandNode<CommandSourceStack> literalcommandnode = p_214435_.register(Commands.literal("execute").requires(p_137197_ -> p_137197_.hasPermission(2))); | |
p_214435_.register( | |
Commands.literal("execute") | |
.requires(p_137103_ -> p_137103_.hasPermission(2)) | |
.then(Commands.literal("run").redirect(p_214435_.getRoot())) | |
.then(addConditionals(literalcommandnode, Commands.literal("if"), true, p_214436_)) | |
.then(addConditionals(literalcommandnode, Commands.literal("unless"), false, p_214436_)) | |
.then(Commands.literal("as").then(Commands.argument("targets", EntityArgument.entities()).fork(literalcommandnode, p_137299_ -> { | |
List<CommandSourceStack> list = Lists.newArrayList(); | |
for (Entity entity : EntityArgument.getOptionalEntities(p_137299_, "targets")) { | |
list.add(p_137299_.getSource().withEntity(entity)); | |
} | |
return list; | |
}))) | |
.then(Commands.literal("at").then(Commands.argument("targets", EntityArgument.entities()).fork(literalcommandnode, p_284653_ -> { | |
List<CommandSourceStack> list = Lists.newArrayList(); | |
for (Entity entity : EntityArgument.getOptionalEntities(p_284653_, "targets")) { | |
list.add(p_284653_.getSource().withLevel((ServerLevel)entity.level()).withPosition(entity.position()).withRotation(entity.getRotationVector())); | |
} | |
return list; | |
}))) | |
.then( | |
Commands.literal("store") | |
.then(wrapStores(literalcommandnode, Commands.literal("result"), true)) | |
.then(wrapStores(literalcommandnode, Commands.literal("success"), false)) | |
) | |
.then( | |
Commands.literal("positioned") | |
.then( | |
Commands.argument("pos", Vec3Argument.vec3()) | |
.redirect( | |
literalcommandnode, | |
p_137295_ -> p_137295_.getSource() | |
.withPosition(Vec3Argument.getVec3(p_137295_, "pos")) | |
.withAnchor(EntityAnchorArgument.Anchor.FEET) | |
) | |
) | |
.then(Commands.literal("as").then(Commands.argument("targets", EntityArgument.entities()).fork(literalcommandnode, p_137293_ -> { | |
List<CommandSourceStack> list = Lists.newArrayList(); | |
for (Entity entity : EntityArgument.getOptionalEntities(p_137293_, "targets")) { | |
list.add(p_137293_.getSource().withPosition(entity.position())); | |
} | |
return list; | |
}))) | |
.then( | |
Commands.literal("over") | |
.then(Commands.argument("heightmap", HeightmapTypeArgument.heightmap()).redirect(literalcommandnode, p_274814_ -> { | |
Vec3 vec3 = p_274814_.getSource().getPosition(); | |
ServerLevel serverlevel = p_274814_.getSource().getLevel(); | |
double d0 = vec3.x(); | |
double d1 = vec3.z(); | |
if (!serverlevel.hasChunk(SectionPos.blockToSectionCoord(d0), SectionPos.blockToSectionCoord(d1))) { | |
throw BlockPosArgument.ERROR_NOT_LOADED.create(); | |
} else { | |
int i = serverlevel.getHeight(HeightmapTypeArgument.getHeightmap(p_274814_, "heightmap"), Mth.floor(d0), Mth.floor(d1)); | |
return p_274814_.getSource().withPosition(new Vec3(d0, (double)i, d1)); | |
} | |
})) | |
) | |
) | |
.then( | |
Commands.literal("rotated") | |
.then( | |
Commands.argument("rot", RotationArgument.rotation()) | |
.redirect( | |
literalcommandnode, | |
p_137291_ -> p_137291_.getSource().withRotation(RotationArgument.getRotation(p_137291_, "rot").getRotation(p_137291_.getSource())) | |
) | |
) | |
.then(Commands.literal("as").then(Commands.argument("targets", EntityArgument.entities()).fork(literalcommandnode, p_137289_ -> { | |
List<CommandSourceStack> list = Lists.newArrayList(); | |
for (Entity entity : EntityArgument.getOptionalEntities(p_137289_, "targets")) { | |
list.add(p_137289_.getSource().withRotation(entity.getRotationVector())); | |
} | |
return list; | |
}))) | |
) | |
.then( | |
Commands.literal("facing") | |
.then( | |
Commands.literal("entity") | |
.then( | |
Commands.argument("targets", EntityArgument.entities()) | |
.then(Commands.argument("anchor", EntityAnchorArgument.anchor()).fork(literalcommandnode, p_137287_ -> { | |
List<CommandSourceStack> list = Lists.newArrayList(); | |
EntityAnchorArgument.Anchor entityanchorargument$anchor = EntityAnchorArgument.getAnchor(p_137287_, "anchor"); | |
for (Entity entity : EntityArgument.getOptionalEntities(p_137287_, "targets")) { | |
list.add(p_137287_.getSource().facing(entity, entityanchorargument$anchor)); | |
} | |
return list; | |
})) | |
) | |
) | |
.then( | |
Commands.argument("pos", Vec3Argument.vec3()) | |
.redirect(literalcommandnode, p_137285_ -> p_137285_.getSource().facing(Vec3Argument.getVec3(p_137285_, "pos"))) | |
) | |
) | |
.then( | |
Commands.literal("align") | |
.then( | |
Commands.argument("axes", SwizzleArgument.swizzle()) | |
.redirect( | |
literalcommandnode, | |
p_137283_ -> p_137283_.getSource() | |
.withPosition(p_137283_.getSource().getPosition().align(SwizzleArgument.getSwizzle(p_137283_, "axes"))) | |
) | |
) | |
) | |
.then( | |
Commands.literal("anchored") | |
.then( | |
Commands.argument("anchor", EntityAnchorArgument.anchor()) | |
.redirect(literalcommandnode, p_137281_ -> p_137281_.getSource().withAnchor(EntityAnchorArgument.getAnchor(p_137281_, "anchor"))) | |
) | |
) | |
.then( | |
Commands.literal("in") | |
.then( | |
Commands.argument("dimension", DimensionArgument.dimension()) | |
.redirect(literalcommandnode, p_137279_ -> p_137279_.getSource().withLevel(DimensionArgument.getDimension(p_137279_, "dimension"))) | |
) | |
) | |
.then( | |
Commands.literal("summon") | |
.then( | |
Commands.argument("entity", ResourceArgument.resource(p_214436_, Registries.ENTITY_TYPE)) | |
.suggests(SuggestionProviders.SUMMONABLE_ENTITIES) | |
.redirect(literalcommandnode, p_269759_ -> spawnEntityAndRedirect(p_269759_.getSource(), ResourceArgument.getSummonableEntityType(p_269759_, "entity"))) | |
) | |
) | |
.then(createRelationOperations(literalcommandnode, Commands.literal("on"))) | |
); | |
} | |
private static ArgumentBuilder<CommandSourceStack, ?> wrapStores( | |
LiteralCommandNode<CommandSourceStack> p_137094_, LiteralArgumentBuilder<CommandSourceStack> p_137095_, boolean p_137096_ | |
) { | |
p_137095_.then( | |
Commands.literal("score") | |
.then( | |
Commands.argument("targets", ScoreHolderArgument.scoreHolders()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
Commands.argument("objective", ObjectiveArgument.objective()) | |
.redirect( | |
p_137094_, | |
p_137271_ -> storeValue( | |
p_137271_.getSource(), | |
ScoreHolderArgument.getNamesWithDefaultWildcard(p_137271_, "targets"), | |
ObjectiveArgument.getObjective(p_137271_, "objective"), | |
p_137096_ | |
) | |
) | |
) | |
) | |
); | |
p_137095_.then( | |
Commands.literal("bossbar") | |
.then( | |
Commands.argument("id", ResourceLocationArgument.id()) | |
.suggests(BossBarCommands.SUGGEST_BOSS_BAR) | |
.then( | |
Commands.literal("value") | |
.redirect(p_137094_, p_137259_ -> storeValue(p_137259_.getSource(), BossBarCommands.getBossBar(p_137259_), true, p_137096_)) | |
) | |
.then( | |
Commands.literal("max") | |
.redirect(p_137094_, p_137247_ -> storeValue(p_137247_.getSource(), BossBarCommands.getBossBar(p_137247_), false, p_137096_)) | |
) | |
) | |
); | |
for (DataCommands.DataProvider datacommands$dataprovider : DataCommands.TARGET_PROVIDERS) { | |
datacommands$dataprovider.wrap( | |
p_137095_, | |
p_137101_ -> p_137101_.then( | |
Commands.argument("path", NbtPathArgument.nbtPath()) | |
.then( | |
Commands.literal("int") | |
.then( | |
Commands.argument("scale", DoubleArgumentType.doubleArg()) | |
.redirect( | |
p_137094_, | |
p_180216_ -> storeData( | |
p_180216_.getSource(), | |
datacommands$dataprovider.access(p_180216_), | |
NbtPathArgument.getPath(p_180216_, "path"), | |
p_180219_ -> IntTag.valueOf( | |
(int)((double)p_180219_ * DoubleArgumentType.getDouble(p_180216_, "scale")) | |
), | |
p_137096_ | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("float") | |
.then( | |
Commands.argument("scale", DoubleArgumentType.doubleArg()) | |
.redirect( | |
p_137094_, | |
p_180209_ -> storeData( | |
p_180209_.getSource(), | |
datacommands$dataprovider.access(p_180209_), | |
NbtPathArgument.getPath(p_180209_, "path"), | |
p_180212_ -> FloatTag.valueOf( | |
(float)((double)p_180212_ * DoubleArgumentType.getDouble(p_180209_, "scale")) | |
), | |
p_137096_ | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("short") | |
.then( | |
Commands.argument("scale", DoubleArgumentType.doubleArg()) | |
.redirect( | |
p_137094_, | |
p_180199_ -> storeData( | |
p_180199_.getSource(), | |
datacommands$dataprovider.access(p_180199_), | |
NbtPathArgument.getPath(p_180199_, "path"), | |
p_180202_ -> ShortTag.valueOf( | |
(short)((int)((double)p_180202_ * DoubleArgumentType.getDouble(p_180199_, "scale"))) | |
), | |
p_137096_ | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("long") | |
.then( | |
Commands.argument("scale", DoubleArgumentType.doubleArg()) | |
.redirect( | |
p_137094_, | |
p_180189_ -> storeData( | |
p_180189_.getSource(), | |
datacommands$dataprovider.access(p_180189_), | |
NbtPathArgument.getPath(p_180189_, "path"), | |
p_180192_ -> LongTag.valueOf( | |
(long)((double)p_180192_ * DoubleArgumentType.getDouble(p_180189_, "scale")) | |
), | |
p_137096_ | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("double") | |
.then( | |
Commands.argument("scale", DoubleArgumentType.doubleArg()) | |
.redirect( | |
p_137094_, | |
p_180179_ -> storeData( | |
p_180179_.getSource(), | |
datacommands$dataprovider.access(p_180179_), | |
NbtPathArgument.getPath(p_180179_, "path"), | |
p_180182_ -> DoubleTag.valueOf((double)p_180182_ * DoubleArgumentType.getDouble(p_180179_, "scale")), | |
p_137096_ | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("byte") | |
.then( | |
Commands.argument("scale", DoubleArgumentType.doubleArg()) | |
.redirect( | |
p_137094_, | |
p_180156_ -> storeData( | |
p_180156_.getSource(), | |
datacommands$dataprovider.access(p_180156_), | |
NbtPathArgument.getPath(p_180156_, "path"), | |
p_180165_ -> ByteTag.valueOf( | |
(byte)((int)((double)p_180165_ * DoubleArgumentType.getDouble(p_180156_, "scale"))) | |
), | |
p_137096_ | |
) | |
) | |
) | |
) | |
) | |
); | |
} | |
return p_137095_; | |
} | |
private static CommandSourceStack storeValue(CommandSourceStack p_137108_, Collection<ScoreHolder> p_137109_, Objective p_137110_, boolean p_137111_) { | |
Scoreboard scoreboard = p_137108_.getServer().getScoreboard(); | |
return p_137108_.withCallback((p_137137_, p_137138_) -> { | |
for (ScoreHolder scoreholder : p_137109_) { | |
ScoreAccess scoreaccess = scoreboard.getOrCreatePlayerScore(scoreholder, p_137110_); | |
int i = p_137111_ ? p_137138_ : (p_137137_ ? 1 : 0); | |
scoreaccess.set(i); | |
} | |
}, CommandResultCallback::chain); | |
} | |
private static CommandSourceStack storeValue(CommandSourceStack p_137113_, CustomBossEvent p_137114_, boolean p_137115_, boolean p_137116_) { | |
return p_137113_.withCallback((p_137186_, p_137187_) -> { | |
int i = p_137116_ ? p_137187_ : (p_137186_ ? 1 : 0); | |
if (p_137115_) { | |
p_137114_.setValue(i); | |
} else { | |
p_137114_.setMax(i); | |
} | |
}, CommandResultCallback::chain); | |
} | |
private static CommandSourceStack storeData( | |
CommandSourceStack p_137118_, DataAccessor p_137119_, NbtPathArgument.NbtPath p_137120_, IntFunction<Tag> p_137121_, boolean p_137122_ | |
) { | |
return p_137118_.withCallback((p_137154_, p_137155_) -> { | |
try { | |
CompoundTag compoundtag = p_137119_.getData(); | |
int i = p_137122_ ? p_137155_ : (p_137154_ ? 1 : 0); | |
p_137120_.set(compoundtag, p_137121_.apply(i)); | |
p_137119_.setData(compoundtag); | |
} catch (CommandSyntaxException commandsyntaxexception) { | |
} | |
}, CommandResultCallback::chain); | |
} | |
private static boolean isChunkLoaded(ServerLevel p_265261_, BlockPos p_265260_) { | |
ChunkPos chunkpos = new ChunkPos(p_265260_); | |
LevelChunk levelchunk = p_265261_.getChunkSource().getChunkNow(chunkpos.x, chunkpos.z); | |
return levelchunk == null ? false : levelchunk.getFullStatus() == FullChunkStatus.ENTITY_TICKING && p_265261_.areEntitiesLoaded(chunkpos.toLong()); | |
} | |
private static ArgumentBuilder<CommandSourceStack, ?> addConditionals( | |
CommandNode<CommandSourceStack> p_214438_, LiteralArgumentBuilder<CommandSourceStack> p_214439_, boolean p_214440_, CommandBuildContext p_214441_ | |
) { | |
p_214439_.then( | |
Commands.literal("block") | |
.then( | |
Commands.argument("pos", BlockPosArgument.blockPos()) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("block", BlockPredicateArgument.blockPredicate(p_214441_)), | |
p_214440_, | |
p_137277_ -> BlockPredicateArgument.getBlockPredicate(p_137277_, "block") | |
.test(new BlockInWorld(p_137277_.getSource().getLevel(), BlockPosArgument.getLoadedBlockPos(p_137277_, "pos"), true)) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("biome") | |
.then( | |
Commands.argument("pos", BlockPosArgument.blockPos()) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("biome", ResourceOrTagArgument.resourceOrTag(p_214441_, Registries.BIOME)), | |
p_214440_, | |
p_308679_ -> ResourceOrTagArgument.getResourceOrTag(p_308679_, "biome", Registries.BIOME) | |
.test(p_308679_.getSource().getLevel().getBiome(BlockPosArgument.getLoadedBlockPos(p_308679_, "pos"))) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("loaded") | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("pos", BlockPosArgument.blockPos()), | |
p_214440_, | |
p_269757_ -> isChunkLoaded(p_269757_.getSource().getLevel(), BlockPosArgument.getBlockPos(p_269757_, "pos")) | |
) | |
) | |
) | |
.then( | |
Commands.literal("dimension") | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("dimension", DimensionArgument.dimension()), | |
p_214440_, | |
p_264789_ -> DimensionArgument.getDimension(p_264789_, "dimension") == p_264789_.getSource().getLevel() | |
) | |
) | |
) | |
.then( | |
Commands.literal("score") | |
.then( | |
Commands.argument("target", ScoreHolderArgument.scoreHolder()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
Commands.argument("targetObjective", ObjectiveArgument.objective()) | |
.then( | |
Commands.literal("=") | |
.then( | |
Commands.argument("source", ScoreHolderArgument.scoreHolder()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("sourceObjective", ObjectiveArgument.objective()), | |
p_214440_, | |
p_308678_ -> checkScore(p_308678_, (p_308655_, p_308656_) -> p_308655_ == p_308656_) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("<") | |
.then( | |
Commands.argument("source", ScoreHolderArgument.scoreHolder()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("sourceObjective", ObjectiveArgument.objective()), | |
p_214440_, | |
p_308668_ -> checkScore(p_308668_, (p_308681_, p_308682_) -> p_308681_ < p_308682_) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("<=") | |
.then( | |
Commands.argument("source", ScoreHolderArgument.scoreHolder()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("sourceObjective", ObjectiveArgument.objective()), | |
p_214440_, | |
p_308657_ -> checkScore(p_308657_, (p_308658_, p_308659_) -> p_308658_ <= p_308659_) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal(">") | |
.then( | |
Commands.argument("source", ScoreHolderArgument.scoreHolder()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("sourceObjective", ObjectiveArgument.objective()), | |
p_214440_, | |
p_308665_ -> checkScore(p_308665_, (p_308660_, p_308661_) -> p_308660_ > p_308661_) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal(">=") | |
.then( | |
Commands.argument("source", ScoreHolderArgument.scoreHolder()) | |
.suggests(ScoreHolderArgument.SUGGEST_SCORE_HOLDERS) | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("sourceObjective", ObjectiveArgument.objective()), | |
p_214440_, | |
p_308683_ -> checkScore(p_308683_, (p_308666_, p_308667_) -> p_308666_ >= p_308667_) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("matches") | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("range", RangeArgument.intRange()), | |
p_214440_, | |
p_137216_ -> checkScore(p_137216_, RangeArgument.Ints.getRange(p_137216_, "range")) | |
) | |
) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("blocks") | |
.then( | |
Commands.argument("start", BlockPosArgument.blockPos()) | |
.then( | |
Commands.argument("end", BlockPosArgument.blockPos()) | |
.then( | |
Commands.argument("destination", BlockPosArgument.blockPos()) | |
.then(addIfBlocksConditional(p_214438_, Commands.literal("all"), p_214440_, false)) | |
.then(addIfBlocksConditional(p_214438_, Commands.literal("masked"), p_214440_, true)) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("entity") | |
.then( | |
Commands.argument("entities", EntityArgument.entities()) | |
.fork(p_214438_, p_137232_ -> expect(p_137232_, p_214440_, !EntityArgument.getOptionalEntities(p_137232_, "entities").isEmpty())) | |
.executes(createNumericConditionalHandler(p_214440_, p_137189_ -> EntityArgument.getOptionalEntities(p_137189_, "entities").size())) | |
) | |
) | |
.then( | |
Commands.literal("predicate") | |
.then( | |
addConditional( | |
p_214438_, | |
Commands.argument("predicate", ResourceOrIdArgument.lootPredicate(p_214441_)).suggests(SUGGEST_PREDICATE), | |
p_214440_, | |
p_326238_ -> checkCustomPredicate(p_326238_.getSource(), ResourceOrIdArgument.getLootPredicate(p_326238_, "predicate")) | |
) | |
) | |
) | |
.then( | |
Commands.literal("function") | |
.then( | |
Commands.argument("name", FunctionArgument.functions()) | |
.suggests(FunctionCommand.SUGGEST_FUNCTION) | |
.fork(p_214438_, new ExecuteCommand.ExecuteIfFunctionCustomModifier(p_214440_)) | |
) | |
) | |
.then( | |
Commands.literal("items") | |
.then( | |
Commands.literal("entity") | |
.then( | |
Commands.argument("entities", EntityArgument.entities()) | |
.then( | |
Commands.argument("slots", SlotsArgument.slots()) | |
.then( | |
Commands.argument("item_predicate", ItemPredicateArgument.itemPredicate(p_214441_)) | |
.fork( | |
p_214438_, | |
p_326243_ -> expect( | |
p_326243_, | |
p_214440_, | |
countItems( | |
EntityArgument.getEntities(p_326243_, "entities"), | |
SlotsArgument.getSlots(p_326243_, "slots"), | |
ItemPredicateArgument.getItemPredicate(p_326243_, "item_predicate") | |
) | |
> 0 | |
) | |
) | |
.executes( | |
createNumericConditionalHandler( | |
p_214440_, | |
p_326239_ -> countItems( | |
EntityArgument.getEntities(p_326239_, "entities"), | |
SlotsArgument.getSlots(p_326239_, "slots"), | |
ItemPredicateArgument.getItemPredicate(p_326239_, "item_predicate") | |
) | |
) | |
) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("block") | |
.then( | |
Commands.argument("pos", BlockPosArgument.blockPos()) | |
.then( | |
Commands.argument("slots", SlotsArgument.slots()) | |
.then( | |
Commands.argument("item_predicate", ItemPredicateArgument.itemPredicate(p_214441_)) | |
.fork( | |
p_214438_, | |
p_326241_ -> expect( | |
p_326241_, | |
p_214440_, | |
countItems( | |
p_326241_.getSource(), | |
BlockPosArgument.getLoadedBlockPos(p_326241_, "pos"), | |
SlotsArgument.getSlots(p_326241_, "slots"), | |
ItemPredicateArgument.getItemPredicate(p_326241_, "item_predicate") | |
) | |
> 0 | |
) | |
) | |
.executes( | |
createNumericConditionalHandler( | |
p_214440_, | |
p_326246_ -> countItems( | |
p_326246_.getSource(), | |
BlockPosArgument.getLoadedBlockPos(p_326246_, "pos"), | |
SlotsArgument.getSlots(p_326246_, "slots"), | |
ItemPredicateArgument.getItemPredicate(p_326246_, "item_predicate") | |
) | |
) | |
) | |
) | |
) | |
) | |
) | |
); | |
for (DataCommands.DataProvider datacommands$dataprovider : DataCommands.SOURCE_PROVIDERS) { | |
p_214439_.then( | |
datacommands$dataprovider.wrap( | |
Commands.literal("data"), | |
p_137092_ -> p_137092_.then( | |
Commands.argument("path", NbtPathArgument.nbtPath()) | |
.fork( | |
p_214438_, | |
p_180175_ -> expect( | |
p_180175_, | |
p_214440_, | |
checkMatchingData(datacommands$dataprovider.access(p_180175_), NbtPathArgument.getPath(p_180175_, "path")) > 0 | |
) | |
) | |
.executes( | |
createNumericConditionalHandler( | |
p_214440_, | |
p_180152_ -> checkMatchingData(datacommands$dataprovider.access(p_180152_), NbtPathArgument.getPath(p_180152_, "path")) | |
) | |
) | |
) | |
) | |
); | |
} | |
return p_214439_; | |
} | |
private static int countItems(Iterable<? extends Entity> p_333878_, SlotRange p_329600_, Predicate<ItemStack> p_334297_) { | |
int i = 0; | |
for (Entity entity : p_333878_) { | |
IntList intlist = p_329600_.slots(); | |
for (int j = 0; j < intlist.size(); j++) { | |
int k = intlist.getInt(j); | |
SlotAccess slotaccess = entity.getSlot(k); | |
ItemStack itemstack = slotaccess.get(); | |
if (p_334297_.test(itemstack)) { | |
i += itemstack.getCount(); | |
} | |
} | |
} | |
return i; | |
} | |
private static int countItems(CommandSourceStack p_330313_, BlockPos p_329129_, SlotRange p_327989_, Predicate<ItemStack> p_331312_) throws CommandSyntaxException { | |
int i = 0; | |
Container container = ItemCommands.getContainer(p_330313_, p_329129_, ItemCommands.ERROR_SOURCE_NOT_A_CONTAINER); | |
int j = container.getContainerSize(); | |
IntList intlist = p_327989_.slots(); | |
for (int k = 0; k < intlist.size(); k++) { | |
int l = intlist.getInt(k); | |
if (l >= 0 && l < j) { | |
ItemStack itemstack = container.getItem(l); | |
if (p_331312_.test(itemstack)) { | |
i += itemstack.getCount(); | |
} | |
} | |
} | |
return i; | |
} | |
private static Command<CommandSourceStack> createNumericConditionalHandler(boolean p_137167_, ExecuteCommand.CommandNumericPredicate p_137168_) { | |
return p_137167_ ? p_288391_ -> { | |
int i = p_137168_.test(p_288391_); | |
if (i > 0) { | |
p_288391_.getSource().sendSuccess(() -> Component.translatable("commands.execute.conditional.pass_count", i), false); | |
return i; | |
} else { | |
throw ERROR_CONDITIONAL_FAILED.create(); | |
} | |
} : p_288393_ -> { | |
int i = p_137168_.test(p_288393_); | |
if (i == 0) { | |
p_288393_.getSource().sendSuccess(() -> Component.translatable("commands.execute.conditional.pass"), false); | |
return 1; | |
} else { | |
throw ERROR_CONDITIONAL_FAILED_COUNT.create(i); | |
} | |
}; | |
} | |
private static int checkMatchingData(DataAccessor p_137146_, NbtPathArgument.NbtPath p_137147_) throws CommandSyntaxException { | |
return p_137147_.countMatching(p_137146_.getData()); | |
} | |
private static boolean checkScore(CommandContext<CommandSourceStack> p_137065_, ExecuteCommand.IntBiPredicate p_312767_) throws CommandSyntaxException { | |
ScoreHolder scoreholder = ScoreHolderArgument.getName(p_137065_, "target"); | |
Objective objective = ObjectiveArgument.getObjective(p_137065_, "targetObjective"); | |
ScoreHolder scoreholder1 = ScoreHolderArgument.getName(p_137065_, "source"); | |
Objective objective1 = ObjectiveArgument.getObjective(p_137065_, "sourceObjective"); | |
Scoreboard scoreboard = p_137065_.getSource().getServer().getScoreboard(); | |
ReadOnlyScoreInfo readonlyscoreinfo = scoreboard.getPlayerScoreInfo(scoreholder, objective); | |
ReadOnlyScoreInfo readonlyscoreinfo1 = scoreboard.getPlayerScoreInfo(scoreholder1, objective1); | |
return readonlyscoreinfo != null && readonlyscoreinfo1 != null | |
? p_312767_.test(readonlyscoreinfo.value(), readonlyscoreinfo1.value()) | |
: false; | |
} | |
private static boolean checkScore(CommandContext<CommandSourceStack> p_137059_, MinMaxBounds.Ints p_137060_) throws CommandSyntaxException { | |
ScoreHolder scoreholder = ScoreHolderArgument.getName(p_137059_, "target"); | |
Objective objective = ObjectiveArgument.getObjective(p_137059_, "targetObjective"); | |
Scoreboard scoreboard = p_137059_.getSource().getServer().getScoreboard(); | |
ReadOnlyScoreInfo readonlyscoreinfo = scoreboard.getPlayerScoreInfo(scoreholder, objective); | |
return readonlyscoreinfo == null ? false : p_137060_.matches(readonlyscoreinfo.value()); | |
} | |
private static boolean checkCustomPredicate(CommandSourceStack p_137105_, Holder<LootItemCondition> p_335377_) { | |
ServerLevel serverlevel = p_137105_.getLevel(); | |
LootParams lootparams = new LootParams.Builder(serverlevel) | |
.withParameter(LootContextParams.ORIGIN, p_137105_.getPosition()) | |
.withOptionalParameter(LootContextParams.THIS_ENTITY, p_137105_.getEntity()) | |
.create(LootContextParamSets.COMMAND); | |
LootContext lootcontext = new LootContext.Builder(lootparams).create(Optional.empty()); | |
lootcontext.pushVisitedElement(LootContext.createVisitedEntry(p_335377_.value())); | |
return p_335377_.value().test(lootcontext); | |
} | |
private static Collection<CommandSourceStack> expect(CommandContext<CommandSourceStack> p_137071_, boolean p_137072_, boolean p_137073_) { | |
return (Collection<CommandSourceStack>)(p_137073_ == p_137072_ ? Collections.singleton(p_137071_.getSource()) : Collections.emptyList()); | |
} | |
private static ArgumentBuilder<CommandSourceStack, ?> addConditional( | |
CommandNode<CommandSourceStack> p_137075_, | |
ArgumentBuilder<CommandSourceStack, ?> p_137076_, | |
boolean p_137077_, | |
ExecuteCommand.CommandPredicate p_137078_ | |
) { | |
return p_137076_.fork(p_137075_, p_137214_ -> expect(p_137214_, p_137077_, p_137078_.test(p_137214_))).executes(p_288396_ -> { | |
if (p_137077_ == p_137078_.test(p_288396_)) { | |
p_288396_.getSource().sendSuccess(() -> Component.translatable("commands.execute.conditional.pass"), false); | |
return 1; | |
} else { | |
throw ERROR_CONDITIONAL_FAILED.create(); | |
} | |
}); | |
} | |
private static ArgumentBuilder<CommandSourceStack, ?> addIfBlocksConditional( | |
CommandNode<CommandSourceStack> p_137080_, ArgumentBuilder<CommandSourceStack, ?> p_137081_, boolean p_137082_, boolean p_137083_ | |
) { | |
return p_137081_.fork(p_137080_, p_137180_ -> expect(p_137180_, p_137082_, checkRegions(p_137180_, p_137083_).isPresent())) | |
.executes(p_137082_ ? p_137210_ -> checkIfRegions(p_137210_, p_137083_) : p_137165_ -> checkUnlessRegions(p_137165_, p_137083_)); | |
} | |
private static int checkIfRegions(CommandContext<CommandSourceStack> p_137068_, boolean p_137069_) throws CommandSyntaxException { | |
OptionalInt optionalint = checkRegions(p_137068_, p_137069_); | |
if (optionalint.isPresent()) { | |
p_137068_.getSource().sendSuccess(() -> Component.translatable("commands.execute.conditional.pass_count", optionalint.getAsInt()), false); | |
return optionalint.getAsInt(); | |
} else { | |
throw ERROR_CONDITIONAL_FAILED.create(); | |
} | |
} | |
private static int checkUnlessRegions(CommandContext<CommandSourceStack> p_137194_, boolean p_137195_) throws CommandSyntaxException { | |
OptionalInt optionalint = checkRegions(p_137194_, p_137195_); | |
if (optionalint.isPresent()) { | |
throw ERROR_CONDITIONAL_FAILED_COUNT.create(optionalint.getAsInt()); | |
} else { | |
p_137194_.getSource().sendSuccess(() -> Component.translatable("commands.execute.conditional.pass"), false); | |
return 1; | |
} | |
} | |
private static OptionalInt checkRegions(CommandContext<CommandSourceStack> p_137221_, boolean p_137222_) throws CommandSyntaxException { | |
return checkRegions( | |
p_137221_.getSource().getLevel(), | |
BlockPosArgument.getLoadedBlockPos(p_137221_, "start"), | |
BlockPosArgument.getLoadedBlockPos(p_137221_, "end"), | |
BlockPosArgument.getLoadedBlockPos(p_137221_, "destination"), | |
p_137222_ | |
); | |
} | |
private static OptionalInt checkRegions(ServerLevel p_137037_, BlockPos p_137038_, BlockPos p_137039_, BlockPos p_137040_, boolean p_137041_) throws CommandSyntaxException { | |
BoundingBox boundingbox = BoundingBox.fromCorners(p_137038_, p_137039_); | |
BoundingBox boundingbox1 = BoundingBox.fromCorners(p_137040_, p_137040_.offset(boundingbox.getLength())); | |
BlockPos blockpos = new BlockPos( | |
boundingbox1.minX() - boundingbox.minX(), | |
boundingbox1.minY() - boundingbox.minY(), | |
boundingbox1.minZ() - boundingbox.minZ() | |
); | |
int i = boundingbox.getXSpan() * boundingbox.getYSpan() * boundingbox.getZSpan(); | |
if (i > 32768) { | |
throw ERROR_AREA_TOO_LARGE.create(32768, i); | |
} else { | |
RegistryAccess registryaccess = p_137037_.registryAccess(); | |
int j = 0; | |
for (int k = boundingbox.minZ(); k <= boundingbox.maxZ(); k++) { | |
for (int l = boundingbox.minY(); l <= boundingbox.maxY(); l++) { | |
for (int i1 = boundingbox.minX(); i1 <= boundingbox.maxX(); i1++) { | |
BlockPos blockpos1 = new BlockPos(i1, l, k); | |
BlockPos blockpos2 = blockpos1.offset(blockpos); | |
BlockState blockstate = p_137037_.getBlockState(blockpos1); | |
if (!p_137041_ || !blockstate.is(Blocks.AIR)) { | |
if (blockstate != p_137037_.getBlockState(blockpos2)) { | |
return OptionalInt.empty(); | |
} | |
BlockEntity blockentity = p_137037_.getBlockEntity(blockpos1); | |
BlockEntity blockentity1 = p_137037_.getBlockEntity(blockpos2); | |
if (blockentity != null) { | |
if (blockentity1 == null) { | |
return OptionalInt.empty(); | |
} | |
if (blockentity1.getType() != blockentity.getType()) { | |
return OptionalInt.empty(); | |
} | |
if (!blockentity.components().equals(blockentity1.components())) { | |
return OptionalInt.empty(); | |
} | |
CompoundTag compoundtag = blockentity.saveCustomOnly(registryaccess); | |
CompoundTag compoundtag1 = blockentity1.saveCustomOnly(registryaccess); | |
if (!compoundtag.equals(compoundtag1)) { | |
return OptionalInt.empty(); | |
} | |
} | |
j++; | |
} | |
} | |
} | |
} | |
return OptionalInt.of(j); | |
} | |
} | |
private static RedirectModifier<CommandSourceStack> expandOneToOneEntityRelation(Function<Entity, Optional<Entity>> p_265114_) { | |
return p_264786_ -> { | |
CommandSourceStack commandsourcestack = p_264786_.getSource(); | |
Entity entity = commandsourcestack.getEntity(); | |
return entity == null | |
? List.of() | |
: p_265114_.apply(entity) | |
.filter(p_264783_ -> !p_264783_.isRemoved()) | |
.map(p_264775_ -> List.of(commandsourcestack.withEntity(p_264775_))) | |
.orElse(List.of()); | |
}; | |
} | |
private static RedirectModifier<CommandSourceStack> expandOneToManyEntityRelation(Function<Entity, Stream<Entity>> p_265496_) { | |
return p_264780_ -> { | |
CommandSourceStack commandsourcestack = p_264780_.getSource(); | |
Entity entity = commandsourcestack.getEntity(); | |
return entity == null ? List.of() : p_265496_.apply(entity).filter(p_264784_ -> !p_264784_.isRemoved()).map(commandsourcestack::withEntity).toList(); | |
}; | |
} | |
private static LiteralArgumentBuilder<CommandSourceStack> createRelationOperations( | |
CommandNode<CommandSourceStack> p_265189_, LiteralArgumentBuilder<CommandSourceStack> p_265783_ | |
) { | |
return p_265783_.then( | |
Commands.literal("owner") | |
.fork( | |
p_265189_, | |
expandOneToOneEntityRelation( | |
p_269758_ -> p_269758_ instanceof OwnableEntity ownableentity ? Optional.ofNullable(ownableentity.getOwner()) : Optional.empty() | |
) | |
) | |
) | |
.then( | |
Commands.literal("leasher") | |
.fork( | |
p_265189_, | |
expandOneToOneEntityRelation(p_341160_ -> p_341160_ instanceof Leashable leashable ? Optional.ofNullable(leashable.getLeashHolder()) : Optional.empty()) | |
) | |
) | |
.then( | |
Commands.literal("target") | |
.fork( | |
p_265189_, | |
expandOneToOneEntityRelation(p_272389_ -> p_272389_ instanceof Targeting targeting ? Optional.ofNullable(targeting.getTarget()) : Optional.empty()) | |
) | |
) | |
.then( | |
Commands.literal("attacker") | |
.fork( | |
p_265189_, | |
expandOneToOneEntityRelation(p_272388_ -> p_272388_ instanceof Attackable attackable ? Optional.ofNullable(attackable.getLastAttacker()) : Optional.empty()) | |
) | |
) | |
.then(Commands.literal("vehicle").fork(p_265189_, expandOneToOneEntityRelation(p_264776_ -> Optional.ofNullable(p_264776_.getVehicle())))) | |
.then(Commands.literal("controller").fork(p_265189_, expandOneToOneEntityRelation(p_274815_ -> Optional.ofNullable(p_274815_.getControllingPassenger())))) | |
.then( | |
Commands.literal("origin") | |
.fork( | |
p_265189_, | |
expandOneToOneEntityRelation( | |
p_266631_ -> p_266631_ instanceof TraceableEntity traceableentity | |
? Optional.ofNullable(traceableentity.getOwner()) | |
: Optional.empty() | |
) | |
) | |
) | |
.then(Commands.literal("passengers").fork(p_265189_, expandOneToManyEntityRelation(p_264777_ -> p_264777_.getPassengers().stream()))); | |
} | |
private static CommandSourceStack spawnEntityAndRedirect(CommandSourceStack p_270320_, Holder.Reference<EntityType<?>> p_270344_) throws CommandSyntaxException { | |
Entity entity = SummonCommand.createEntity(p_270320_, p_270344_, p_270320_.getPosition(), new CompoundTag(), true); | |
return p_270320_.withEntity(entity); | |
} | |
public static <T extends ExecutionCommandSource<T>> void scheduleFunctionConditionsAndTest( | |
T p_311643_, | |
List<T> p_313143_, | |
Function<T, T> p_312920_, | |
IntPredicate p_311696_, | |
ContextChain<T> p_311450_, | |
CompoundTag p_313177_, | |
ExecutionControl<T> p_310605_, | |
ExecuteCommand.CommandGetter<T, Collection<CommandFunction<T>>> p_311694_, | |
ChainModifiers p_312493_ | |
) { | |
List<T> list = new ArrayList<>(p_313143_.size()); | |
Collection<CommandFunction<T>> collection; | |
try { | |
collection = p_311694_.get(p_311450_.getTopContext().copyFor(p_311643_)); | |
} catch (CommandSyntaxException commandsyntaxexception) { | |
p_311643_.handleError(commandsyntaxexception, p_312493_.isForked(), p_310605_.tracer()); | |
return; | |
} | |
int i = collection.size(); | |
if (i != 0) { | |
List<InstantiatedFunction<T>> list1 = new ArrayList<>(i); | |
try { | |
for (CommandFunction<T> commandfunction : collection) { | |
try { | |
list1.add(commandfunction.instantiate(p_313177_, p_311643_.dispatcher())); | |
} catch (FunctionInstantiationException functioninstantiationexception) { | |
throw ERROR_FUNCTION_CONDITION_INSTANTATION_FAILURE.create(commandfunction.id(), functioninstantiationexception.messageComponent()); | |
} | |
} | |
} catch (CommandSyntaxException commandsyntaxexception1) { | |
p_311643_.handleError(commandsyntaxexception1, p_312493_.isForked(), p_310605_.tracer()); | |
} | |
for (T t1 : p_313143_) { | |
T t = (T)p_312920_.apply(t1.clearCallbacks()); | |
CommandResultCallback commandresultcallback = (p_308674_, p_308675_) -> { | |
if (p_311696_.test(p_308675_)) { | |
list.add(t1); | |
} | |
}; | |
p_310605_.queueNext(new IsolatedCall<>(p_308664_ -> { | |
for (InstantiatedFunction<T> instantiatedfunction : list1) { | |
p_308664_.queueNext(new CallFunction<>(instantiatedfunction, p_308664_.currentFrame().returnValueConsumer(), true).bind(t)); | |
} | |
p_308664_.queueNext(FallthroughTask.instance()); | |
}, commandresultcallback)); | |
} | |
ContextChain<T> contextchain = p_311450_.nextStage(); | |
String s = p_311450_.getTopContext().getInput(); | |
p_310605_.queueNext(new BuildContexts.Continuation<>(s, contextchain, p_312493_, p_311643_, list)); | |
} | |
} | |
public interface CommandGetter<T, R> { | |
R get(CommandContext<T> p_310070_) throws CommandSyntaxException; | |
} | |
interface CommandNumericPredicate { | |
int test(CommandContext<CommandSourceStack> p_137301_) throws CommandSyntaxException; | |
} | |
interface CommandPredicate { | |
boolean test(CommandContext<CommandSourceStack> p_137303_) throws CommandSyntaxException; | |
} | |
static class ExecuteIfFunctionCustomModifier implements CustomModifierExecutor.ModifierAdapter<CommandSourceStack> { | |
private final IntPredicate check; | |
ExecuteIfFunctionCustomModifier(boolean p_311621_) { | |
this.check = p_311621_ ? p_311044_ -> p_311044_ != 0 : p_311222_ -> p_311222_ == 0; | |
} | |
public void apply( | |
CommandSourceStack p_312164_, | |
List<CommandSourceStack> p_311631_, | |
ContextChain<CommandSourceStack> p_310925_, | |
ChainModifiers p_312971_, | |
ExecutionControl<CommandSourceStack> p_312212_ | |
) { | |
ExecuteCommand.scheduleFunctionConditionsAndTest( | |
p_312164_, | |
p_311631_, | |
FunctionCommand::modifySenderForExecution, | |
this.check, | |
p_310925_, | |
null, | |
p_312212_, | |
p_312564_ -> FunctionArgument.getFunctions(p_312564_, "name"), | |
p_312971_ | |
); | |
} | |
} | |
interface IntBiPredicate { | |
boolean test(int p_311925_, int p_313118_); | |
} | |
} |