mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
Merge branch 'development' into java-16
This commit is contained in:
@@ -46,7 +46,7 @@ public final class AccountCommand implements CommandHandler {
|
||||
CommandHandler.sendMessage(null, "Account already exists.");
|
||||
return;
|
||||
} else {
|
||||
CommandHandler.sendMessage(null, "Account created with UID " + account.getPlayerId() + ".");
|
||||
CommandHandler.sendMessage(null, "Account created with UID " + account.getPlayerUid() + ".");
|
||||
account.addPermission("*"); // Grant the player superuser permissions.
|
||||
account.save(); // Save account to database.
|
||||
}
|
||||
|
||||
@@ -23,11 +23,17 @@ public final class ChangeSceneCommand implements CommandHandler {
|
||||
|
||||
try {
|
||||
int sceneId = Integer.parseInt(args.get(0));
|
||||
|
||||
if (sceneId == sender.getSceneId()) {
|
||||
CommandHandler.sendMessage(sender, "You are already in that scene");
|
||||
return;
|
||||
}
|
||||
|
||||
boolean result = sender.getWorld().transferPlayerToScene(sender, sceneId, sender.getPos());
|
||||
|
||||
CommandHandler.sendMessage(sender, "Changed to scene " + sceneId);
|
||||
|
||||
if (!result) {
|
||||
CommandHandler.sendMessage(sender, "Scene does not exist or you are already in it");
|
||||
CommandHandler.sendMessage(sender, "Scene does not exist");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CommandHandler.sendMessage(sender, "Usage: changescene <scene id>");
|
||||
|
||||
@@ -95,18 +95,19 @@ public final class GiveCommand implements CommandHandler {
|
||||
}
|
||||
|
||||
private void item(GenshinPlayer player, ItemData itemData, int amount) {
|
||||
GenshinItem genshinItem = new GenshinItem(itemData);
|
||||
if (itemData.isEquip()) {
|
||||
List<GenshinItem> items = new LinkedList<>();
|
||||
for (int i = 0; i < amount; i++) {
|
||||
items.add(genshinItem);
|
||||
items.add(new GenshinItem(itemData));
|
||||
}
|
||||
player.getInventory().addItems(items);
|
||||
player.sendPacket(new PacketItemAddHintNotify(items, ActionReason.SubfieldDrop));
|
||||
} else {
|
||||
GenshinItem genshinItem = new GenshinItem(itemData);
|
||||
genshinItem.setCount(amount);
|
||||
player.getInventory().addItem(genshinItem);
|
||||
player.sendPacket(new PacketItemAddHintNotify(genshinItem, ActionReason.SubfieldDrop));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package emu.grasscutter.command.commands;
|
||||
|
||||
import emu.grasscutter.command.Command;
|
||||
import emu.grasscutter.command.CommandHandler;
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.game.props.FightProperty;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarFightPropUpdateNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarLifeStateChangeNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketLifeStateChangeNotify;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Command(label = "heal", usage = "heal|h",
|
||||
description = "Heal all characters in your current team.", aliases = {"h"}, permission = "player.heal")
|
||||
public class HealCommand implements CommandHandler {
|
||||
@Override
|
||||
public void execute(GenshinPlayer sender, List<String> args) {
|
||||
if (sender == null) {
|
||||
CommandHandler.sendMessage(null, "Run this command in-game.");
|
||||
return;
|
||||
}
|
||||
sender.getTeamManager().getActiveTeam().forEach(entity -> {
|
||||
boolean isAlive = entity.isAlive();
|
||||
entity.setFightProperty(
|
||||
FightProperty.FIGHT_PROP_CUR_HP,
|
||||
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP)
|
||||
);
|
||||
entity.getWorld().broadcastPacket(new PacketAvatarFightPropUpdateNotify(entity.getAvatar(), FightProperty.FIGHT_PROP_CUR_HP));
|
||||
if (!isAlive) {
|
||||
entity.getWorld().broadcastPacket(new PacketAvatarLifeStateChangeNotify(entity.getAvatar()));
|
||||
}
|
||||
});
|
||||
CommandHandler.sendMessage(sender, "All characters are healed.");
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ public final class KickCommand implements CommandHandler {
|
||||
}
|
||||
|
||||
if (sender != null) {
|
||||
CommandHandler.sendMessage(sender, String.format("Player [%s:%s] has kicked player [%s:%s]", sender.getAccount().getPlayerId(), sender.getAccount().getUsername(), target, targetPlayer.getAccount().getUsername()));
|
||||
CommandHandler.sendMessage(sender, String.format("Player [%s:%s] has kicked player [%s:%s]", sender.getAccount().getPlayerUid(), sender.getAccount().getUsername(), target, targetPlayer.getAccount().getUsername()));
|
||||
}
|
||||
CommandHandler.sendMessage(sender, String.format("Kicking player [%s:%s]", target, targetPlayer.getAccount().getUsername()));
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package emu.grasscutter.command.commands;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.command.Command;
|
||||
import emu.grasscutter.command.CommandHandler;
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Command(label = "list", description = "List online players")
|
||||
public class ListCommand implements CommandHandler {
|
||||
|
||||
@Override
|
||||
public void execute(GenshinPlayer sender, List<String> args) {
|
||||
Map<Integer, GenshinPlayer> playersMap = Grasscutter.getGameServer().getPlayers();
|
||||
|
||||
CommandHandler.sendMessage(sender, String.format("There are %s player(s) online:", playersMap.size()));
|
||||
|
||||
if (playersMap.size() != 0) {
|
||||
StringBuilder playerSet = new StringBuilder();
|
||||
|
||||
for (Map.Entry<Integer, GenshinPlayer> entry : playersMap.entrySet()) {
|
||||
playerSet.append(entry.getValue().getNickname());
|
||||
playerSet.append(", ");
|
||||
}
|
||||
|
||||
String players = playerSet.toString();
|
||||
|
||||
CommandHandler.sendMessage(sender, players.substring(0, players.length() - 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
|
||||
import java.util.List;
|
||||
|
||||
@Command(label = "setstats", usage = "setstats|stats <stat> <value>",
|
||||
aliases = {"stats"})
|
||||
description = "Set fight property for your current active character", aliases = {"stats"}, permission = "player.setstats")
|
||||
public final class SetStatsCommand implements CommandHandler {
|
||||
|
||||
@Override
|
||||
@@ -20,6 +20,11 @@ public final class SetStatsCommand implements CommandHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.size() < 2){
|
||||
CommandHandler.sendMessage(sender, "Usage: setstats|stats <stat> <value>");
|
||||
return;
|
||||
}
|
||||
|
||||
String stat = args.get(0);
|
||||
switch (stat) {
|
||||
default:
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
package emu.grasscutter.command.commands;
|
||||
|
||||
import emu.grasscutter.command.Command;
|
||||
import emu.grasscutter.command.CommandHandler;
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.game.avatar.GenshinAvatar;
|
||||
import emu.grasscutter.game.entity.EntityAvatar;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarSkillChangeNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarSkillUpgradeRsp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Command(label = "talent", usage = "talent <talentID> <value>",
|
||||
description = "Set talent level for your current active character", permission = "player.settalent")
|
||||
public class TalentCommand implements CommandHandler {
|
||||
|
||||
@Override
|
||||
public void execute(GenshinPlayer sender, List<String> args) {
|
||||
if (sender == null) {
|
||||
CommandHandler.sendMessage(null, "Run this command in-game.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.size() < 0 || args.size() < 1){
|
||||
CommandHandler.sendMessage(sender, "To set talent level: /talent set <talentID> <value>");
|
||||
CommandHandler.sendMessage(sender, "To get talent ID: /talent getid");
|
||||
return;
|
||||
}
|
||||
|
||||
String cmdSwitch = args.get(0);
|
||||
switch (cmdSwitch) {
|
||||
default:
|
||||
CommandHandler.sendMessage(sender, "To set talent level: /talent set <talentID> <value>");
|
||||
CommandHandler.sendMessage(sender, "To get talent ID: /talent getid");
|
||||
return;
|
||||
case "set":
|
||||
try {
|
||||
int skillId = Integer.parseInt(args.get(1));
|
||||
int nextLevel = Integer.parseInt(args.get(2));
|
||||
EntityAvatar entity = sender.getTeamManager().getCurrentAvatarEntity();
|
||||
GenshinAvatar avatar = entity.getAvatar();
|
||||
int skillIdNorAtk = avatar.getData().getSkillDepot().getSkills().get(0);
|
||||
int skillIdE = avatar.getData().getSkillDepot().getSkills().get(1);
|
||||
int skillIdQ = avatar.getData().getSkillDepot().getEnergySkill();
|
||||
int currentLevelNorAtk = avatar.getSkillLevelMap().get(skillIdNorAtk);
|
||||
int currentLevelE = avatar.getSkillLevelMap().get(skillIdE);
|
||||
int currentLevelQ = avatar.getSkillLevelMap().get(skillIdQ);
|
||||
if (args.size() < 2){
|
||||
CommandHandler.sendMessage(sender, "To set talent level: /talent set <talentID> <value>");
|
||||
CommandHandler.sendMessage(sender, "To get talent ID: /talent getid");
|
||||
return;
|
||||
}
|
||||
if (nextLevel > 16){
|
||||
CommandHandler.sendMessage(sender, "Invalid talent level. Level should be lower than 16");
|
||||
return;
|
||||
}
|
||||
if (skillId == skillIdNorAtk){
|
||||
// Upgrade skill
|
||||
avatar.getSkillLevelMap().put(skillIdNorAtk, nextLevel);
|
||||
avatar.save();
|
||||
|
||||
// Packet
|
||||
sender.sendPacket(new PacketAvatarSkillChangeNotify(avatar, skillIdNorAtk, currentLevelNorAtk, nextLevel));
|
||||
sender.sendPacket(new PacketAvatarSkillUpgradeRsp(avatar, skillIdNorAtk, currentLevelNorAtk, nextLevel));
|
||||
CommandHandler.sendMessage(sender, "Set talent Normal ATK to " + nextLevel + ".");
|
||||
}
|
||||
if (skillId == skillIdE){
|
||||
// Upgrade skill
|
||||
avatar.getSkillLevelMap().put(skillIdE, nextLevel);
|
||||
avatar.save();
|
||||
|
||||
// Packet
|
||||
sender.sendPacket(new PacketAvatarSkillChangeNotify(avatar, skillIdE, currentLevelE, nextLevel));
|
||||
sender.sendPacket(new PacketAvatarSkillUpgradeRsp(avatar, skillIdE, currentLevelE, nextLevel));
|
||||
CommandHandler.sendMessage(sender, "Set talent E to " + nextLevel + ".");
|
||||
}
|
||||
if (skillId == skillIdQ){
|
||||
// Upgrade skill
|
||||
avatar.getSkillLevelMap().put(skillIdQ, nextLevel);
|
||||
avatar.save();
|
||||
|
||||
// Packet
|
||||
sender.sendPacket(new PacketAvatarSkillChangeNotify(avatar, skillIdQ, currentLevelQ, nextLevel));
|
||||
sender.sendPacket(new PacketAvatarSkillUpgradeRsp(avatar, skillIdQ, currentLevelQ, nextLevel));
|
||||
CommandHandler.sendMessage(sender, "Set talent Q to " + nextLevel + ".");
|
||||
}
|
||||
|
||||
} catch (NumberFormatException ignored) {
|
||||
CommandHandler.sendMessage(sender, "Invalid skill ID.");
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
case "getid":
|
||||
EntityAvatar entity = sender.getTeamManager().getCurrentAvatarEntity();
|
||||
GenshinAvatar avatar = entity.getAvatar();
|
||||
int skillIdNorAtk = avatar.getData().getSkillDepot().getSkills().get(0);
|
||||
int skillIdE = avatar.getData().getSkillDepot().getSkills().get(1);
|
||||
int skillIdQ = avatar.getData().getSkillDepot().getEnergySkill();
|
||||
|
||||
CommandHandler.sendMessage(sender, "Normal Attack ID " + skillIdNorAtk + ".");
|
||||
CommandHandler.sendMessage(sender, "E skill ID " + skillIdE + ".");
|
||||
CommandHandler.sendMessage(sender, "Q skill ID " + skillIdQ + ".");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import emu.grasscutter.server.packet.send.PacketSceneAreaWeatherNotify;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Command(label = "weather", usage = "weather <weatherId>",
|
||||
@Command(label = "weather", usage = "weather <weatherId> [climateId]",
|
||||
description = "Changes the weather.", aliases = {"w"}, permission = "player.weather")
|
||||
public final class WeatherCommand implements CommandHandler {
|
||||
|
||||
@@ -20,20 +20,22 @@ public final class WeatherCommand implements CommandHandler {
|
||||
}
|
||||
|
||||
if (args.size() < 1) {
|
||||
CommandHandler.sendMessage(sender, "Usage: weather <weatherId>");
|
||||
CommandHandler.sendMessage(sender, "Usage: weather <weatherId> [climateId]");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
int weatherId = Integer.parseInt(args.get(0));
|
||||
int climateId = args.size() > 1 ? Integer.parseInt(args.get(1)) : 1;
|
||||
|
||||
ClimateType climate = ClimateType.getTypeByValue(weatherId);
|
||||
ClimateType climate = ClimateType.getTypeByValue(climateId);
|
||||
|
||||
sender.getScene().setWeather(weatherId);
|
||||
sender.getScene().setClimate(climate);
|
||||
sender.getScene().broadcastPacket(new PacketSceneAreaWeatherNotify(sender));
|
||||
CommandHandler.sendMessage(sender, "Changed weather to " + weatherId);
|
||||
CommandHandler.sendMessage(sender, "Changed weather to " + weatherId + " with climate " + climateId);
|
||||
} catch (NumberFormatException ignored) {
|
||||
CommandHandler.sendMessage(sender, "Invalid weather ID.");
|
||||
CommandHandler.sendMessage(sender, "Invalid ID.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user