Compare commits

...

52 commits

Author SHA1 Message Date
Syndromeramo
bb1b89ed8f Merge branch '2009scape-makingTea' into 'master'
POH Drinks

Closes #2122, #2132, #2131, and #2133

See merge request 2009scape/2009scape!2103
2025-12-07 22:26:34 +00:00
Syndromeramo
ef42ce75f5 Fixed nettle tea to restore run speed instead of boosting attack. 2025-12-07 16:25:11 -06:00
Syndromeramo
ac283f803c Removed redundant hasSpaceFor function. 2025-10-07 14:27:32 -05:00
Syndromeramo
f64c765df3 Cleaned up logic and removed comments. 2025-10-07 14:13:49 -05:00
Syndromeramo
dfc9604673 Porcelain cup tea now checks for level requirements properly. 2025-08-12 11:42:40 -05:00
Syndromeramo
69d0700065 Fixed Nettle Tea XP.
Changed Nettle Tea boost from inauthentic run restore to authentic +2 Attack Boost.
POH Items in this MR are no longer bankable, to avoid exploitation by Winter Storage.
2025-07-30 12:23:21 -05:00
Syndromeramo
646b866dbc Noted house items can no longer be taken out of the PoH.
House items are no longer tradable.
2025-07-28 20:14:51 -05:00
Syndromeramo
11bc398d2d Nettle Tea now restores run energy. 2025-07-28 15:24:04 -05:00
Syndromeramo
2db794a9d0 Fixed check of free slots in AbstractContainer.
Adjusted kettle boiling queue strength to soft.
2025-07-28 10:32:29 -05:00
Syndromeramo
a5fae86f52 Populated examine texts, fixed trade of various teas. 2025-07-19 22:46:43 -05:00
Syndromeramo
355c359d3f Populated examine texts, fixed trade of various teas. 2025-07-17 13:11:13 -05:00
Syndromeramo
3377619101 Fixed typo in nettle examine text. 2025-07-17 11:08:35 -05:00
Syndromeramo
6a09c9873b Rebase cleanup. 2025-07-15 12:01:54 -05:00
Syndromeramo
5bec36f811 Merge conflicts 2025-07-15 11:51:52 -05:00
Syndromeramo
0e48ac4313 Refactor of Beer Barrels.
POH Beer Glasses are separate objects from normal beer glasses, and cannot be taken out of the POH, nor any drinks received from the POH. The recipe to make it should use the normal drink, but it will only give a POH-specific version that cannot be taken out.
2025-07-15 11:51:42 -05:00
Syndromeramo
ec284bf703 Rename .java to .kt 2025-07-15 11:51:42 -05:00
Syndromeramo
1b28a0c576 Bowl of Hot Water, Cup of Water, and Cup of Hot Water can be emptied.
Further checks for items that cannot be taken out of POH.
Wooden Shelves 3 now properly give porcelain cups, not regular cups.
Teapot type has no bearing on if it can be poured into a teacup.
2025-07-15 11:51:38 -05:00
gregf36665
58bc4833cb Fix issue with cups of tea getting milky 2025-07-15 11:51:24 -05:00
gregf36665
3e0dea0d1b Update doc string for hasSpaceFor and set amount to 1 by default 2025-07-15 11:51:24 -05:00
gregf36665
de98be077e Fix missing container name 2025-07-15 11:51:24 -05:00
gregf36665
3d587ca7ed Port Larder to kotlin 2025-07-15 11:51:24 -05:00
gregf36665
90be6cff96 Create AbstractContainer so that Shelf and Larder can use the same design 2025-07-15 11:51:24 -05:00
gregf36665
af02250f88 Check size of shelf in a better way 2025-07-15 11:51:24 -05:00
gregf36665
32293edd1a Replace if cascade with when 2025-07-15 11:51:24 -05:00
gregf36665
0ade1f308c Add missing teapot. Remove obsolete parameters
Fix issue with 2nd More not working
2025-07-15 11:51:24 -05:00
gregf36665
db43418b1e Clean up text.
Fix bug with cake tin not appearing
2025-07-15 11:51:24 -05:00
gregf36665
cbe3a04b5a Remove unneeded code 2025-07-15 11:51:23 -05:00
gregf36665
932f1770ff First draft at a procedural More options 2025-07-15 11:51:23 -05:00
gregf36665
655d5f0e06 More work on the shelf listener 2025-07-15 11:51:23 -05:00
gregf36665
a0cd34a1af Start working on implementing new shelves 2025-07-15 11:51:23 -05:00
gregf36665
8fea59e1cc Add level check and XP reward for builders tea 2025-07-15 11:51:23 -05:00
gregf36665
a7c1c510d8 Implement clearing BoB inventory 2025-07-15 11:51:23 -05:00
gregf36665
47157671f6 Rebase 2025-07-15 11:51:21 -05:00
gregf36665
0b721d2a78 Add filling tea for all tiers 2025-07-15 11:50:14 -05:00
gregf36665
6ea9151e1e Clean up comments 2025-07-15 11:50:14 -05:00
gregf36665
006dedec4b Allow making and pouring of builders tea 2025-07-15 11:50:14 -05:00
gregf36665
7c553fbcad Add message to drinking milky builders tea 2025-07-15 11:50:14 -05:00
gregf36665
484100cddc You can now empty tea pots
Not sure why you ever would want to
2025-07-15 11:50:13 -05:00
gregf36665
e890f7412d Fix losing bowl 2025-07-15 11:50:13 -05:00
gregf36665
71abaf9e03 Add emptying all cups of tea 2025-07-15 11:50:13 -05:00
gregf36665
484f6e1614 Add more cups of tea 2025-07-15 11:50:13 -05:00
gregf36665
4f8892c94e Update tea effects to be accurate to 2009 not OSRS 2025-07-15 11:50:13 -05:00
gregf36665
dd444a2bf3 Port NettleTeaPlugin.java and NettleWaterPlugin.java to TeaInteraction.kt 2025-07-15 11:50:13 -05:00
gregf36665
f9a3026fb3 Add nettle water as a drinkable thing 2025-07-15 11:50:13 -05:00
gregf36665
fcec1e4e86 Fix description of nettles and nettle tea 2025-07-15 11:50:13 -05:00
gregf36665
ed3bb48bbb Fix formatting 2025-07-15 11:50:13 -05:00
gregf36665
1b45a9ffb5 Add option to heat up bowl of water and implement milky tea 2025-07-15 11:50:13 -05:00
gregf36665
b6c4438233 Evaporate a cup of cold water in the desert 2025-07-15 11:50:12 -05:00
gregf36665
8dd9cc0b2e Add option to fill cup with water 2025-07-15 11:50:12 -05:00
gregf36665
0198febf9d Start adding tea making listeners 2025-07-15 11:50:12 -05:00
gregf36665
dd7162b4fe Implement boiling a kettle 2025-07-15 11:50:12 -05:00
gregf36665
a4aa3e41a3 Add kettle as option to fill with water 2025-07-15 11:50:12 -05:00
21 changed files with 738 additions and 649 deletions

View file

