Untitled
unknown
plain_text
2 months ago
2.0 kB
9
Indexable
package pl.chunklock.core.command.impl.argument;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Chunk;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import studio.mevera.imperat.BukkitCommandSource;
import studio.mevera.imperat.command.arguments.type.ArgumentType;
import studio.mevera.imperat.context.CommandContext;
import studio.mevera.imperat.exception.CommandException;
import studio.mevera.imperat.providers.SuggestionProvider;
public class ChunkArgumentType extends ArgumentType<BukkitCommandSource, Chunk> {
@Override
public Chunk parse(@NotNull CommandContext<BukkitCommandSource> context,
@NotNull String input) throws CommandException {
final BukkitCommandSource source = context.source();
if (source.isConsole()) {
throw new CommandException("Only players can specify relative chunks.");
}
final Player player = source.asPlayer();
if (input.equalsIgnoreCase("~") || input.equalsIgnoreCase("here")) {
return player.getLocation().getChunk();
}
final String[] parts = input.split(",");
if (parts.length != 2) {
throw new CommandException("Invalid chunk format. Use x,z or ~");
}
try {
final int x = Integer.parseInt(parts[0]);
final int z = Integer.parseInt(parts[1]);
return player.getWorld().getChunkAt(x, z);
} catch (final NumberFormatException e) {
throw new CommandException("Chunk coordinates must be integers.");
}
}
@Override
public SuggestionProvider<BukkitCommandSource> getSuggestionProvider() {
return (ctx, arg) -> {
final BukkitCommandSource source = ctx.source();
final List<String> suggestions = new ArrayList<>();
suggestions.add("~");
final Player player = source.asPlayer();
final Chunk chunk = player.getLocation().getChunk();
suggestions.add(chunk.getX() + "," + chunk.getZ());
return suggestions;
};
}
}
Editor is loading...
Leave a Comment