508 lines
17 KiB
Rust
508 lines
17 KiB
Rust
use pumpkin_config::BasicConfiguration;
|
|
use pumpkin_util::{
|
|
PermissionLvl,
|
|
permission::{Permission, PermissionDefault, PermissionRegistry},
|
|
};
|
|
|
|
use crate::PERMISSION_REGISTRY;
|
|
|
|
use super::dispatcher::CommandDispatcher;
|
|
|
|
mod ban;
|
|
mod banip;
|
|
mod banlist;
|
|
mod bossbar;
|
|
mod clear;
|
|
mod damage;
|
|
mod data;
|
|
pub mod defaultgamemode;
|
|
mod deop;
|
|
mod difficulty;
|
|
mod effect;
|
|
mod enchant;
|
|
mod experience;
|
|
mod fill;
|
|
mod gamemode;
|
|
mod gamerule;
|
|
mod give;
|
|
mod help;
|
|
mod kick;
|
|
mod kill;
|
|
mod list;
|
|
mod me;
|
|
mod msg;
|
|
mod op;
|
|
mod pardon;
|
|
mod pardonip;
|
|
mod particle;
|
|
mod playsound;
|
|
mod plugin;
|
|
mod plugins;
|
|
mod pumpkin;
|
|
mod say;
|
|
mod seed;
|
|
mod setblock;
|
|
mod setworldspawn;
|
|
mod stop;
|
|
mod stopsound;
|
|
mod summon;
|
|
mod teleport;
|
|
mod tellraw;
|
|
mod tick;
|
|
mod time;
|
|
mod title;
|
|
mod transfer;
|
|
mod weather;
|
|
mod whitelist;
|
|
mod worldborder;
|
|
|
|
#[must_use]
|
|
pub async fn default_dispatcher(basic_config: &BasicConfiguration) -> CommandDispatcher {
|
|
let mut dispatcher = CommandDispatcher::default();
|
|
|
|
register_permissions().await;
|
|
|
|
// Zero
|
|
dispatcher.register(pumpkin::init_command_tree(), "pumpkin:command.pumpkin");
|
|
dispatcher.register(help::init_command_tree(), "minecraft:command.help");
|
|
dispatcher.register(list::init_command_tree(), "minecraft:command.list");
|
|
dispatcher.register(me::init_command_tree(), "minecraft:command.me");
|
|
dispatcher.register(msg::init_command_tree(), "minecraft:command.msg");
|
|
// Two
|
|
dispatcher.register(kill::init_command_tree(), "minecraft:command.kill");
|
|
dispatcher.register(
|
|
worldborder::init_command_tree(),
|
|
"minecraft:command.worldborder",
|
|
);
|
|
dispatcher.register(effect::init_command_tree(), "minecraft:command.effect");
|
|
dispatcher.register(teleport::init_command_tree(), "minecraft:command.teleport");
|
|
dispatcher.register(time::init_command_tree(), "minecraft:command.time");
|
|
dispatcher.register(
|
|
tick::init_command_tree(basic_config.tps),
|
|
"minecraft:command.tick",
|
|
);
|
|
dispatcher.register(give::init_command_tree(), "minecraft:command.give");
|
|
dispatcher.register(enchant::init_command_tree(), "minecraft:command.enchant");
|
|
dispatcher.register(clear::init_command_tree(), "minecraft:command.clear");
|
|
dispatcher.register(setblock::init_command_tree(), "minecraft:command.setblock");
|
|
dispatcher.register(seed::init_command_tree(), "minecraft:command.seed");
|
|
dispatcher.register(fill::init_command_tree(), "minecraft:command.fill");
|
|
dispatcher.register(
|
|
playsound::init_command_tree(),
|
|
"minecraft:command.playsound",
|
|
);
|
|
dispatcher.register(tellraw::init_command_tree(), "minecraft:command.tellraw");
|
|
dispatcher.register(title::init_command_tree(), "minecraft:command.title");
|
|
dispatcher.register(summon::init_command_tree(), "minecraft:command.summon");
|
|
dispatcher.register(
|
|
experience::init_command_tree(),
|
|
"minecraft:command.experience",
|
|
);
|
|
dispatcher.register(weather::init_command_tree(), "minecraft:command.weather");
|
|
dispatcher.register(particle::init_command_tree(), "minecraft:command.particle");
|
|
dispatcher.register(damage::init_command_tree(), "minecraft:command.damage");
|
|
dispatcher.register(bossbar::init_command_tree(), "minecraft:command.bossbar");
|
|
dispatcher.register(say::init_command_tree(), "minecraft:command.say");
|
|
dispatcher.register(gamemode::init_command_tree(), "minecraft:command.gamemode");
|
|
dispatcher.register(gamerule::init_command_tree(), "minecraft:command.gamerule");
|
|
dispatcher.register(
|
|
difficulty::init_command_tree(),
|
|
"minecraft:command.difficulty",
|
|
);
|
|
dispatcher.register(
|
|
stopsound::init_command_tree(),
|
|
"minecraft:command.stopsound",
|
|
);
|
|
dispatcher.register(
|
|
defaultgamemode::init_command_tree(),
|
|
"minecraft:command.defaultgamemode",
|
|
);
|
|
dispatcher.register(
|
|
setworldspawn::init_command_tree(),
|
|
"minecraft:command.setworldspawn",
|
|
);
|
|
dispatcher.register(data::init_command_tree(), "minecraft:command.data");
|
|
// Three
|
|
dispatcher.register(op::init_command_tree(), "minecraft:command.op");
|
|
dispatcher.register(deop::init_command_tree(), "minecraft:command.deop");
|
|
dispatcher.register(kick::init_command_tree(), "minecraft:command.kick");
|
|
dispatcher.register(plugin::init_command_tree(), "pumpkin:command.plugin");
|
|
dispatcher.register(plugins::init_command_tree(), "pumpkin:command.plugins");
|
|
dispatcher.register(ban::init_command_tree(), "minecraft:command.ban");
|
|
dispatcher.register(banip::init_command_tree(), "minecraft:command.banip");
|
|
dispatcher.register(banlist::init_command_tree(), "minecraft:command.banlist");
|
|
dispatcher.register(pardon::init_command_tree(), "minecraft:command.pardon");
|
|
dispatcher.register(pardonip::init_command_tree(), "minecraft:command.pardonip");
|
|
dispatcher.register(
|
|
whitelist::init_command_tree(),
|
|
"minecraft:command.whitelist",
|
|
);
|
|
dispatcher.register(transfer::init_command_tree(), "minecraft:command.transfer");
|
|
// Four
|
|
dispatcher.register(stop::init_command_tree(), "minecraft:command.stop");
|
|
|
|
dispatcher
|
|
}
|
|
|
|
async fn register_permissions() {
|
|
let mut registry = PERMISSION_REGISTRY.write().await;
|
|
|
|
// Register level 0 permissions (allowed by default)
|
|
register_level_0_permissions(&mut registry);
|
|
|
|
// Register level 2 permissions (OP level 2)
|
|
register_level_2_permissions(&mut registry);
|
|
|
|
// Register level 3 permissions (OP level 3)
|
|
register_level_3_permissions(&mut registry);
|
|
|
|
// Register level 4 permissions (OP level 4)
|
|
register_level_4_permissions(&mut registry);
|
|
}
|
|
|
|
fn register_level_0_permissions(registry: &mut PermissionRegistry) {
|
|
// Register permissions for builtin commands that are allowed for everyone
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"pumpkin:command.pumpkin",
|
|
"Shows information about the Pumpkin server",
|
|
PermissionDefault::Allow,
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.help",
|
|
"Lists available commands and their usage",
|
|
PermissionDefault::Allow,
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.list",
|
|
"Lists players that are currently online",
|
|
PermissionDefault::Allow,
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.me",
|
|
"Broadcasts a narrative message about the player",
|
|
PermissionDefault::Allow,
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.msg",
|
|
"Sends a private message to another player",
|
|
PermissionDefault::Allow,
|
|
))
|
|
.unwrap();
|
|
}
|
|
|
|
#[allow(clippy::too_many_lines)]
|
|
fn register_level_2_permissions(registry: &mut PermissionRegistry) {
|
|
// Register permissions for commands with PermissionLvl::Two
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.kill",
|
|
"Kills entities (players, mobs, items, etc.)",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.worldborder",
|
|
"Manages the world border",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.effect",
|
|
"Adds or removes status effects",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.teleport",
|
|
"Teleports entities to other locations",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.time",
|
|
"Changes or queries the world's game time",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.give",
|
|
"Gives an item to a player",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.clear",
|
|
"Clears items from player inventory",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.setblock",
|
|
"Changes a block to another block",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.seed",
|
|
"Displays the world seed",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.fill",
|
|
"Fills a region with a specific block",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.playsound",
|
|
"Plays a sound to players",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.tellraw",
|
|
"Displays a JSON message to players",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.title",
|
|
"Controls screen titles displayed to players",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.summon",
|
|
"Summons an entity",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.experience",
|
|
"Adds, removes or queries player experience",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.weather",
|
|
"Sets the weather in the server",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.particle",
|
|
"Creates particles in the world",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.damage",
|
|
"Damages entities",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.bossbar",
|
|
"Creates and manages boss bars",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.say",
|
|
"Broadcasts a message to multiple players",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.gamemode",
|
|
"Sets a player's game mode",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.gamerule",
|
|
"Sets a player's game mode",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.stopsound",
|
|
"Stops sounds from playing",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.defaultgamemode",
|
|
"Sets the default game mode for new players",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.difficulty",
|
|
"Sets the difficulty of the world",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.data",
|
|
"Query and modify data of entities and blocks",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.enchant",
|
|
"Adds an enchantment to a player's selected item, subject to the same restrictions as an anvil. Also works on any mob or entity holding a weapon/tool/armor in its main hand.",
|
|
PermissionDefault::Op(PermissionLvl::Two),
|
|
))
|
|
.unwrap();
|
|
}
|
|
|
|
fn register_level_3_permissions(registry: &mut PermissionRegistry) {
|
|
// Register permissions for commands with PermissionLvl::Three
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.setworldspawn",
|
|
"Sets the world spawn point",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.op",
|
|
"Grants operator status to a player",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.deop",
|
|
"Revokes operator status from a player",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.kick",
|
|
"Removes players from the server",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"pumpkin:command.plugin",
|
|
"Manages server plugins",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"pumpkin:command.plugins",
|
|
"Lists all plugins loaded on the server",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.ban",
|
|
"Adds players to banlist",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.banip",
|
|
"Adds IP addresses to banlist",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.banlist",
|
|
"Displays banned players or IP addresses",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.pardon",
|
|
"Removes entries from the player banlist",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.pardonip",
|
|
"Removes entries from the IP banlist",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.whitelist",
|
|
"Manages server whitelist",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.tick",
|
|
"Triggers the tick event",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.transfer",
|
|
"Transfers the player to another server",
|
|
PermissionDefault::Op(PermissionLvl::Three),
|
|
))
|
|
.unwrap();
|
|
}
|
|
|
|
fn register_level_4_permissions(registry: &mut PermissionRegistry) {
|
|
// Register permissions for commands with PermissionLvl::Four
|
|
registry
|
|
.register_permission(Permission::new(
|
|
"minecraft:command.stop",
|
|
"Stops the server",
|
|
PermissionDefault::Op(PermissionLvl::Four),
|
|
))
|
|
.unwrap();
|
|
}
|