Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions src/main/java/com/indra87g/commands/BaseCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.indra87g.commands;

import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.Player;

public abstract class BaseCommand extends Command {

public BaseCommand(String name, String description, String usage, String permission) {
super(name);
this.setDescription(description);
this.setUsage(usage);
this.setPermission(permission);
}

@Override
public boolean execute(CommandSender sender, String label, String[] args) {
if (!this.testPermission(sender)) {
sender.sendMessage("You do not have permission to use this command.");
return false;
}

if (!(sender instanceof Player)) {
sender.sendMessage("This command can only be used by a player.");
return false;
}

Player player = (Player) sender;

if (!validateArgs(args, player)) {
// The validateArgs method is responsible for sending the usage message.
return false;
}

try {
return handleCommand(player, args);
} catch (Exception e) {
sender.sendMessage("An unexpected error occurred while executing the command.");
e.printStackTrace();
return false;
}
}

protected boolean validateArgs(String[] args, Player player) {
return true;
}

protected abstract boolean handleCommand(Player player, String[] args);
}
15 changes: 3 additions & 12 deletions src/main/java/com/indra87g/commands/ServersCommand.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.indra87g.commands;

import cn.nukkit.Player;
import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.event.EventHandler;
import cn.nukkit.event.Listener;
import cn.nukkit.event.player.PlayerFormRespondedEvent;
Expand All @@ -17,25 +15,18 @@
import java.util.Map;
import java.util.UUID;

public class ServersCommand extends Command implements Listener {
public class ServersCommand extends BaseCommand implements Listener {

private final Main plugin;
private final Map<UUID, Integer> formIDs = new HashMap<>();

public ServersCommand(Main plugin) {
super("servers", "Display a list of servers to connect to.", "/servers");
super("servers", "Display a list of servers to connect to.", "/servers", "waffle.servers");
this.plugin = plugin;
}

@Override
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("This command can only be used by a player.");
return false;
}

Player player = (Player) sender;

public boolean handleCommand(Player player, String[] args) {
List<Map> servers = plugin.getServers();
if (servers == null || servers.isEmpty()) {
player.sendMessage("There are no servers available at the moment. Please try again later.");
Expand Down
22 changes: 9 additions & 13 deletions src/main/java/com/indra87g/commands/SetBlockCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,27 @@

import cn.nukkit.Player;
import cn.nukkit.block.Block;
import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.level.Level;
import cn.nukkit.math.Vector3;

public class SetBlockCommand extends Command {
public class SetBlockCommand extends BaseCommand {

public SetBlockCommand() {
super("setblock", "Sets a block at a specific location", "/setblock <x> <y> <z> <block_id>");
super("setblock", "Sets a block at a specific location", "/setblock <x> <y> <z> <block_id>", "waffle.setblock");
}

@Override
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("This command can only be used by a player.");
return false;
}

Player player = (Player) sender;
Level level = player.getLevel();

protected boolean validateArgs(String[] args, Player player) {
if (args.length != 4) {
player.sendMessage("§cUsage: " + this.getUsage());
return false;
}
return true;
}

@Override
public boolean handleCommand(Player player, String[] args) {
Level level = player.getLevel();

try {
int x = Integer.parseInt(args[0]);
Expand Down
9 changes: 0 additions & 9 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,6 @@ version: 0.1.0
api: 1.0.0
author: indra87g
description: Core plugin for the WaffleNK ecosystem.
commands:
setblock:
description: "Sets a block at a specific location"
usage: "/setblock <x> <y> <z> <block_id>"
permission: waffle.setblock
servers:
description: "Shows a list of servers"
usage: "/servers"
permission: waffle.servers
permissions:
waffle.setblock:
description: "Allows the user to use the /setblock command"
Expand Down