Updated KaramjaBananaCrate plugin to listener

Moved "search" and "fill" interactions out of KaramjaOptionPlugin into new KaramjaBananaCrateListener
This commit is contained in:
Byte
2022-10-22 05:10:13 +00:00
committed by Ryan
parent c7ff6a147a
commit d3efb5cecd
3 changed files with 129 additions and 108 deletions
@@ -31,11 +31,6 @@ import core.plugin.Plugin;
@Initializable
public final class KaramajaOptionPlugin extends OptionHandler {
/**
* Represents the banana item.
*/
private static final Item BANANA = new Item(1963);
/**
* Represents the pineapple item.
*/
@@ -73,8 +68,6 @@ public final class KaramajaOptionPlugin extends OptionHandler {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
SceneryDefinition.forId(2072).getHandlers().put("option:search", this);// banana crate.
SceneryDefinition.forId(2072).getHandlers().put("option:fill", this);// banana crate.
SceneryDefinition.forId(2078).getHandlers().put("option:search", this);// random crate.
SceneryDefinition.forId(492).getHandlers().put("option:climb-down", this);// musa point rock
SceneryDefinition.forId(1764).getHandlers().put("option:climb", this);// musa dungeon rope
@@ -215,31 +208,6 @@ public final class KaramajaOptionPlugin extends OptionHandler {
case 2078:
player.getPacketDispatch().sendMessage("There are no bananas left on the tree.");
break;
case 2072:
int amt = player.getSavedData().getGlobalData().getKaramjaBananas();
if (amt >= 10) {
player.getPacketDispatch().sendMessage("The crate is full of bananas.");
return true;
}
if (amt == 0) {
player.getPacketDispatch().sendMessage("The crate is completely empty.");
} else {
player.getPacketDispatch().sendMessage("The crate has " + amt + " banana " + (amt > 1 ? "s" : "") + "inside.");
}
break;
}
break;
case "fill":
if (player.getSavedData().getGlobalData().isLuthasTask()) {
int bananas = player.getInventory().getAmount(BANANA);
if (bananas > 0) {
player.getDialogueInterpreter().sendDialogue("You pack all your bananas into the crate.");
if (player.getInventory().remove(new Item(BANANA.getId(), bananas))) {
player.getSavedData().getGlobalData().setKaramjaBannanas(bananas + player.getSavedData().getGlobalData().getKaramjaBananas());
}
}
} else {
player.getPacketDispatch().sendMessage("I don't know what goes in there.");
}
break;
case "shake":
@@ -1,76 +0,0 @@
package core.game.interaction.item.withobject;
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.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
/**
* Represents the karamaja banna crate.
* @author 'Vexia
* @date 29/11/2013
*/
@Initializable
public final class KaramajaBananaCrate extends UseWithHandler {
/**
* Represents the banana item.
*/
private static final Item BANANA = new Item(1963);
/**
* Represents the filling animation.
*/
private static final Animation ANIMATION = new Animation(832);
/**
* Represents the cap of bannas to add.
*/
private static final int CAP = 10;
/**
* Constructs a new {@code KaramajaBananaCrate} {@code Object}.
*/
public KaramajaBananaCrate() {
super(1963, 431);
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
addHandler(2072, OBJECT_TYPE, this);
return this;
}
@Override
public boolean handle(NodeUsageEvent event) {
final Player player = event.getPlayer();
if (player.getSavedData().getGlobalData().isLuthasTask() && event.getUsedItem().getId() == 431) {
if (player.getAttribute("stashed-rum", false)) {
player.getPacketDispatch().sendMessage("There's already some rum in here...");
return true;
}
if (player.getInventory().remove(event.getUsedItem())) {
player.animate(ANIMATION);
player.getDialogueInterpreter().sendDialogue("You stash the rum in the crate.");
player.setAttribute("/save:stashed-rum", true);
}
return true;
}
final int current = player.getSavedData().getGlobalData().getKaramjaBananas();
if (current == CAP) {
player.getPacketDispatch().sendMessage("The crate is already full.");
return true;
}
if (player.getInventory().remove(BANANA)) {
player.getDialogueInterpreter().sendDialogue("You pack a banana into the crate.");
player.getSavedData().getGlobalData().setKaramjaBannanas(current + 1);
player.animate(ANIMATION);
player.lock(2);
}
return true;
}
}
@@ -0,0 +1,129 @@
package rs09.game.interaction.item.withobject
import api.*
import core.game.interaction.city.KaramajaOptionPlugin
import core.game.node.item.Item
import core.game.world.update.flag.context.Animation
import org.rs09.consts.Items
import org.rs09.consts.Scenery
import rs09.game.interaction.IntType
import rs09.game.interaction.InteractionListener
import kotlin.math.min
/**
* Listener for Karamja banana crate interaction
* @author Byte
*/
@Suppress("unused")
class KaramjaBananaCrateListener : InteractionListener {
companion object {
private const val CRATE_CAPACITY = 10
private val ANIMATION = Animation(832)
}
override fun defineListeners() {
onUseWith(IntType.SCENERY, Items.KARAMJAN_RUM_431, Scenery.CRATE_2072) { player, used, _ ->
if (!player.savedData.globalData.isLuthasTask) {
sendMessage(player, "I don't know what goes in there.")
return@onUseWith true
}
if (getAttribute(player, "stashed-rum", false)) {
sendMessage(player, "There's already some rum in here...")
return@onUseWith true
}
if (!removeItem(player, used)) {
return@onUseWith false
}
lock(player, 2)
animate(player, ANIMATION)
sendDialogue(player, "You stash the rum in the crate.")
setAttribute(player, "/save:stashed-rum", true)
return@onUseWith true
}
onUseWith(IntType.SCENERY, Items.BANANA_1963, Scenery.CRATE_2072) { player, used, _ ->
if (!player.savedData.globalData.isLuthasTask) {
sendMessage(player, "I don't know what goes in there.")
return@onUseWith true
}
val currNumBananasInCrate = player.savedData.globalData.karamjaBananas
if (currNumBananasInCrate >= CRATE_CAPACITY) {
sendMessage(player, "The crate is already full.")
return@onUseWith true
}
if (!removeItem(player, used)) {
return@onUseWith false
}
lock(player, 2)
animate(player, ANIMATION)
sendDialogue(player, "You pack a banana into the crate.")
player.savedData.globalData.setKaramjaBannanas(currNumBananasInCrate + 1)
return@onUseWith true
}
on(Scenery.CRATE_2072, IntType.SCENERY, "search") { player, _ ->
if (!player.savedData.globalData.isLuthasTask) {
sendMessage(player, "I don't know what goes in there.")
return@on true
}
val currNumBananasInCrate = player.savedData.globalData.karamjaBananas
if (currNumBananasInCrate == 0) {
sendMessage(player, "The crate is completely empty.")
return@on true
}
if (currNumBananasInCrate >= CRATE_CAPACITY) {
sendMessage(player, "The crate is full of bananas.")
return@on true
}
sendMessage(player, "The crate has " + currNumBananasInCrate + " banana" + (if (currNumBananasInCrate > 1) "s" else "") + " inside.")
return@on true
}
on(Scenery.CRATE_2072, IntType.SCENERY, "fill") { player, _ ->
if (!player.savedData.globalData.isLuthasTask) {
sendMessage(player, "I don't know what goes in there.")
return@on true
}
val numBananas = amountInInventory(player, Items.BANANA_1963)
val currNumBananasInCrate = player.savedData.globalData.karamjaBananas
val bananasToBeAdded = min(numBananas, CRATE_CAPACITY - player.savedData.globalData.karamjaBananas)
if (numBananas == 0) {
return@on true
}
if (currNumBananasInCrate >= CRATE_CAPACITY) {
sendMessage(player, "The crate is already full.")
return@on true
}
if (!removeItem(player, Item(Items.BANANA_1963, bananasToBeAdded))) {
return@on false
}
lock(player, 2)
animate(player, ANIMATION)
sendMessage(player, "You pack all your bananas into the crate.")
player.savedData.globalData.setKaramjaBannanas(player.savedData.globalData.karamjaBananas + bananasToBeAdded)
return@on true
}
}
}