@ -39175,7 +39175,7 @@
"id": "4237"
},
{
"examine": "It's a bowl of (milky) nettle tea.",
"examine": "It's a bowl of nettle tea.",
"durability": null,
"name": "Nettle tea",
"weight": "0.9",
@ -39183,7 +39183,7 @@
"id": "4239"
},
{
"examine": "It's a bowl of (milky) nettle tea.",
"examine": "It's a bowl of milky nettle tea.",
"durability": null,
"name": "Nettle tea",
"weight": "0.9",
@ -39191,7 +39191,7 @@
"id": "4240"
},
{
"examine": "(In inventory) A handful of nettles (In ground) I better not get stung/I wouldn't like to get stung/I wish I could sting other people/Dock leaves at the ready/These may hurt/nettles sting my leggies(Draynor Village nettles)",
"examine": "A handful of nettles.",
"durability": null,
"name": "Nettles",
"archery_ticket_price": "0",
@ -39199,22 +39199,22 @@
},
{
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "A nice cup of nettle tea.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "4242"
},
{
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "A milky cup of nettle tea.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "4243"
@ -39228,22 +39228,22 @@
},
{
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "Some nettle tea in a porcelain cup.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "4245"
},
{
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "Some milky nettle tea in a porcelain cup.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "4246"
@ -70083,517 +70083,584 @@
"id": "7687"
},
{
"bankable": "false",
"examine": "The kettle is empty.",
"durability": null,
"name": "Kettle",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7688"
},
{
"bankable": "false",
"durability": null,
"name": "Kettle",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7689"
},
{
"bankable": "false",
"examine": "It's full of cold water.",
"durability": null,
"name": "Full kettle",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7690"
},
{
"bankable": "false",
"examine": "It's full of boiling water.",
"durability": null,
"name": "Hot kettle",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7691"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (4)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7692"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (4)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7693"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (3)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7694"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (3)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7695"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (2)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7696"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (2)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7697"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (1)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7698"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (1)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7699"
},
{
"bankable": "false",
"examine": "Add boiling water to make a tea.",
"durability": null,
"name": "Teapot with leaves",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7700"
},
{
"bankable": "false",
"durability": null,
"name": "Teapot with leaves",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7701"
},
{
"bankable": "false",
"examine": "This teapot is empty.",
"durability": null,
"name": "Teapot",
"tradeable": "true",
"tradeable": "false",
"weight": "0.4",
"archery_ticket_price": "0",
"id": "7702"
},
{
"bankable": "false",
"durability": null,
"name": "Teapot",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7703"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (4)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7704"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (4)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7705"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (3)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7706"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (3)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7707"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (2)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7708"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (2)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7709"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (1)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7710"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (1)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7711"
},
{
"bankable": "false",
"examine": "Add boiling water to make a tea.",
"durability": null,
"name": "Teapot with leaves",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7712"
},
{
"bankable": "false",
"durability": null,
"name": "Teapot with leaves",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7713"
},
{
"bankable": "false",
"examine": "This teapot is empty.",
"durability": null,
"name": "Teapot",
"tradeable": "true",
"tradeable": "false",
"weight": "0.4",
"archery_ticket_price": "0",
"id": "7714"
},
{
"bankable": "false",
"durability": null,
"name": "Teapot",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7715"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (4)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7716"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (4)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7717"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (3)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7718"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (3)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7719"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (2)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7720"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (2)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7721"
},
{
"bankable": "false",
"examine": "I'd really like a nice cup of tea.",
"durability": null,
"name": "Pot of tea (1)",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7722"
},
{
"bankable": "false",
"durability": null,
"name": "Pot of tea (1)",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7723"
},
{
"bankable": "false",
"examine": "Add boiling water to make a tea.",
"durability": null,
"name": "Teapot with leaves",
"tradeable": "true",
"tradeable": "false",
"weight": "1.5",
"archery_ticket_price": "0",
"id": "7724"
},
{
"bankable": "false",
"durability": null,
"name": "Teapot with leaves",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7725"
},
{
"bankable": "false",
"examine": "This teapot is empty.",
"durability": null,
"name": "Teapot",
"tradeable": "true",
"tradeable": "false",
"weight": "0.4",
"archery_ticket_price": "0",
"id": "7726"
},
{
"bankable": "false",
"durability": null,
"name": "Teapot",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7727"
},
{
"bankable": "false",
"shop_price": "1",
"examine": "An empty cup.",
"grand_exchange_price": "7",
"durability": null,
"name": "Empty cup",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7728"
},
{
"bankable": "false",
"durability": null,
"name": "Empty cup",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7729"
},
{
"bankable": "false",
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "A nice cup of nettle tea.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "7730"
},
{
"bankable": "false",
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "A milky cup of nettle tea.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "7731"
},
{
"bankable": "false",
"examine": "A porcelain cup.",
"durability": null,
"name": "Porcelain cup",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7732"
},
{
"bankable": "false",
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "Some nettle tea in a porcelain cup.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "7733"
},
{
"bankable": "false",
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "Some milky nettle tea in a porcelain cup.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "7734"
},
{
"bankable": "false",
"examine": "A porcelain cup.",
"durability": null,
"name": "Porcelain cup",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7735"
},
{
"bankable": "false",
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "Some nettle tea in a porcelain cup.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "7736"
},
{
"bankable": "false",
"shop_price": "10",
"examine": "A nice cup of tea.",
"examine": "Some milky nettle tea in a porcelain cup.",
"grand_exchange_price": "30",
"durability": null,
"name": "Cup of tea",
"tradeable": "true",
"tradeable": "false",
"weight": "0.1",
"archery_ticket_price": "0",
"id": "7737"
},
{
"bankable": "false",
"examine": "Mmm, how about a nice cup of tea?",
"durability": null,
"name": "Tea leaves",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7738"
},
{
"bankable": "false",
"durability": null,
"name": "Tea leaves",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7739"
},
{
"bankable": "false",
"examine": "A glass of frothy ale.",
"grand_exchange_price": "151",
"durability": null,
"name": "Beer",
"tradeable": "true",
"tradeable": "false",
"weight": "1",
"archery_ticket_price": "0",
"id": "7740"
},
{
"bankable": "false",
"durability": null,
"name": "Beer",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7741"
},
{
"bankable": "false",
"shop_price": "1",
"examine": "I need to fill this with beer.",
"grand_exchange_price": "25",
"durability": null,
"name": "Beer glass",
"tradeable": "true",
"tradeable": "false",
"weight": "0.05",
"archery_ticket_price": "0",
"id": "7742"
},
{
"bankable": "false",
"durability": null,
"name": "Beer glass",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7743"
},
{
"bankable": "false",
"shop_price": "3",
"examine": "Probably the finest readily-available ale in Asgarnia.",
"grand_exchange_price": "131",
"durability": null,
"name": "Asgarnian ale",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7744"
},
{
"bankable": "false",
"durability": null,
"name": "Asgarnian ale",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7745"
},
{
"bankable": "false",
"shop_price": "2",
"examine": "A glass of frothy ale.",
"grand_exchange_price": "569",
"durability": null,
"name": "Greenman's ale",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7746"
},
{
"bankable": "false",
"durability": null,
"name": "Greenman's ale",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7747"
},
{
"bankable": "false",
"shop_price": "2",
"examine": "A glass of bitter.",
"grand_exchange_price": "523",
"durability": null,
"name": "Dragon bitter",
"tradeable": "true",
"tradeable": "false",
"weight": "1",
"archery_ticket_price": "0",
"id": "7748"
},
{
"bankable": "false",
"durability": null,
"name": "Dragon bitter",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7749"
},
@ -70615,36 +70682,40 @@
"id": "7751"
},
{
"bankable": "false",
"shop_price": "2",
"examine": "A glass of Cider",
"grand_exchange_price": "1539",
"durability": null,
"name": "Cider",
"tradeable": "true",
"tradeable": "false",
"weight": "1",
"archery_ticket_price": "0",
"id": "7752"
},
{
"bankable": "false",
"durability": null,
"name": "Cider",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7753"
},
{
"bankable": "false",
"examine": "A fruity, full-bodied ale.",
"grand_exchange_price": "2371",
"durability": null,
"name": "Chef's delight",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7754"
},
{
"bankable": "false",
"durability": null,
"name": "Chef's delight",
"tradeable": "true",
"tradeable": "false",
"archery_ticket_price": "0",
"id": "7755"
},

