diff --git a/Server/src/main/java/core/game/interaction/city/KaramajaOptionPlugin.java b/Server/src/main/java/core/game/interaction/city/KaramajaOptionPlugin.java index b8abc70c5..fc2020660 100644 --- a/Server/src/main/java/core/game/interaction/city/KaramajaOptionPlugin.java +++ b/Server/src/main/java/core/game/interaction/city/KaramajaOptionPlugin.java @@ -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 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": diff --git a/Server/src/main/java/core/game/interaction/item/withobject/KaramajaBananaCrate.java b/Server/src/main/java/core/game/interaction/item/withobject/KaramajaBananaCrate.java deleted file mode 100644 index f568af267..000000000 --- a/Server/src/main/java/core/game/interaction/item/withobject/KaramajaBananaCrate.java +++ /dev/null @@ -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 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; - } - -} diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/KaramjaBananaCrateListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/KaramjaBananaCrateListener.kt new file mode 100644 index 000000000..070a7766a --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/KaramjaBananaCrateListener.kt @@ -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 + } + } +}