mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-13 05:44:36 +01:00
Add optional arguments all and lineup to /avatar
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
package emu.lunarcore.command.commands;
|
package emu.lunarcore.command.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import emu.lunarcore.command.Command;
|
import emu.lunarcore.command.Command;
|
||||||
import emu.lunarcore.command.CommandArgs;
|
import emu.lunarcore.command.CommandArgs;
|
||||||
import emu.lunarcore.command.CommandHandler;
|
import emu.lunarcore.command.CommandHandler;
|
||||||
@@ -7,7 +11,7 @@ import emu.lunarcore.game.avatar.GameAvatar;
|
|||||||
import emu.lunarcore.game.player.Player;
|
import emu.lunarcore.game.player.Player;
|
||||||
import emu.lunarcore.server.packet.send.PacketPlayerSyncScNotify;
|
import emu.lunarcore.server.packet.send.PacketPlayerSyncScNotify;
|
||||||
|
|
||||||
@Command(label = "avatar", aliases = {"a"}, permission = "player.avatar", desc = "/avatar lv(level) p(ascension) r(eidolon) s(skill levels). Sets the current avatar's properties")
|
@Command(label = "avatar", aliases = {"a"}, permission = "player.avatar", desc = "/avatar {cur | all | lineup} lv(level) p(ascension) r(eidolon) s(skill levels). Sets the current avatar's properties")
|
||||||
public class AvatarCommand implements CommandHandler {
|
public class AvatarCommand implements CommandHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -18,25 +22,45 @@ public class AvatarCommand implements CommandHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get current leader avatar
|
// Temp avatar list
|
||||||
GameAvatar avatar = args.getTarget().getCurrentLeaderAvatar();
|
List<GameAvatar> changeList = new ArrayList<>();
|
||||||
if (avatar == null) {
|
|
||||||
// No leader!
|
// Handle optional arguments
|
||||||
return;
|
switch (args.get(0).toLowerCase()) {
|
||||||
|
case "all":
|
||||||
|
args.getTarget().getAvatars().forEach(changeList::add);
|
||||||
|
break;
|
||||||
|
case "lineup":
|
||||||
|
args.getTarget().getCurrentLineup().forEachAvatar(changeList::add);
|
||||||
|
break;
|
||||||
|
case "cur":
|
||||||
|
default:
|
||||||
|
changeList.add(args.getTarget().getCurrentLeaderAvatar());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change properties
|
// Try to set properties of avatars
|
||||||
if (args.setProperties(avatar)) {
|
Iterator<GameAvatar> it = changeList.iterator();
|
||||||
// Save avatar
|
while (it.hasNext()) {
|
||||||
avatar.save();
|
GameAvatar avatar = it.next();
|
||||||
|
|
||||||
|
if (args.setProperties(avatar)) {
|
||||||
|
// Save avatar
|
||||||
|
avatar.save();
|
||||||
|
} else {
|
||||||
|
// Remove from list if nothing was changed
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (changeList.size() > 0) {
|
||||||
// Send packet
|
// Send packet
|
||||||
args.getTarget().sendPacket(new PacketPlayerSyncScNotify(avatar));
|
args.getTarget().sendPacket(new PacketPlayerSyncScNotify(changeList.toArray(GameAvatar[]::new)));
|
||||||
|
|
||||||
// Send message
|
// Send message
|
||||||
sender.sendMessage("Set avatar properties successfully");
|
this.sendMessage(sender, "Set avatar(s) properties successfully");
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("No avatar properties to change");
|
this.sendMessage(sender, "No avatar properties to change");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,24 @@ public class PacketPlayerSyncScNotify extends BasePacket {
|
|||||||
|
|
||||||
this.setData(data);
|
this.setData(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PacketPlayerSyncScNotify(GameAvatar... avatars) { // Ugly workaround
|
||||||
|
this();
|
||||||
|
|
||||||
|
var data = PlayerSyncScNotify.newInstance();
|
||||||
|
|
||||||
|
for (var avatar : avatars) {
|
||||||
|
// Sync avatar
|
||||||
|
data.getMutableAvatarSync().addAvatarList(avatar.toProto());
|
||||||
|
|
||||||
|
// Also update hero basic type info if were updating the main character
|
||||||
|
if (avatar.getHeroPath() != null) {
|
||||||
|
data.getMutableBasicTypeInfoList().add(avatar.getHeroPath().toProto());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setData(data);
|
||||||
|
}
|
||||||
|
|
||||||
public PacketPlayerSyncScNotify(Collection<GameItem> items) {
|
public PacketPlayerSyncScNotify(Collection<GameItem> items) {
|
||||||
this();
|
this();
|
||||||
|
|||||||
Reference in New Issue
Block a user