View file

@ -201,6 +201,7 @@ public enum Consumables {
/** Ales */
ASGOLDIAN_ALE(new FakeConsumable(7508, new String[] {"I don't think I'd like gold in beer thanks. Leave it for the dwarves."})),
ASGARNIAN_ALE(new Drink(new int[] {1905, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
ASGARNIAN_ALE_POH(new Drink(new int[] {7744, 7742}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
ASGARNIAN_ALE_KEG(new Drink(new int[] {5785, 5783, 5781, 5779, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
ASGARNIAN_ALE_M(new Drink(new int[] {5739, 1919}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
ASGARNIAN_ALE_M_KEG(new Drink(new int[] {5865, 5863, 5861, 5859, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))),
@ -210,17 +211,21 @@ public enum Consumables {
AXEMANS_FOLLY_M_KEG(new Drink(new int[] {5905, 5903, 5901, 5899, 5769}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 2, 0), new HealingEffect(2), new SkillEffect(Skills.STRENGTH, -4, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))),
BANDITS_BREW(new Drink(new int[] {4627, 1919}, new MultiEffect(new SkillEffect(Skills.THIEVING, 1, 0), new SkillEffect(Skills.ATTACK, 1, 0), new SkillEffect(Skills.STRENGTH, -1, 0), new SkillEffect(Skills.DEFENCE, -6, 0), new HealingEffect(1)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
BEER(new Drink(new int[] {1917, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
BEER_POH(new Drink(new int[] {7740, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
BEER_TANKARD(new Drink(new int[] {3803, 3805}, new MultiEffect(new SkillEffect(Skills.ATTACK, -9, 0), new SkillEffect(Skills.STRENGTH, 4, 0)), "You quaff the beer. You feel slightly reinvigorated...", "...but very dizzy too.")),
KEG_OF_BEER(new Drink(new int[] {3801}, new KegOfBeerEffect(), new Animation(1330), "You chug the keg. You feel reinvigorated...", "...but extremely drunk too.")),
CHEFS_DELIGHT(new Drink(new int[] {5755, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
CHEFS_DELIGHT_POH(new Drink(new int[] {7754, 7742}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
CHEFS_DELIGHT_KEG(new Drink(new int[] {5833, 5831, 5829, 5827, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
CHEFS_DELIGHT_M(new Drink(new int[] {5757, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)))),
CHEFS_DELIGHT_M_KEG(new Drink(new int[] {5913, 5911, 5909, 5907, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)), new Animation(2289))),
CIDER(new Drink(new int[] {5763, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))),
CIDER_POH(new Drink(new int[] {7752, 7742}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))),
CIDER_KEG(new Drink(new int[] {5849, 5847, 5845, 5843, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))), new Animation(2289))),
MATURE_CIDER(new Drink(new int[] {5765, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))))),
CIDER_M_KEG(new Drink(new int[] {5929, 5927, 5925, 5923, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))), new Animation(2289))),
DRAGON_BITTER(new Drink(new int[] {1911, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
DRAGON_BITTER_POH(new Drink(new int[] {7748, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
DRAGON_BITTER_KEG(new Drink(new int[] {5809, 5807, 5805, 5803, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))),
DRAGON_BITTER_M(new Drink(new int[] {5745, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
DRAGON_BITTER_M_KEG(new Drink(new int[] {5889, 5887, 5885, 5883, 5769}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))),
@ -229,6 +234,7 @@ public enum Consumables {
DWARVEN_STOUT_M(new Drink(new int[] {5747, 1919}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)))),
DWARVEN_STOUT_M_KEG(new Drink(new int[] {5857, 5855, 5853, 5851, 5769}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)), new Animation(2289))),
GREENMANS_ALE(new Drink(new int[] {1909, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))),
GREENMANS_ALE_POH(new Drink(new int[] {7746, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))),
GREENMANS_ALE_KEG(new Drink(new int[] {5793, 5791, 5789, 5787, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)), new Animation(2289))),
GREENMANS_ALE_M(new Drink(new int[] {5743, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
GREENMANS_ALE_M_KEG(new Drink(new int[] {5873, 5871, 5869, 5867, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
@ -285,16 +291,19 @@ public enum Consumables {
/** Tea */
CUP_OF_TEA(new Drink(new int[] {712, 1980}, new MultiEffect(new HealingEffect(3), new SkillEffect(Skills.ATTACK, 3, 0)), "Aaah, nothing like a nice cuppa tea!")),
CUP_OF_TEA_NETTLE(new Drink(new int[] {4242, 1980}, new EnergyEffect(10))),
CUP_OF_TEA_MILKY_NETTLE(new Drink(new int[] {4243, 1980}, new EnergyEffect(10))),
NETTLE_TEA(new Drink(new int[] {4239, 1923}, new NettleTeaEffect())),
NETTLE_TEA_MILKY(new Drink(new int[] {4240, 1980}, new NettleTeaEffect())),
NETTLE_WATER(new Drink(new int[] {Items.NETTLE_WATER_4237, Items.BOWL_1923}, new HealingEffect((1)))),
CUP_OF_TEA_NETTLE(new Drink(new int[] {4242, 1980}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
CUP_OF_TEA_MILKY_NETTLE(new Drink(new int[] {4243, 1980}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
CUP_OF_TEA_NETTLE_PORCELAIN(new Drink(new int[] {4245, 4244}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
CUP_OF_TEA_MILKY_NETTLE_PORCELAIN(new Drink(new int[] {4246, 4244}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
NETTLE_TEA(new Drink(new int[] {4239, 1923}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
NETTLE_TEA_MILKY(new Drink(new int[] {4240, 1923}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
CUP_OF_TEA_CLAY(new Drink(new int[] {7730, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")),
CUP_OF_TEA_CLAY_MILKY(new Drink(new int[] {7731, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0))),
CUP_OF_TEA_CLAY_MILKY(new Drink(new int[] {7731, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")),
CUP_OF_TEA_WHITE(new Drink(new int[] {7733, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")),
CUP_OF_TEA_WHITE_MILKY(new Drink(new int[] {7734, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0))),
CUP_OF_TEA_WHITE_MILKY(new Drink(new int[] {7734, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")),
CUP_OF_TEA_GOLD(new Drink(new int[] {7736, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")),
CUP_OF_TEA_GOLD_MILKY(new Drink(new int[] {7737, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0))),
CUP_OF_TEA_GOLD_MILKY(new Drink(new int[] {7737, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")),
/** Miscellaneous */
CHOCOLATE_BAR(new Food(new int[] {1973}, new HealingEffect(3))),

View file

@ -1,20 +0,0 @@
package content.data.consumables.effects;
import core.game.consumable.ConsumableEffect;
import core.game.node.entity.player.Player;
public class NettleTeaEffect extends ConsumableEffect {
private final static int healing = 3;
@Override
public void activate(Player p) {
final ConsumableEffect effect = p.getSkills().getLifepoints() < p.getSkills().getMaximumLifepoints() ? new MultiEffect(new HealingEffect(3), new EnergyEffect(5)) : new HealingEffect(3);
effect.activate(p);
}
@Override
public int getHealthEffectValue(Player player) {
return healing;
}
}

View file

@ -43,6 +43,7 @@ class EmptyOptionListener : InteractionListener {
BUCKET_OF_SLIME(Items.BUCKET_OF_SLIME_4286, Items.BUCKET_1925, "You empty the contents of the bucket on the floor.", Sounds.LIQUID_2401),
VIAL_OF_WATER(Items.VIAL_OF_WATER_227, Items.VIAL_229, "You empty the vial.", Sounds.LIQUID_2401),
BOWL_OF_WATER(Items.BOWL_OF_WATER_1921, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401),
BOWL_OF_HOT_WATER(Items.BOWL_OF_HOT_WATER_4456, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401),
JUG_OF_WATER(Items.JUG_OF_WATER_1937, Items.JUG_1935, "You empty the contents of the jug onto the floor.", Sounds.LIQUID_2401),
BURNT_PIE(Items.BURNT_PIE_2329, Items.PIE_DISH_2313, "You empty the pie dish."),
POTION(Items.POTION_195, Items.VIAL_229, "You empty the vial.", Sounds.LIQUID_2401),
@ -51,6 +52,30 @@ class EmptyOptionListener : InteractionListener {
CUP_OF_TEA(Items.CUP_OF_TEA_4242, Items.EMPTY_CUP_1980, "You empty the cup of tea.", Sounds.LIQUID_2401),
NETTLE_WATER(Items.NETTLE_WATER_4237, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401),
NETTLE_TEA_MILKY(Items.NETTLE_TEA_4240, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401),
NETTLE_TEA_CUP(Items.CUP_OF_TEA_4242, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
NETTLE_TEA_CUP_MILKY(Items.CUP_OF_TEA_4243, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
TEA_CUP_WATER(Items.CUP_OF_WATER_4458, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
TEA_CUP_HOT_WATER(Items.CUP_OF_HOT_WATER_4460, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
NETTLE_TEA_PORCELAIN(Items.CUP_OF_TEA_4245, Items.PORCELAIN_CUP_4244, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
NETTLE_TEA_PORCELAIN_MILKY(Items.CUP_OF_TEA_4246, Items.PORCELAIN_CUP_4244, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
BUILDERS_TEA1(Items.CUP_OF_TEA_7730, Items.EMPTY_CUP_7728, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
BUILDERS_TEA1_MILKY(Items.CUP_OF_TEA_7731, Items.EMPTY_CUP_7728, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
BUILDERS_TEA2(Items.CUP_OF_TEA_7733, Items.PORCELAIN_CUP_7732, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
BUILDERS_TEA2_MILKY(Items.CUP_OF_TEA_7734, Items.PORCELAIN_CUP_7732, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
BUILDERS_TEA3(Items.CUP_OF_TEA_7736, Items.PORCELAIN_CUP_7735, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
BUILDERS_TEA3_MILKY(Items.CUP_OF_TEA_7737, Items.PORCELAIN_CUP_7735, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401),
CLAY_POT_OF_TEA4(Items.POT_OF_TEA_4_7692, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
CLAY_POT_OF_TEA3(Items.POT_OF_TEA_3_7694, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
CLAY_POT_OF_TEA2(Items.POT_OF_TEA_2_7696, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
CLAY_POT_OF_TEA1(Items.POT_OF_TEA_1_7698, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
PORCELAIN_POT_OF_TEA4(Items.POT_OF_TEA_4_7704, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
PORCELAIN_POT_OF_TEA3(Items.POT_OF_TEA_3_7706, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
PORCELAIN_POT_OF_TEA2(Items.POT_OF_TEA_2_7708, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
PORCELAIN_POT_OF_TEA1(Items.POT_OF_TEA_1_7710, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
GOLD_PORCELAIN_POT_OF_TEA4(Items.POT_OF_TEA_4_7716, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
GOLD_PORCELAIN_POT_OF_TEA3(Items.POT_OF_TEA_3_7718, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
GOLD_PORCELAIN_POT_OF_TEA2(Items.POT_OF_TEA_2_7720, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
GOLD_PORCELAIN_POT_OF_TEA1(Items.POT_OF_TEA_1_7722, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401),
BURNT_CURRY(Items.BURNT_CURRY_2013, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401),
BURNT_GNOMEBOWL(Items.BURNT_GNOMEBOWL_2175, Items.GNOMEBOWL_MOULD_2166, "You empty the contents of the gnomebowl onto the floor."),
BURNT_EGG(Items.BURNT_EGG_7090, Items.BOWL_1923, "You empty the contents of the bowl onto the floor."),

View file

@ -129,6 +129,14 @@ class WaterSourceListener : InteractionListener {
FISHBOWL(
inputs = intArrayOf(Items.FISHBOWL_6667),
output = Items.FISHBOWL_6668
),
KETTLE(
inputs = intArrayOf(Items.KETTLE_7688),
output = Items.FULL_KETTLE_7690
),
CUP(
inputs = intArrayOf(Items.EMPTY_CUP_1980),
output = Items.CUP_OF_WATER_4458
);
companion object

View file

@ -1,6 +1,8 @@
package content.global.skill.construction;
import core.api.Container;
import org.rs09.consts.Items;
import core.game.node.entity.Entity;
import core.game.node.entity.player.Player;
import core.game.world.map.zone.MapZone;
@ -91,6 +93,7 @@ public final class HouseZone extends MapZone {
public boolean leave(Entity e, boolean logout) {
if (e instanceof Player) {
Player p = (Player) e;
remove_items(p);
// The below tears down the house if the owner was the one who left
if (house == p.getHouseManager()) {
house.expelGuests(p);
@ -121,4 +124,11 @@ public final class HouseZone extends MapZone {
}
return true;
}
private void remove_items(Player p) {
for (int item = Items.KETTLE_7688; item <= Items.CHEFS_DELIGHT_7755; item++) {//Removes all PoH versions of tea and beer barrel-related items
removeAll(p, item, Container.INVENTORY);
removeAll(p, item, Container.BoB);
}
}
}

View file

@ -1,76 +0,0 @@
package content.global.skill.construction.decoration;
import core.game.interaction.NodeUsageEvent;
import core.game.interaction.UseWithHandler;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
import org.rs09.consts.Items;
/**
* Handles the Construction beer barrels.
* @author Splinter
*/
@Initializable
public class BeerBarrelPlugin extends UseWithHandler {
/**
* The object ids
*/
private static final int[] OBJECTS = new int[] {
13568, 13569, 13570, 13571, 13572, 13573
};
/**
* Constructs a new {@Code BeerBarrelPlugin} {@Code Object}
*/
public BeerBarrelPlugin() {
super(1919);
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
for (int id : OBJECTS) {
addHandler(id, OBJECT_TYPE, this);
}
return this;
}
@Override
public boolean handle(NodeUsageEvent event) {
Player player = event.getPlayer();
final Scenery object = (Scenery) event.getUsedWith();
if (player.getInventory().remove(new Item(Items.BEER_GLASS_1919))) {
player.animate(Animation.create(833));
player.sendMessage("You fill up your glass.");
player.getInventory().add(new Item(getReward(object.getId()), 1));
}
return true;
}
/**
* Get the beer reward based on the interaced barrel.
* @return the item to give.
*/
public int getReward(int barrelId) {
switch (barrelId) {
case 13568:
return 1917;
case 13569:
return 5763;
case 13570:
return 1905;
case 13571:
return 1909;
case 13572:
return 1911;
case 13573:
return 5755;
}
return 1917;
}
}

View file

@ -0,0 +1,78 @@
package content.global.skill.construction.decoration.kitchen
import core.api.addItem
import core.api.freeSlots
import core.api.sendDialogue
import core.game.dialogue.DialogueFile
import core.game.dialogue.Topic
import core.game.node.entity.player.Player
import core.tools.END_DIALOGUE
abstract class AbstractContainer(containerId: Int, containers: Map<Int,List<Pair<String, Int>>>, private val containerName: String) : DialogueFile() {
private val container = containers[containerId]!!
private val containerItemsNames = container.map { it.first }
private val containerItemsIds = container.map { it.second }
private val size = container.size
private val itemsPerPage = 4
private fun checkItem(player: Player, idx : Int){
val item = containerItemsIds[idx]
if (addItem(player, item)){
end()
}
else{
sendDialogue(player, "You need at least one free inventory space to take from the $containerName.").also { stage = END_DIALOGUE }
}
}
private fun createTopics(page: Int): MutableList<Topic<Int>> {
val startIndex = (page - 1) * itemsPerPage
val endIndex = (startIndex + itemsPerPage).coerceAtMost(size)
val topics = containerItemsNames.subList(startIndex, endIndex)
.mapIndexed { index, item -> Topic(item, startIndex + index + 1, skipPlayer = true) }
.toMutableList()
// Add "More" button if there's another page or to loop back
if (endIndex < size || page > 1) {
topics.add(Topic("More", endIndex + 1, skipPlayer = true))
}
return topics
}
override fun handle(componentID: Int, buttonID: Int) {
if (freeSlots(player!!) == 0) {
sendDialogue(player!!, "You need at least one free inventory space to take from the $containerName.").also { stage = END_DIALOGUE }
return
}
val itemsPerPage = 4
when (stage) {
0, size + 1 -> { // Initial stage or final more button clicked
val topics = createTopics(1)
showTopics(*topics.toTypedArray()).also { stage = 1 }
}
in 1..size -> {
val currentPage = (stage-1) / itemsPerPage
val startIndex = currentPage * itemsPerPage
if (buttonID == itemsPerPage + 1) { // "More" button clicked (but not the last one)
val topics = createTopics(currentPage + 1)
showTopics(*topics.toTypedArray()).also { stage = currentPage*itemsPerPage + 1 }
} else { // Handle item selection
val itemIndex = startIndex + (buttonID - 1)
if (itemIndex < size) {
checkItem(player!!, itemIndex)
}
}
}
else -> end()
}
}
}

View file

@ -0,0 +1,29 @@
package content.global.skill.construction.decoration.kitchen
import core.api.*
import core.game.interaction.InteractionListener
import org.rs09.consts.Items
class BeerBarrelInteraction : InteractionListener {
companion object{
private val barrelMap = mapOf(
org.rs09.consts.Scenery.BEER_BARREL_13568 to Items.BEER_7740,
org.rs09.consts.Scenery.CIDER_BARREL_13569 to Items.CIDER_7752,
org.rs09.consts.Scenery.ASGARNIAN_ALE_13570 to Items.ASGARNIAN_ALE_7744,
org.rs09.consts.Scenery.GREENMAN_S_ALE_13571 to Items.GREENMANS_ALE_7746,
org.rs09.consts.Scenery.DRAGON_BITTER_13572 to Items.DRAGON_BITTER_7748,
org.rs09.consts.Scenery.CHEF_S_DELIGHT_13573 to Items.CHEFS_DELIGHT_7754,
)
}
override fun defineListeners() {
onUseWith(SCENERY, Items.BEER_GLASS_7742, *barrelMap.keys.toIntArray()){ player, used, with ->
val drinkName = with.name.lowercase().replace("barrel", "").trim()+"."
if (removeItem(player, used)){
sendMessage(player, "You fill up your glass with $drinkName")
addItem(player, barrelMap[with.id]!!)
}
return@onUseWith true
}
}
}

View file

@ -1,77 +0,0 @@
package content.global.skill.construction.decoration.kitchen;
import core.game.interaction.NodeUsageEvent;
import core.game.interaction.UseWithHandler;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
import org.rs09.consts.Items;
/**
* Handles the Construction beer barrels.
* @author Splinter
*/
@Initializable
public class BeerBarrelPlugin extends UseWithHandler {
/**
* The object ids
*/
private static final int[] OBJECTS = new int[] {
13568, 13569, 13570, 13571, 13572, 13573
};
/**
* Constructs a new {@Code BeerBarrelPlugin} {@Code Object}
*/
public BeerBarrelPlugin() {
super(1919);
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
for (int id : OBJECTS) {
addHandler(id, OBJECT_TYPE, this);
}
return this;
}
@Override
public boolean handle(NodeUsageEvent event) {
Player player = event.getPlayer();
final Scenery object = (Scenery) event.getUsedWith();
if (player.getInventory().remove(new Item(Items.BEER_GLASS_1919))) {
player.animate(Animation.create(3661 + (object.getId() - 13569)));
player.sendMessage("You fill up your glass with " + object.getName().toLowerCase().replace("barrel", "").trim() + ".");
player.getInventory().add(new Item(getReward(object.getId()), 1));
}
return true;
}
/**
* Get the beer reward based on the interacted barrel.
* @return the item to give.
*/
public int getReward(int barrelId) {
switch (barrelId) {
case 13568:
return 1917;
case 13569:
return 5763;
case 13570:
return 1905;
case 13571:
return 1909;
case 13572:
return 1911;
case 13573:
return 5755;
}
return 1917;
}
}

View file

@ -0,0 +1,42 @@
package content.global.skill.construction.decoration.kitchen
import core.api.openDialogue
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import org.rs09.consts.Items
import org.rs09.consts.Scenery
class LarderListener : InteractionListener {
companion object {
private val wooden_larder_items = listOf(
"Tea Leaves" to Items.TEA_LEAVES_7738,
"Bucket of Milk" to Items.BUCKET_OF_MILK_1927
)
private val oak_larder_items = wooden_larder_items + listOf(
"Eggs" to Items.EGG_1944,
"Pot of Flour" to Items.POT_OF_FLOUR_1933
)
private val teak_larder_items = oak_larder_items + listOf(
"Potatoes" to Items.POTATO_1942,
"Garlic" to Items.GARLIC_1550,
"Onions" to Items.ONION_1957,
"Cheese" to Items.CHEESE_1985
)
val larders = mapOf(
Scenery.LARDER_13565 to wooden_larder_items,
Scenery.LARDER_13566 to oak_larder_items,
Scenery.LARDER_13567 to teak_larder_items
)
}
override fun defineListeners() {
on(larders.keys.toIntArray(), IntType.SCENERY, "Search") { player, node ->
openDialogue(player, LarderDialogue(node.id))
return@on true
}
}
class LarderDialogue(shelfId: Int) : AbstractContainer(shelfId, larders, "larder")
}

View file

@ -1,149 +0,0 @@
package content.global.skill.construction.decoration.kitchen;
import core.cache.def.impl.SceneryDefinition;
import core.plugin.Initializable;
import core.game.dialogue.DialoguePlugin;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.plugin.Plugin;
import core.plugin.ClassScanner;
import org.rs09.consts.Items;
/**
* Handles the interactions for the three Larders.
* @author Splinter
*/
@Initializable
public final class LarderPlugin extends OptionHandler {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
ClassScanner.definePlugin(new LarderDialogue());
SceneryDefinition.forId(13565).getHandlers().put("option:search", this);
SceneryDefinition.forId(13566).getHandlers().put("option:search", this);
SceneryDefinition.forId(13567).getHandlers().put("option:search", this);
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
player.getDialogueInterpreter().open(42048, node.getId());
return true;
}
/**
* Dialogue options for the Larders.
* @author Splinter
* @version 1.0
*/
public final class LarderDialogue extends DialoguePlugin {
/**
* Constructs a new {@code LarderDialogue} {@code Object}.
*/
public LarderDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code LarderDialogue} {@code Object}.
*
* @param player
* the player.
*/
public LarderDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new LarderDialogue(player);
}
@Override
public boolean open(Object... args) {
int id = (int) args[0];
switch (id) {
case 13565:
interpreter.sendOptions("Select an Option", "Tea Leaves", "Bucket of Milk");
stage = 1;
break;
case 13566:
interpreter.sendOptions("Select an Option", "Tea Leaves", "Bucket of Milk", "Eggs", "Pot of Flour");
stage = 1;
break;
case 13567:
interpreter.sendOptions("Select an Option", "Tea Leaves", "Bucket of Milk", "Eggs", "Pot of Flour", "More Options");
stage = 1;
break;
}
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
if (player.getInventory().freeSlots() < 1) {
player.sendMessage("You need at least one free inventory space to take from the larder.");
end();
return true;
}
switch (stage) {
case 1:
switch (buttonId) {
case 1:
player.getInventory().add(new Item(Items.TEA_LEAVES_7738, 1));
end();
break;
case 2:
player.getInventory().add(new Item(Items.BUCKET_OF_MILK_1927, 1));
end();
break;
case 3:
player.getInventory().add(new Item(Items.EGG_1944, 1));
end();
break;
case 4:
player.getInventory().add(new Item(Items.POT_OF_FLOUR_1933, 1));
end();
break;
case 5:
player.getDialogueInterpreter().sendOptions(
"Select an Option", "Potatoes", "Garlic", "Onions", "Cheese");
stage = 2;
break;
}
break;
case 2:
switch (buttonId) {
case 1:
player.getInventory().add(new Item(Items.POTATO_1942, 1));
end();
break;
case 2:
player.getInventory().add(new Item(Items.GARLIC_1550, 1));
end();
break;
case 3:
player.getInventory().add(new Item(Items.ONION_1957, 1));
end();
break;
case 4:
player.getInventory().add(new Item(Items.CHEESE_1985, 1));
end();
break;
}
}
return true;
}
@Override
public int[] getIds() {
return new int[] { 42048 };
}
}
}

View file

@ -0,0 +1,97 @@
package content.global.skill.construction.decoration.kitchen
import core.api.*
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import org.rs09.consts.Items
import org.rs09.consts.Scenery
class ShelfListener : InteractionListener {
companion object {
// Source for text https://www.youtube.com/watch?v=SNuqelEft3Y
private val woodshelf_1_items = listOf(
"Kettle" to Items.KETTLE_7688,
"Teapot" to Items.TEAPOT_7702,
"Cup" to Items.EMPTY_CUP_7728
)
private val woodshelf_2_items = woodshelf_1_items + listOf(
"Beer glass" to Items.BEER_GLASS_7742
)
private val woodshelf_3_items = woodshelf_2_items.map { (name, itemId) ->
when (name) {
"Cup" -> {
"Porcelain cup" to Items.PORCELAIN_CUP_7732
}
"Teapot" -> {
"Teapot" to Items.TEAPOT_7714
}
else -> {
name to itemId
}
}
} + listOf("Cake tin" to Items.CAKE_TIN_1887)
private val oakshelf_1_items = woodshelf_2_items + listOf("Cake tin" to Items.CAKE_TIN_1887) + listOf("Bowl" to Items.BOWL_1923)
private val oakshelf_2_items = oakshelf_1_items.map { (name, itemId) ->
when (name) {
"Cup" -> {
"Porcelain cup" to Items.PORCELAIN_CUP_7732
}
"Teapot" -> {
"Teapot" to Items.TEAPOT_7714
}
else -> {
name to itemId
}
}
} + listOf("Pie dish" to Items.PIE_DISH_2313)
private val teakshelf_1_items = oakshelf_2_items + listOf(
"Pot" to Items.EMPTY_POT_1931
)
private val teakshelf_2_items = teakshelf_1_items.map { (name, itemId) ->
when (name) {
"Porcelain cup" -> {
"Porcelain cup" to Items.PORCELAIN_CUP_7735
}
"Teapot" -> {
"Teapot" to Items.TEAPOT_7726
}
else -> {
name to itemId
}
}
} + listOf("Chef's Hat" to Items.CHEFS_HAT_1949)
val shelves = mapOf(
Scenery.SHELVES_13545 to woodshelf_1_items,
Scenery.SHELVES_13546 to woodshelf_2_items,
Scenery.SHELVES_13547 to woodshelf_3_items,
Scenery.SHELVES_13548 to oakshelf_1_items,
Scenery.SHELVES_13549 to oakshelf_2_items,
Scenery.SHELVES_13550 to teakshelf_1_items,
Scenery.SHELVES_13551 to teakshelf_2_items,
)
}
override fun defineListeners() {
on(shelves.keys.toIntArray(), IntType.SCENERY, "Search") { player, node ->
openDialogue(player, ShelfDialogue(node.id))
return@on true
}
}
class ShelfDialogue(shelfId: Int) : AbstractContainer(shelfId, shelves, "shelf")
}

View file

@ -1,239 +0,0 @@
package content.global.skill.construction.decoration.kitchen;
import core.cache.def.impl.SceneryDefinition;
import core.game.dialogue.DialoguePlugin;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.plugin.Plugin;
import core.plugin.ClassScanner;
import org.rs09.consts.Items;
/**
* Handles the shelves in the kitchen room.
* @author Splinter
*/
@Initializable
public final class ShelfPlugin extends OptionHandler {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
ClassScanner.definePlugin(new ShelfDialogue());
for (int i = 13545; i < 13552; i++) {
SceneryDefinition.forId(i).getHandlers().put("option:search", this);
}
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
player.getDialogueInterpreter().open(778341, node.getId());
return true;
}
/**
* Dialogue options for the shelves, what a mess!
* @author Splinter
* @version 1.0
*/
public final class ShelfDialogue extends DialoguePlugin {
/**
* Constructs a new {@code ShelfDialogue} {@code Object}.
*/
public ShelfDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code ShelfDialogue} {@code Object}.
* @param player the player.
*/
public ShelfDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new ShelfDialogue(player);
}
@Override
public boolean open(Object... args) {
int id = (int) args[0];
switch (id) {
case 13545:// wood 1
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup");
stage = 1;
break;
case 13546:// wood 2
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass");
stage = 1;
break;
case 13547:// wood 3
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Cake tin");
stage = 1;
break;
case 13548:// oak 1
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Bowl");
stage = 2;
break;
case 13549:// oak 2
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options");
stage = 3;
break;
case 13550:// teak 1
case 13551:
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options");
stage = 5;
break;
}
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
if (player.getInventory().freeSlots() < 1) {
player.sendMessage("You need at least one free inventory space to take from the shelves.");
end();
return true;
}
switch (stage) {
case 1:// all wood shelves
switch (buttonId) {
case 1:
end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break;
case 2:
end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break;
case 3:
end();
player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1));
break;
case 4:
end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break;
case 5:
end();
player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1));
break;
}
break;
case 2:// Oak shelf #1
switch (buttonId) {
case 1:
end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break;
case 2:
end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break;
case 3:
end();
player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1));
break;
case 4:
end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break;
case 5:
end();
player.getInventory().add(new Item(Items.BOWL_1923, 1));
break;
}
break;
case 3:// Oak shelves #2 only
switch (buttonId) {
case 1:
end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break;
case 2:
end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break;
case 3:
end();
player.getInventory().add(new Item(Items.PORCELAIN_CUP_4244, 1));
break;
case 4:
end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break;
case 5:
interpreter.sendOptions("Select an Option", "Bowl", "Cake tin");
stage = 4;
break;
}
break;
case 4:// Oak shelves #2 only
switch (buttonId) {
case 1:
end();
player.getInventory().add(new Item(Items.BOWL_1923, 1));
break;
case 2:
end();
player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1));
break;
}
case 5:// teak shelves
switch (buttonId) {
case 1:
end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break;
case 2:
end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break;
case 3:
end();
player.getInventory().add(new Item(Items.PORCELAIN_CUP_7735, 1));
break;
case 4:
end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break;
case 5:
interpreter.sendOptions("Select an Option", "Bowl", "Pie dish", "Empty pot");
stage = 6;
break;
}
break;
case 6:// teak shelves
switch (buttonId) {
case 1:
end();
player.getInventory().add(new Item(Items.BOWL_1923, 1));
break;
case 2:
end();
player.getInventory().add(new Item(Items.PIE_DISH_2313, 1));
break;
case 3:
end();
player.getInventory().add(new Item(Items.EMPTY_POT_1931, 1));
break;
}
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { 778341 };
}
}
}

View file

@ -0,0 +1,88 @@
package content.global.skill.construction.decoration.kitchen
import core.api.*
import core.game.interaction.InteractionListener
import core.game.interaction.QueueStrength
import org.rs09.consts.Scenery as SceneryConst
import org.rs09.consts.Items
import core.game.node.scenery.Scenery
import core.tools.secondsToTicks
class StoveInteraction : InteractionListener {
// Imagine if these indexes incremented logically...
companion object{
val valid_stoves = intArrayOf(
SceneryConst.FIREPIT_WITH_HOOK_13529,
SceneryConst.FIREPIT_WITH_POT_13531,
SceneryConst.SMALL_OVEN_13533,
SceneryConst.LARGE_OVEN_13536,
SceneryConst.STEEL_RANGE_13539,
SceneryConst.FANCY_RANGE_13542
)
val in_progress_stoves = intArrayOf(
SceneryConst.FIREPIT_WITH_HOOK_13530,
SceneryConst.FIREPIT_WITH_POT_13532,
SceneryConst.SMALL_OVEN_13534,
SceneryConst.LARGE_OVEN_13537,
SceneryConst.STEEL_RANGE_13541,
SceneryConst.FANCY_RANGE_13544
)
val stoves_with_kettle = intArrayOf(
SceneryConst.FIREPIT_WITH_HOOK_13530,
SceneryConst.FIREPIT_WITH_POT_13532,
SceneryConst.SMALL_OVEN_13535,
SceneryConst.LARGE_OVEN_13538,
SceneryConst.STEEL_RANGE_13540,
SceneryConst.FANCY_RANGE_13543
)
const val kettleBoiled = "kettle_boiled"
}
override fun defineListeners() {
onUseWith(SCENERY, Items.FULL_KETTLE_7690, *valid_stoves){ player, used, with ->
val idx = valid_stoves.indexOf(with.id)
if (removeItem(player, used)){
replaceScenery(with as Scenery, in_progress_stoves[idx], -1)
sendMessage(player, "You place the kettle over the fire.")
setAttribute(player, kettleBoiled, 1)
queueScript(player, secondsToTicks(10), QueueStrength.SOFT){ _ ->
sendMessage(player, "The kettle boils.")
// Of course they changed how these items work so we need 2 different cases
setAttribute(player, kettleBoiled, 2)
if (with.id in intArrayOf(SceneryConst.FIREPIT_WITH_HOOK_13529, SceneryConst.FIREPIT_WITH_POT_13531))
return@queueScript stopExecuting(player)
else{
getScenery(with.location)?.let { replaceScenery(it, stoves_with_kettle[idx], -1) }
return@queueScript stopExecuting(player)
}
}
}
return@onUseWith true
}
on(stoves_with_kettle, SCENERY, "take-kettle"){ player, node ->
if (getAttribute(player, kettleBoiled, 0) == 0){
sendMessage(player, "This is not your kettle.")
return@on false
}
else if (getAttribute(player, kettleBoiled, 0) == 1){
sendMessage(player, "The kettle has not boiled yet.")
return@on false
}
if(addItem(player, Items.HOT_KETTLE_7691)){
replaceScenery(node as Scenery, valid_stoves[stoves_with_kettle.indexOf(node.id)], -1)
setAttribute(player, kettleBoiled, 0)
return@on true
}
else {
sendMessage(player, "You do not have space to do that.")
return@on false
}
}
}
}

View file

@ -81,7 +81,7 @@ public enum CookableItems {
// bowl foods
BOWL_STEW(2003, 2001, 2005, 25, 117, 68, 392, 68, 392),
BOWL_CURRY(2011, 2009, 2013, 60, 280, 38, 332, 38, 332),
BOWL_NETTLE(4239, 4237, 4239, 20, 52, 78, 412, 78, 412),
BOWL_NETTLE(4239, 4237, 4239, 20, 53, 78, 412, 78, 412),
BOWL_EGG(7078, 7076, 7090, 13, 50, 0, 0, 90, 438),
BOWL_ONION(7084, 1871, 7092, 43, 60, 36, 322, 36, 322),
BOWL_MUSHROOM(7082, 7080, 7094, 46, 60, 16, 282, 16, 282),

View file

@ -33,6 +33,7 @@ class CookingRewrite : InteractionListener {
list.add(RAW_BEEF_2132)
list.add(RAW_BEAR_MEAT_2136)
list.add(SEAWEED_401)
list.add(Items.BOWL_OF_WATER_1921)
RAW_FOODS = list.toIntArray()
}
@ -79,6 +80,10 @@ class CookingRewrite : InteractionListener {
player.packetDispatch.sendMessage("You need to cook this on a range.")
return@onUseWith false
}
Items.BOWL_OF_WATER_1921 ->{
cook(player, obj, Items.BOWL_OF_WATER_1921, Items.BOWL_OF_HOT_WATER_4456, 1)
return@onUseWith true
}
}
//cook a standard item

View file

@ -0,0 +1,166 @@
package content.global.skill.cooking
import core.api.*
import core.game.interaction.InteractionListener
import core.game.node.Node
import core.game.node.entity.player.Player
import core.game.node.entity.skill.Skills
import org.rs09.consts.Items
/**
* This deals with all tea mixtures
* cup of tea
* nettle tea
* nettle water
* nettle tea (cup)
* poh tea
* clay
* porcelain
* gold trim
* Flask
*/
class TeaInteraction : InteractionListener {
private val teaMilkMap = mapOf(
Items.NETTLE_TEA_4239 to Items.NETTLE_TEA_4240,
Items.CUP_OF_TEA_4242 to Items.CUP_OF_TEA_4243,
Items.CUP_OF_TEA_4245 to Items.CUP_OF_TEA_4246,
Items.CUP_OF_TEA_7730 to Items.CUP_OF_TEA_7731,
Items.CUP_OF_TEA_7733 to Items.CUP_OF_TEA_7734,
Items.CUP_OF_TEA_7736 to Items.CUP_OF_TEA_7737,
)
private val teaCupMap = mapOf(
Items.NETTLE_TEA_4239 to Items.CUP_OF_TEA_4242,
Items.NETTLE_TEA_4240 to Items.CUP_OF_TEA_4243,
Items.BOWL_OF_HOT_WATER_4456 to Items.CUP_OF_HOT_WATER_4460
)
// This is specifically for the porcelain cup without a handle for Ghost Ahoy
private val teaCupPorcelainMap = mapOf(
Items.NETTLE_TEA_4239 to Items.CUP_OF_TEA_4245,
Items.NETTLE_TEA_4240 to Items.CUP_OF_TEA_4246
)
private val emptyTeaPot = intArrayOf(
Items.TEAPOT_7702,
Items.TEAPOT_7714,
Items.TEAPOT_7726
)
private val leafTeaPot = intArrayOf(
Items.TEAPOT_WITH_LEAVES_7700,
Items.TEAPOT_WITH_LEAVES_7712,
Items.TEAPOT_WITH_LEAVES_7724
)
private val filledTeaPot = intArrayOf(
Items.POT_OF_TEA_4_7692,
Items.POT_OF_TEA_3_7694,
Items.POT_OF_TEA_2_7696,
Items.POT_OF_TEA_1_7698,
Items.POT_OF_TEA_4_7704,
Items.POT_OF_TEA_3_7706,
Items.POT_OF_TEA_2_7708,
Items.POT_OF_TEA_1_7710,
Items.POT_OF_TEA_4_7716,
Items.POT_OF_TEA_3_7718,
Items.POT_OF_TEA_2_7720,
Items.POT_OF_TEA_1_7722,
)
private val emptyBuilderCup = intArrayOf(
Items.EMPTY_CUP_7728,
Items.PORCELAIN_CUP_7732,
Items.PORCELAIN_CUP_7735
)
override fun defineListeners() {
onUseWith(ITEM, teaMilkMap.keys.toIntArray(), Items.BUCKET_OF_MILK_1927){ player, used, with ->
if (removeItem(player, used) && removeItem(player, with)){
addItem(player, teaMilkMap[used.id]!!)
addItem(player, Items.BUCKET_1925)
}
return@onUseWith true
}
onUseWith(ITEM, teaCupMap.keys.toIntArray(), Items.EMPTY_CUP_1980){ player, used, with ->
if (used.id != Items.BOWL_OF_HOT_WATER_4456){
if (getDynLevel(player, Skills.COOKING) < 20){
sendDialogue(player, "You need a cooking level of 20 to make tea.")
return@onUseWith false
}
}
if (removeItem(player, used) && removeItem(player, with)) {
addItem(player, teaCupMap[used.id]!!)
addItem(player, Items.BOWL_1923)
}
return@onUseWith true
}
onUseWith(ITEM, Items.BOWL_OF_WATER_1921, Items.NETTLES_4241) { player, used, with ->
if (removeItem(player, used) && removeItem(player, with)){
addItem(player, Items.NETTLE_WATER_4237)
}
return@onUseWith true
}
onUseWith(ITEM, teaCupPorcelainMap.keys.toIntArray(), Items.PORCELAIN_CUP_4244){player, used, with ->
if (getDynLevel(player, Skills.COOKING) < 20){
sendDialogue(player, "You need a cooking level of 20 to make tea.")
return@onUseWith false
}
if(removeItem(player, used) && removeItem(player, with)){
addItem(player, teaCupPorcelainMap[used.id]!!)
addItem(player, Items.BOWL_1923)
}
return@onUseWith true
}
onUseWith(ITEM, emptyTeaPot, Items.TEA_LEAVES_7738) { player, used, with ->
if (removeItem(player, used) && removeItem(player, with)){
addItem(player, used.id - 2)
}
return@onUseWith true
}
onUseWith(ITEM, leafTeaPot, Items.HOT_KETTLE_7691) { player, used, with ->
if (getDynLevel(player, Skills.COOKING) < 20){
sendDialogue(player,"You need to be level 20 to make tea.")
return@onUseWith false
}
if (removeItem(player, used) && removeItem(player, with)){
addItem(player, Items.KETTLE_7688)
addItem(player, used.id - 8)
rewardXP(player, Skills.COOKING, 53.0)
}
return@onUseWith true
}
onUseWith(ITEM, filledTeaPot, *emptyBuilderCup) { player, used, with ->
return@onUseWith fillBuildersTea(player, used, with)
}
}
private fun fillBuildersTea(player: Player, used: Node, with: Node) : Boolean {
if (removeItem(player, used) && removeItem(player, with)){
// Thanks tea pot with tea leaves
if (used.id + 4 in emptyTeaPot){
addItem(player, used.id + 4)
}
else{
addItem(player, used.id + 2)
}
// Why do these cups have a noted form!
if (with.id == Items.EMPTY_CUP_7728){
addItem(player, with.id + 2)
}
else{
addItem(player, with.id + 1)
}
return true
}
return false
}
}

View file

@ -39,7 +39,7 @@ public final class DesertZone extends MapZone implements Plugin<Object> {
/**
* Represents data of water vessils to dry up.
*/
private static final int[][] VESSILS = new int[][] { { 1937, 1935 }, { 1929, 1925 }, { 1921, 1923 }, { 227, 229 } };
private static final int[][] VESSILS = new int[][] { { 1937, 1935 }, { 1929, 1925 }, { 1921, 1923 }, { 227, 229 }, { 4458, 1980} };
/**
* Represents the animation of drinking water.

View file

@ -3,5 +3,6 @@ package core.api
enum class Container {
INVENTORY,
BANK,
EQUIPMENT
EQUIPMENT,
BoB
}

View file

@ -341,6 +341,12 @@ fun <T> removeItem(player: Player, item: T, container: Container = Container.INV
Container.INVENTORY -> player.inventory.remove(it)
Container.BANK -> player.bank.remove(it) || player.bankSecondary.remove(it)
Container.EQUIPMENT -> player.equipment.remove(it)
Container.BoB -> {
if (player.familiarManager.hasFamiliar() && player.familiarManager.familiar.isBurdenBeast)
(player.familiarManager.familiar as BurdenBeast).container.remove(it)
else
false
}
}
}
@ -375,6 +381,12 @@ fun addItem(player: Player, id: Int, amount: Int = 1, container: Container = Con
Container.INVENTORY -> player.inventory
Container.BANK -> player.bank
Container.EQUIPMENT -> player.equipment
Container.BoB -> {
if(player.familiarManager.hasFamiliar() && player.familiarManager.familiar.isBurdenBeast)
(player.familiarManager.familiar as BurdenBeast).container
else
return false
}
}
return cont.add(Item(id, amount))
@ -394,6 +406,7 @@ fun replaceSlot(player: Player, slot: Int, item: Item, currentItem: Item? = null
Container.INVENTORY -> player.inventory
Container.EQUIPMENT -> player.equipment
Container.BANK -> player.bank
Container.BoB -> (player.familiarManager.familiar as BurdenBeast).container
}
if (item.id == 65535 || item.amount <= 0) {
@ -1684,6 +1697,14 @@ fun <T> removeAll(player: Player, item: T, container: Container = Container.INVE
player.bank.remove(Item(it, amountInPrimary)) && player.bankSecondary.remove(Item(it, amountInSecondary))
}
Container.INVENTORY -> player.inventory.remove(Item(it, amountInInventory(player, it)))
Container.BoB -> {
if (player.familiarManager.hasFamiliar() && player.familiarManager.familiar.isBurdenBeast){
val cont = (player.familiarManager.familiar as BurdenBeast).container
cont.remove(Item(it, cont.getAmount(it)))
}
else
false
}
}
}