package net.scapeemulator.game.model.player.skills.construction.hotspot; import net.scapeemulator.game.model.player.skills.construction.furniture.BasicFurniture; import static net.scapeemulator.game.model.player.skills.construction.furniture.BasicFurniture.*; import static net.scapeemulator.game.model.player.skills.construction.furniture.GodFurniture.*; import net.scapeemulator.game.model.definition.ItemDefinitions; import net.scapeemulator.game.model.player.Item; import net.scapeemulator.game.model.player.Player; import net.scapeemulator.game.model.player.skills.construction.furniture.ArmorDisplay; import net.scapeemulator.game.model.player.skills.construction.furniture.CrestedFurniture; import net.scapeemulator.game.model.player.skills.construction.furniture.Furniture; import net.scapeemulator.game.model.player.skills.construction.furniture.FurnitureInterface; import net.scapeemulator.game.model.player.skills.construction.furniture.MaterialRequirement; import net.scapeemulator.game.model.player.skills.construction.furniture.RuneCase; import net.scapeemulator.game.model.player.skills.construction.furniture.StyledFurniture; import net.scapeemulator.game.msg.impl.inter.InterfaceItemsMessage; /** * @author David Insley */ public enum FurnitureHotspotType { /* @formatter:off */ WINDOW(13830), DOOR(-1), // Garden CENTREPIECE(15361, EXIT_PORTAL, DECORATIVE_ROCK, POND, IMP_STATUE, DUNGEON_ENTRANCE), BIG_TREE(15362, DEAD_TREE_BIG, NICE_TREE_BIG, OAK_TREE_BIG, WILLOW_TREE_BIG, MAPLE_TREE_BIG, YEW_TREE_BIG, MAGIC_TREE_BIG), TREE(15363, DEAD_TREE, NICE_TREE, OAK_TREE, WILLOW_TREE, MAPLE_TREE, YEW_TREE, MAGIC_TREE), BIG_PLANT(15364, FERN_BIG, BUSH, TALL_PLANT), BIG_PLANT_2(15365, SHORT_PLANT, LARGE_LEAF_BUSH, HUGE_PLANT), SMALL_PLANT(15366, PLANT, SMALL_FERN, FERN), SMALL_PLANT_2(15367, DOCK_LEAF, THISTLE, REEDS), // Parlour CHAIR(15410, CRUDE_CHAIR, WOODEN_CHAIR, ROCKING_CHAIR, OAK_CHAIR, OAK_ARMCHAIR, TEAK_ARMCHAIR, MAHOGANY_ARMCHAIR), CHAIR_2(15411, CHAIR.furniture), CHAIR_3(15412, CHAIR.furniture), RUG_CENTER(15413, BROWN_RUG_CENTER, BasicFurniture.RUG_CENTER, OPULENT_RUG_CENTER), RUG_SIDE(15414, BROWN_RUG_SIDE, BasicFurniture.RUG_SIDE, OPULENT_RUG_SIDE), RUG_CORNER(15415, BROWN_RUG_CORNER, BasicFurniture.RUG_CORNER, OPULENT_RUG_CORNER), BOOKCASE(15416, WOODEN_BOOKCASE, OAK_BOOKCASE, MAHOGANY_BOOKCASE), BOOKCASE_2(15417, BOOKCASE.furniture), FIREPLACE(15418, CLAY_FIREPLACE, LIMESTONE_FIREPLACE, MARBLE_FIREPLACE), PARLOUR_CURTAINS(15419, TORN_CURTAINS, CURTAINS, OPULENT_CURTAINS), // Kitchen STOVE(15398, FIREPIT, FIREPIT_WITH_HOOK, FIREPIT_WITH_POT, SMALL_OVEN, LARGE_OVEN, STEEL_RANGE, FANCY_RANGE), SHELVES_DISHES(15399, SHELF_DISHES, SHELF_2_DISHES, SHELF_3_DISHES, OAK_SHELF_DISHES, OAK_SHELF_2_DISHES, TEAK_SHELF_DISHES, TEAK_SHELF_2_DISHES), SHELVES(15400, SHELF, SHELF_2, SHELF_3, OAK_SHELF, OAK_SHELF_2, TEAK_SHELF, TEAK_SHELF_2), BARREL(15401, BEER, CIDER, ASGARNIAN, GREENMANS, DRAGON_BITTER, CHEFS_DELIGHT), PET_BASKET(15402, CAT_BLANKET, CAT_BASKET, CUSHIONED_BASKET), LARDER(15403, BasicFurniture.LARDER, OAK_LARDER, TEAK_LARDER), SINK(15404, PUMP_AND_DRAIN, PUMP_AND_TUB, BasicFurniture.SINK), KITCHEN_TABLE(15405, BasicFurniture.KITCHEN_TABLE, OAK_KITCHEN_TABLE, TEAK_KITCHEN_TABLE), // Dining room DINING_TABLE(15298, WOOD_DINE_TABLE, OAK_DINE_TABLE, C_OAK_DINE_TABLE, TEAK_DINE_TABLE, C_TEAK_DINE_TABLE, MAHOG_DINE_TABLE, OPULENT_TABLE), DINING_SEATING(15299, WOODEN_BENCH, OAK_BENCH, CARVED_OAK_BENCH, TEAK_BENCH, CARVED_TEAK_BENCH, MAHOG_BENCH, GILDED_BENCH), DINING_SEATING_2(15300, DINING_SEATING.furniture), DINING_FIREPLACE(15301, FIREPLACE.furniture), DINING_CURTAINS(15302, PARLOUR_CURTAINS.furniture), DINING_DECORATION(15303, CrestedFurniture.OAK_DECORATION, CrestedFurniture.TEAK_DECORATION, CrestedFurniture.GILDED_DECORATION), BELL_PULL(15304, ROPE_BELL_PULL, BasicFurniture.BELL_PULL, POSH_BELL_PULL), // Workshop // Tool space = 15443-15447 // Clockmaking bench 15441 // WORKBENCH = 15439 REPAIR_BENCH(15448), HERLADRY_STAND(15450), // Bedroom BED(15260, WOODEN_BED, OAK_BED, LARGE_OAK_BED, TEAK_BED, LARGE_TEAK_BED, FOUR_POSTER, GILDED_FOUR_POSTER), WARDROBE(15261, SHOE_BOX, OAK_DRAWERS, OAK_WARDROBE, TEAK_DRAWERS, TEAK_WARDROBE, MAHOG_WARDROBE, GILDED_WARDROBE), DRESSER(15262, SHAVER, OAK_SHAVER, OAK_DRESSER, TEAK_DRESSER, FANCY_TEAK_DRESSER, MAHOG_DRESSER, GILDED_DRESSER), BEDROOM_CURTAINS(15263, PARLOUR_CURTAINS.furniture), RUG_2_CENTER(15264, RUG_CENTER.furniture), RUG_2_SIDE(15265, RUG_SIDE.furniture), RUG_2_CORNER(15266, RUG_CORNER.furniture), BEDROOM_FIREPLACE(15267, FIREPLACE.furniture), CLOCK(15268, OAK_CLOCK, TEAK_CLOCK, GILDED_CLOCK), // Skill Hall HEAD_TROPHY(15382, CRAWLING_HAND, COCKATRICE_HEAD, BASILISK_HEAD, KURASK_HEAD, ABYSSAL_HEAD, KBD_HEAD, KQ_HEAD), FISHING_TROPHY(15383, MOUNTED_BASS, MOUNTED_SWORDFISH, MOUNTED_SHARK), METAL_ARMOR(15384, ArmorDisplay.MITH, ArmorDisplay.ADDY, ArmorDisplay.RUNE), CW_ARMOR(15385, ArmorDisplay.CW_1, ArmorDisplay.CW_2, ArmorDisplay.CW_3), RUNE_CASE(15386, RuneCase.CASE_1, RuneCase.CASE_2, RuneCase.CASE_3), // Games room GAME(15342, JESTER, TREASURE_HUNT, HANGMAN), PRIZE_CHEST(15343, OAK_CHEST, TEAK_CHEST, MAHOG_CHEST), ATTACK_STONE(15344, CLAY_STONE, LIMESTONE_STONE, MARBLE_STONE), ELEMENTAL_BALANCE(15345, LESSER_BALANCE, MEDIUM_BALANCE, GREATER_BALANCE), RANGING_GAME(15346, HOOP_AND_STICK, DARTBOARD, ARCHERY_TARGET), // Combat room RING(15277), RACK(15296, GLOVE_RACK, WEAPON_RACK, EXTRA_RACK), COMBAT_DECORATION(15297, DINING_DECORATION.furniture), // Quest hall PORTRAIT(15392, ARTHUR, ELENA, GIANT_DWARF, MISCELLANIANS), LANDSCAPE(15393, LUMBRIDGE, DESERT, MORYTANIA, KARAMJA, ISAFDAR), GUILD_TROPHY(15394, ArmorDisplay.ANTI_SHIELD, ArmorDisplay.MOUNTED_GLORY, ArmorDisplay.LEGEND_CAPE), SWORD(15395, ArmorDisplay.SILVERLIGHT, ArmorDisplay.EXCALIBUR, ArmorDisplay.DARKLIGHT), MAP(15396, SMALL_MAP, MED_MAP, LARGE_MAP), BOOKCASE_QUEST(15397, BOOKCASE.furniture), // Study LECTERN(15420, OAK_LECTERN, EAGLE_LECTERN, DEMON_LECTERN, TEAK_EAGLE, TEAK_DEMON, MAHOG_EAGLE, MAHOG_DEMON), GLOBE(15421, BasicFurniture.GLOBE, ORN_GLOBE, LUNAR_GLOBE, CELEST_GLOBE, ARMILLARY, SM_ORRERY, LG_ORRERY), CRYSTAL_BALL(15422, BasicFurniture.CRYSTAL_BALL, ELE_SPHERE, CRYSTAL_OF_POWER), WALL_CHART(15423, ALCH_CHART, ASTRO_CHART, INFERN_CHART), TELESCOPE(15424, WOOD_TELESCOPE, TEAK_TELESCOPE, MAHOG_TELESCOPE), BOOKCASE_STUDY(15425, BOOKCASE.furniture), // Costume room CAPE_RACK(18810, OAK_RACK, TEAK_RACK, MAHOGANY_RACK, GILDED_RACK, MARBLE_RACK, MAGIC_RACK), MAGIC_WARDROBE(18811, MAGIC_OAK_WDROBE, MAGIC_C_OAK_WDROBE, MAGIC_TEAK_WDROBE, MAGIC_C_TEAK_WDROBE, MAGIC_MAHOG_WDROBE, MAGIC_GILDED_WDROBE, MAGIC_MARBLE_WDROBE), TOY_BOX(18812, OAK_TOY_BOX, TEAK_TOY_BOX, MAHOGANY_TOY_BOX), COST_TREASURE_CHEST(18813, OAK_TREASURE_CHEST, TEAK_TREASURE_CHEST, MAHOG_TREASURE_CHEST), COSTUME_BOX(18814, OAK_COSTUME_BOX, TEAK_COSTUME_BOX, MAHOG_COSTUME_BOX), ARMOR_CASE(18815, OAK_ARMOR_CASE, TEAK_ARMOR_CASE, MAHOG_ARMOR_CASE), // Chapel CHAPEL_ICON(15269, SARA_SYMBOL, ZAMO_SYMBOL, GUTH_SYMBOL, SARA_ICON, ZAMO_ICON, GUTH_ICON, BOB_ICON), ALTAR(15270, OAK_ALTAR, TEAK_ALTAR, CLOTH_ALTAR, MAHOG_ALTAR, STONE_ALTAR, MARBLE_ALTAR, GILDED_ALTAR), BURNERS(15271, WOOD_TORCH, STEEL_TORCH, STEEL_CNDL, GOLD_CNDL, INCENSE_BURNER, MAHOG_BURNER, MARBLE_BURNER), RUG_3_SIDE(15273, RUG_SIDE.furniture), RUG_3_CORNER(15264, RUG_CORNER.furniture), STATUES(15275, SMALL_STATUE, MED_STATUE, LARGE_STATUE), INSTRUMENT(15276, WINDCHIMES, BELLS, ORGAN), WINDOWS(13730), // Portal chamber PORTAL_1(15406), PORTAL_2(15407), PORTAL_3(15408), PORTAL_FOCUS(15409), // Formal garden FORMAL_CENTERPIECE(15368, EXIT_PORTAL, GAZEBO, DUNGEON_ENTRANCE, SMALL_FOUNTAIN, LARGE_FOUNTAIN, POSH_FOUNTAIN), FENCING(15369, BOUNDARY_STONES, WOOD_FENCE, STONE_WALL, IRON_RAIL, PICKET_FENCE, GARDEN_FENCE, MARBLE_WALL), HEDGING_END(15370, THORNY_END, NICE_END, BOX_END, TOPIARY_END, FANCY_END, TALL_FANCY_END, TALL_BOX_END), HEDGING_CENTER(15371, THORNY_CENTER, NICE_CENTER, BOX_CENTER, TOPIARY_CENTER, FANCY_CENTER, TALL_FANCY_CENTER, TALL_BOX_CENTER), HEDGING_CORNER(15372, THORNY_CORNER, NICE_CORNER, BOX_CORNER, TOPIARY_CORNER, FANCY_CORNER, TALL_FANCY_CORNER, TALL_BOX_CORNER), FORMAL_BIG_PLANT(15373, SUNFLOWER, MARIGOLD, ROSES), FORMAL_BIG_PLANT_2(15374, ROSEMARY, DAFFODILS, BLUEBELLS), FORMAL_SMALL_PLANT(15375, SMALL_SUNFLOWER, SMALL_MARIGOLD, SMALL_ROSES), FORMAL_SMALL_PLANT_2(15376, SMALL_ROSEMARY, SMALL_DAFFODILS, SMALL_BLUEBELLS), // Throne room THRONE_DECORATION(15434, CrestedFurniture.OAK_DECORATION, CrestedFurniture.TEAK_DECORATION, CrestedFurniture.GILDED_DECORATION, CrestedFurniture.ROUND_SHIELD, CrestedFurniture.SQUARE_SHIELD, CrestedFurniture.KITE_SHIELD), THRONE(15426, OAK_THRONE, TEAK_THRONE, MAHOGANY_THRONE, GILDED_THRONE, SKELETON_THRONE, CRYSTAL_THRONE), THRONE_FLOOR(15427, StyledFurniture.FLOOR_DECORATION, StyledFurniture.TRAPDOORS), LEVER(15435, OAK_LEVER, TEAK_LEVER, MAHOG_LEVER), THRONE_SEATING(15436, CARVED_TEAK_BENCH, MAHOG_BENCH, GILDED_BENCH), THRONE_SEATING_2(15437, THRONE_SEATING.furniture), TRAPDOOR(15438, OAK_TRAPDOOR, TEAK_TRAPDOOR, MAHOG_TRAPDOOR), // Oubliette OUB_DECORATION(15331, DECORATIVE_BLOOD, DECORATIVE_PIPE, HANGING_SKELETON), PRISON(15352, OAK_CAGE, OAK_STEEL_CAGE, STEEL_CAGE, SPIKED_CAGE, BONE_CAGE), PRISON_DOOR(15353, OAK_CAGE_DOOR, OAK_STEEL_CAGE_DOOR, STEEL_CAGE_DOOR, SPIKED_CAGE_DOOR, BONE_CAGE_DOOR), OUB_GUARD(15354), OUB_LIGHTING(15355, LIGHT_CANDLE, LIGHT_TORCH, SKULL_TORCH), OUB_LADDER(15356), // Center group descriptor STAIRWAY_DESCRIPTOR(-1, BasicFurniture.RUG_CENTER, OAK_STAIRCASE, TEAK_STAIRCASE, OPULENT_RUG_CENTER, SPIRAL_STAIRCASE, MARBLE_STAIRCASE, MARBLE_SPIRAL), // Skill hall SKILL_RUG_CENTER(15377, BasicFurniture.RUG_CENTER, null, null, OPULENT_RUG_CENTER, null, null, null), SKILL_RUG_SIDE(15378, BasicFurniture.RUG_SIDE, null, null, OPULENT_RUG_SIDE, null, null, null), SKILL_RUG_CORNER(15379, BasicFurniture.RUG_CORNER, null, null, OPULENT_RUG_CORNER, null, null, null), SKILL_STAIR(15380, null, OAK_STAIRCASE, TEAK_STAIRCASE, null, SPIRAL_STAIRCASE, MARBLE_STAIRCASE, MARBLE_SPIRAL), SKILL_STAIR_DOWN(15381, null, OAK_STAIRCASE_DOWN, TEAK_STAIRCASE_DOWN, null, SPIRAL_STAIRCASE_DOWN, MARBLE_STAIRCASE_DOWN, MARBLE_SPIRAL_DOWN), // Quest hall QUEST_RUG_CENTER(15387, SKILL_RUG_CENTER.furniture), QUEST_RUG_SIDE(15388, SKILL_RUG_SIDE.furniture), QUEST_RUG_CORNER(15389, SKILL_RUG_CORNER.furniture), QUEST_STAIR(15390, SKILL_STAIR.furniture), QUEST_STAIR_DOWN(15391, SKILL_STAIR_DOWN.furniture), // Dungeons DUNG_LIGHTING(15330, OUB_LIGHTING.furniture), // Treasure room TREASURE_CHEST(15256, WOOD_CRATE, OAK_CHEST, TEAK_CHEST, MAHOG_CHEST, MAGIC_CHEST), TREASURE_GUARD(15257, DEMON, KALPHITE, TOK_XIL, DAGANNOTH, STEEL_DRAG); /* @formatter:on */ private int objectId; private final Furniture[] furniture; private FurnitureHotspotType(int objectId, Furniture... furniture) { this.objectId = objectId; this.furniture = furniture; } public static FurnitureHotspotType forObjectId(int objectId) { if (objectId >= 15305 && objectId <= 15316) { return DOOR; } for (FurnitureHotspotType type : values()) { if (type.objectId == objectId) { return type; } } return null; } public int getHotspotId() { return objectId; } public Furniture getFurniture(int index) { try { return furniture[index]; } catch (IndexOutOfBoundsException e) { return null; } } public FurnitureInterface getInterface() { return furniture.length > FurnitureInterface.NORMAL.getSize() ? FurnitureInterface.EXTENDED : FurnitureInterface.NORMAL; } public void showFurnitureInterface(Player builder) { FurnitureInterface inter = getInterface(); int wid = inter.getWindowId(); Item[] items = new Item[inter.getSize()]; int config = 0; for (int i = 0; i < inter.getSize(); i++) { int textId = inter.getTextOffset() + (5 * i); int itemIndex = inter.getItemIndex(i); try { Furniture f = furniture[i]; items[itemIndex] = new Item(f.getItemId()); builder.setInterfaceText(wid, textId++, ItemDefinitions.name(f.getItemId())); builder.setInterfaceText(wid, inter.getLevelOffset() + i, "Lvl " + f.getLevel()); for (int matI = 0; matI < 4; matI++) { MaterialRequirement req = f.material(matI); if (req != null) { builder.setInterfaceText(wid, textId + matI, req.toString()); } else { builder.setInterfaceText(wid, textId + matI, ""); } } if (f.getRequirements().hasRequirements(builder)) { config |= 1 << (i + 1); } } catch (IndexOutOfBoundsException e) { items[itemIndex] = null; builder.setInterfaceText(wid, inter.getLevelOffset() + i, ""); for (int j = 0; j < 5; j++) { builder.setInterfaceText(wid, textId + j, ""); } config |= 1 << (i + 1); } } switch (inter) { case EXTENDED: builder.getStateSet().setState(261, config); break; case NORMAL: for (int i = 0; i < inter.getSize(); i++) { builder.getStateSet().setState(261 + i, config >> (i + 1) & 0x1); } break; } builder.send(new InterfaceItemsMessage(wid, inter.getContainerId(), 8, items)); builder.getInterfaceSet().openWindow(wid); } }