/* * IDK Game Server by Steve Winfield * https://github.com/WinfieldSteve */ package org.stevewinfield.suja.idk.communication.room.readers; import org.stevewinfield.suja.idk.Bootloader; import org.stevewinfield.suja.idk.IDK; import org.stevewinfield.suja.idk.communication.IMessageReader; import org.stevewinfield.suja.idk.communication.MessageReader; import org.stevewinfield.suja.idk.communication.catalog.writers.GiftOpenedWriter; import org.stevewinfield.suja.idk.game.catalog.CatalogItem; import org.stevewinfield.suja.idk.game.catalog.CatalogPage; import org.stevewinfield.suja.idk.game.furnitures.Furniture; import org.stevewinfield.suja.idk.game.rooms.RoomInstance; import org.stevewinfield.suja.idk.game.rooms.RoomItem; import org.stevewinfield.suja.idk.network.sessions.Session; public class OpenBoxReader implements IMessageReader { @Override public void parse(final Session session, final MessageReader reader) { if (!session.isAuthenticated() || !session.isInRoom()) { return; } final RoomInstance room = Bootloader.getGame().getRoomManager().getLoadedRoomInstance(session.getRoomId()); if (room == null || !room.hasRights(session, true)) { return; } final int boxId = reader.readInteger(); if (!room.getRoomItems().containsKey(boxId)) { return; } final RoomItem box = room.getRoomItems().get(boxId); if (box.getBase().getId() == IDK.CATA_RECYCLER_BOX_ID) { if (box.getTermFlags() == null || box.getTermFlags().length < 2) { return; } final Furniture furni = Bootloader.getGame().getFurnitureManager().getFurniture(Integer.valueOf(box.getTermFlags()[1])); if (furni == null) { return; } room.removeItem(box, session); session.writeMessage(new GiftOpenedWriter(furni)); session.getPlayerInstance().getInventory().addItem(furni, session, 1, "", null); Bootloader.getStorage().executeQuery("DELETE FROM items WHERE id=" + boxId); } else if (!box.getBase().isGift()) { return; } if (box.getTermFlags() == null || box.getTermFlags().length < 4) { return; } final int itemId = Integer.valueOf(box.getTermFlags()[3]); CatalogItem item = null; for (final CatalogPage page : Bootloader.getGame().getCatalogManager().getCatalogPages().values()) { if (page.getItems().containsKey(itemId)) { item = page.getItems().get(itemId); break; } } if (item == null) { return; } room.removeItem(box, session); session.writeMessage(new GiftOpenedWriter(item.getBaseItem())); session.getPlayerInstance().getInventory() .addItem( item.getBaseItem(), session, item.getAmount(), (box.getTermFlags().length > 4 ? box.getTermFlags()[4] : ""), item.getSecondaryData(), null ); Bootloader.getStorage().executeQuery("DELETE FROM items WHERE id=" + boxId); } }