/* * IDK Game Server by Steve Winfield * https://github.com/WinfieldSteve */ package org.stevewinfield.suja.idk.game.inventory; import org.apache.log4j.Logger; import org.stevewinfield.suja.idk.Bootloader; import org.stevewinfield.suja.idk.IDK; import org.stevewinfield.suja.idk.communication.ISerialize; import org.stevewinfield.suja.idk.communication.MessageWriter; import org.stevewinfield.suja.idk.game.furnitures.Furniture; import org.stevewinfield.suja.idk.game.furnitures.FurnitureInteractor; import org.stevewinfield.suja.idk.game.furnitures.FurnitureType; import java.sql.ResultSet; import java.sql.SQLException; public class PlayerItem implements ISerialize { // getters public int getItemId() { return itemId; } public Furniture getBase() { return base; } public String getFlags() { return flags; } public int getInteractorId() { return interactorId; } public boolean isWiredItem() { return this.base.isWiredItem(); } public boolean flagsHidden() { return this.base.isWiredItem() || this.base.isGift() || this.getBase().getId() == IDK.CATA_RECYCLER_BOX_ID || this.getBase().getInteractor() == FurnitureInteractor.TELEPORTER; } public void setFlags(final String flags) { this.flags = flags; } public PlayerItem() { this.itemId = 0; this.base = null; this.flags = "0"; } public PlayerItem(final int itemId, final Furniture base, final String flags, final int interactorId) { this.itemId = itemId; this.base = base; this.flags = flags; this.interactorId = interactorId; } public void set(final ResultSet row) throws SQLException { this.itemId = row.getInt("item_id"); this.base = Bootloader.getGame().getFurnitureManager().getFurniture(row.getInt("base_item")); this.interactorId = row.getInt("special_interactor") > -1 ? row.getInt("special_interactor") : this.base.getInteractor(); final ResultSet _row = Bootloader.getStorage().queryParams("SELECT flag FROM item_flags WHERE item_id=" + this.itemId).executeQuery(); if (_row != null && _row.next()) { this.flags = _row.getString("flag"); } else { this.flags = "0"; } } @Override public void serialize(final MessageWriter writer) { int typeId = 1; int secondaryId = 0; switch (this.getBase().getInteractor()) { case FurnitureInteractor.WALLPAPER: typeId = 2; break; case FurnitureInteractor.FLOOR: typeId = 3; break; case FurnitureInteractor.LANDSCAPE: typeId = 4; break; case FurnitureInteractor.GIFT: final String[] termFlags = this.flags.split("" + (char) 10); if (termFlags.length > 2) { secondaryId = (Integer.valueOf(termFlags[1]) * 1000) + Integer.valueOf(termFlags[2]); } break; } writer.push(itemId); writer.push(this.base.getType().toUpperCase() + ""); writer.push(itemId); writer.push(base.getSpriteId()); writer.push(typeId); // types.. (todo) writer.push(this.flagsHidden() ? "" : flags); writer.push(base.isRecyclable()); writer.push(base.isTradeable()); writer.push(base.isInventoryStackable()); writer.push(true); // can sell (todo) writer.push(-1); if (!base.getType().equals(FurnitureType.WALL)) { writer.push(""); // extra.. writer.push(secondaryId); // extra..secondary id } } // fields private int itemId; private String flags; private Furniture base; private int interactorId; }