Grasscutter/src/main/java/emu/grasscutter/command/commands/CoopCommand.java

55 lines
2.4 KiB
Java
Raw Normal View History

2022-04-27 15:39:23 +08:00
package emu.grasscutter.command.commands;
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-04 17:16:42 +08:00
@Command(label = "coop", usage = "coop [host UID]",
2022-04-27 15:39:23 +08:00
description = "Forces someone to join the world of others", permission = "server.coop")
2022-04-29 10:21:30 +08:00
public final class CoopCommand implements CommandHandler {
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
if (targetPlayer == null) {
CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Target_needed);
return;
}
Player host = sender;
switch (args.size()) {
case 0: // Summon target to self
2022-05-05 13:03:08 +08:00
if (sender == null) { // Console doesn't have a self to summon to
CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Coop_usage);
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) {
CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Player_is_offline);
return;
}
break;
2022-05-05 13:03:08 +08:00
} catch (NumberFormatException ignored) {
2022-05-04 17:16:42 +08:00
CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Invalid_playerId);
return;
}
default:
CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Coop_usage);
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-04 17:16:42 +08:00
CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Coop_success.replace("{host}", host.getNickname()).replace("{target}", targetPlayer.getNickname()));
2022-04-27 15:39:23 +08:00
}
}