GiveWeaponCommand.java 3.86 KB
Newer Older
真心's avatar
真心 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package emu.grasscutter.command.commands;

import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.def.ItemData;
import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.player.Player;

import java.util.List;

@Command(label = "giveweapon", usage = "giveweapon <playerId> <weaponId> [level] [refine]",
        description = "Gives the player a specified weapon", aliases = {"givew"}, permission = "player.giveweapon")
public final class GiveWeaponCommand implements CommandHandler {

    @Override
    public void execute(Player sender, List<String> args) {
        int target, weaponId, level = 1, refine = 0;

        if (sender == null && args.size() < 2) {
            CommandHandler.sendMessage(null, "Usage: giveweapon <playerId> <weaponId> [level] [refine]");
            return;
        }
        if (sender != null && args.size() < 1) {
            CommandHandler.sendMessage(sender, "Usage: giveweapon <weaponId> [level] [refine]");
        }

        target = Integer.parseInt(args.get(0));
        if (Grasscutter.getGameServer().getPlayerByUid(target) == null && sender != null) {
            target = sender.getUid();
            weaponId = Integer.parseInt(args.get(0));
            if (args.size() > 1) {
                level = Integer.parseInt(args.get(1));
            }
            if (args.size() > 2) {
                refine = Integer.parseInt(args.get(2));
            }
        } else {
            weaponId = Integer.parseInt(args.get(1));
            if (args.size() > 2) {
                level = Integer.parseInt(args.get(2));
            }
            if (args.size() > 3) {
                refine = Integer.parseInt(args.get(3));
            }
        }

        if (level < 1 || level > 90) {
            CommandHandler.sendMessage(sender, "Level must be between 1 and 90");
            return;
        }
        if (refine < 0 || refine > 4) {
            CommandHandler.sendMessage(sender, "Refine must be between 0 and 4");
            return;
        }

        try {
            ItemData weaponData = GameData.getItemDataMap().get(weaponId);
            if (weaponData == null) {
                CommandHandler.sendMessage(sender, "Invalid weapon id.");
            } else if (weaponData.getItemType() == ItemType.ITEM_WEAPON) {
                GameItem weapon = new GameItem(weaponData);
                weapon.setLevel(level);
                if (level > 20 && level < 40) {
                    weapon.setPromoteLevel(1);
                } else if (level > 40 && level < 50) {
                    weapon.setPromoteLevel(2);
                } else if (level > 50 && level < 60) {
                    weapon.setPromoteLevel(3);
                } else if (level > 60 && level < 70) {
                    weapon.setPromoteLevel(4);
                } else if (level > 70 && level < 80) {
                    weapon.setPromoteLevel(5);
                } else if (level > 80 && level < 90) {
                    weapon.setPromoteLevel(6);
                }
                weapon.setRefinement(refine);
                weapon.setCount(1);

                Player targetPlayer = Grasscutter.getGameServer().getPlayerByUid(target);
                if (targetPlayer == null) {
                    CommandHandler.sendMessage(sender, "Player not found.");
                    return;
                }
                targetPlayer.getInventory().addItem(weapon);
                CommandHandler.sendMessage(sender, String.format("Given %s to %s.", weaponId, target));
            } else {
                CommandHandler.sendMessage(sender, "Invalid weapon id.");
            }
        } catch (NumberFormatException ignored) {
            CommandHandler.sendMessage(sender, "Invalid weapon or player ID.");
        }
    }
}