ClearCommand.java 5.65 KB
Newer Older
1
2
3
4
5
package emu.grasscutter.command.commands;

import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
6
import emu.grasscutter.game.inventory.GameItem;
7
8
import emu.grasscutter.game.inventory.Inventory;
import emu.grasscutter.game.inventory.ItemType;
Melledy's avatar
Melledy committed
9
import emu.grasscutter.game.player.Player;
10
11
12
13
14
15
16
17
18
19

import java.util.List;

@Command(label = "clear", usage = "clear <all|wp|art|mat>", //Merged /clearartifacts and /clearweapons to /clear <args> [uid]
        description = "Deletes unequipped unlocked items, including yellow rarity ones from your inventory",
        aliases = {"clear"}, permission = "player.clearinv")

public final class ClearCommand implements CommandHandler {

    @Override
AnimeGitB's avatar
AnimeGitB committed
20
    public void execute(Player sender, Player targetPlayer, List<String> args) {
AnimeGitB's avatar
AnimeGitB committed
21
22
        if (targetPlayer == null) {
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Target_needed);
23
            return;
24
        }
AnimeGitB's avatar
AnimeGitB committed
25
26
        if (args.size() < 1) {
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_usage);
27
28
            return;
        }
AnimeGitB's avatar
AnimeGitB committed
29
        Inventory playerInventory = targetPlayer.getInventory();
30
31
        List<GameItem> toDelete = null;
        
AnimeGitB's avatar
AnimeGitB committed
32
33
        switch (args.get(0)) {
            case "wp" -> {
34
            	toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
35
36
                        .filter(item -> item.getItemType() == ItemType.ITEM_WEAPON)
                        .filter(item -> !item.isLocked() && !item.isEquipped())
37
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
38
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_weapons.replace("{name}", targetPlayer.getNickname()));
AnimeGitB's avatar
AnimeGitB committed
39
40
            }
            case "art" -> {
41
            	toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
42
43
44
                        .filter(item -> item.getItemType() == ItemType.ITEM_RELIQUARY)
                        .filter(item -> item.getLevel() == 1 && item.getExp() == 0)
                        .filter(item -> !item.isLocked() && !item.isEquipped())
45
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
46
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_artifacts.replace("{name}", targetPlayer.getNickname()));
AnimeGitB's avatar
AnimeGitB committed
47
48
            }
            case "mat" -> {
49
            	toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
50
51
52
                        .filter(item -> item.getItemType() == ItemType.ITEM_MATERIAL)
                        .filter(item -> item.getLevel() == 1 && item.getExp() == 0)
                        .filter(item -> !item.isLocked() && !item.isEquipped())
53
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
54
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_artifacts.replace("{name}", targetPlayer.getNickname()));
AnimeGitB's avatar
AnimeGitB committed
55
56
            }
            case "all" -> {
57
            	toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
58
59
60
                        .filter(item1 -> item1.getItemType() == ItemType.ITEM_RELIQUARY)
                        .filter(item1 -> item1.getLevel() == 1 && item1.getExp() == 0)
                        .filter(item1 -> !item1.isLocked() && !item1.isEquipped())
61
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
62
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_artifacts.replace("{name}", targetPlayer.getNickname()));
63
                toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
64
65
                        .filter(item2 -> item2.getItemType() == ItemType.ITEM_MATERIAL)
                        .filter(item2 -> !item2.isLocked() && !item2.isEquipped())
66
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
67
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_artifacts.replace("{name}", targetPlayer.getNickname()));
68
                toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
69
70
71
                        .filter(item3 -> item3.getItemType() == ItemType.ITEM_WEAPON)
                        .filter(item3 -> item3.getLevel() == 1 && item3.getExp() == 0)
                        .filter(item3 -> !item3.isLocked() && !item3.isEquipped())
72
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
73
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_artifacts.replace("{name}", targetPlayer.getNickname()));
74
                toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
75
76
                        .filter(item4 -> item4.getItemType() == ItemType.ITEM_FURNITURE)
                        .filter(item4 -> !item4.isLocked() && !item4.isEquipped())
77
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
78
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_furniture.replace("{name}", targetPlayer.getNickname()));
79
                toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
80
81
                        .filter(item5 -> item5.getItemType() == ItemType.ITEM_DISPLAY)
                        .filter(item5 -> !item5.isLocked() && !item5.isEquipped())
82
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
83
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_displays.replace("{name}", targetPlayer.getNickname()));
84
                toDelete = playerInventory.getItems().values().stream()
AnimeGitB's avatar
AnimeGitB committed
85
86
                        .filter(item6 -> item6.getItemType() == ItemType.ITEM_VIRTUAL)
                        .filter(item6 -> !item6.isLocked() && !item6.isEquipped())
87
                        .toList();
AnimeGitB's avatar
AnimeGitB committed
88
89
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_virtuals.replace("{name}", targetPlayer.getNickname()));
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Clear_everything.replace("{name}", targetPlayer.getNickname()));
AnimeGitB's avatar
AnimeGitB committed
90
            }
91
        }
92
93
94
95
        
        if (toDelete != null) {
        	playerInventory.removeItems(toDelete);
        }
96
97
    }
}