fix: op command allow multiple targets
This commit is contained in:
parent
c022914dbf
commit
daf3b29bb2
@ -14,7 +14,7 @@ use CommandError::InvalidConsumption;
|
||||
|
||||
const NAMES: [&str; 1] = ["op"];
|
||||
const DESCRIPTION: &str = "Grants operator status to a player.";
|
||||
const ARG_TARGET: &str = "player";
|
||||
const ARG_TARGETS: &str = "targets";
|
||||
|
||||
struct OpExecutor;
|
||||
|
||||
@ -28,59 +28,58 @@ impl CommandExecutor for OpExecutor {
|
||||
) -> Result<(), CommandError> {
|
||||
let mut config = OPERATOR_CONFIG.write().await;
|
||||
|
||||
let Some(Arg::Players(targets)) = args.get(&ARG_TARGET) else {
|
||||
return Err(InvalidConsumption(Some(ARG_TARGET.into())));
|
||||
let Some(Arg::Players(targets)) = args.get(&ARG_TARGETS) else {
|
||||
return Err(InvalidConsumption(Some(ARG_TARGETS.into())));
|
||||
};
|
||||
|
||||
// from the command tree, the command can only be executed with one player
|
||||
let player = &targets[0];
|
||||
for player in targets {
|
||||
let new_level = BASIC_CONFIG
|
||||
.op_permission_level
|
||||
.min(sender.permission_lvl());
|
||||
|
||||
let new_level = BASIC_CONFIG
|
||||
.op_permission_level
|
||||
.min(sender.permission_lvl());
|
||||
if player.permission_lvl.load() == new_level {
|
||||
sender
|
||||
.send_message(TextComponent::translate("commands.op.failed", []))
|
||||
.await;
|
||||
continue;
|
||||
}
|
||||
|
||||
if player.permission_lvl.load() == new_level {
|
||||
sender
|
||||
.send_message(TextComponent::translate("commands.op.failed", []))
|
||||
if let Some(op) = config
|
||||
.ops
|
||||
.iter_mut()
|
||||
.find(|o| o.uuid == player.gameprofile.id)
|
||||
{
|
||||
op.level = new_level;
|
||||
} else {
|
||||
let op_entry = Op::new(
|
||||
player.gameprofile.id,
|
||||
player.gameprofile.name.clone(),
|
||||
new_level,
|
||||
false,
|
||||
);
|
||||
config.ops.push(op_entry);
|
||||
}
|
||||
|
||||
config.save();
|
||||
|
||||
player
|
||||
.set_permission_lvl(new_level, &server.command_dispatcher)
|
||||
.await;
|
||||
|
||||
let player_name = &player.gameprofile.name;
|
||||
sender
|
||||
.send_message(TextComponent::translate(
|
||||
"commands.op.success",
|
||||
[player_name.clone().into()],
|
||||
))
|
||||
.await;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if let Some(op) = config
|
||||
.ops
|
||||
.iter_mut()
|
||||
.find(|o| o.uuid == player.gameprofile.id)
|
||||
{
|
||||
op.level = new_level;
|
||||
} else {
|
||||
let op_entry = Op::new(
|
||||
player.gameprofile.id,
|
||||
player.gameprofile.name.clone(),
|
||||
new_level,
|
||||
false,
|
||||
);
|
||||
config.ops.push(op_entry);
|
||||
}
|
||||
|
||||
config.save();
|
||||
|
||||
player
|
||||
.set_permission_lvl(new_level, &server.command_dispatcher)
|
||||
.await;
|
||||
|
||||
let player_name = &player.gameprofile.name;
|
||||
sender
|
||||
.send_message(TextComponent::translate(
|
||||
"commands.op.success",
|
||||
[player_name.clone().into()],
|
||||
))
|
||||
.await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn init_command_tree() -> CommandTree {
|
||||
CommandTree::new(NAMES, DESCRIPTION)
|
||||
.with_child(argument(ARG_TARGET, PlayersArgumentConsumer).execute(OpExecutor))
|
||||
.with_child(argument(ARG_TARGETS, PlayersArgumentConsumer).execute(OpExecutor))
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user