mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-02 14:38:26 +01:00
Change dimension command to teleport to any different instance
This commit is contained in:
parent
16fbc5ea2c
commit
d6dd81b35f
@ -1,53 +1,30 @@
|
|||||||
package demo.commands;
|
package demo.commands;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.minestom.server.MinecraftServer;
|
import net.minestom.server.MinecraftServer;
|
||||||
import net.minestom.server.command.CommandSender;
|
|
||||||
import net.minestom.server.command.builder.Command;
|
import net.minestom.server.command.builder.Command;
|
||||||
import net.minestom.server.command.builder.CommandContext;
|
|
||||||
import net.minestom.server.command.builder.arguments.ArgumentType;
|
|
||||||
import net.minestom.server.command.builder.arguments.ArgumentWord;
|
|
||||||
import net.minestom.server.command.builder.condition.Conditions;
|
import net.minestom.server.command.builder.condition.Conditions;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.instance.Instance;
|
import net.minestom.server.instance.Instance;
|
||||||
import net.minestom.server.world.DimensionType;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class DimensionCommand extends Command {
|
public class DimensionCommand extends Command {
|
||||||
|
|
||||||
private final ArgumentWord dimension_type;
|
|
||||||
|
|
||||||
public DimensionCommand() {
|
public DimensionCommand() {
|
||||||
super("dimensiontest");
|
super("dimensiontest");
|
||||||
setCondition(Conditions::playerOnly);
|
setCondition(Conditions::playerOnly);
|
||||||
dimension_type = ArgumentType.Word("dimension type");
|
|
||||||
dimension_type.from(MinecraftServer.getDimensionTypeManager().unmodifiableList().stream().map(DimensionType::getName).map(Object::toString).toArray(String[]::new));
|
|
||||||
|
|
||||||
addSyntax(this::execute, dimension_type);
|
addSyntax((sender, context) -> {
|
||||||
}
|
final Player player = sender.asPlayer();
|
||||||
|
final Instance instance = player.getInstance();
|
||||||
private void execute(@NotNull CommandSender commandSender, @NotNull CommandContext commandContext) {
|
final var instances = MinecraftServer.getInstanceManager().getInstances().stream().filter(instance1 -> !instance1.equals(instance)).collect(Collectors.toList());
|
||||||
final Player player = commandSender.asPlayer();
|
if (instances.isEmpty()) {
|
||||||
final Instance instance = player.getInstance();
|
player.sendMessage("No instance available");
|
||||||
final String typeName = commandContext.get(dimension_type);
|
return;
|
||||||
final Optional<Instance> targetInstance = MinecraftServer.getInstanceManager().getInstances().stream().filter(in -> in.getDimensionType().toString().equals(typeName)).findFirst();
|
|
||||||
if (targetInstance.isPresent()) {
|
|
||||||
if (instance != null) {
|
|
||||||
if (targetInstance.get() != instance) {
|
|
||||||
player.sendMessage(Component.text("You were in " + instance.getDimensionType()));
|
|
||||||
player.setInstance(targetInstance.get());
|
|
||||||
player.sendMessage(Component.text("You are now in " + typeName));
|
|
||||||
} else {
|
|
||||||
player.sendMessage(Component.text("You are already in the instance"));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.setInstance(targetInstance.get());
|
|
||||||
player.sendMessage(Component.text("You did the impossible and you are now in " + typeName));
|
|
||||||
}
|
}
|
||||||
} else {
|
final var newInstance = instances.get(ThreadLocalRandom.current().nextInt(instances.size()));
|
||||||
player.sendMessage(Component.text("Could not find instance with dimension " + typeName));
|
player.setInstance(newInstance).thenRun(() -> player.sendMessage("Teleported"));
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user