2022-04-27 15:39:23 +08:00
|
|
|
package emu.grasscutter.command.commands;
|
|
|
|
|
2022-05-03 14:23:25 +08:00
|
|
|
import emu.grasscutter.Grasscutter;
|
2022-04-27 15:39:23 +08:00
|
|
|
import emu.grasscutter.command.Command;
|
|
|
|
import emu.grasscutter.command.CommandHandler;
|
|
|
|
import emu.grasscutter.game.player.Player;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
2022-05-07 06:50:18 +08:00
|
|
|
import static emu.grasscutter.utils.Language.translate;
|
|
|
|
|
2022-05-29 11:11:27 +08:00
|
|
|
@Command(label = "coop", usage = "coop [host uid]", permission = "server.coop", permissionTargeted = "server.coop.others", description = "commands.coop.description")
|
2022-04-29 10:21:30 +08:00
|
|
|
public final class CoopCommand implements CommandHandler {
|
2022-05-08 10:33:53 +08:00
|
|
|
|
2022-04-27 15:39:23 +08:00
|
|
|
@Override
|
2022-05-04 14:32:09 +08:00
|
|
|
public void execute(Player sender, Player targetPlayer, List<String> args) {
|
2022-05-04 17:16:42 +08:00
|
|
|
Player host = sender;
|
|
|
|
switch (args.size()) {
|
|
|
|
case 0: // Summon target to self
|
2022-05-10 20:33:45 +08:00
|
|
|
CommandHandler.sendMessage(sender, translate(sender, "commands.coop.usage"));
|
2022-05-07 06:50:18 +08:00
|
|
|
if (sender == null) // Console doesn't have a self to summon to
|
2022-05-05 13:03:08 +08:00
|
|
|
return;
|
2022-05-04 17:16:42 +08:00
|
|
|
break;
|
|
|
|
case 1: // Summon target to argument
|
|
|
|
try {
|
2022-05-05 13:03:08 +08:00
|
|
|
int hostId = Integer.parseInt(args.get(0));
|
|
|
|
host = Grasscutter.getGameServer().getPlayerByUid(hostId);
|
2022-05-04 17:16:42 +08:00
|
|
|
if (host == null) {
|
2022-05-10 20:33:45 +08:00
|
|
|
CommandHandler.sendMessage(sender, translate(sender, "commands.execution.player_offline_error"));
|
2022-05-04 17:16:42 +08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
break;
|
2022-05-05 13:03:08 +08:00
|
|
|
} catch (NumberFormatException ignored) {
|
2022-06-22 21:50:16 +08:00
|
|
|
CommandHandler.sendMessage(sender, translate(sender, "commands.generic.invalid.uid"));
|
2022-05-04 17:16:42 +08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
default:
|
2022-05-10 20:33:45 +08:00
|
|
|
CommandHandler.sendMessage(sender, translate(sender, "commands.coop.usage"));
|
2022-05-04 17:16:42 +08:00
|
|
|
return;
|
2022-04-27 15:39:23 +08:00
|
|
|
}
|
2022-04-29 10:21:30 +08:00
|
|
|
|
2022-05-05 13:03:08 +08:00
|
|
|
// There's no target==host check but this just places them in multiplayer in their own world which seems fine.
|
2022-05-04 17:16:42 +08:00
|
|
|
if (targetPlayer.isInMultiplayer()) {
|
2022-05-05 13:03:08 +08:00
|
|
|
targetPlayer.getServer().getMultiplayerManager().leaveCoop(targetPlayer);
|
2022-04-27 15:39:23 +08:00
|
|
|
}
|
2022-05-05 13:03:08 +08:00
|
|
|
host.getServer().getMultiplayerManager().applyEnterMp(targetPlayer, host.getUid());
|
|
|
|
targetPlayer.getServer().getMultiplayerManager().applyEnterMpReply(host, targetPlayer.getUid(), true);
|
2022-05-10 20:33:45 +08:00
|
|
|
CommandHandler.sendMessage(sender, translate(sender, "commands.coop.success", targetPlayer.getNickname(), host.getNickname()));
|
2022-04-27 15:39:23 +08:00
|
|
|
}
|
|
|
|
}
|