Skip to content

Instantly share code, notes, and snippets.

@Ivorforce
Created June 5, 2017 23:30
Show Gist options
  • Save Ivorforce/0ecbd6b8680f64f7274c89f164f341ad to your computer and use it in GitHub Desktop.
Save Ivorforce/0ecbd6b8680f64f7274c89f164f341ad to your computer and use it in GitHub Desktop.
public class CommandGenerateStructure extends SimpleCommand
{
public CommandGenerateStructure()
{
super(RCConfig.commandPrefix + "gen");
permitFor(2);
}
@Override
public Expect<?> expect()
{
return RCExpect.expectRC()
.structure()
.surfacePos("x", "z")
.named("dimension", "d").dimension()
.named("gen")
.next(params -> new RCParameters(params).rc().genericStructure().tryGet()
.map(structure -> structure.generationTypes(GenerationType.class).stream().map(GenerationType::id))
).optionalU("generation type id")
.named("rotation", "r").rotation()
.named("seed").randomString().optionalU("seed")
.flag("mirror", "m")
.flag("select", "s");
}
@Override
@ParametersAreNonnullByDefault
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException
{
RCParameters parameters = RCParameters.of(args, expect()::declare);
String structureID = parameters.get().first().require();
Structure<?> structure = parameters.rc().structure().require();
WorldServer world = parameters.mc("dimension").dimension(server, sender).require();
AxisAlignedTransform2D transform = parameters.transform("rotation", "mirror").optional().orElse(null);
GenerationType generationType = parameters.rc("gen").generationType(structure).require();
BlockSurfacePos pos = parameters.surfacePos("x", "z", sender.getPosition(), false).require();
String seed = parameters.get("seed").first().optional().orElse(null);
boolean select = parameters.has("select");
Placer placer = generationType.placer();
StructureGenerator<?> generator = new StructureGenerator<>(structure).world(world).generationInfo(generationType)
.seed(RCStrings.seed(seed))
.structureID(structureID).randomPosition(pos, placer).fromCenter(true)
.transform(transform);
Optional<StructureBoundingBox> boundingBox = generator.boundingBox();
if (!boundingBox.isPresent())
throw ServerTranslations.commandException("commands.strucGen.noPlace");
if (structure instanceof GenericStructure && world == sender.getEntityWorld())
{
GenericStructure genericStructureInfo = (GenericStructure) structure;
BlockPos lowerCoord = StructureBoundingBoxes.min(boundingBox.get());
OperationRegistry.queueOperation(new OperationGenerateStructure(genericStructureInfo, generationType.id(), generator.transform(), lowerCoord, false)
.withSeed(seed)
.withStructureID(structureID).prepare(world), sender);
}
else
{
if (generator.generate() == null)
throw ServerTranslations.commandException("commands.strucGen.noPlace");
}
if (select)
{
SelectionOwner owner = RCCommands.getSelectionOwner(sender, null, false);
owner.setSelection(RCBlockAreas.from(boundingBox.get()));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment