use of org.spongepowered.api.world.server.ServerLocation in project SpongeCommon by SpongePowered.
the class ProjectileTest method registerCommand.
@Listener
public void registerCommand(final RegisterCommandEvent<Command.Parameterized> event) {
final Parameter.Value<EntityType<@NonNull ?>> entityTypeParameter = Parameter.registryElement(new TypeToken<EntityType<?>>() {
}, (ctx) -> Sponge.game(), RegistryTypes.ENTITY_TYPE, "minecraft", "sponge").key("type").build();
final Parameter.Value<Boolean> targetParameter = Parameter.bool().key("target").optional().build();
final Command.Parameterized launchCommand = Command.builder().addParameters(entityTypeParameter, targetParameter).executor(context -> {
final Player player = context.cause().first(Player.class).orElseThrow(() -> new CommandException(Component.text("Only a player can execute this command")));
final EntityType<?> entityType = context.requireOne(entityTypeParameter);
final Optional<Projectile> launched;
if (context.one(targetParameter).orElse(false)) {
final Collection<? extends Entity> nearbyEntities = player.nearbyEntities(10, entity -> entity instanceof Living && entity != player);
if (nearbyEntities.isEmpty()) {
return CommandResult.error(Component.text("No entity to target nearby"));
}
final Entity target = nearbyEntities.iterator().next();
launched = player.launchProjectileTo((EntityType<Projectile>) entityType, target);
if (launched.isPresent()) {
player.sendMessage(Identity.nil(), Component.text("Launched projectile to " + RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), target.type()).asString()));
return CommandResult.success();
}
} else {
launched = player.launchProjectile((EntityType<Projectile>) entityType);
if (launched.isPresent()) {
player.sendMessage(Identity.nil(), Component.text("Launched projectile"));
return CommandResult.success();
}
}
throw new CommandException(Component.text("Could not launch projectile"));
}).build();
event.register(this.plugin, launchCommand, "launch");
final Command.Parameterized launchToMeCommand = Command.builder().addParameter(entityTypeParameter).executor(context -> {
final Player player = context.cause().first(Player.class).orElseThrow(() -> new CommandException(Component.text("Only a player can execute this command")));
final Collection<? extends ProjectileSource> nearbyProjectileSources = (Collection<? extends ProjectileSource>) player.nearbyEntities(10, entity -> entity instanceof ProjectileSource);
if (nearbyProjectileSources.isEmpty()) {
return CommandResult.error(Component.text("No projectile source nearby"));
}
final ProjectileSource projectileSource = nearbyProjectileSources.iterator().next();
final EntityType<?> entityType = context.requireOne(entityTypeParameter);
final Optional<? extends Projectile> launched = projectileSource.launchProjectileTo((EntityType<Projectile>) entityType, player);
final EntityType<?> type = ((Entity) projectileSource).type();
if (launched.isPresent()) {
final EntityType<?> launchedType = launched.get().type();
player.sendMessage(Identity.nil(), Component.text().append(Component.text("You made a ")).append(Component.text(RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), type).asString())).append(Component.text(" shoot a ")).append(Component.text(RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), launchedType).asString())).append(Component.text(" at you")).build());
return CommandResult.success();
}
throw new CommandException(Component.text().append(Component.text("Could not launch a ")).append(Component.text(RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), type).asString())).append(Component.text(" from a ")).append(Component.text(RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), entityType).asString())).append(Component.text(" at you")).build());
}).build();
event.register(this.plugin, launchToMeCommand, "launchtome");
final Parameter.Value<ServerLocation> dispenserParameter = Parameter.location().key("dispenser").build();
final Command.Parameterized triggerDispenserCommand = Command.builder().addParameters(dispenserParameter, entityTypeParameter).executor(context -> {
final Player player = context.cause().first(Player.class).orElseThrow(() -> new CommandException(Component.text("Only a player can execute this command")));
final BlockEntity dispenser = context.requireOne(dispenserParameter).blockEntity().orElse(null);
if (dispenser == null) {
return CommandResult.error(Component.text("Could not find dispenser"));
}
final EntityType<?> entityType = context.requireOne(entityTypeParameter);
final Optional<? extends Projectile> launched = ((Dispenser) dispenser).launchProjectile((EntityType<Projectile>) entityType);
if (launched.isPresent()) {
launched.get().offer(Keys.SHOOTER, player);
player.sendMessage(Identity.nil(), Component.text().append(Component.text("The dispenser launched a ")).append(Component.text(RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), launched.get().type()).asString())).build());
return CommandResult.success();
}
return CommandResult.error(Component.text().append(Component.text("Could not make the dispenser launch a ")).append(Component.text(RegistryTypes.ENTITY_TYPE.keyFor(Sponge.game(), entityType).asString())).build());
}).build();
event.register(this.plugin, triggerDispenserCommand, "triggerdispenser");
}
use of org.spongepowered.api.world.server.ServerLocation in project SpongeCommon by SpongePowered.
the class WorldTest method transportToWorld.
private void transportToWorld(final ServerPlayer player, final ServerWorld world) {
player.sendMessage(Identity.nil(), Component.text("Teleporting..."));
final ServerLocation spawn = world.location(world.properties().spawnPosition());
player.setLocation(Sponge.server().teleportHelper().findSafeLocation(spawn).orElse(spawn));
player.showTitle(Title.title(Component.text("Welcome to your world"), Component.text(player.name())));
}
use of org.spongepowered.api.world.server.ServerLocation in project SpongeCommon by SpongePowered.
the class WorldTest method onRegisterCommand.
@Listener
public void onRegisterCommand(final RegisterCommandEvent<Command.Parameterized> event) {
final Parameter.Value<ServerPlayer> optPlayerParameter = Parameter.player().optional().key("player").build();
final Parameter.Value<ResourceKey> worldKeyParameter = Parameter.resourceKey().key("world").build();
final Parameter.Value<ServerWorld> optWorldParameter = Parameter.world().optional().key("world").build();
final Parameter.Value<Vector3d> optPositionParameter = Parameter.vector3d().optional().key("position").build();
final Parameter.Value<PortalType> portalTypeParameter = Parameter.registryElement(TypeToken.get(PortalType.class), RegistryTypes.PORTAL_TYPE, "minecraft", "sponge").key("portal_type").build();
final Parameter.Value<WorldType> worldTypeParameter = Parameter.registryElement(TypeToken.get(WorldType.class), RegistryTypes.WORLD_TYPE, "minecraft", "sponge").key("world_type").build();
final Parameter.Value<ResourceKey> copyWorldKeyParameter = Parameter.resourceKey().key("copy_world").build();
final Parameter.Value<ResourceKey> moveWorldKeyParameter = Parameter.resourceKey().key("move_world").build();
event.register(this.plugin, Command.builder().addParameters(CommonParameters.LOCATION_ONLINE_ONLY, portalTypeParameter).permission(this.plugin.metadata().id() + ".command.portal.create").executor(context -> {
final ServerLocation location = context.requireOne(CommonParameters.LOCATION_ONLINE_ONLY);
final PortalType portalType = context.requireOne(portalTypeParameter);
portalType.generatePortal(location, Axis.X);
return CommandResult.success();
}).build(), "cp", "createportal").register(this.plugin, Command.builder().addParameters(optPlayerParameter, CommonParameters.LOCATION_ONLINE_ONLY, portalTypeParameter).permission(this.plugin.metadata().id() + ".command.portal.use").executor(context -> {
final ServerPlayer player = context.one(optPlayerParameter).orElse(this.getSourcePlayer(context));
final ServerLocation location = context.requireOne(CommonParameters.LOCATION_ONLINE_ONLY);
final PortalType portalType = context.requireOne(portalTypeParameter);
return portalType.teleport(player, location, true) ? CommandResult.success() : CommandResult.error(Component.text("Could not teleport!"));
}).build(), "up", "useportal").register(this.plugin, Command.builder().addParameters(optPlayerParameter, worldTypeParameter).permission(this.plugin.metadata().id() + ".command.environment.change").executor(context -> {
final ServerPlayer player = context.one(optPlayerParameter).orElse(this.getSourcePlayer(context));
final WorldType worldType = context.requireOne(worldTypeParameter);
player.sendWorldType(worldType);
return CommandResult.success();
}).build(), "ce", "changeenvironment").register(this.plugin, Command.builder().addParameters(CommonParameters.WORLD, worldTypeParameter).permission(this.plugin.metadata().id() + ".command.worldtype.change").executor(context -> {
final ServerWorld world = context.requireOne(CommonParameters.WORLD);
final WorldType worldType = context.requireOne(worldTypeParameter);
world.properties().setWorldType(worldType);
return CommandResult.success();
}).build(), "cwt", "changeworldtype").register(this.plugin, Command.builder().addParameters(optPlayerParameter, optWorldParameter, optPositionParameter).permission(this.plugin.metadata().id() + ".command.location.change").executor(context -> {
final ServerPlayer player = context.one(optPlayerParameter).orElse(this.getSourcePlayer(context));
final ServerWorld world = context.one(optWorldParameter).orElse(player.world());
final Vector3d position = context.one(optPositionParameter).orElse(world.properties().spawnPosition().toDouble());
return player.setLocation(ServerLocation.of(world, position)) ? CommandResult.success() : CommandResult.error(Component.text("Could not teleport!"));
}).build(), "cl", "changelocation").register(this.plugin, Command.builder().addParameter(worldKeyParameter).permission(this.plugin.metadata().id() + ".command.world.load").executor(context -> {
final ResourceKey key = context.requireOne(worldKeyParameter);
this.game.server().worldManager().loadWorld(key).whenComplete((r, t) -> {
if (t != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text(t.getMessage()));
} else {
if (r != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World loaded successfully!"));
} else {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World failed to load!"));
}
}
});
return CommandResult.success();
}).build(), "lw", "loadworld").register(this.plugin, Command.builder().addParameters(worldKeyParameter, worldTypeParameter).permission(this.plugin.metadata().id() + ".command.world.create").executor(context -> {
final ResourceKey key = context.requireOne(worldKeyParameter);
final ResourceKey worldType = RegistryTypes.WORLD_TYPE.get().valueKey(context.requireOne(worldTypeParameter));
final WorldTemplate template = WorldTemplate.builder().from(WorldTemplate.overworld()).key(key).worldType(RegistryKey.of(RegistryTypes.WORLD_TYPE, worldType).asReference()).performsSpawnLogic(true).build();
this.game.server().worldManager().loadWorld(template).whenComplete((r, t) -> {
if (t != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text(t.getMessage()));
} else {
if (r != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World created successfully!"));
} else {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World failed to create!"));
}
}
});
return CommandResult.success();
}).build(), "cw", "createworld").register(this.plugin, Command.builder().addParameter(CommonParameters.WORLD).executor(context -> {
final ServerWorld world = context.requireOne(CommonParameters.WORLD);
this.game.server().worldManager().unloadWorld(world).whenComplete((r, t) -> {
if (t != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text(t.getMessage()));
} else {
if (r) {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World unloaded successfully!"));
} else {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World failed to unload!"));
}
}
});
return CommandResult.success();
}).build(), "uw", "unloadworld").register(this.plugin, Command.builder().addParameters(worldKeyParameter, copyWorldKeyParameter).executor(context -> {
final ResourceKey key = context.requireOne(worldKeyParameter);
final ResourceKey copyWorldKey = context.requireOne(copyWorldKeyParameter);
this.game.server().worldManager().copyWorld(key, copyWorldKey).whenComplete((r, t) -> {
if (t != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text(t.getMessage()));
} else {
if (r) {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World copied successfully!"));
} else {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World failed to copy!"));
}
}
});
return CommandResult.success();
}).build(), "cpw", "copyworld").register(this.plugin, Command.builder().addParameters(worldKeyParameter, moveWorldKeyParameter).executor(context -> {
final ResourceKey key = context.requireOne(worldKeyParameter);
final ResourceKey moveWorldKey = context.requireOne(moveWorldKeyParameter);
this.game.server().worldManager().moveWorld(key, moveWorldKey).whenComplete((r, t) -> {
if (t != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text(t.getMessage()));
} else {
if (r) {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World moved successfully!"));
} else {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World failed to move!"));
}
}
});
return CommandResult.success();
}).build(), "mw", "moveworld").register(this.plugin, Command.builder().addParameters(worldKeyParameter).executor(context -> {
final ResourceKey key = context.requireOne(worldKeyParameter);
this.game.server().worldManager().deleteWorld(key).whenComplete((r, t) -> {
if (t != null) {
context.cause().audience().sendMessage(Identity.nil(), Component.text(t.getMessage()));
} else {
if (r) {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World deleted successfully!"));
} else {
context.cause().audience().sendMessage(Identity.nil(), Component.text("World failed to delete!"));
}
}
});
return CommandResult.success();
}).build(), "dw", "deleteworld").register(this.plugin, Command.builder().addParameter(optPlayerParameter).executor(context -> {
final ServerPlayer player = context.one(optPlayerParameter).orElse(this.getSourcePlayer(context));
player.sendMessage(Identity.nil(), Component.text("You are in World ").append(player.world().properties().displayName().orElseGet(() -> Component.text(player.world().key().toString(), NamedTextColor.AQUA))).append(Component.text(" at (" + player.position().floorX() + ", " + player.position().floorY() + ", " + player.position().floorZ() + ")")));
return CommandResult.success();
}).build(), "wai", "whereami").register(this.plugin, Command.builder().executor(this::createRandomCheckerboardWorld).build(), "createrandomworld", "crw");
}
use of org.spongepowered.api.world.server.ServerLocation in project SpongeCommon by SpongePowered.
the class RayTraceTest method registerCommands.
@Listener
public void registerCommands(final RegisterCommandEvent<Command.Parameterized> event) {
final Parameter.Value<ServerLocation> serverLocationParameter = Parameter.builder(ServerLocation.class).key("target_location").addParser(ResourceKeyedValueParameters.TARGET_BLOCK).build();
final Parameter.Value<Entity> entityParameter = Parameter.builder(Entity.class).key("target_entity").addParser(ResourceKeyedValueParameters.TARGET_ENTITY).build();
event.register(this.pluginContainer, Command.builder().addParameter(serverLocationParameter).executor(context -> {
final ServerLocation serverLocation = context.requireOne(serverLocationParameter);
context.sendMessage(Identity.nil(), Component.text("Location: " + serverLocation.toString()));
context.sendMessage(Identity.nil(), Component.text("Block: " + serverLocation.block().toString()));
return CommandResult.success();
}).build(), "targetblock");
event.register(this.pluginContainer, Command.builder().addParameter(entityParameter).executor(context -> {
final Entity entity = context.requireOne(entityParameter);
context.sendMessage(Identity.nil(), Component.text("Location: " + entity.location().toString()));
context.sendMessage(Identity.nil(), Component.text("Entity Type: " + RegistryTypes.ENTITY_TYPE.keyFor(entity.world(), entity.type()).asString()));
return CommandResult.success();
}).build(), "targetentity");
}
Aggregations