soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.server.commands;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.FloatArgumentType;
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 com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import com.mojang.brigadier.suggestion.SuggestionProvider;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import java.util.Optional;
import net.minecraft.ResourceLocationException;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraft.commands.arguments.ResourceKeyArgument;
import net.minecraft.commands.arguments.ResourceLocationArgument;
import net.minecraft.commands.arguments.TemplateMirrorArgument;
import net.minecraft.commands.arguments.TemplateRotationArgument;
import net.minecraft.commands.arguments.coordinates.BlockPosArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.SectionPos;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.entity.StructureBlockEntity;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.level.levelgen.structure.Structure;
import net.minecraft.world.level.levelgen.structure.StructureStart;
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement;
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
import net.minecraft.world.level.levelgen.structure.templatesystem.BlockRotProcessor;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
public class PlaceCommand {
private static final SimpleCommandExceptionType ERROR_FEATURE_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.place.feature.failed"));
private static final SimpleCommandExceptionType ERROR_JIGSAW_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.place.jigsaw.failed"));
private static final SimpleCommandExceptionType ERROR_STRUCTURE_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.place.structure.failed"));
private static final DynamicCommandExceptionType ERROR_TEMPLATE_INVALID = new DynamicCommandExceptionType(
p_308787_ -> Component.translatableEscape("commands.place.template.invalid", p_308787_)
);
private static final SimpleCommandExceptionType ERROR_TEMPLATE_FAILED = new SimpleCommandExceptionType(Component.translatable("commands.place.template.failed"));
private static final SuggestionProvider<CommandSourceStack> SUGGEST_TEMPLATES = (p_214552_, p_214553_) -> {
StructureTemplateManager structuretemplatemanager = p_214552_.getSource().getLevel().getStructureManager();
return SharedSuggestionProvider.suggestResource(structuretemplatemanager.listTemplates(), p_214553_);
};
public static void register(CommandDispatcher<CommandSourceStack> p_214548_) {
p_214548_.register(
Commands.literal("place")
.requires(p_214560_ -> p_214560_.hasPermission(2))
.then(
Commands.literal("feature")
.then(
Commands.argument("feature", ResourceKeyArgument.key(Registries.CONFIGURED_FEATURE))
.executes(
p_274824_ -> placeFeature(
p_274824_.getSource(),
ResourceKeyArgument.getConfiguredFeature(p_274824_, "feature"),
BlockPos.containing(p_274824_.getSource().getPosition())
)
)
.then(
Commands.argument("pos", BlockPosArgument.blockPos())
.executes(
p_248163_ -> placeFeature(
p_248163_.getSource(),
ResourceKeyArgument.getConfiguredFeature(p_248163_, "feature"),
BlockPosArgument.getLoadedBlockPos(p_248163_, "pos")
)
)
)
)
)
.then(
Commands.literal("jigsaw")
.then(
Commands.argument("pool", ResourceKeyArgument.key(Registries.TEMPLATE_POOL))
.then(
Commands.argument("target", ResourceLocationArgument.id())
.then(
Commands.argument("max_depth", IntegerArgumentType.integer(1, 20))
.executes(
p_274825_ -> placeJigsaw(
p_274825_.getSource(),
ResourceKeyArgument.getStructureTemplatePool(p_274825_, "pool"),
ResourceLocationArgument.getId(p_274825_, "target"),
IntegerArgumentType.getInteger(p_274825_, "max_depth"),
BlockPos.containing(p_274825_.getSource().getPosition())
)
)
.then(
Commands.argument("position", BlockPosArgument.blockPos())
.executes(
p_248167_ -> placeJigsaw(
p_248167_.getSource(),
ResourceKeyArgument.getStructureTemplatePool(p_248167_, "pool"),
ResourceLocationArgument.getId(p_248167_, "target"),
IntegerArgumentType.getInteger(p_248167_, "max_depth"),
BlockPosArgument.getLoadedBlockPos(p_248167_, "position")
)
)
)
)
)
)
)
.then(
Commands.literal("structure")
.then(
Commands.argument("structure", ResourceKeyArgument.key(Registries.STRUCTURE))
.executes(
p_274826_ -> placeStructure(
p_274826_.getSource(),
ResourceKeyArgument.getStructure(p_274826_, "structure"),
BlockPos.containing(p_274826_.getSource().getPosition())
)
)
.then(
Commands.argument("pos", BlockPosArgument.blockPos())
.executes(
p_248168_ -> placeStructure(
p_248168_.getSource(),
ResourceKeyArgument.getStructure(p_248168_, "structure"),
BlockPosArgument.getLoadedBlockPos(p_248168_, "pos")
)
)
)
)
)
.then(
Commands.literal("template")
.then(
Commands.argument("template", ResourceLocationArgument.id())
.suggests(SUGGEST_TEMPLATES)
.executes(
p_274827_ -> placeTemplate(
p_274827_.getSource(),
ResourceLocationArgument.getId(p_274827_, "template"),
BlockPos.containing(p_274827_.getSource().getPosition()),
Rotation.NONE,
Mirror.NONE,
1.0F,
0
)
)
.then(
Commands.argument("pos", BlockPosArgument.blockPos())
.executes(
p_214596_ -> placeTemplate(
p_214596_.getSource(),
ResourceLocationArgument.getId(p_214596_, "template"),
BlockPosArgument.getLoadedBlockPos(p_214596_, "pos"),
Rotation.NONE,
Mirror.NONE,
1.0F,
0
)
)
.then(
Commands.argument("rotation", TemplateRotationArgument.templateRotation())
.executes(
p_214594_ -> placeTemplate(
p_214594_.getSource(),
ResourceLocationArgument.getId(p_214594_, "template"),
BlockPosArgument.getLoadedBlockPos(p_214594_, "pos"),
TemplateRotationArgument.getRotation(p_214594_, "rotation"),
Mirror.NONE,
1.0F,
0
)
)
.then(
Commands.argument("mirror", TemplateMirrorArgument.templateMirror())
.executes(
p_214592_ -> placeTemplate(
p_214592_.getSource(),
ResourceLocationArgument.getId(p_214592_, "template"),
BlockPosArgument.getLoadedBlockPos(p_214592_, "pos"),
TemplateRotationArgument.getRotation(p_214592_, "rotation"),
TemplateMirrorArgument.getMirror(p_214592_, "mirror"),
1.0F,
0
)
)
.then(
Commands.argument("integrity", FloatArgumentType.floatArg(0.0F, 1.0F))
.executes(
p_214586_ -> placeTemplate(
p_214586_.getSource(),
ResourceLocationArgument.getId(p_214586_, "template"),
BlockPosArgument.getLoadedBlockPos(p_214586_, "pos"),
TemplateRotationArgument.getRotation(p_214586_, "rotation"),
TemplateMirrorArgument.getMirror(p_214586_, "mirror"),
FloatArgumentType.getFloat(p_214586_, "integrity"),
0
)
)
.then(
Commands.argument("seed", IntegerArgumentType.integer())
.executes(
p_214550_ -> placeTemplate(
p_214550_.getSource(),
ResourceLocationArgument.getId(p_214550_, "template"),
BlockPosArgument.getLoadedBlockPos(p_214550_, "pos"),
TemplateRotationArgument.getRotation(p_214550_, "rotation"),
TemplateMirrorArgument.getMirror(p_214550_, "mirror"),
FloatArgumentType.getFloat(p_214550_, "integrity"),
IntegerArgumentType.getInteger(p_214550_, "seed")
)
)
)
)
)
)
)
)
)
);
}
public static int placeFeature(CommandSourceStack p_214576_, Holder.Reference<ConfiguredFeature<?, ?>> p_248822_, BlockPos p_214578_) throws CommandSyntaxException {
ServerLevel serverlevel = p_214576_.getLevel();
ConfiguredFeature<?, ?> configuredfeature = p_248822_.value();
ChunkPos chunkpos = new ChunkPos(p_214578_);
checkLoaded(serverlevel, new ChunkPos(chunkpos.x - 1, chunkpos.z - 1), new ChunkPos(chunkpos.x + 1, chunkpos.z + 1));
if (!configuredfeature.place(serverlevel, serverlevel.getChunkSource().getGenerator(), serverlevel.getRandom(), p_214578_)) {
throw ERROR_FEATURE_FAILED.create();
} else {
String s = p_248822_.key().location().toString();
p_214576_.sendSuccess(
() -> Component.translatable("commands.place.feature.success", s, p_214578_.getX(), p_214578_.getY(), p_214578_.getZ()), true
);
return 1;
}
}
public static int placeJigsaw(
CommandSourceStack p_214570_, Holder<StructureTemplatePool> p_214571_, ResourceLocation p_214572_, int p_214573_, BlockPos p_214574_
) throws CommandSyntaxException {
ServerLevel serverlevel = p_214570_.getLevel();
ChunkPos chunkpos = new ChunkPos(p_214574_);
checkLoaded(serverlevel, chunkpos, chunkpos);
if (!JigsawPlacement.generateJigsaw(serverlevel, p_214571_, p_214572_, p_214573_, p_214574_, false)) {
throw ERROR_JIGSAW_FAILED.create();
} else {
p_214570_.sendSuccess(
() -> Component.translatable("commands.place.jigsaw.success", p_214574_.getX(), p_214574_.getY(), p_214574_.getZ()), true
);
return 1;
}
}
public static int placeStructure(CommandSourceStack p_214588_, Holder.Reference<Structure> p_251799_, BlockPos p_214590_) throws CommandSyntaxException {
ServerLevel serverlevel = p_214588_.getLevel();
Structure structure = p_251799_.value();
ChunkGenerator chunkgenerator = serverlevel.getChunkSource().getGenerator();
StructureStart structurestart = structure.generate(
p_251799_,
serverlevel.dimension(),
p_214588_.registryAccess(),
chunkgenerator,
chunkgenerator.getBiomeSource(),
serverlevel.getChunkSource().randomState(),
serverlevel.getStructureManager(),
serverlevel.getSeed(),
new ChunkPos(p_214590_),
0,
serverlevel,
p_214580_ -> true
);
if (!structurestart.isValid()) {
throw ERROR_STRUCTURE_FAILED.create();
} else {
BoundingBox boundingbox = structurestart.getBoundingBox();
ChunkPos chunkpos = new ChunkPos(SectionPos.blockToSectionCoord(boundingbox.minX()), SectionPos.blockToSectionCoord(boundingbox.minZ()));
ChunkPos chunkpos1 = new ChunkPos(SectionPos.blockToSectionCoord(boundingbox.maxX()), SectionPos.blockToSectionCoord(boundingbox.maxZ()));
checkLoaded(serverlevel, chunkpos, chunkpos1);
ChunkPos.rangeClosed(chunkpos, chunkpos1)
.forEach(
p_374875_ -> structurestart.placeInChunk(
serverlevel,
serverlevel.structureManager(),
chunkgenerator,
serverlevel.getRandom(),
new BoundingBox(
p_374875_.getMinBlockX(),
serverlevel.getMinY(),
p_374875_.getMinBlockZ(),
p_374875_.getMaxBlockX(),
serverlevel.getMaxY() + 1,
p_374875_.getMaxBlockZ()
),
p_374875_
)
);
String s = p_251799_.key().location().toString();
p_214588_.sendSuccess(
() -> Component.translatable("commands.place.structure.success", s, p_214590_.getX(), p_214590_.getY(), p_214590_.getZ()), true
);
return 1;
}
}
public static int placeTemplate(
CommandSourceStack p_214562_, ResourceLocation p_214563_, BlockPos p_214564_, Rotation p_214565_, Mirror p_214566_, float p_214567_, int p_214568_
) throws CommandSyntaxException {
ServerLevel serverlevel = p_214562_.getLevel();
StructureTemplateManager structuretemplatemanager = serverlevel.getStructureManager();
Optional<StructureTemplate> optional;
try {
optional = structuretemplatemanager.get(p_214563_);
} catch (ResourceLocationException resourcelocationexception) {
throw ERROR_TEMPLATE_INVALID.create(p_214563_);
}
if (optional.isEmpty()) {
throw ERROR_TEMPLATE_INVALID.create(p_214563_);
} else {
StructureTemplate structuretemplate = optional.get();
checkLoaded(serverlevel, new ChunkPos(p_214564_), new ChunkPos(p_214564_.offset(structuretemplate.getSize())));
StructurePlaceSettings structureplacesettings = new StructurePlaceSettings().setMirror(p_214566_).setRotation(p_214565_);
if (p_214567_ < 1.0F) {
structureplacesettings.clearProcessors().addProcessor(new BlockRotProcessor(p_214567_)).setRandom(StructureBlockEntity.createRandom((long)p_214568_));
}
boolean flag = structuretemplate.placeInWorld(
serverlevel, p_214564_, p_214564_, structureplacesettings, StructureBlockEntity.createRandom((long)p_214568_), 2
);
if (!flag) {
throw ERROR_TEMPLATE_FAILED.create();
} else {
p_214562_.sendSuccess(
() -> Component.translatable(
"commands.place.template.success",
Component.translationArg(p_214563_),
p_214564_.getX(),
p_214564_.getY(),
p_214564_.getZ()
),
true
);
return 1;
}
}
}
private static void checkLoaded(ServerLevel p_214544_, ChunkPos p_214545_, ChunkPos p_214546_) throws CommandSyntaxException {
if (ChunkPos.rangeClosed(p_214545_, p_214546_).filter(p_308780_ -> !p_214544_.isLoaded(p_308780_.getWorldPosition())).findAny().isPresent()) {
throw BlockPosArgument.ERROR_NOT_LOADED.create();
}
}
}