package emu.grasscutter.server.packet.recv; import emu.grasscutter.Grasscutter; import emu.grasscutter.game.inventory.GameItem; import emu.grasscutter.game.inventory.Inventory; import emu.grasscutter.game.inventory.InventoryTab; import emu.grasscutter.game.inventory.ItemType; import emu.grasscutter.game.player.Player; import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.proto.QuickUseWidgetRspOuterClass.QuickUseWidgetRsp; import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.packet.send.PacketPullRecentChatRsp; @Opcodes(PacketOpcodes.QuickUseWidgetReq) public class HandlerQuickUseWidgetReq extends PacketHandler { /* * WARNING: with the consuming of material widget ( Example: bomb ), * this is just a implement designed to the decreasing of count * * ### Known Bug: No effects after using item but decrease. ### * * If you know which Packet could make the effects, feel free to contribute! * */ @Override public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { QuickUseWidgetRsp.Builder proto = QuickUseWidgetRsp.newBuilder(); Player pl = session.getPlayer(); synchronized (pl) { int materialId = pl.getWidgetId(); Inventory inventory = session.getPlayer().getInventory(); InventoryTab inventoryTab = inventory.getInventoryTab(ItemType.ITEM_MATERIAL); GameItem item = inventoryTab.getItemById(materialId); int remain = item.getCount(); if (remain > 0) { remain--; if (remain <= 0) { proto.setRetcode(1); } else { proto.setRetcode(0); } proto.setMaterialId(materialId); inventory.removeItem(item,1);// decrease count BasePacket rsp = new BasePacket(PacketOpcodes.QuickUseWidgetRsp); rsp.setData(proto); session.send(rsp); Grasscutter.getLogger().warn("class has no effects in the game, feel free to implement it"); // but no effects in the game, feel free to implement it! } } } }