Flatpack production functionality

This commit is contained in:
Bishop 2026-07-20 23:44:26 -05:00
parent 14bb43b565
commit 236a143f0c
2 changed files with 111 additions and 10 deletions

View file

@ -29,16 +29,22 @@ class ConstructionInterface : InterfaceListener {
closeInterface(player)
val hotspot = getAttribute<Hotspot?>(player, "con:hotspot", null)
val `object` = getAttribute<Scenery?>(player, "con:hsobject", null)
if (hotspot == null || `object` == null) {
val flatpackMode = getAttribute(player, WorkbenchListeners.attributeFlatpackMode, false)
if (hotspot == null || `object` == null && !flatpackMode) {
log(this.javaClass, Log.ERR, "Failed building decoration $hotspot : $`object`")
return@on false
}
val slot = (if (slot % 2 != 0) 4 else 0) + (slot shr 1)
if (slot >= hotspot.hotspot.decorations.size) {
log(this.javaClass, Log.ERR, "Failed building decoration " + slot + "/" + hotspot.hotspot.decorations.size)
val buildHotspot = if (flatpackMode) {
getAttribute<BuildHotspot?>(player, WorkbenchListeners.attributeSelection, null)?: return@on false
} else {
hotspot.hotspot
}
if (slot >= buildHotspot.decorations.size) {
log(this.javaClass, Log.ERR, "Failed building decoration " + slot + "/" + buildHotspot.decorations.size)
return@on false
}
val deco = hotspot.hotspot.decorations[slot]
val deco = buildHotspot.decorations[slot]
if (!player.isAdmin) {
if (getDynLevel(player, Skills.CONSTRUCTION) < deco.level) {
sendMessage(player, "You need to have a Construction level of " + deco.level + " to build that.")
@ -70,13 +76,12 @@ class ConstructionInterface : InterfaceListener {
return@on true
}
}
if (getAttribute(player, WorkbenchListeners.attributeFlatpackMode, false) &&
WorkbenchListeners.getMaxLevel(getAttribute(player, WorkbenchListeners.attributeWorkbenchId, 0)) < deco.level) {
if (flatpackMode && WorkbenchListeners.getMaxLevel(getAttribute(player, WorkbenchListeners.attributeWorkbenchId, 0)) < deco.level) {
sendMessage(player, "You need a better workbench to make this flatpack.") // placeholder
return@on true
}
}
if (getAttribute(player, WorkbenchListeners.attributeFlatpackMode, false)) {
if (flatpackMode) {
WorkbenchListeners.produceFlatpack(player, deco)
} else {
BuildingUtils.buildDecoration(player, hotspot, deco, `object`)

View file

@ -54,9 +54,105 @@ class WorkbenchListeners : InteractionListener, InterfaceListener {
BuildHotspot.TOY_BOX, // 126
)
val FLATPACKS = mapOf<Decoration, Int>(
Decoration.CRUDE_CHAIR to Items.CRUDE_WOODEN_CHAIR_8496,
Decoration.OAK_CHAIR to Items.OAK_CHAIR_8502
val FLATPACKS = mapOf(
// Chairs (armchairs)
Decoration.CRUDE_CHAIR to Items.CRUDE_WOODEN_CHAIR_8496,
Decoration.WOODEN_CHAIR to Items.WOODEN_CHAIR_8498,
Decoration.ROCKING_CHAIR to Items.ROCKING_CHAIR_8500,
Decoration.OAK_CHAIR to Items.OAK_CHAIR_8502,
Decoration.OAK_ARMCHAIR to Items.OAK_ARMCHAIR_8504,
Decoration.TEAK_ARMCHAIR to Items.TEAK_ARMCHAIR_8506,
Decoration.MAHOGANY_ARMCHAIR to Items.MAHOGANY_ARMCHAIR_8508,
// Bookcases
Decoration.WOODEN_BOOKCASE to Items.WOODEN_BOOKCASE_8510,
Decoration.OAK_BOOKCASE to Items.OAK_BOOKCASE_8512,
Decoration.MAHOGANY_BOOKCASE to Items.MAHOGANY_BKCASE_8514,
// Beer barrels
Decoration.BASIC_BEER_BARREL to Items.BEER_BARREL_8516,
Decoration.CIDER_BARREL to Items.CIDER_BARREL_8518,
Decoration.ASGARNIAN_ALE_BARREL to Items.ASGARNIAN_ALE_8520,
Decoration.GREENMANS_ALE_BARREL to Items.GREENMANS_ALE_8522,
Decoration.DRAGON_BITTER_BARREL to Items.DRAGON_BITTER_8524,
Decoration.CHEFS_DELIGHT_BARREL to Items.CHEFS_DELIGHT_8526,
// Kitchen tables
Decoration.KITCHEN_WOODEN_TABLE to Items.WOOD_KITCHEN_TABLE_8528,
Decoration.KITCHEN_OAK_TABLE to Items.OAK_KITCHEN_TABLE_8530,
Decoration.KITCHEN_TEAK_TABLE to Items.TEAK_KITCHEN_TABLE_8532,
// Dining tables
Decoration.DINING_TABLE_WOOD to Items.WOOD_DINING_TABLE_8548,
Decoration.DINING_TABLE_OAK to Items.OAK_DINING_TABLE_8550,
Decoration.DINING_TABLE_CARVED_OAK to Items.CARVED_OAK_TABLE_8552,
Decoration.DINING_TABLE_TEAK to Items.TEAK_TABLE_8554,
Decoration.DINING_TABLE_CARVED_TEAK to Items.CARVED_TEAK_TABLE_8556,
Decoration.DINING_TABLE_MAHOGANY to Items.MAHOGANY_TABLE_8558,
Decoration.DINING_TABLE_OPULENT to Items.OPULENT_TABLE_8560,
// Dining benches
Decoration.BENCH_WOODEN to Items.WOODEN_BENCH_8562,
Decoration.BENCH_OAK to Items.OAK_BENCH_8564,
Decoration.BENCH_CARVED_OAK to Items.CARVED_OAK_BENCH_8566,
Decoration.BENCH_TEAK to Items.TEAK_DINING_BENCH_8568,
Decoration.BENCH_CARVED_TEAK to Items.CARVED_TEAK_BENCH_8570,
Decoration.BENCH_MAHOGANY to Items.MAHOGANY_BENCH_8572,
Decoration.BENCH_GILDED to Items.GILDED_BENCH_8574,
// Beds
Decoration.WOODEN_BED to Items.WOODEN_BED_8576,
Decoration.OAK_BED to Items.OAK_BED_8578,
Decoration.LARGE_OAK_BED to Items.LARGE_OAK_BED_8580,
Decoration.TEAK_BED to Items.TEAK_BED_8582,
Decoration.LARGE_TEAK_BED to Items.LARGE_TEAK_BED_8584,
Decoration.FOUR_POSTER to Items.FOUR_POSTER_8586,
Decoration.GILDED_FOUR_POSTER to Items.GILDED_4_POSTER_8588,
// Clocks
Decoration.OAK_CLOCK to Items.OAK_CLOCK_8590,
Decoration.TEAK_CLOCK to Items.TEAK_CLOCK_8592,
Decoration.GILDED_CLOCK to Items.GILDED_CLOCK_8594,
// Dressers
Decoration.SHAVING_STAND to Items.SHAVING_STAND_8596,
Decoration.OAK_SHAVING_STAND to Items.OAK_SHAVING_STAND_8598,
Decoration.OAK_DRESSER to Items.OAK_DRESSER_8600,
Decoration.TEAK_DRESSER to Items.TEAK_DRESSER_8602,
Decoration.FANCY_TEAK_DRESSER to Items.FANCY_TEAK_DRESSER_8604,
Decoration.MAHOGANY_DRESSER to Items.MAHOGANY_DRESSER_8606,
Decoration.GILDED_DRESSER to Items.GILDED_DRESSER_8608,
// Wardrobes
Decoration.SHOE_BOX to Items.SHOE_BOX_8610,
Decoration.OAK_DRAWERS to Items.OAK_DRAWERS_8612,
Decoration.OAK_WARDROBE to Items.OAK_WARDROBE_8614,
Decoration.TEAK_DRAWERS to Items.TEAK_DRAWERS_8616,
Decoration.TEAK_WARDROBE to Items.TEAK_WARDROBE_8618,
Decoration.MAHOGANY_WARDROBE to Items.MAHOGANY_DROBE_8620,
Decoration.GILDED_WARDROBE to Items.GILDED_WARDROBE_8622,
// Cape racks
Decoration.OAK_CAPE_RACK to Items.OAK_CAPE_RACK_9843,
Decoration.TEAK_CAPE_RACK to Items.TEAK_CAPE_RACK_9844,
Decoration.MGANY_CAPE_RACK to Items.MGANY_CAPE_RACK_9845,
Decoration.GILDED_CAPE_RACK to Items.GILDED_CAPE_RACK_9846,
Decoration.MARBLE_CAPE_RACK to Items.MARBLE_CAPE_RACK_9847,
Decoration.MAGIC_CAPE_RACK to Items.MAGICAL_CAPE_RACK_9848,
// Magic wardrobes
Decoration.OAK_MAGIC_WARDROBE to Items.OAK_MAGIC_WARDROBE_9852,
Decoration.C_OAK_MAGIC_WARDROBE to Items.CARVED_OAK_MAGIC_WARDROBE_9853,
Decoration.TEAK_MAGIC_WARDROBE to Items.TEAK_MAGIC_WARDROBE_9854,
Decoration.C_TEAK_MAGIC_WARDROBE to Items.CARVED_TEAK_MAGIC_WARDROBE_9855,
Decoration.MGANY_MAGIC_WARDROBE to Items.MAHOGANY_MAGIC_WARDROBE_9856,
Decoration.GILDED_MAGIC_WARDROBE to Items.GILDED_MAGIC_WARDROBE_9857,
Decoration.MARBLE_MAGIC_WARDROBE to Items.MARBLE_MAGIC_WARDROBE_9858,
// Armour cases
Decoration.OAK_ARMOUR_CASE to Items.OAK_ARMOUR_CASE_9859,
Decoration.TEAK_ARMOUR_CASE to Items.TEAK_ARMOUR_CASE_9860,
Decoration.MGANY_ARMOUR_CASE to Items.MGANY_ARMR_CASE_9861,
// Treasure trail chests
Decoration.OAK_TREASURE_CHEST to Items.OAK_TREASURE_CHEST_9862,
Decoration.TEAK_TREASURE_CHEST to Items.TEAK_TREAS_CHEST_9863,
Decoration.MAHOGANY_TREASURE_CHEST to Items.MGANY_TREAS_CHEST_9864,
// Fancy dress boxes (costume boxes)
Decoration.OAK_COSTUME_BOX to Items.OAK_COSTUME_BOX_9865,
Decoration.TEAK_COSTUME_BOX to Items.TEAK_COSTUME_BOX_9866,
Decoration.MAHOGANY_COSTUME_BOX to Items.MAHOGANY_COS_BOX_9867,
// Toy boxes
Decoration.OAK_TOY_BOX to Items.OAK_TOY_BOX_9849,
Decoration.TEAK_TOY_BOX to Items.TEAK_TOY_BOX_9850,
Decoration.MAHOGANY_TOY_BOX to Items.MAHOGANY_TOY_BOX_9851,
)
fun getMaxLevel(workbenchId: Int): Int {