Jump to content

Interface directory: Difference between revisions

From Age Of Embers Wiki
imported>Age Of Embers Editorial Team
Initial verified wiki package import
 
imported>Age Of Embers Editorial Team
Initial verified wiki package import
Line 2,407: Line 2,407:


[[Category:Interfaces]][[Category:Directories]][[Category:Source-verified pages]]
[[Category:Interfaces]][[Category:Directories]][[Category:Source-verified pages]]
{{Play CTA}}



Revision as of 20:53, 23 July 2026

Interface directory
TypeComplete UI source index
StatusActive modules only
VerifiedCore, restricted and enabled plugin interfaces


The interface directory documents every active interface class or interface script detected in the supplied base. It includes player-facing panels, inventories, reward screens, shops, exchanges, raids, minigames, account management and internal overlays.

252 interface sources indexedDeclared button/action labels are extracted where available. An interface appearing here proves that its active module exists; it does not necessarily mean every player can open it without the associated NPC, object, item or progression requirement.
Interface Module type Declared actions Source
Donation Store Restricted game content , (player, slotId, itemId, option) -> {

player.lock(1); if (option != 1) return; transmitPlayerIndividualOffers(player); });

bind(, , (player, slotId, itemId, option) -> { player.lock(1); IntEnum required = EnumDefinitions.getIntEnum(NearRealityStoreInterfacePacker.LOYALTY_DONATED_ENUM); IntEnum rewards = EnumDefinitions.getIntEnum(NearRealityStoreInterfacePacker.LOYALTY_REWARDS_ENUM); int rewardId = rewards.getValueOrDefault(slotId); if (rewardId == -1) return;

if (option == 10) { ItemUtil.sendItemExamine(player, rewardId); return; }

int dollarsRequired = required.getValueOrDefault(slotId); int donatedAfterLaunch = PlayerAttributesKt.getTotalDonatedAfterLaunch(player); if (donatedAfterLaunch < dollarsRequired) { player.sendMessage(, , (player, slotId, itemId, option) -> { PlayerAttributesKt.setStoreCategory(player, slotId); transmitCategory(player); });

bind(, , player -> setTab(player, 0)); bind(, , player -> setTab(player, 2)); bind(, list, loyalty_content_transmit, loyalty_footer_transmit, loyalty_side_transmit, popup_transmit, stock_transmit, tab_1 || core-restricted/src/main/java/com/near_reality/content/donatestore/DonationStoreInterface.java

Colosseum Reward Chest Restricted game content , (player, slotId, itemId, option) -> {

if (option == 10) { ItemUtil.sendItemExamine(player, itemId); return; }

Container container = getContainer(player); if (container == null) { return; }

Item item = container.get(slotId); if (item == null) return;

container.set(slotId, item.toNote()); container.withdraw(player, player.getInventory().getContainer(), slotId, item.getAmount());

if (container.get(slotId) != null) { container.set(slotId, new Item(item.getDefinitions().getUnnotedOrDefault(), item.getAmount())); }

container.refresh(player); player.getInventory().getContainer().refresh(player); setValue(player, container); }); }

private Container getContainer(Player player) { if (!(player.getArea() instanceof ColosseumInstance instance)) { return null; }

Container container = instance.getRewards(); if (container.isEmpty()) { player.sendMessage(, , player -> { Container container = getContainer(player); if (container == null) return;

for (int slot = 0; slot < container.getContainerSize() + 1; slot++) { Item item = container.get(slot); if (item == null) continue; player.getBank().getContainer().deposit(player, container, slot, item.getAmount()); } container.refresh(player); player.getBank().getContainer().refresh(player); setValue(player, container); });

bind(, , player -> player.getDialogueManager().start(new Dialogue(player) { @Override public void buildDialogue() { options(, bank-all, discard-all, take, take-all || core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumRewardChestInterface.java

Colosseum Scoreboard Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumScoreboardInterface.java
Dizana Quiver Restricted game content ammo, charges, open core-restricted/src/main/java/com/zenyte/game/content/colosseum/items/DizanaQuiverInterface.java
Toaparty Restricted game content , (player, slotId, itemId, option) -> {

int currentValue = player.getVarManager().getBitValue(FRIENDS_ONLY_VARBIT); player.getVarManager().sendBitInstant(FRIENDS_ONLY_VARBIT, currentValue == 0 ? 1 : 0); updateMembersTab(player); }); bind(, , (player, slotId, itemId, option) -> { updateMembersTab(player); }); bind(, Select, Select party || core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyInterface.java

Toaparty Management Restricted game content + slot, (player, slotId, itemId, option) -> {

boolean accept = slotId < 44; final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty == null) { return; } final Player p = viewingParty.getApplicant(slotId - (accept ? 36 : 44)); if (accept && viewingParty.getPlayers().size() >= TOAManager.MAX_PARTY_MEMBERS) { player.sendMessage(, + slot, (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty != null && viewingParty.isLeader(player)) { player.getTOAManager().toggleInvocation(InvocationType.VALUES[slotId - 52], player); updatePartyManagementInterface(player); } }); } bind(, + slot, (player, slotId, itemId, option) -> { player.getTOAManager().setCurrentInterfaceTab(slotId - 8); updatePartyManagementInterface(player); }); } for (int slot = 12; slot < 20; slot++) { bind(, , (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty != null && viewingParty.isLeader(player)) { final int currentPresetSlot = player.getVarManager().getBitValue(PRESET_SELECT_VARBIT) - 1; if (currentPresetSlot == -1) { player.sendMessage(, , (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty != null && viewingParty.isLeader(player)) { final int currentPresetSlot = player.getVarManager().getBitValue(PRESET_SELECT_VARBIT) - 1; player.getVarManager().sendBitInstant(PRESET_SELECT_VARBIT, 0); if (currentPresetSlot == -1) { player.sendMessage(, , (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty != null && viewingParty.isLeader(player)) { final PlainChat message = new PlainChat(player, , , (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty != null && viewingParty.isLeader(player)) { player.sendInputInt(, , (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty == null || !viewingParty.isLeader(player)) { return; } final OptionDialogue dialogue = new OptionDialogue(player, , , (player, slotId, itemId, option) -> { final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty == null) { return; } switch(player.getTOAManager().getViewingValue()) { case NON_MEMBER_VIEW_VALUE -> { TOALobbyParty currentLobbyParty = TOALobbyParty.getCurrentParty(player); if (currentLobbyParty != null && currentLobbyParty.insideRaid()) { player.getDialogueManager().start(new PlainChat(player, , , (player, slotId, itemId, option) -> { GameInterface.TOA_PARTY_OVERVIEW.open(player); }); bind(, , (player, slotId, itemId, option) -> { if (slotId < 0 || slotId > 4) { return; } final TOALobbyParty viewingParty = checkViewingParty(player); if (viewingParty != null && viewingParty.isLeader(player)) { if (option == 1) { final int currentPresetSlot = player.getVarManager().getBitValue(PRESET_SELECT_VARBIT); player.getVarManager().sendBitInstant(PRESET_SELECT_VARBIT, currentPresetSlot == slotId + 1 ? 0 : slotId + 1); updatePartyManagementInterface(player); } else { final OptionDialogue dialogue = new OptionDialogue(player, , Open || core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyManagementInterface.java

Toareward Restricted game content , (player, slotId, itemId, option) -> {
           final Container container = player.getTOAManager().getRewardContainer();
           if (container == null || container.isEmpty() || slotId >= container.getSize()) {
               player.getInterfaceHandler().closeInterfaces();
           } else {
               final Item containerItem = container.get(slotId);
               int amountToTake = 1;
               if (option == 2) {
                   amountToTake = 5;
               } else if (option == 3) {
                   amountToTake = 10;
               } else if (option == 4) {
                   amountToTake = containerItem.getAmount();
               }
               final int availableAmount = containerItem.getAmount();
               amountToTake = Math.min(amountToTake, availableAmount);
               player.getInventory().addItem(new Item(containerItem.getId(), amountToTake));
               final int newAmount = Math.max(0, availableAmount - amountToTake);
               if (newAmount > 0) {
                   containerItem.setAmount(newAmount);
               } else {
                   container.set(slotId, null);
                   container.shift();
               }
               player.getPacketDispatcher().sendUpdateItemContainer(container);
               checkSize(player, container);
           }
       });
   }
   private void checkSize(Player player, Container container) {
       if (container.getSize() < 1) {
           player.getVarManager().sendBit(14319, 0);
       }
   }
   @Override
   public void open(Player player) {
       var rewardContainer = player.getTOAManager().getRewardContainer();
       if (rewardContainer != null && !rewardContainer.isEmpty()) {
           rewardContainer.setContainerSize(6);
           player.getPacketDispatcher().sendUpdateItemContainer(rewardContainer);
           rewardContainer.getItemsAsList().forEach(item -> rewardAnnounceRare(player, item.getId()));
       }
       super.open(player);
       player.getPacketDispatcher().sendClientScript(149, 50528266, 811, 2, 3, 0, -1, , , (player, slotId, itemId, option) -> {
           final Container container = player.getTOAManager().getRewardContainer();
           if (container == null || container.isEmpty()) {
               player.sendMessage(, Bank-all, Discard-all, Inventory-all, Take-All, Take-x || core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOARewardInterface.java
Toascore Board Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOAScoreBoardInterface.java
Toasupply Bag Restricted game content Container core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplyBagInterface.java
Toasupply Select Restricted game content , player -> addContainer(player, 0));

bind(, , player -> addContainer(player, 2)); }

private void addContainer(Player player, int index) { if (player.getArea() instanceof final MainHallEncounter mainHallEncounter && mainHallEncounter.getSupplyContainers() != null) { final List<Item> toAdd = mainHallEncounter.getSupplyContainers()[index].getItemsAsList(); if (!player.getInventory().containsItem(ItemId.SUPPLIES)) { if (!player.getInventory().hasSpaceFor(ItemId.SUPPLIES)) { player.getDialogueManager().start(new PlainChat(player, , Chaos, Chaos container, Life, Life container, Power, Power container || core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplySelectInterface.java

Bounty Hunter Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/kotlin/com/near_reality/game/content/bountyhunter/bounty_hunter.interface.kts
Pvm Arena Hud Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/kotlin/com/near_reality/game/content/pvm_arena/widget/PvmArenaHudInterface.kt
Rewards Restricted game content Bank-all, Take-All core-restricted/src/main/kotlin/com/near_reality/game/content/toa/rewards.interface.kts
Tournament Presets Restricted game content ) { player: Player ->
           if (cannotEnableTempContainer(player))
               return@bind
           val index = player.varManager.getValue(261) - 1
           val preset = TournamentPreset.entries[index]
           preset.apply(player)
       }
       bind(, ) { player: Player -> player.varManager.sendVar(261, 0) }
       bind(, ) { player: Player?, _: Int, _: Int, _: Int ->
           ItemUtil.sendItemExamine(player, id)
       }
       bind(, Apply, Equipment Setup, Inventory Setup, Presets, Search, Select, Take Item, View || core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/preset/TournamentPresetsInterface.kt
Spectating Inventory Restricted game content Center, Center-Model, North-East, North-East-Model, North-West, North-West-Model, South-East, South-East-Model, South-West, South-West-Model, Stop Viewing core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/SpectatingInventoryInterface.kt
Tournament Spectating Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentSpectatingInterface.kt
Tournament Viewer Restricted game content ) { player: Player -> this.refresh(player) }
       bind(, Players, Refresh, Round, View, View Fight || core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentViewerInterface.kt
Tournament Reward Restricted game content ) { player: Player, slotId: Int, itemId: Int, option: Int ->
           if (!GameToggles.TOURNAMENTS_ENABLED) {
               player.sendMessage(, Buy, Buy reward || core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/TournamentRewardInterface.kt
Diary Core game content close core/src/main/java/com/zenyte/game/content/achievementdiary/DiaryInterface.java
Advent Calendar Core game content + day, player -> openDay(player, finalDay));

} }

private static void openDay(Player player, int day) { if (!AdventCalendarManager.adventEnabled()) { player.sendMessage(, Day || core/src/main/java/com/zenyte/game/content/advent/AdventCalendarInterface.java

Boon Purchase Core game content , (player, slotId, itemId, option) -> player.getBoonManager().purchaseBoon(BoonWrapper.get(itemId).getPerk(), itemId));
       bind(, Buy, Entry, Open, Open Exchange || core/src/main/java/com/zenyte/game/content/boons/BoonPurchaseInterface.java
Quest Journal Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/casket/QuestJournalInterfaceManager.java
Raiding Parties Core game content , (player, slotId, itemId, option) -> {
           final RaidParty party = advertisedParties.get(slotId);
           if (party == null) {
               return;
           }
           player.getTemporaryAttributes().put(, , RaidingPartiesInterface::refresh);
       bind(, View, View party || core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartiesInterface.java
Raiding Party Core game content , player -> {
           final ClanChannel channel = player.getSettings().getChannel();
           if (channel == null) {
               player.getDialogueManager().start(new PlainChat(player, , , player -> {
           if (verifyConditions(player)) return;
           player.sendInputInt(, , RaidingPartiesInterface::refresh);
       bind(, , this::requestScaling);
       bind(, Toggle, view || core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartyInterface.java
Raid Party Core game content , player -> refresh(player, player.getRaid().orElseThrow(RuntimeException::new)));
       bind(, Refresh, Start raid || core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidPartyInterface.java
Raid Rewards Core game content , (player, slotId, itemId, option) -> player.getRaid().ifPresent(raid -> {
           final RaidRewards rewards = raid.getRewards();
           if (rewards == null) {
               return;
           }
           final Container container = rewards.getRewardMap().get(player);
           if (container == null) {
               return;
           }
           if (option == 10) {
               ItemUtil.sendItemExamine(player, itemId);
               return;
           }
           if (slotId == 4) {
               if (!rewards.getPlayers().contains(player)) {
                   return;
               }
               if (player.getInventory().hasFreeSlots()) {
                   rewards.getPlayers().remove(player);
                   player.getVarManager().sendBit(5457, 0);
                   player.getInventory().addItem(new Item(20899));
               } else {
                   player.sendMessage(, Take item || core/src/main/java/com/zenyte/game/content/chambersofxeric/rewards/RaidRewardsInterface.java
Private Storage Core game content , player -> {
           if (player.getGameMode().equals(GameMode.ULTIMATE_IRON_MAN) && player.getRaid().isPresent()) {
               player.sendMessage(, , player -> player.getRaid().ifPresent(raid -> GameInterface.RAIDS_SHARED_STORAGE.open(player)));
       bind(, Deposit, Deposit/Bank all, Interact with item, Shared storage button, Size, Withdraw, Withdraw all || core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/PrivateStorageInterface.java
Shared Storage Core game content , player -> {
           final Raid raid = player.getRaid().orElseThrow(RuntimeException::new);
           final SharedStorage storage = raid.constructOrGetSharedStorage();
           final int size = storage.getContainer().getContainerSize();
           player.getPrivateStorage().open(size == 250 ? 30 : size == 500 ? 60 : 90);
       });
       bind(, Container size, Interact with item, Switch to private storage || core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/SharedStorageInterface.java
Storage Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInterface.java
Storage Inventory Core game content , (player, slotId, itemId, option) -> {
           final Inventory inventory = player.getInventory();
           final Item item = inventory.getItem(slotId);
           if (item == null || item.getId() != itemId) {
               return;
           }
           if (option == 10) {
               if (player.getInterfaceHandler().isPresent(GameInterface.RAIDS_SHARED_STORAGE)) {
                   if (!Enums.RAIDS_ONLY_ITEMS.getKey(item.getId()).isPresent()) {
                       player.sendMessage(, , (player, slotId, itemId, option) -> {
           player.addAttribute(, Dismiss storage warning, Interact with item || core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInventoryInterface.java
Combat Buddy Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/combatbuddies/CombatBuddyInterfaceManager.java
Comp Progress Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/compcapes/CompProgressInterface.java
Comp Selection Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/compcapes/CompSelectionInterface.java
Daily Task Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/dailychallenge/DailyTaskInterfaceManager.java
Quest Completed Core game content Award line 1, Award line 2, Award line 3, Award line 4, Award line 5, Award line 6, Award line 7, Quest completed item, Quest completed title, Quest points core/src/main/java/com/zenyte/game/content/event/christmas2019/QuestCompletedInterface.java
Noticeboard Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/event/easter2020/NoticeboardInterface.java
Item Sets Core game content , (player, slotId, itemId, option) -> {
           if (player.getGameMode().equals(GameMode.ULTIMATE_IRON_MAN)) {
               player.sendMessage(, Interact || core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInterface.java
Item Sets Inventory Core game content Interact core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInventoryInterface.java
Hiscores Core game content , (player, slotId, itemId, option) -> {

int page = player.getNumericTemporaryAttributeOrDefault(SELECTED_PAGE_ATTRIBUTE, 0).intValue(); switch (slotId) { case 0: player.getTemporaryAttributes().put(SELECTED_PAGE_ATTRIBUTE, Math.max(0, page - 1)); refreshLastViewed(player); break; case 1: player.getTemporaryAttributes().put(SELECTED_PAGE_ATTRIBUTE, page + 1); refreshLastViewed(player); break; case 2: refreshLastViewed(player); break; } refreshDialog(player); }); bind(, , (player, slotId, itemId, option) -> selectRate(player, slotId)); bind(, , (player, slotId, itemId, option) -> toggleMode(player, GameMode.GROUP_IRON_MAN.ordinal())); }

private static void refreshDialog(Player player) { player.awaitInputString(selectDialog); Analytics.flagInteraction(player, Analytics.InteractionType.HISCORES); }

@Override public void open(Player player) { player.getVarManager().sendVar(261, 0); player.getVarManager().sendVar(262, player.getNumericTemporaryAttributeOrDefault(SELECTED_MODE_ATTRIBUTE, 0).intValue()); player.getVarManager().sendVar(263, player.getNumericTemporaryAttributeOrDefault(SELECTED_RATE_ATTRIBUTE, 0).intValue());

super.open(player);

player.getPacketDispatcher().sendComponentSettings(getId(), getComponent(, , (player, slotId, itemId, option) -> toggleMode(player, GameMode.HARDCORE_IRON_MAN.ordinal())); bind(, Dropdown, Entries, Group Ironman, Hardcore Ironman, Ironman, List, Ultimate Ironman || core/src/main/java/com/zenyte/game/content/hiscores/HiscoresInterface.java

Master Scroll Book Core game content , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.ELF_CAMP, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.FELDIP_HILLS, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.KEY_MASTER, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.LUMBERYARD, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.MORTTON, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.NARDAH, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.PISCATORIS, option));
       bind(, , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.WATSON, option));
   }
   private final void handle(@NotNull final Player player, @NotNull final ScrollBookTeleport teleport, final int option) {
       final Object scrollBook = player.getTemporaryAttributes().get(, Digsite, Elf Camp, Feldip Hills, Key Master || core/src/main/java/com/zenyte/game/content/itemtransportation/masterscrolls/MasterScrollBookInterface.java
Wilderness Loot Key Core game content , (player, slotId, itemId, option) -> {
           if (option == 1 || option == 2 || option == 5 || option == 3 || option == 4 )
               withdrawToInventory(player, itemId, option);
           // 6 = bank x | 7 = bank all
           if (option == 6 || option == 7)
               withdrawToBank(player, itemId, option);
           // 8 = destroy x | 9 = destroy y
           if (option == 8 || option == 9)
               destroyOption(player, itemId, option);
           // 10 = examine
           if (option == 10) {
               ItemUtil.sendItemExamine(player, itemId);
           }
       });
   }
   @Override
   public void open(Player player) {
       player.getInterfaceHandler().sendInterface(this);
       var container = player.getLootkeySettings().getCurrentItemsInChest(player);
       player.getPacketDispatcher().sendUpdateItemContainer(container, ContainerType.WILDERNESS_LOOT_KEY);
       if (player.isIronman()) {
           player.getPacketDispatcher().sendComponentVisibility(getInterface(), 22, true);
           player.getPacketDispatcher().sendComponentVisibility(getInterface(), 23, false);
           player.getPacketDispatcher().sendComponentSettings(getInterface(), 3, 0, 27, AccessMask.CLICK_OP10);
           player.getPacketDispatcher().sendClientScript(150, 48627715, 797, 7, 4, 0, -1, , , player -> {
           if (player.isIronman()) return;
           // TODO: withdraw all to inventory
           var container = player.getLootkeySettings().getCurrentItemsInChest(player);
           for (int i = 0; i <= container.getContainerSize(); i++) {
               var item = container.get(i);
               if (item == null) continue;
               withdrawItemsToInventory(player, item.getId(), item.getAmount());
           }
       });
       bind(, , player -> player.getDialogueManager().start(new Dialogue(player) {
           @Override
           public void buildDialogue() {
               options(, , player -> player.getLootkeySettings().setWithdrawAsNote(false));
       bind(, Bank-All, Destroy, Item, Note, Take, Take-All, Withdraw, Withdraw all to bank || core/src/main/java/com/zenyte/game/content/lootkeys/WildernessLootKeyInterface.java
Magic Storage Core game content , (player, slotId, itemId, option) -> {
           final int page = player.getNumericTemporaryAttribute(pageKey).intValue();
           final Object typeObject = player.getTemporaryAttributes().get(typeKey);
           if (!(typeObject instanceof StorageUnitType)) {
               throw new IllegalStateException();
           }
           final StorageUnitType type = (StorageUnitType) typeObject;
           final Container container = StorageUnitCollection.getSingleton().getContainer(type, page);
           final int itemSlot = slotId >> 2;
           final Item item = container.get(itemSlot);
           if (option == 10) {
               ItemUtil.sendItemExamine(player, item.getId());
           } else if (option == 1) {
               if (item.getId() == ItemId.MORE) {
                   openPage(player, page + 1, true);
               } else if (item.getId() == ItemId.BACK) {
                   openPage(player, page - 1, true);
               } else {
                   final MagicStorageUnit storage = player.getMagicStorageUnit();
                   final List<Integer> set = storage.getStoredItemIds(item.getId());
                   if (set == null) {
                       throw new IllegalStateException();
                   }
                   final Inventory inventory = player.getInventory();
                   /*final StringEnum storageEnum = Enums.COSTUME_STORAGE_UNIT_ENUM;
                   final String name = storageEnum.getValue(item.getId()).orElseThrow(RuntimeException::new);
                   if (inventory.getFreeSlots() < set.size()) {
                       player.sendMessage(, Interact with element || core/src/main/java/com/zenyte/game/content/magicstorageunit/MagicStorageInterface.java
Barrows Overlay Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsOverlayInterface.java
Barrows Puzzle Core game content , player -> player.getBarrows().getPuzzle().select(0));
       bind(, Answer option 0, Answer option 1, Answer option 2, Option 0, Option 1, Option 2, Select, Select option 0, Select option 1, Select option 2 || core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsPuzzleInterface.java
Barrows Rewards Core game content Examine core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsRewardsInterface.java
Catapult Core game content , player -> {
           player.getInterfaceHandler().closeInterface(getInterface());
           final Location destination = getDestination(player);
           final CastleWarsTeam team = CastleWars.getTeam(player);
           WorldTasksManager.schedule(() -> {
               CharacterLoop.forEach(destination, 2, Player.class, p -> {
                   if (CastleWars.getTeam(player) != CastleWars.getTeam(p)) {
                       p.applyHit(new Hit(Utils.random(8, 20), HitType.REGULAR));
                   }
               });
           }, World.sendProjectile(team == CastleWarsTeam.SARADOMIN ? SARADOMIN_CATAPULT_START : ZAMORAK_CATAPULT_START, destination, projectile));
       });
   }
   @Override
   public GameInterface getInterface() {
       return GameInterface.CASTLE_WARS_CATAPULT;
   }
   /**
    * Gets the model id representing the digit shown on the catapult interface.
    *
    * @param digit the digit for which the model to obtain.
    * @return the model if of the digit.
    */
   private static final int getModel(final int digit) {
       if (digit < 0 || digit > 9) {
           throw new IllegalArgumentException(, , player -> setHorizontalClicks(player, getHorizontalClicks(player) + 1));
       bind(, , player -> setVerticalClicks(player, getVerticalClicks(player) + 1));
       bind(, Cross, Decrease horizontal, Decrease vertical, Fire, First horizontal digit, First vertical digit, Increase horizontal, Increase vertical, Second horizontal digit || core/src/main/java/com/zenyte/game/content/minigame/castlewars/CatapultInterface.java
Duel Arena Scoreboard Core game content Duels Lost, Duels Won, Scoreboard core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelArenaScoreboardInterface.java
Duel Settings Core game content , p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.NO_FOOD); });
       bind(, ,         p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.NO_MAGIC); });
       bind(, ,        p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.BACK); });
       bind(, ,        p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.HAND); });
       bind(, ,        p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.NO_RANGED); });
       bind(, ,        p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.OBSTACLES); });
       bind(, ,        p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.RING); });
       bind(, ,       p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.NO_PRAYER); });
       bind(, ,   p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.LEFT_HAND); });
       bind(, ,   p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.NO_FUN_WEAPONS); });
       bind(, ,  p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.RIGHT_HAND); });
       bind(, , p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.SHOW_INVENTORIES); });
       // Slot disables
       bind( || core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelSettingsInterface.java
Duel Staking Core game content , (player, slotId, itemId, option) -> {

// final Duel duel = Objects.requireNonNull(player.getDuel()); // if (player.isIronman()) { // player.sendMessage(, , player -> { // final Duel duel = player.getDuel(); // final Object attr = player.getAttributes().get(, , player -> Objects.requireNonNull(player.getDuel()).confirm(DuelStage.STAKE)); // bind(, Close, Confirm, GP quantity, Load Previous Stake, Platinum quantity, Target name || core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelStakingInterface.java

Pest Control Game Core game content Damage dealt, Eastern health, Eastern shield, South-Eastern health, South-Eastern shield, South-Western health, South-Western shield, Time remaining, Void knight health, Western health, Western shield core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlGameInterface.java
Pest Control Lander Core game content Lander flag, Lander type, Next departure, Pest points, Players ready core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlLanderInterface.java
Void Knight Rewards Core game content , (player, slotId, itemId, option) -> {
           final VoidKnightRewardsInterface.VoidKnightReward reward = Objects.requireNonNull(VoidKnightReward.map.get(slotId));
           final boolean hasVoidRequirements = Enums.PEST_CONTROL_REWARDS_VOID_ELEMENTS_ENUM.getValue(slotId).isPresent();
           if (hasVoidRequirements && !VoidKnightReward.isEligibleForVoid(player)) {
               player.sendMessage(, Confirm, Confirm reward || core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/VoidKnightRewardsInterface.java
Impling Tracker Core game content Eighth, Fifth, First, Fourth, Puro-Puro, Second, Seventh, Sixth, Surface World, Third core/src/main/java/com/zenyte/game/content/minigame/puropuro/ImplingTrackerInterface.java
Party Drop Chest Core game content , (player, slotId, itemId, option) -> {
           final Container container = FaladorPartyRoom.getPartyRoom().getPrivateContainer(player);
           final Item item = container.get(slotId);
           if (item == null) {
               return;
           }
           final Inventory inventory = player.getInventory();
           final Container inventoryContainer = inventory.getContainer();
           final PartyRoomOptionType optionType = getType(player, option);
           if (optionType == PartyRoomOptionType.EXAMINE) {
               player.sendMessage(item.getDefinitions().getExamine());
               return;
           }
           if (optionType == PartyRoomOptionType.X) {
               player.sendInputInt(, , player -> {
           final FaladorPartyRoom partyroom = FaladorPartyRoom.getPartyRoom();
           final Container container = partyroom.getPrivateContainer(player);
           if (container.isEmpty()) {
               return;
           }
           if (partyroom.getVariables().isDisabled()) {
               player.sendMessage(, , player -> player.getVarManager().sendBitInstant(7792, 0));
       bind(, , player -> player.getVarManager().sendBitInstant(7792, 3));
       bind(, Accept, Add 1, Add 5, Add all, Add x, Chest private deposit container, Chest public deposit container || core/src/main/java/com/zenyte/game/content/partyroom/PartyDropChestInterface.java
Party Drop Inventory Core game content , (player, slotId, itemId, option) -> {
           final Inventory inventory = player.getInventory();
           final Item item = inventory.getItem(slotId);
           if (item == null || item.getId() != itemId) {
               return;
           }
           final Container inventoryContainer = inventory.getContainer();
           final Container container = FaladorPartyRoom.getPartyRoom().getPrivateContainer(player);
           final PartyRoomOptionType optionType = getType(player, option);
           if (optionType == PartyRoomOptionType.EXAMINE) {
               player.sendMessage(item.getDefinitions().getExamine());
               return;
           }
           if (optionType == PartyRoomOptionType.X) {
               player.sendInputInt(, Interact with item || core/src/main/java/com/zenyte/game/content/partyroom/PartyDropInventoryInterface.java
Farming Storage Enabled plugin , (player, slotId, itemId, option) -> remove(player, Storable.EMPTY_BUCKET, option));
       bind(, , (player, slotId, itemId, option) -> remove(player, Storable.FARMING_RAKE, option));
       bind(, , (player, slotId, itemId, option) -> remove(player, Storable.PLANT_CURE, option));
       bind(, , (player, slotId, itemId, option) -> remove(player, Storable.SPADE, option));
       bind(, , (player, slotId, itemId, option) -> remove(player, Storable.SUPER_COMPOST, option));
       bind(, , (player, slotId, itemId, option) -> remove(player, Storable.WATERING_CAN, option));
       bind(, , option);
       VarCollection.FARMING_EQUIPMENT_STORAGE_DEFAULT.updateSingle(player);
   }
   private static final void remove(@NotNull final Player player, @NotNull final Storable storable, int option) {
       final FarmingStorage storage = player.getFarming().getStorage();
       final FarmingStorageInterface.Option op = storage.getOption(option);
       final Item item = storage.getItem(storable);
       switch (op) {
       case EXAMINE: 
           if (item == null) {
               ItemUtil.sendItemExamine(player, storable.getBaseId());
           } else {
               ItemUtil.sendItemExamine(player, item);
           }
           return;
       case REMOVE_X: 
           player.sendInputInt(, , player -> setDefaultQuantityOption(player, 0));
       bind(, , player -> setDefaultQuantityOption(player, 3));
       bind(, Bottomless bucket, Empty buckets, Gardening trowel || core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInterface.java
Farming Storage Inventory Enabled plugin , (player, slotId, itemId, option) -> add(player, Storable.EMPTY_BUCKET, option));
       bind(, , (player, slotId, itemId, option) -> add(player, Storable.FARMING_RAKE, option));
       bind(, , (player, slotId, itemId, option) -> add(player, Storable.PLANT_CURE, option));
       bind(, , (player, slotId, itemId, option) -> add(player, Storable.SPADE, option));
       bind(, , (player, slotId, itemId, option) -> add(player, Storable.SUPER_COMPOST, option));
       bind(, , (player, slotId, itemId, option) -> add(player, Storable.WATERING_CAN, option));
       bind(, Bottomless buckets, Empty buckets, Gardening trowel, Normal compost, Plant cure, Rake || core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInventoryInterface.java
Seed Vault Core game content , ((player, slotId, itemId, option) -> player.getVarManager().sendBit(CATEGORY_VARBIT, slotId)));
       bind(, , player -> player.getVarManager().sendVar(AMOUNT_VAR, 1));
       bind(, , player -> player.getVarManager().sendVar(AMOUNT_VAR, 10));
       bind(, , player -> player.getVarManager().sendVar(AMOUNT_VAR, Integer.MAX_VALUE));
       bind(, Categories, Container, Deposit, Deposit-All, Search, Withdraw, Withdraw-1, Withdraw-10 || core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInterface.java
Seed Vault Inventory Core game content , ((player, slotId, itemId, optionId) -> {
           final SeedVaultExchangeOption option = SeedVaultExchangeOption.of(optionId);
           switch (option) {
           case SELECTED: 
               deposit(player, slotId, player.getVarManager().getValue(SeedVaultInterface.AMOUNT_VAR), true);
               break;
           case X: 
               player.sendInputInt(, Container || core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInventoryInterface.java
Custom Fur Clothing Core game content , (player, slotId, itemId, option) -> {
           final CustomFurClothingInterface.FurStock furItem = Objects.requireNonNull(FurStock.values[slotId]);
           final int fee = furItem.fee;
           final Item requirement = furItem.fur;
           final Item alternativeRequirement = furItem.alternativeFur;
           final String name = ItemDefinitions.getOrThrow(furItem.item).getName();
           if (option == 1) {
               player.sendMessage(name + , Interact with item || core/src/main/java/com/zenyte/game/content/skills/hunter/CustomFurClothingInterface.java
Arceuus Lectern Core game content , player -> setType(player, RUBY_ENCHANTMENT));
       bind(, ,             player -> setType(player, EMERALD_ENCHANTMENT));
       bind(, ,            player -> setType(player, BONES_TO_BANANAS));
       bind(, ,            player -> setType(player, CAMELOT_TELEPORT));
       bind(, ,            player -> setType(player, FALADOR_TELEPORT));
       bind(, ,         player -> setType(player, DRAGONSTONE_ENCHANTMENT));
       bind(, ,         player -> setType(player, WATCHTOWER_TELEPORT));
       bind(, ,    player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));
       bind(, ,    player -> player.getVarManager().sendVar(QUANTITY_VARP, 10));
       bind(, ,    player -> player.getVarManager().sendVar(QUANTITY_VARP, 28));
       bind(, , this::createSelectedTablet);
   }
   private void createSelectedTablet(Player player) {
       var selectedIndex = player.getVarManager().getValue(SELECTED_TABLET_TYPE);
       var type = RegularTablet.get(selectedIndex);
       if (type == null)
           return;
       player.getInterfaceHandler().closeInterface(getInterface());
       player.getActionManager().setAction(new TabletCreation(type, player.getVarManager().getValue(QUANTITY_VARP)));
   }
   private void setType(@NotNull final Player player, @NotNull final LecternTablet tablet) {
       player.getVarManager().sendVar(SELECTED_TABLET_TYPE, tablet.type());
       logger.debug(, ,player -> setType(player, CIVITAS_ILLA_FORTIS_TELEPORT));
       bind( || core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/ArceuusLecternInterface.java
Regular Lectern Core game content , (player, slotId, itemId, option) -> create(player, RegularTablet.BONES_TO_BANANAS, option));
       bind(, , (player, slotId, itemId, option) -> create(player, RegularTablet.CAMELOT_TELEPORT, option));
       bind(, , (player, slotId, itemId, option) -> create(player, RegularTablet.DIAMOND_ENCHANTMENT, option));
       bind(, , (player, slotId, itemId, option) -> create(player, RegularTablet.EMERALD_ENCHANTMENT, option));
       bind(, , (player, slotId, itemId, option) -> create(player, RegularTablet.FALADOR_TELEPORT, option));
       bind(, , (player, slotId, itemId, option) -> create(player, RegularTablet.SAPPHIRE_ENCHANTMENT, option));
       bind(, , (player, slotId, itemId, option) -> create(player, RegularTablet.WATCHTOWER_TELEPORT, option));
       bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));
       bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 10));
       bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 28));
       bind(, Ardougne teleport, Bones to bananas || core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/RegularLecternInterface.java
Slayer Partner Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/skills/slayer/SlayerPartnerInterface.java
Clue Core game content Information core/src/main/java/com/zenyte/game/content/treasuretrails/ClueInterface.java
Clue Reward Core game content , container);
       player.getPacketDispatcher().sendComponentSettings(getInterface(), getComponent(, Item list || core/src/main/java/com/zenyte/game/content/treasuretrails/ClueRewardInterface.java
Sextant Core game content , player -> {
           final Inventory inventory = player.getInventory();
           if (!inventory.containsItem(ItemId.WATCH, 1) || !inventory.containsItem(ItemId.CHART, 1)) {
               player.getDialogueManager().start(new PlainChat(player, , , player -> move(player, 1, 0));
       bind(, , player -> move(player, 1, 1));
       bind(, Arm, Down arrow, Frame, Get location, Grass, Index mirror, Left arrow, Right arrow, Sun || core/src/main/java/com/zenyte/game/content/treasuretrails/coordinateutils/SextantInterface.java
Light Box Core game content , player -> player.getLightBox().press(0));
       bind(, , player -> player.getLightBox().press(2));
       bind(, , player -> player.getLightBox().press(4));
       bind(, , player -> player.getLightBox().press(6));
       bind(, A, B, C, D, E, F, G, H || core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/LightBoxInterface.java
Puzzle Box Core game content Puzzle piece core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/PuzzleBoxInterface.java
Stash Unit Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/treasuretrails/stash/StashUnitInterface.java
Treasure Trail Statistics Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/treasuretrails/TreasureTrailStatisticsInterface.java
Well Of Goodwill Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/well/WellOfGoodwillInterfaceManager.java
Vault Overlay Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/wildernessVault/VaultOverlayInterface.java
Vault Reward Core game content Take item core/src/main/java/com/zenyte/game/content/wildernessVault/VaultRewardInterface.java
Game Core game content Open core/src/main/java/com/zenyte/game/GameInterface.java
Shop Core game content , ((player, interfaceSlotId, itemId, option) -> {
           final int slotId = interfaceSlotId - 1;
           final Shop shop = getShopAttr(player);
           final Item item = shop.getContainer().get(slotId);
           if (ItemDefinitions.isInvalid(itemId) || item == null || item.getId() != itemId) return;
           final int mobileBuyAmount = player.getNumericTemporaryAttribute(, Interact with item, Sell || core/src/main/java/com/zenyte/game/model/shop/ShopInterface.java
Shop Inventory Core game content , ((player, slotId, itemId, option) -> {
           final Object shopAttr = player.getTemporaryAttributes().get(, Interact with item, Sell || core/src/main/java/com/zenyte/game/model/shop/ShopInventoryInterface.java
Dialogue Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/DialogueInterface.java
Interface Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/Interface.java
Interface Handler Core game content , true);

dispatcher.sendPane(pane); this.pane = pane; visible.forcePut(pane.getId() << 16, pane.getId()); for (final InterfacePosition position : InterfacePosition.VALUES) { if (position.getGameframeInterfaceId() == -1 || position.equals(InterfacePosition.FRIENDS_TAB) || position.equals(InterfacePosition.JOURNAL_TAB_HEADER)) { continue; } final Optional<GameInterface> gameInter = GameInterface.get(position.getGameframeInterfaceId()); if (gameInter.isPresent()) { gameInter.get().open(player); } else { sendInterface(position, position.getGameframeInterfaceId()); } } player.getSettings().refreshSetting(Setting.FRIEND_LIST_TOGGLE); player.onLobbyClose(); sendMisc(); openJournal(); ChatChannelPlayerExtKt.sendSocialTabs(player); if (player.isOnMobile()) { setJournal(Journal.QUEST_TAB); player.getVarManager().sendBit(SettingVariables.TRANSPARENT_CHATBOX_VARBIT_ID, 1); applyMobilePaneTweaks(); player.getCombatDefinitions().refresh(); } else { setJournal(Journal.GAME_NOTICEBOARD); GameInterface.GAME_SETTINGS.open(player); } setNumberJournalTabs(player.getVarManager().getBitValue(9340)); if (player.isOnMobile()) { player.getSettings().refreshSetting(Setting.MINIMIZE_MINIMAP); } PluginManager.post(new PostWindowStatusEvent(player)); }

private void applyMobilePaneTweaks() { final PacketDispatcher dispatcher = player.getPacketDispatcher(); dispatcher.sendComponentPosition(PaneType.MOBILE.getId(), 40, 0, 20); dispatcher.sendComponentPosition(PaneType.MOBILE.getId(), 41, 0, 24); final int[] chatTabComponents = {4, 7, 11, 15, 19, 23, 27}; final int[] chatTabX = {58, 111, 164, 217, 270, 323, 376}; for (int i = 0; i < chatTabComponents.length; i++) { dispatcher.sendComponentPosition(GameInterface.CHAT.getId(), chatTabComponents[i], chatTabX[i], 0); } }

public void openJournal() { GameInterface.JOURNAL_HEADER_TAB.open(player); switch (journal) { case QUEST_TAB: GameInterface.QUEST_TAB.open(player); break; case ACHIEVEMENT_DIARIES: GameInterface.ACHIEVEMENT_DIARY_TAB.open(player); break; case CHARACTER_SUMMARY: GameInterface.CHARACTER_SUMMARY.open(player); break; case GAME_NOTICEBOARD: GameInterface.GAME_NOTICEBOARD.open(player); break; case SERVER_EVENTS: GameInterface.SERVER_EVENTS.open(player); break; case EXTRA: GameInterface.EXTRA_JOURNAL_TAB.open(player); break; } }

public void sendWelcomeScreen() { final PacketDispatcher dispatcher = player.getPacketDispatcher(); dispatcher.sendComponentText(378, 70, || core/src/main/java/com/zenyte/game/model/ui/InterfaceHandler.java

Interface Position Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/InterfacePosition.java
New Interface Handler Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/NewInterfaceHandler.java
Achievement Diary Tab Core interface registry , player -> Diary.sendDiary(player, ArdougneDiary.MAP));
       bind(, , player -> Diary.sendDiary(player, FremennikDiary.MAP));
       bind(, , player -> Diary.sendDiary(player, KandarinDiary.MAP));
       bind(, , player -> Diary.sendDiary(player, LumbridgeDiary.MAP));
       bind(, , player -> Diary.sendDiary(player, VarrockDiary.MAP));
       bind(, , player -> Diary.sendDiary(player, WesternProvincesDiary.MAP));
       bind(, Diaries, Open || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AchievementDiaryTabInterface.java
Colour Picker Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/ColourPickerInterface.java
Settings Core interface registry , (player, slotId, itemId, option) -> {
           final SettingCategory category = Settings.getCurrentSelectedCategory(player);
           final SliderPosition position = Settings.findSliderPosition(category, slotId);
           slider(player, position.getSlider(), slotId - position.getStartingPosition());
       });
       bind(, , player -> {
           player.getInterfaceHandler().closeInterface(getInterface());
           /* Also closes modals. */
           player.getInterfaceHandler().closeInterfaces();
       });
       bind(, , player -> {
           Settings.setCurrentSelectedCategory(player, null);
           player.getVarManager().sendBitInstant(SETTINGS_SEARCH_LEFT_VARBIT, 1);
           player.getVarManager().sendBitInstant(SETTINGS_SEARCH_RIGHT_VARBIT, 1);
       });
       bind(, , player -> Settings.setCurrentDropdownSetting(player, null));
       bind(, Cancel drop-down selection, Category, Close, Drop-down menu, Search, Setting, Show less/more information, Slider || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/SettingsInterface.java
Another Clan Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AnotherClanInterface.java
Autocast Core interface registry , player -> close(player));
       bind(, Set autocast spell || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AutocastInterface.java
Avas Devices Core interface registry , (player, slotId, itemId, option) -> {
           Preconditions.checkArgument(option >= 0 && option <= 4);
           final IntConsumer consumer = amount -> {
               final int cost = 2999;
               final int space = player.getInventory().getFreeSlots();
               final int coins = player.getInventory().getAmountOf(995);
               if (amount > space) {
                   amount = space;
                   if (coins == ((amount + 1) * cost)) {
                       amount++;
                   }
               }
               if ((amount * cost) > coins) {
                   amount = coins / cost;
               }
               if (amount <= 0) {
                   player.sendMessage(, , (player, slotId, itemId, option) -> {
           Preconditions.checkArgument(option >= 0 && option <= 4);
           final IntConsumer consumer = amount -> {
               final int cost = 4999;
               final int space = player.getInventory().getFreeSlots();
               final int coins = player.getInventory().getAmountOf(995);
               final int heads = player.getInventory().getAmountOf(21907);
               if (amount > space) {
                   amount = space;
               }
               if ((amount * cost) > coins) {
                   amount = coins / cost;
               }
               if (heads < amount) {
                   amount = heads;
               }
               if (amount <= 0) {
                   player.sendMessage(, , (player, slotId, itemId, option) -> {
           Preconditions.checkArgument(option >= 0 && option <= 4);
           final IntConsumer consumer = amount -> {
               final int cost = 999;
               final int space = player.getInventory().getFreeSlots();
               final int coins = player.getInventory().getAmountOf(995);
               if (amount > space) {
                   amount = space;
                   if (coins == ((amount + 1) * cost)) {
                       amount++;
                   }
               }
               if ((amount * cost) > coins) {
                   amount = coins / cost;
               }
               if (amount <= 0) {
                   player.sendMessage(, Purchase ava's accumulator, Purchase ava's assembler, Purchase ava's attractor || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AvasDevicesInterface.java
Bank Deposit Core interface registry , (player, slotId, itemId, option) -> {
           final Item item = player.getInventory().getItem(slotId);
           if (item == null || item.getId() != itemId) {
               return;
           }
           final BankDepositInterface.ItemOption op = ItemOption.of(option);
           if (op.equals(ItemOption.EXAMINE)) {
               ItemUtil.sendItemExamine(player, item);
               return;
           }
           if (op.equals(ItemOption.WITHDRAW_SELECTOR)) {
               final int quantity = Math.max(1, player.getVarManager().getValue(1794));
               player.getBank().deposit(player, player.getInventory().getContainer(), slotId, quantity);
               player.setAnimation(DEPOSIT_ANIM);
               return;
           }
           if (op.equals(ItemOption.WITHDRAW_X)) {
               player.sendInputInt(, , player -> {
           final Container container = player.getEquipment().getContainer();
           if (container.getSize() == 0) {
               player.sendMessage(, , player -> {
           final Container container = player.getInventory().getContainer();
           if (container.getSize() == 0) {
               player.sendMessage(, , player -> {
           final Inventory inventory = player.getInventory();
           final boolean carryingLootingBag = inventory.containsItem(ItemId.LOOTING_BAG) || inventory.containsItem(ItemId.LOOTING_BAG_22586);
           if (!carryingLootingBag) {
               player.sendMessage(, , player -> {
           player.getSettings().setSetting(Setting.MOBILE_DEPOSIT_BOX_AMOUNT, 0);
           player.getVarManager().sendVar(1794, 1);
       });
       bind(, , player -> {
           player.getSettings().setSetting(Setting.MOBILE_DEPOSIT_BOX_AMOUNT, 2);
           player.getVarManager().sendVar(1794, Integer.MAX_VALUE);
       });
       Enums.DEPOSIT_BOX_EQUIPMENT_TAB_SLOT_MAP.getValues().forEach((slot, component)
               -> bind(, , player -> {
           player.getSettings().setSetting(Setting.MOBILE_DEPOSIT_BOX_AMOUNT, 4);
           player.getVarManager().sendVar(1794, 10);
       });
       bind(, Default Quantity 1, Default Quantity 10, Default Quantity 5, Default Quantity All, Default Quantity X || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankDepositInterface.java
Bank Core interface registry + slot, (player, slotId, itemId, optionId)
               -> {
           player.getEquipment().unequipItem(slot);
           BankInventoryInterface.transmitSlotVarp(player);
       }));
   }
   public static void tryDepositInventory(Player player, String action) {
       tryDepositInventory(player.getBank(), player, action);
   }
   public static void tryDepositInventory(Bank bank, Player player, String action) {
       if (player.getTemporaryAttributes().containsKey(, , (player, slotId, itemId, option) -> {
           final Item item = player.getBank().get(slotId);
           if (item == null) {
               return;
           }
           final int id = item.getId();
           if (id != itemId) {
               return;
           }
           final BankInterface.ItemOption op = ItemOption.of(option);
           if (op.is(ItemOption.EXAMINE)) {
               player.sendMessage(item.getDefinitions().getExamine());
               return;
           }
           if (id == 20594) {
               BankUtil.safePermutation(player, bank -> {
                   if (op.is(ItemOption.CLEAR_ALL)) {
                       bank.removeFillers(-1, Integer.MAX_VALUE);
                   } else if (op.is(ItemOption.CLEAR)) {
                       bank.removeFillers(slotId, 1);
                   } else {
                       throw new RuntimeException(, , (player, slotId, itemId, option) -> {
           if (player.getGameMode() == GameMode.ULTIMATE_IRON_MAN) {
               player.sendMessage(, , (player, slotId, itemId, option) -> BankUtil.safePermutation(player, bank -> {
           if (option == 1) {
               final int size = bank.getTabSize(slotId == 10 ? 9 : slotId - 11);
               if (size == 0) {
                   player.sendMessage(, , 1));
       bind(, , 10));
       bind(, , 50));
       bind(, , a)));
       bind(, , GameInterface.STORAGE_GIM::open);
       bind(, , Integer.MAX_VALUE));
       bind(, , player -> {
           if (player.getTemporaryAttributes().containsKey(, , player -> player.getBank().releasePlaceholders(-1));
       bind( || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInterface.java
Bank Inventory Core interface registry , ((player, slotId, itemId, option) -> {
           final Item item = player.getInventory().getItem(slotId);
           if (item == null || item.getId() != itemId) {
               return;
           }
           if (option == 1) {
               player.getEquipment().wear(slotId);
           } else if (option == 10) {
               ItemUtil.sendItemExamine(player, item.getId());
           }
       }));
       bind(, , (player, slotId, itemId, option) -> {
           final LootingBag lootingBag = player.getLootingBag();
           final Item item = lootingBag.getItem(slotId);
           if (item == null) {
               return;
           }
           final boolean uimHomeBankBag = com.zenyte.game.model.item.containers.LootingBag.canUltimateIronmanUseHomeBankBag(player);
           if (uimHomeBankBag) {
               if (option == 10) {
                   lootingBag.getContainer().withdraw(player, player.getInventory().getContainer(), slotId, item.getAmount());
               } else if (option == 4) {
                   player.sendInputInt(, , player -> {
           final LootingBag lootingBag = player.getLootingBag();
           BankUtil.safePermutation(player, bank -> {
               for (int slotId = 0; slotId < 28; slotId++) {
                   final Item item = lootingBag.getItem(slotId);
                   if (item == null) {
                       continue;
                   }
                   bank.deposit(player, lootingBag.getContainer(), slotId, item.getAmount());
               }
               return Unit.INSTANCE;
           });
       });
       bind(, Deposit, Deposit Looting Bag Item, Empty Looting Bag, Interact with Item, Wear || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInventoryInterface.java
Battlestaff Enchantment Core interface registry , player -> enchant(player, Battlestaff.AIR_BATTLESTAFF));
       bind(, , player -> enchant(player, Battlestaff.EARTH_BATTLESTAFF));
       bind(, , player -> enchant(player, Battlestaff.LAVA_BATTLESTAFF));
       bind(, , player -> enchant(player, Battlestaff.MIST_BATTLESTAFF));
       bind(, , player -> enchant(player, Battlestaff.STEAM_BATTLESTAFF));
       bind(, Air battlestaff, Dust battlestaff, Earth battlestaff, Fire battlestaff, Lava battlestaff, Mist battlestaff, Mud battlestaff || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BattlestaffEnchantmentInterface.java
Bounty Hunter Store Core interface registry , (player, slotId, itemId, optionId) -> {
           /*final IntEnum layerEnum = Enums.BOUNTY_HUNTER_REWARDS;
           final OptionalInt optionalItem = layerEnum.getValue(slotId);
           if (!optionalItem.isPresent()) {
               return;
           }
           int item = optionalItem.getAsInt();
           final Optional<BountyHunterRewardType> optionalReward = BountyHunterRewardType.get(item);
           if (!optionalReward.isPresent()) {
               return;
           }
           final BountyHunterRewardType reward = optionalReward.get();
           if (reward == BountyHunterRewardType.HUNTERS_HONOUR && player.getVarManager().getValue(1137) > player.getVarManager().getValue(1138)) {
               item = 12856;
           }
           final BountyHunterStoreInterface.Option option = Option.get(optionId - 1);
           if (option == Option.EXAMINE) {
               ItemUtil.sendItemExamine(player, item);
               return;
           }
           if (option == Option.VALUE) {
               final ItemDefinitions itemDefinitions = ItemDefinitions.getOrThrow(item);
               player.sendMessage(itemDefinitions.getName() + , Item layer, Scrollbar || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BountyHunterStoreInterface.java
Bug Report Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BugReportInterface.java
Character Summary Core interface registry , (player, slotId, itemId, option) -> {
           if (player.isLocked()) return;
           switch (slotId) {
               case 3 -> COMP_PROGRESS.open(player);
               case 4 -> player.getInterfaceHandler().setJournal(InterfaceHandler.Journal.ACHIEVEMENT_DIARIES);
               case 5 -> {
                   switch (option) {
                       case 1 -> CA_OVERVIEW.open(player);
                       case 2 -> CA_BOSS_OVERVIEW.open(player);
                       case 3 -> CA_TASKS.open(player);
                       case 4 -> CA_REWARDS.open(player);
                   }
               }
               case 6 -> COLLECTION_LOG.open(player);
               case 7 -> {
                   player.getVarManager().flipBit(12933);
                   player.getPacketDispatcher().sendClientScript(3970, getId() << 16 | getComponent(, Component layer, Element layer || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CharacterSummaryInterface.java
Chartership Core interface registry , player -> charter(player, BRIMHAVEN));
       bind(, , player -> charter(player, CATHERBY));
       bind(, , player -> charter(player, MOS_LE_HARMLESS));
       bind(, , player -> charter(player, PORT_KHAZARD));
       bind(, , player -> charter(player, PORT_TYRAS));
       bind(, , player -> charter(player, PRIFDDINAS));
   }
   private void charter(final Player player, final CharterLocation destination) {
       final CharterLocation location = CharterLocation.getLocation(player.getLocation());
       if (location == null || destination == null) {
           return;
       }
       final Item cost = new Item(995, destination.getCosts()[location.ordinal()]);
       player.getInterfaceHandler().closeInterface(InterfacePosition.CENTRAL);
       if (!player.getInventory().containsItem(cost)) {
           player.getDialogueManager().start(new PlainChat(player, , Brimhaven, Catherby, Corsair Cove, Mos Le'Harmless, Musa Point, Port Khazard || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChartershipInterface.java
Chat Channel Core interface registry , player -> {
           if (player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
               player.sendMessage(, Open, Open clan chat set-up || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatChannelInterface.java
Chat Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 2) {
               player.getSettings().toggleSetting(Setting.GAME_FILTER);
           }
       });
       bind(, , (player, slotId, itemId, option) -> {
           if (option >= 3 && option <= 5) {
               player.getSettings().setSetting(Setting.CHANNEL_FILTER, option - 3);
           }
       });
       bind(, Report button, Set channel filter, Set clan filter, Set game filter, Set group filter, Set private filter || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatInterface.java
Clan Chat Set Up Core interface registry , (player, slotId, itemId, option) -> {
           final ClanChannel channel = ClanManager.getCurrentChannel(player);
           final ClanRank rank = ClanRank.VALUES[option - 1];
           if (rank == null) {
               return;
           }
           channel.setEnterRank(rank);
           player.getPacketDispatcher().sendComponentText(getInterface(), getComponent(, , (player, slotId, itemId, option) -> {
           final ClanChannel channel = ClanManager.getCurrentChannel(player);
           final ClanRank rank = ClanRank.VALUES[option - 1];
           if (rank == null) {
               return;
           }
           channel.setKickRank(rank);
           player.getPacketDispatcher().sendComponentText(getInterface(), getComponent(, , (player, slotId, itemId, option) -> {
           final ClanChannel channel = ClanManager.getCurrentChannel(player);
           final ClanRank rank = ClanRank.VALUES[option - 1];
           if (rank == null) {
               return;
           }
           channel.setTalkRank(rank);
           player.getPacketDispatcher().sendComponentText(getInterface(), getComponent(, , (player, slotId, itemId, option) -> {
           final ClanChannel channel = ClanManager.getCurrentChannel(player);
           if (option == 1) {
               ClanManager.setPrefix(player, true);
               return;
           }
           if (channel.isDisabled()) {
               player.sendMessage(, , channel = new ClanChannel(, Disable/set prefix, Set enter rank, Set kick rank, Set talk rank || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanChatSetUpInterface.java
Clan Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanInterface.java
Combat Tab Core interface registry , player -> {
           if (player.isLocked()) {
               return;
           }
           player.getCombatDefinitions().setAutoRetaliate(!player.getCombatDefinitions().isAutoRetaliate());
       });
       bind(, , player -> {
           if (player.isLocked()) {
               return;
           }
           player.getCombatDefinitions().setDefensiveAutocast(true);
           GameInterface.AUTOCAST_TAB.open(player);
       });
       bind(, , player -> {
           player.getCombatDefinitions().setStyle(0);
           player.getCombatDefinitions().setAutocastSpell(null);
       });
       bind(, , player -> {
           player.getCombatDefinitions().setStyle(2);
           player.getCombatDefinitions().setAutocastSpell(null);
       });
       bind(, Attack style 1, Attack style 2, Attack style 3, Attack style 4, Auto retaliate, Autocast, Defensive autocast, Special attack || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CombatTabInterface.java
Daily Challenges Overview Core interface registry , player -> claim(player, 0));
       bind(, , player -> claim(player, 2));
       bind(, 0, 1, 2, 3, 4 || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DailyChallengesOverviewInterface.java
Decanting Dialogue Core interface registry , player -> player.getDialogueManager().onClick(1, -1));
       bind(, , player -> player.getDialogueManager().onClick(3, -1));
       bind(, 1-dose, 2-dose, 3-dose, 4-dose || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DecantingDialogueInterface.java
Drop Viewer Core interface registry , (player, slotId, itemId, option) -> {
           final Object attr = player.getTemporaryAttributes().get(, , (player, slotId, itemId, option) -> {
           player.toggleBooleanAttribute(, , player -> {
           player.addTemporaryAttribute(, Duke Sucellus (awknd), Rarity Display, Search, Search button, Select, Select Item, Select NPC, View, View Result || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DropViewerInterface.java
Emote Tab Core interface registry , (player, slotId, itemId, option) -> {
           if (player.getNumericTemporaryAttribute(, Play emote || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EmoteTabInterface.java
Equipment Inventory Core interface registry , (player, slotId, itemId, option) -> {
           final Item item = player.getInventory().getItem(slotId);
           if (item == null) {
               return;
           }
           if (option == 1) {
               player.getEquipment().wear(slotId);
           } else if (option == 10) {
               ItemUtil.sendItemExamine(player, item.getId());
           }
       });
       bind(, Interact with Item || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentInventoryInterface.java
Equipment Stats Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentStatsInterface.java
Equipment Tab Core interface registry , (player, slotId, itemId, optionId) -> {

if (player.isLocked()) { return; } if (!CombatUtilities.hasQuiverEquipped(player)) { return; } switch (optionId) { case 1: {//Remove handleDizanaQuiverRemoveOption(player); break; } case 2: {//Fill/Swap Item ammo = player.getAmmo();

int ammoItemId = PlayerAttributesKt.getDizanasQuiverAmmo(player); int ammoItemAmount = PlayerAttributesKt.getDizanasQuiverAmmoAmount(player); Item quiverItem = null; if (ammoItemId != -1 && ammoItemAmount > 0) { quiverItem = new Item(ammoItemId, ammoItemAmount); }

if (ammo == null) { if (quiverItem == null) { player.sendMessage(Colour.ORANGE_RED.wrap(, , player -> {

           if (player.isLocked()) {
               return;
           }
           Follower follower = player.getFollower();
           if (follower == null) {
               player.sendMessage(, , player -> {
           if (player.isLocked()) {
               return;
           }
           if (player.isUnderCombat()) {
               player.sendMessage(, Call follower, dizana quiver, Price checker, View, View equipment stats, View items kept on death || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentTabInterface.java
Experience Lamp Core interface registry , (player, slot, __, ___) -> {
           final String name = Enums.SKILL_NAMES_ENUM.getValue(Enums.FAKE_XP_DROPS.getValue(slot + 1).orElseThrow()).orElseThrow();
           final int id = Skills.getSkill(name);
           final Object consumer = player.getTemporaryAttributes().get(, Confirm, Text || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceLampInterface.java
Experience Tracker Core interface registry , (player, slotId, itemId, option) -> {
           if (slotId < 0 || slotId >= SkillConstants.SKILLS.length) {
               throw new IllegalStateException(, , (player, slotId, itemId, option) -> player.getVarManager().sendBit(DURATION_VARBIT, slotId - 1));
       bind(, , (player, slotId, itemId, option) -> player.getVarManager().sendBit(GROUP_VARBIT, slotId - 1));
       bind(, , (player, slotId, itemId, option) -> player.getVarManager().sendBit(POSITION_VARBIT, slotId - 1));
       bind(, , (player, slotId, itemId, option) -> player.getVarManager().sendBit(PROGRESS_BAR_VARBIT, slotId - 1));
       bind(, , (player, slotId, itemId, option) -> selectTrackerSetting(player, 1));
       bind(, , (player, slotId, itemId, option) -> setTrackerPoint(player, option, false));
       bind(, , (player, slotId, itemId, option) -> setTrackerPoint(player, option, true));
       bind(, , slotId);
       });
       bind(, , type);
       player.getVarManager().sendVar(1253 + skill, 0);
       player.getVarManager().sendVar(1229 + skill, 0);
       player.getVarManager().sendVar(261, 0);
       player.getVarManager().sendVar(262, 0);
   }
   private void setTrackerPoint(@NotNull final Player player, final int option, final boolean start) {
       final int skill = player.getNumericTemporaryAttribute(, Configure skill, Save goal || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceTrackerInterface.java
Explorer Ring Core interface registry , ((player, slotId, itemId, option) -> {
           if (ExplorersRing.rings.contains(itemId)) {
               player.sendMessage(, , ((player, slotId, itemId, option) -> {
           if (player.carryingItem(ItemId.EXPLORERS_RING_4)) {
               player.getVarManager().sendBit(HIGH_ALCHEMY_VARBIT, true);
               player.getVarManager().sendBit(CHARGES_VARBIT, player.getVariables().getFreeAlchemyCasts());
           } else {
               player.sendMessage(, , player -> player.getInterfaceHandler().sendInterface(GameInterface.SPELLBOOK));
       bind(, Charges, Close, High alchemy, Inventory, Low alchemy || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExplorerRingInterface.java
Extra Quest Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExtraQuestTabInterface.java
Fixed Pane Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 2) {
               player.getSettings().toggleSetting(Setting.PRAYER_FILTER_DISABLE);
           }
       });
       bind(, , (player, slotId, itemId, option) -> VarCollection.COMP_PROGRESS.updateSingle(player));
       bind(, Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FixedPaneInterface.java
Friends List Core interface registry View, View Ignore List core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FriendsListInterface.java
Game Mode Setup Core interface registry , player -> selectExpMode(player, 0));
       bind(, , player -> selectExpMode(player, 2));
       bind(, Mode, Rate 1, Rate 2, Rate 3, Rate 4, review || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameModeSetupInterface.java
Game Noticeboard Core interface registry , com.near_reality.game.content.commands.DeveloperCommands::openStore);
       bind(, , com.zenyte.game.content.dailychallenge.DailyTaskInterfaceManager::open);
       bind(, , GameNoticeboardInterface::showStaffOnline);
       bind(, , player -> {
           if(player.isMember()) {
               DonationToggle.openInterface(player);
           } else {
               player.sendMessage(, , player -> {
           player.getDialogueManager().start(new Dialogue(player) {
               @Override
               public void buildDialogue() {
                   options(, , player -> player.getPacketDispatcher().sendURL(GameConstants.DISCORD_INVITE));
       bind(, , player -> player.getPacketDispatcher().sendURL(GameConstants.SERVER_VOTE_URL));
       bind(, , player -> player.getPacketDispatcher().sendURL(GameConstants.SERVER_WEBSITE_URL + , , player -> player.getPacketDispatcher().sendURL(GameConstants.SERVER_WEBSITE_URL));
       bind(, , raw);
           return raw;
       }
       // If it looks like seconds (10 digits) convert to millis and persist.
       if (raw > 1_000_000_000L && raw < 10_000_000_000L) {
           raw = raw * 1000L;
           p.getAttributes().put(, Bonus XP, Boss task || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameNoticeboardInterface.java
Game Settings Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameSettingsInterface.java
Gnome Cocktail Core interface registry , player -> {
           final GnomeCocktail cocktail = GnomeCocktail.getBySlot((Integer) player.getAttributes().get(SELECTED_COCKTAIL_SLOT));
           if (player.getInventory().containsItems(cocktail.getIngredients()) && player.getSkills().getLevel(SkillConstants.COOKING) >= cocktail.getLevel()) {
               final CocktailShaker shaker = CocktailShaker.SHAKERS.get(cocktail.getShaker());
               final String heat = (shaker.equals(CocktailShaker.CHOCOLATE_SATURDAY) || shaker.equals(CocktailShaker.DRUNK_DRAGON)) ? , Create, select || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeCocktailInterface.java
Gnome Glider Core interface registry , player -> handle(player, GliderLocation.GANDIUS));
       bind(, , player -> handle(player, GliderLocation.LEMANTO_ANDRA));
       bind(, , player -> handle(player, GliderLocation.OOKOOKOLLY_UNDRI));
   }
   private void handle(final Player player, final GliderLocation destinationGlider) {
       final GliderLocation currentGlider = GliderLocation.getGlider(player);
       if (currentGlider == null) {
           return;
       }
       if (currentGlider.equals(destinationGlider)) {
           player.sendMessage(, , player -> handle(player, GliderLocation.TA_QUIR_PRIW));
       bind(, Gandius, Kar-Hewo, Lemanto Andra, Lemantolly Undri, Ookookolly Undri, Sindarpos, Ta Quir Priw || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeGliderInterface.java
Gold Jewellery Core interface registry , player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));
       bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 10));
       bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 28));
       for (JewelleryData data : JewelleryData.VALUES) {
           if (isExcluded(data)) {
               continue;
           }
           bind(data.name(), player -> {
               if (JewelleryData.SLAYER_RING.equals(data) && !player.getSlayer().isUnlocked(, Make all, Make five, Make one, Make ten, Make x || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GoldJewelleryInterface.java
Grand Exchange History Core interface registry , player -> player.getGrandExchange().openOffersInterface());
       bind(, Click history entry, Open, Open Offers || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeHistoryInterface.java
Grand Exchange Offers Viewer Core interface registry , (player, slotId, itemId, option) -> {
           final Object obj = player.getTemporaryAttributes().get(, , ExchangeType.BUYING);
           if (itemId == 0) {
               searchAll(player, ExchangeType.BUYING);
               return;
           }
           search(player, itemId, ExchangeType.BUYING, null);
       });
       bind(, , ExchangeType.SELLING);
           if (itemId == 0) {
               searchAll(player, ExchangeType.SELLING);
               return;
           }
           search(player, itemId, ExchangeType.SELLING, null);
       });
       bind(, , exchangeType);
       final long lowestAcceptableTime = System.currentTimeMillis() - OFFER_TIMEOUT_DELAY;
       for (final Map.Entry<String, Int2ObjectOpenHashMap<ExchangeOffer>> group : GrandExchangeHandler.getOffers().entrySet()) {
           final Int2ObjectOpenHashMap<ExchangeOffer> offers = group.getValue();
           for (final Int2ObjectMap.Entry<ExchangeOffer> entry : offers.int2ObjectEntrySet()) {
               final ExchangeOffer offer = entry.getValue();
               if (offer.isCancelled() || offer.isAborted() || offer.isCompleted()) {
                   continue;
               }
               if (offer.getLastUpdateTime() < lowestAcceptableTime) {
                   continue;
               }
               if (offer.getItem().getId() == itemId && offer.getType().equals(exchangeType)) {
                   results.add(offer);
               }
           }
       }
       if (sortType == null) {
           final Object obj = player.getTemporaryAttributes().get(, , exchangeType);
       final long lowestAcceptableTime = System.currentTimeMillis() - OFFER_TIMEOUT_DELAY;
       for (final Map.Entry<String, Int2ObjectOpenHashMap<ExchangeOffer>> group : GrandExchangeHandler.getOffers().entrySet()) {
           final Int2ObjectOpenHashMap<ExchangeOffer> offers = group.getValue();
           for (final Int2ObjectMap.Entry<ExchangeOffer> entry : offers.int2ObjectEntrySet()) {
               final ExchangeOffer offer = entry.getValue();
               if (offer.isCancelled() || offer.isAborted() || offer.isCompleted()) {
                   continue;
               }
               if (offer.getLastUpdateTime() < lowestAcceptableTime) {
                   continue;
               }
               if (offer.getType().equals(exchangeType)) {
                   results.add(offer);
               }
           }
       }
       Comparator<ExchangeOffer> sorter = (Comparator.comparingLong(ExchangeOffer::getLastUpdateTime));
       results.sort(sorter);
       final int size = results.size();
       if (size > 0) {
           player.getPacketDispatcher().sendClientScript(10803, , , player -> {
           player.toggleBooleanAttribute(, , player -> player.getGrandExchange().openOffersInterface());
       bind(, , results);
       GameInterface.GRAND_EXCHANGE_OFFERS_VIEWER.getPlugin().ifPresent(plugin -> {
           player.getPacketDispatcher().sendComponentSettings(plugin.getInterface(), plugin.getComponent(, , sortType);
       }
       final int size = results.size();
       if (size > 0) {
           player.getPacketDispatcher().sendClientScript(10803, , Exchange, GE Item price, Item name || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeOffersViewerInterface.java
Grouping Tab Core interface registry , (player, slotId, itemId, option) -> {
           final MinigameGroupFinder minigame = MinigameGroupFinder.getMinigame(slotId);
           if (minigame == null) {
               player.sendMessage(, Select, Select minigame, Teleport || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GroupingTabInterface.java
Hairdresser Core interface registry , (player, slotId, itemId, option) -> {
           boolean haircut = player.getVarManager().getBitValue(4146) == 1;
           if (!haircut && !player.getAppearance().isMale()) {
               haircut = true;
           }
           player.getVarManager().sendVar(261, slotId);
           player.getTemporaryAttributes().put(haircut ? , , (player, slotId, itemId, option) -> {
           boolean haircut = player.getVarManager().getBitValue(4146) == 1;
           if (!haircut && !player.getAppearance().isMale()) {
               haircut = true;
           }
           player.getVarManager().sendVar(263, slotId);
           player.getTemporaryAttributes().put(haircut ? , , player -> {
           boolean haircut = player.getVarManager().getBitValue(4146) == 1;
           if (!haircut && !player.getAppearance().isMale()) {
               haircut = true;
           }
           final int slot = player.getNumericTemporaryAttribute(haircut ? , Finish make-over, Select, Select hair/beard colour, Select hair/beard style || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HairdresserInterface.java
House Options Tab Core interface registry , player -> {
           final Construction construction = player.getConstruction();
           if (player.getCurrentHouse() != construction) {
               player.sendMessage(, , player -> {
           final Construction currentHouse = player.getCurrentHouse();
           if (currentHouse == null) {
               player.sendMessage(, , player -> player.getConstruction().getHouseViewer().openHouseViewer());
       bind(, , player -> player.getConstruction().setBuildingMode(false));
       bind(, , player -> player.getConstruction().setRenderDoorsMode(0));
       bind(, , player -> player.getConstruction().setTeleportInside(false));
       bind(, Building mode OFF, Building mode ON, Expel guests, Leave house, Number of rooms, Open || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HouseOptionsTabInterface.java
Ignore List Core interface registry View, View Friends List core/src/main/java/com/zenyte/game/model/ui/testinterfaces/IgnoreListInterface.java
Item Retrieval Service Core interface registry , (player, slotId, itemId, option) -> {
           final ItemRetrievalService service = player.getRetrievalService();
           final Container container = service.getContainer();
           final Item item = container.get(slotId);
           if (item == null) return;
           if (option == 2) {
               if (service.isLocked()) {
                   player.sendMessage(, , player -> {
           final ItemRetrievalService service = player.getRetrievalService();
           if (service.isLocked()) {
               final ItemRetrievalService.RetrievalServiceType type = service.getType();
               final int cost = type.getCost();
               final int inInventory = player.getInventory().getAmountOf(995);
               final int inBank = player.getBank().getAmountOf(995);
               final int total = inInventory + inBank;
               //If cost is above total and total is above 0(overflow results in two integer adding going negative value)
               if (cost > total && total >= 0) {
                   player.sendMessage(, , player -> {
           player.getInterfaceHandler().closeInterface(getInterface());
           player.getDialogueManager().start(new Dialogue(player) {
               @Override
               public void buildDialogue() {
                   options(, Discard-All, Items, Take-All, Take-All/Unlock || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ItemRetrievalServiceInterface.java
Journal Header Tab Core interface registry , player -> player.getInterfaceHandler().setJournal(InterfaceHandler.Journal.CHARACTER_SUMMARY));
       bind(, , player -> player.getInterfaceHandler().setJournal(InterfaceHandler.Journal.QUEST_TAB));
       bind(, , player -> player.getInterfaceHandler().setJournal(InterfaceHandler.Journal.SERVER_EVENTS));
       bind(, Achievement Diary, Character Summary, Extra, Game Noticeboard, Quests, Server Events || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/JournalHeaderTabInterface.java
Kourend Favour Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/KourendFavourTabInterface.java
Lobby Core interface registry Bank pin, Click here to play, Message of the week core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LobbyInterface.java
Logout Tab Core interface registry , player -> player.clickedLogoutButton(null));
       bind(, Logout, World switcher || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LogoutTabInterface.java
Looting Bag Core interface registry , player -> close(player));
       bind(, Close, deposit, Store/Examine, Value, Withdraw || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LootingBagInterface.java
Make Over Core interface registry , (player, slotId, itemId, option) -> {
           final int value = slotId == 0 ? 7 : slotId >= 8 && slotId <= 12 ? slotId : slotId - 1;
           player.getVarManager().sendVar(262, value);
           player.getTemporaryAttributes().put(, , player -> {
           final boolean male = player.getBooleanTemporaryAttribute(, CONFIRM, Finish make-over, Select, Select female, Select male, Select skin colour || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MakeOverInterface.java
Minigame Tab Core interface registry , (player, slotId, itemId, option) -> {
           final MinigameGroupFinder minigame = MinigameGroupFinder.getMinigame(slotId);
           if (minigame == null) {
               player.sendMessage(, PvM Arena, Select, Select minigame, Teleport || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinigameTabInterface.java
Minimized Minimap Orbs Core interface registry , (player, slotId, itemId, option) -> {
           //In case of spoofing.
           if (WildernessArea.isWithinWilderness(player)) {
               return;
           }
           if (player.isLocked()) {
               return;
           }
           final Duel duel = player.getDuel();
           if (duel != null && duel.hasRule(DuelSetting.NO_SPECIAL_ATTACK) && duel.inDuel()) {
               player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (option == 1) {
               player.getPrayerManager().toggleQuickPrayers();
           } else if (option == 2) {
               if (player.isLocked() || player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                   player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (option == 1) {
               player.getSettings().toggleSetting(Setting.EXPERIENCE_TRACKER);
           } else if (option == 2) {
               if (player.isLocked() || player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                   player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (player.isLocked() || player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
               player.sendMessage(, , player -> player.setRun(!player.isRun()));
       bind(, Cure Toxins, Experience Tracker, Prayer, Run, Toggle, Toggle special, View || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinimizedMinimapOrbsInterface.java
Mobile Pane Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 2) {
               player.getDialogueManager().start(new Dialogue(player) {
                   @Override
                   public void buildDialogue() {
                       final String currentSettingName = player.getAttributes().getOrDefault(, , FunctionButtonOption.SHOW_KEYBOARD.name());
                       });
                       final Dialogue.DialogueOption singleTap = new DialogueOption(FunctionButtonOption.TOGGLE_SINGLE_TAP_MODE.optionName, () -> {
                           player.getVarManager().sendBit(SettingVariables.SELECT_FUNCTIONMODE_VARBIT_ID, FunctionButtonOption.SHOW_KEYBOARD.varbitValue);
                           player.getSettings().setSetting(Setting.MOBILE_FUNCTION_BUTTON_ENABLED, 0);
                           player.getVarManager().sendBitInstant(SettingVariables.SINGLE_MOUSE_BUTTON_MODE_VARP_ID, 0);
                           player.getVarManager().sendBitInstant(SettingVariables.SHIFT_CLICK_TO_DROP_ITEMS_VARBIT_ID, 0);
                           player.getAttributes().put(, , FunctionButtonOption.TOGGLE_TAP_TO_DROP_MODE.name());
                       });
                       final Dialogue.DialogueOption disable = new DialogueOption(FunctionButtonOption.DISABLE.optionName, () -> {
                           player.getVarManager().sendBit(SettingVariables.SELECT_FUNCTIONMODE_VARBIT_ID, FunctionButtonOption.SHOW_KEYBOARD.varbitValue);
                           player.getSettings().setSetting(Setting.MOBILE_FUNCTION_BUTTON_ENABLED, 0);
                           player.getVarManager().sendBitInstant(SettingVariables.SINGLE_MOUSE_BUTTON_MODE_VARP_ID, 0);
                           player.getVarManager().sendBitInstant(SettingVariables.SHIFT_CLICK_TO_DROP_ITEMS_VARBIT_ID, 0);
                           player.getAttributes().put(, , player -> {
           player.getPacketDispatcher().sendClientScript(1980, 0, 80);
       });
       bind(, , player -> player.getInterfaceHandler().openGameTab(GameTab.LOGOUT_TAB));
       bind(, Combat tab, Function button, Logout tab, Select, Show keyboard, Start chatting || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MobilePaneInterface.java
Music Player Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 1) {
               if (!player.getMusic().play(slotId + 1)) {
                   player.sendMessage(, , player -> {
           player.getSettings().setSetting(Setting.AUTO_MUSIC, 0);
           player.getPacketDispatcher().sendComponentText(getInterface(), getComponent(, , player -> {
           player.getSettings().setSetting(Setting.AUTO_MUSIC, 1);
           player.getPacketDispatcher().sendComponentText(getInterface(), getComponent(, , player -> {
           player.getSettings().toggleSetting(Setting.LOOP_MUSIC);
           player.sendMessage(, Auto, Loop, Manual, Play song, Song name || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MusicPlayerInterface.java
Mycelium Teleport Core interface registry , player -> teleport(player, 0));
       bind(, , player -> teleport(player, 2));
       bind(, Teleport 1, Teleport 1 Text, Teleport 2, Teleport 2 Text, Teleport 3, Teleport 3 Text, Teleport 4, Teleport 4 Text || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MyceliumTeleportInterface.java
Nieve Gravestone Core interface registry Line 1, Line 10, Line 11, Line 12, Line 2, Line 3, Line 4, Line 5, Line 6, Line 7, Line 8, Line 9 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/NieveGravestoneInterface.java
Orbs Core interface registry , (player, slotId, itemId, option) -> {
           //In case of spoofing.

// if (WildernessArea.isWithinWilderness(player)) { // return; // }

           if (player.isLocked()) {
               return;
           }
           final Duel duel = player.getDuel();
           if (duel != null && duel.hasRule(DuelSetting.NO_SPECIAL_ATTACK) && duel.inDuel()) {
               player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (option == 1) {
               player.getPrayerManager().toggleQuickPrayers();
           } else if (option == 2) {
               if (player.isLocked() || player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                   player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (option == 1) {
               player.getSettings().toggleSetting(Setting.EXPERIENCE_TRACKER);
           } else if (option == 2) {
               if (player.isLocked() || player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                   player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (player.isLocked() || player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
               player.sendMessage(, , (player, slotId, itemId, option) -> {

// if (WildernessArea.isWithinWilderness(player)) { // player.sendMessage(, , player -> player.setRun(!player.isRun()));

       bind(, Cure Toxins, Daily activity, Experience Tracker, Open, Open Store, Prayer || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/OrbsInterface.java
Pet Insurance Core interface registry , (player, slotId, ook, option) -> {
           final IntEnum insurablePets = EnumDefinitions.getIntEnum(985);
           int enumIndex = slotId / 5 - 1;
           OptionalInt item = insurablePets.getValue(enumIndex);
           int itemId = -1;
           if (item.isPresent()) {
               itemId = item.getAsInt();
           }
           if (option == 10) {
               ItemUtil.sendItemExamine(player, itemId);
               return;
           }
           final PetInsurance insurance = player.getPetInsurance();
           final Pet pet = PetWrapper.getByItem(itemId);
           if (pet == null || !insurance.isInsured(pet)) {
               return;
           }
           if (pet.hasPet(player)) {
               return;
           }
           final InsurableVariablePet variablePet = InsurableVariablePet.getPet(pet.itemId());
           if (variablePet != null) {
               for (final Integer variableId : variablePet.getIds()) {
                   final Pet alternativePet = PetWrapper.getByItem(variableId);
                   if (alternativePet == null) {
                       continue;
                   }
                   if (alternativePet.hasPet(player)) {
                       return;
                   }
               }
           }
           if (!player.getMemberRank().equalToOrGreaterThan(MemberRank.RUBY)) {
               if (!player.getInventory().containsItem(PetInsurance.RECLAIM_PRICE)) {
                   player.getDialogueManager().start(new NPCChat(player, 5906, , Buy, Buy Reclaims, Confirm, Reclaim Insured Pet || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PetInsuranceInterface.java
Preset Manager Core interface registry , (player, slotId, itemId, option) -> {
           final PresetManager presetManager = player.getPresetManager();
           if (presetManager.getTotalPresets() == 0) {
               player.sendMessage(, , (player, slotId, itemId, option) -> {
           if (option == 1) {
               final int activeIndex = indexOfActivePreset(player);
               if (activeIndex == slotId) {
                   return;
               }
               refresh(player, OptionalInt.of(slotId), true);
           } else if (option == 2) {
               overwrite(player, slotId);
           } else if (option == 3) {
               load(player, slotId);
           } else if (option == 4) {
               rename(player, slotId);
           } else if (option == 5) {
               final Preset preset = player.getPresetManager().getPreset(slotId);
               if (preset == null) {
                   return;
               }
               if (!preset.isAvailable()) {
                   player.sendMessage(, , index);
               finalPreset.load(player);
           });
       }
   }
   private void rename(final Player player, final int index) {
       final PresetManager presetManager = player.getPresetManager();
       if (presetManager.getTotalPresets() == 0) {
           player.sendMessage(, , player -> {
           final PresetManager presetManager = player.getPresetManager();
           if (presetManager.getTotalPresets() >= presetManager.getMaximumPresets()) {
               player.sendMessage(, , player -> delete(player, indexOfActivePreset(player)));
       bind(, , player -> load(player, indexOfActivePreset(player)));
       bind(, , player -> player.getBank().toggleSetting(BankSetting.ALWAYS_PLACEHOLDER, player.getBank().getSetting(BankSetting.ALWAYS_PLACEHOLDER) == 0));
       bind(, , player -> selectSpellbook(player, Spellbook.LUNAR));
       bind(, , player -> selectSpellbook(player, Spellbook.NORMAL));
       bind(, , preset) != null;
       if (!scheduledPresetLoad) {
           player.addPostProcessRunnable(() -> {
               final Preset finalPreset = (Preset) player.getTemporaryAttributes().remove(, Always set placeholders, Ancient Spellbook || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PresetManagerInterface.java
Price Checker Core interface registry , (player, slotId, itemId, option) -> {
           final Container container = player.getInventory().getContainer();
           if (container.getSize() == 0) {
               player.sendMessage(, , (player, slotId, itemId, option) -> {
           final Item item = player.getPriceChecker().get(slotId);
           if (item == null) {
               return;
           }
           if (item.getId() != itemId) {
               return;
           }
           if (option == 10) {
               ItemUtil.sendItemExamine(player, item);
               return;
           }
           if (option == 5) {
               player.sendInputInt(, , (player, slotId, itemId, option) -> player.sendInputItem(, Add all, Interact with item, Item name in search, Item sprite in search, Search, Search for item, Select || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInterface.java
Price Checker Inventory Core interface registry , (player, slotId, itemId, option) -> {
           final Item item = player.getInventory().getItem(slotId);
           if (item == null) {
               return;
           }
           if (item.getId() != itemId) {
               return;
           }
           if (option == 10) {
               ItemUtil.sendItemExamine(player, item);
               return;
           }
           if (option == 5) {
               player.sendInputInt(, Interact with item || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInventoryInterface.java
Quest Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuestTabInterface.java
Quick Prayer Core interface registry , (player, slotId, itemId, option) -> player.getPrayerManager().setQuickPrayer(slotId));
       bind(, Confirm, Select, Select prayer || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuickPrayerInterface.java
Remnant Value Guide Core interface registry Search, Select, Sell core/src/main/java/com/zenyte/game/model/ui/testinterfaces/RemnantValueGuideInterface.java
Resizable Pane Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 2) {
               player.getSettings().toggleSetting(Setting.PRAYER_FILTER_DISABLE);
           }
       });
       bind(, , (player, slotId, itemId, option) -> VarCollection.COMP_PROGRESS.updateSingle(player));
       bind(, Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ResizablePaneInterface.java
Seed Box Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 5) {
               player.sendInputInt(, , player -> player.getSeedBox().empty());
       bind(, Empty box, Fill box, Remove || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SeedBoxInterface.java
Server Events Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ServerEventsInterface.java
Settings Tab Core interface registry , (player, slotId, itemId, option) -> player.getVarManager().sendVar(SettingVariables.NPC_ATTACK_OPTIONS_VARP_ID, slotId - 1));
       bind(, , (player, slotId, itemId, option) -> player.getVarManager().sendVar(SettingVariables.SCREEN_BRIGHTNESS_VARP_ID, slotId * 5));
       bind(, , (player, slotId, itemId, option) -> setAreaSoundVolume(player, slotId * 5));
       bind(, , (player, slotId, itemId, option) -> setSoundEffectVolume(player, slotId * 5));
       bind(, , player -> {
           player.getInterfaceHandler().closeInterfaces();
           player.setRun(!player.isRun());
       });
       bind(, , player -> player.getVarManager().flipBit(SettingVariables.PK_SKULL_PREVENTION_VARBIT_ID));
       bind(, Accept aid, All Settings, Area Sound Volume, Brightness, Disable zooming with scroll wheel, Game Client Layout || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SettingsTabInterface.java
Side Panels Resizable Pane Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 2) {
               player.getSettings().toggleSetting(Setting.PRAYER_FILTER_DISABLE);
           }
       });
       bind(, , (player, slotId, itemId, option) -> VarCollection.COMP_PROGRESS.updateSingle(player));
       bind(, Character Summary, Gravestone info, helper_cox, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SidePanelsResizablePaneInterface.java
Silver Jewellery Core interface registry , (player) -> player.getVarManager().sendVar(SMITHING_AMOUNT_VARP, 1));
       bind(, , (player) -> player.getVarManager().sendVar(SMITHING_AMOUNT_VARP, 10));
       bind(, Make all, Make five, Make one, Make ten, Make x || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SilverJewelleryInterface.java
Skills Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkillsTabInterface.java
Skotizo Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkotizoInterface.java
Spellbook Core interface registry , (player, slotId, itemId, option) ->
           new Lvl1Enchant().spellEffect(player, player.getInventory().getItemById(itemId), slotId));
       bind(, , option);
           if (spell instanceof SpellbookTeleport) {
               player.getTemporaryAttributes().put(, , player -> {
           var reqRunes = new Item[] {
               new Item(Magic.LAW_RUNE, 1), new Item(Magic.CHAOS_RUNE, 1), new Item(Magic.DEATH_RUNE, 1)
           };
           if (player.getInventory().containsItems(reqRunes)) {
               if (player.getInventory().deleteItems(reqRunes).getResult() == SUCCESS) {
                   if (WildyExtKt.isBountyPaired(player)) {
                       if (TeleportToTarget.Companion.canTeleportToTarget(player))
                           TeleportToTarget.Companion.teleportToTarget(player);
                       else
                           player.sendMessage(, , player -> new EnchantCrossbowBolt().spellEffect(player, 0, null));
       bind(, , player -> player.getSettings().toggleSetting(Setting.SHOW_SPELLS_YOU_LACK_THE_MAGIC_LEVEL_TO_CAST));
       bind(, , player -> player.getSettings().toggleSetting(Setting.SHOW_SPELLS_YOU_LACK_THE_REQUIREMENTS_TO_CAST));
       bind(, , player -> player.getSettings().toggleSetting(Setting.SHOW_TELEPORT_SPELLS));
       bind(, Crossbow Bolt Enchantments, Jewellery Enchantments, Lvl-1 Enchant, Lvl-2 Enchant, Lvl-3 Enchant || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SpellbookInterface.java
Storage Room Core interface registry , (player, slotId, itemId, option) -> {
           final StorageType type = getType(player);
           final IntList categoryItems = items.get(type.getEnumId()).get(slotId);
           if (option == 10) {
               final int item = categoryItems.getInt(0);
               player.sendMessage(ItemDefinitions.get(item).getExamine());
               return;
           }
           if (option == 1) {
               // Take out full set...
               if (itemId <= -1) {
                   for (int i = 0; i < categoryItems.size(); i++) {
                       if (!player.getInventory().checkSpace(1)) {
                           return;
                       }
                       var result = player.getStorageRoom().getContainer().remove(new Item(categoryItems.getInt(i)));
                       if (result.getSucceededAmount() <= 0) continue;
                       var item = new Item(result.getItem().getId(), result.getSucceededAmount());
                       player.getInventory().addItem(item);
                       player.getStorageRoom().getContainer().setFullUpdate(true);
                       player.getPacketDispatcher().sendUpdateItemContainer(32768 + ContainerType.STORAGE_ROOM.getId(), -1, 0, player.getStorageRoom().getContainer());
                   }
               } else {
                   int slotForItem = player.getStorageRoom().getContainer().getSlotOf(itemId);
                   if (slotForItem <= -1) return;
                   Item item = player.getStorageRoom().getContainer().get(slotForItem);
                   if (item == null) return;
                   player.getStorageRoom().getContainer().withdraw(player, player.getInventory().getContainer(), slotForItem, item.getAmount());
                   player.getPacketDispatcher().sendUpdateItemContainer(32768 + ContainerType.STORAGE_ROOM.getId(), -1, 0, player.getStorageRoom().getContainer());
                   player.getInventory().refreshAll();
               }
           }
       });
       bind(, , (player) -> {
           for (int i = 0; i < 28; i++) {
               final Item item = player.getInventory().getItem(i);
               if (item == null) continue;
               final var categoryItems = StorageRoomInterface.itemSetsByCategory.get(StorageRoomInterface.getType(player).getEnumId());
               if (categoryItems == null) continue;
               final IntList items = categoryItems.get(item.getId());
               if (items == null) continue;
               if (player.getStorageRoom().getContainer().getAmountOf(item.getId()) > 0) continue;
               player.getInventory().getContainer().withdraw(player, player.getStorageRoom().getContainer(), i, item.getAmount());
           }
           player.getPacketDispatcher().sendUpdateItemContainer(32768 + ContainerType.STORAGE_ROOM.getId(), -1, 0, player.getStorageRoom().getContainer());
           player.getInventory().refreshAll();
       });
   }
   public static StorageType getType(Player player) {
       return (StorageType) player.getTemporaryAttributes().get(, Deposit, Deposit inventory, Deposit mode, Items || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInterface.java
Storage Room Inventory Core interface registry , (player, slotId, itemId, option) -> {
           if (player.getVarManager().getBitValue(StorageRoomInterface.DEPOSIT_TYPE_VARBIT) == 0) {
               final Item item = player.getInventory().getContainer().get(slotId);
               if (item == null) return;
               if (player.getStorageRoom().getContainer().getAmountOf(item.getId()) > 0) {
                   player.sendMessage(, Items || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInventoryInterface.java
Teleport Core interface registry + index, (player, slotId, itemId, option) -> clickListRow(player, row));
       }
       bind(,  + index, (player, slotId, itemId, option) -> removeFavourite(player, favourite));
       }
       bind(, , (player, slotId, itemId, option) -> changePage(player, 1));
       for (int index = 0; index < CATEGORY_BUTTONS.length; index++) {
           final int categoryIndex = index;
           bind(, , (player, slotId, itemId, option) -> startSearch(player));
       bind(, , (player, slotId, itemId, option) -> toggleSelectedFavourite(player));
       for (int index = 0; index < FAVOURITE_ROWS.length; index++) {
           final int favourite = index;
           bind(, Back, Category button , Favourite row , Favourite selected, List row , Next page, Previous page || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TeleportInterface.java
Trade Inventory Core interface registry , (player, slotId, itemId, option) -> {
           if (option == 10) {
               ItemUtil.sendItemExamine(player, itemId);
               return;
           }
           if (FlowerPokerManager.get(player).inInterface) {
               FlowerPokerManager flowerPokerManager = FlowerPokerManager.get(player);
               final Item item = player.getInventory().getItem(slotId);
               if (item == null) {
                   return;
               }
               if (option == 5) {
                   player.sendInputInt(, Add Item || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeInventoryInterface.java
Trade Stage1 Core interface registry , player -> {
           if(FlowerPokerManager.get(player).inInterface)
               FlowerPokerManager.get(player).accept(1);
           else
               player.getTrade().accept(1);
       });
       bind(, Accept, Remove Item || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage1Interface.java
Trade Stage2 Core interface registry , player -> {
           if(FlowerPokerManager.get(player).inInterface)
               FlowerPokerManager.get(player).accept(2);
           else
               player.getTrade().accept(2);
       });
       bind(, Accept, Decline || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage2Interface.java
Tutorial Make Over Core interface registry Title core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TutorialMakeOverInterface.java
Unmorph Core interface registry Unmorph core/src/main/java/com/zenyte/game/model/ui/testinterfaces/UnmorphInterface.java
Wheel Of Fortune Core interface registry , (player, slotId, itemId, option) -> ItemUtil.sendItemExamine(player, itemId));
       bind(, , player -> close(player));
       bind(, , player -> player.getWheelOfFortune().claim(false));
       bind(, Claim, Claim later, Deposit, Deposit to bank, Discard, Examine item, No (Discard), Spin, Yes (Discard) || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WheelOfFortuneInterface.java
World Map Core interface registry , player -> {
           if (player.isLocked()) {
               return;
           }
           player.getWorldMap().close();
       });
       bind(, Close, Esc Close, Menu || core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WorldMapInterface.java
User Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/UserInterface.java
Calog Boss Core game content , (player, slotId, itemId, option) -> {

final Optional<CABossType> optionalType = Arrays.stream(CABossType.values). filter(e -> player.getVarManager().getBitValue(CALogBossOverviewInterface.BOSS_SELECT_VARBIT) == e.ordinal() + 1).findFirst(); if (optionalType.isPresent()) { final CABossType type = optionalType.get(); player.getTemporaryAttributes().put(CollectionLogInterface.CATEGORY_ATTR_KEY, type.isRaid() ? CLCategoryType.RAIDS : CLCategoryType.BOSS); player.getTemporaryAttributes().put(CollectionLogInterface.SUB_CATEGORY_ATTR_KEY, type.getCollLogVal()); GameInterface.COLLECTION_LOG.open(player); } }); bind(, , (player, slotId, itemId, option) -> { player.getVarManager().sendBit(CA_TASK_TIER_SELECT_VARBIT, 0); player.getVarManager().sendBit(CA_TASK_TYPE_SELECT_VARBIT, 0); player.getVarManager().sendBit(CA_TASK_MONSTER_SELECT_VARBIT, MONSTER_VALUES.get(player.getVarManager().getBitValue(12862))); player.getVarManager().sendBit(CA_TASK_COMPLETED_SELECT_VARBIT, 0); GameInterface.CA_TASKS.open(player); }); bind(, Collection log, General, Navigation, Select, Select task || core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossInterface.java

Calog Boss Overview Core game content , (player, slotId, itemId, option) -> {

if (slotId >= 1 && slotId <= 50) { player.getVarManager().sendBitInstant(BOSS_SELECT_VARBIT, slotId); GameInterface.CA_BOSS.open(player); } }); bind(, Navigation, Select || core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossOverviewInterface.java

Calog Overview Core game content , (player, slotId, itemId, option) -> {

if (slotId == 12) { GameInterface.CA_TASKS.open(player); } else if (slotId == 14) { GameInterface.CA_BOSS_OVERVIEW.open(player); } else if (slotId == 16) { GameInterface.CA_REWARDS.open(player); } }); bind(, Navigation, Task selection || core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogOverviewInterface.java

Calog Reward Core game content , (player, slotId, itemId, option) -> {

System.out.println(, Navigation || core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogRewardInterface.java

Calog Task Core game content , (player, slotId, itemId, option) -> {

if (slotId == 10) { GameInterface.CA_OVERVIEW.open(player); } else if (slotId == 14) { GameInterface.CA_BOSS_OVERVIEW.open(player); } else if (slotId == 16) { GameInterface.CA_REWARDS.open(player); } }); bind(, , (player, slotId, itemId, option) -> { if (slotId >= 1 && slotId <= 7) { player.getVarManager().sendBit(CA_TASK_TYPE_SELECT_VARBIT, slotId - 1); } }); bind(, Completed, Monster, Navigation, Tier, Type || core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogTaskInterface.java

Collection Log Core game content + c, (player) -> {
               /* Avoid updating the results more than once a tick - it's very expensive. */
               long lastTick = player.getNumericTemporaryAttribute(, , (player, slotId, itemId, option) -> {
           final CLCategoryType currentCategory = (CLCategoryType) player.getTemporaryAttributes().getOrDefault(CATEGORY_ATTR_KEY, CLCategoryType.BOSS);
           final int currentSubCategory = (int) player.getTemporaryAttributes().getOrDefault(SUB_CATEGORY_ATTR_KEY, 0);
           final Optional<CABossType> optionalType = Arrays.stream(CABossType.values).
                   filter(b -> b.getCollLogVal() == currentSubCategory && currentCategory.equals(b.isRaid() ? CLCategoryType.RAIDS : CLCategoryType.BOSS)).findFirst();
           if (optionalType.isPresent()) {
               player.getVarManager().sendBitInstant(CALogBossOverviewInterface.BOSS_SELECT_VARBIT, optionalType.get().ordinal() + 1);
               GameInterface.CA_BOSS.open(player);
           }
       });
       bind(, , this::attemptClaim);
       for (CLCategoryType type : CLCategoryType.values) {
           bind(type + , Claim, Claim Reward, Close, Combat achievements, Search, Search letter  || core/src/main/java/com/zenyte/game/world/entity/player/collectionlog/CollectionLogInterface.java
Bank Pin Settings Core game content , (player, slotId, itemId, option) -> {
           player.getBankPin().toggleShortDelay();
           refreshInterface(player);
       });
       // Change how long after logout before the account locks
       bind(, , (player, slotId, itemId, option) -> player.getBankPin().sendConfirmationScreen(player, 1));
       bind(, , (player, slotId, itemId, option) -> player.getBankPin().sendConfirmationScreen(player, 2));
       bind(, , (player, slotId, itemId, option) -> refreshInterface(player));
       bind(, Cancel PIN option, Change PIN, Change PIN Delay, Delete PIN, Interface base, Login Secure Delay, Message, PIN Alteration Confirm || core/src/main/java/com/zenyte/game/world/entity/player/container/impl/bank/BankPinSettingsInterface.java
Interface Switch Handler Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchHandler.java
Interface Switch Plugin Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchPlugin.java
Bingo Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/BingoInterface.java
Canoe Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/CanoeInterface.java
Combat Buddy Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/CombatBuddyInterface.java
Daily Login Rewards Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/DailyLoginRewardsInterface.java
Daily Task Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/DailyTaskInterface.java
Daily Vote Streak Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/DailyVoteStreakInterface.java
Book Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/BookInterface.java
Dual Item Option Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/DualItemOptionDialogueInterface.java
Furniture Creation Enabled plugin , (player, slotId, itemId, option) -> {
           if (player.getTemporaryAttributes().containsKey(, Build furniture || core/src/main/java/com/zenyte/plugins/interfaces/dialogue/FurnitureCreationInterface.java
Normal Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/NormalDialogueInterface.java
Option Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/OptionDialogueInterface.java
Orb Of Oculus Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/OrbOfOculusInterface.java
Poll Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/PollInterface.java
Room Creation Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/RoomCreationInterface.java
Skill Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/SkillDialogueInterface.java
Teleother Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/TeleotherInterface.java
Wilderness Warning Enabled plugin , true);

WildernessDitchObject.jump(player, (WorldObject) player.getTemporaryAttributes().get( || core/src/main/java/com/zenyte/plugins/interfaces/dialogue/WildernessWarningInterface.java

Grand Exchange Offers Enabled plugin buy, sell core/src/main/java/com/zenyte/plugins/interfaces/GrandExchangeOffersInterface.java
House Viewer Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/HouseViewerInterface.java
Item Upgrader Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ItemUpgraderInterface.java
Kill Log Enabled plugin , new Object[] { name, slotId });

} else if (componentId == 25) { final Object[] data = (Object[]) player.getTemporaryAttributes().get(, Select || core/src/main/java/com/zenyte/plugins/interfaces/KillLogInterface.java

Mystery Box Enabled plugin , (player, slotId, itemId, option) -> {

Integer boxId = (Integer) player.getTemporaryAttributes().get(, , container); player.getTemporaryAttributes().put(, , player -> player.getInterfaceHandler().closeInterfaces()); }

public static void openBoxQuick(Player player, int boxId, MysteryItem[] rewards, int totalWeight, MysterySupplyItem[] supplies) { Item box = new Item(boxId); if (!player.getInventory().deleteItem(box).isFailure()) { MysteryItem jackpot = MysteryItem.generateItem(player, rewards, totalWeight); final Item reward = new Item(jackpot.getId(), Utils.random(jackpot.getMinAmount(), jackpot.getMaxAmount()), jackpot.getCharges());

player.getInventory().addOrDrop(reward); if (jackpot.isAnnounce() || reward.getId() == 6199) { WorldBroadcasts.broadcast(player, BroadcastType.MYSTERY_BOX_RARE_ITEM, reward.getId(), box.getName()); }

if (supplies != null) { for (int i = 0; i < 2; i++) { MysterySupplyItem supplyItem = Utils.random(supplies); final Item supplyReward = supplyItem.toItem(Utils.random(supplyItem.getMinAmount(), supplyItem.getMaxAmount())); player.getInventory().addOrDrop(supplyReward); } } player.getInventory().addOrDrop(randomBurnPointVoucher()); } }

@Override public GameInterface getInterface() { return GameInterface.MYSTERY_BOX; }

@Override public void close(Player player, Optional<GameInterface> replacement) { if (player.getBooleanTemporaryAttribute(, , player -> player.getPacketDispatcher().sendURL(, , rewards); player.getTemporaryAttributes().put(, Close, mbox_supplies, Purchase boxes, Reward text, Spin || core/src/main/java/com/zenyte/plugins/interfaces/MysteryBoxInterface.java

Quest Journal Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/QuestJournalInterface.java
Remnant Pet Perk Interface Plugin Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/RemnantPetPerkInterfacePlugin.java
Report Abuse Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ReportAbuseInterface.java
Rune Pouch Enabled plugin , (player, slotId, itemId, option) -> {
           withdraw(player, slotId, option);
       });
       bind(, boonQuantStored, Deposit, Withdraw || core/src/main/java/com/zenyte/plugins/interfaces/RunePouchInterface.java
Scratch Card Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ScratchCardInterface.java
Shop Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ShopInterface.java
Skill Enabled plugin view core/src/main/java/com/zenyte/plugins/interfaces/SkillInterface.java
Smithing Enabled plugin , player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));

bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 10)); bind(, , player -> player.getVarManager().sendVar(QUANTITY_VARP, 28));

for (int i = 9; i <= 35; i++) { final int finalI = i; bind(, , tier); player.getTemporaryAttributes().put(, Quantity 1, Quantity 10, Quantity 5, Quantity All, Quantity X, Smith || core/src/main/java/com/zenyte/plugins/interfaces/SmithingInterface.java

Tanning Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/TanningInterface.java
Task Book Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/TaskBookInterface.java
Warrior Guild Catapult Enabled plugin catapultStance core/src/main/java/com/zenyte/plugins/interfaces/WarriorGuildCatapultInterface.java
Well Of Goodwill Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/WellOfGoodwillInterface.java
Interface Extractor Core game content Graphic, Layer, Line, Model, Rectangle, Text core/src/main/java/com/zenyte/tools/InterfaceExtractor.java
Bhinterface Update Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/content/bountyhunter/BHInterfaceUpdate.kt
Bounty Hunter Update Player Interfaces Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/content/bountyhunter/tasks/BountyHunterUpdatePlayerInterfaces.kt
Contest Core game content ) { player: Player, _: Int, _: Int, _: Int ->
           player.awaitInputInt(ListSelectDialog())
       }
   }
   override fun open(player: Player) {
       player.varManager.sendVar(261, 10400)//10301
       var tasksFinishedFully = 0
       var tasksFinished = 0
       for (challenge in ChallengesManager.registries) {
           if (challenge.key == SoloContestant::class) {
               for (struct in challenge.value.structList) {
                   val finishedCount = ChallengesManager.checkCompleted(SoloContestant::class, struct)
                   val structParam = StructDefinitions.get(struct).getParamAsInt(5014)
                   if (finishedCount >= 3)
                       tasksFinishedFully = tasksFinishedFully or (1 shl structParam)
                   else if (finishedCount > 0)
                       tasksFinished = tasksFinished or (1 shl structParam)
               }
           }
       }
       player.varManager.sendVar(262, tasksFinishedFully)
       player.varManager.sendVar(263, tasksFinished)
       super.open(player)
       player.packetDispatcher.sendComponentSettings(id, getComponent(, List || core/src/main/kotlin/com/near_reality/game/content/contests/launch/ContestInterface.kt
Middle Man Handle Trade Core game content , this::populatePendingTradeListView)
       bind(, Logs, Player 1 Offer, Player 2 Offer, Refresh, Status || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/handle/MiddleManHandleTradeInterface.kt
Middle Man Trade History Core game content , GameInterface.MIDDLE_MAN_MONITORING::open)
       bind(, List, MM Home || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/history/MiddleManTradeHistoryInterface.kt
Middle Man Trade Offer Core game content , Handler { player, slotId, itemId, option ->
           if (option == 10) {
               ItemUtil.sendItemExamine(player, itemId)
               return@Handler
           }
           player.middleManController.ifTradeAwaitConfirmation {
               if (player == accepter) {
                   val offerOption = when (option) {
                       3 -> MiddleManTradeOfferOption.Amount(1)
                       4 -> MiddleManTradeOfferOption.Amount(5)
                       5 -> MiddleManTradeOfferOption.Amount(10)
                       7 -> MiddleManTradeOfferOption.X
                       8 -> MiddleManTradeOfferOption.Amount(accepterContainer.getAmountOf(itemId))
                       else -> {
                           player.sendDeveloperMessage(, ) { player ->
           player.middleManController.ifTradeAwaitConfirmation {
               if (hasConfirmed(player)) {
                   player.sendMessage(
                       , ) { player ->
           player.middleManController.ifTradeAwaitConfirmation {
               if (player == accepter) {
                   --accepterOSRSMillions
                   updateOSRSGp()
               }
           }
       }
       bind(, ) { player ->
           player.sendInputInt(, ) { player -> player.middleManController.cancelRequestOrTrade() }
   }
   private fun MiddleManPendingTrade.updateOSRSGp() {
       val requester = requireNotNull(requester) {
           , Cancel, Confirm, Minus 1, My Offered Items, Plus 1, Set quantity || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInterface.kt
Middle Man Trade Offer Inventory Core game content ) { player: Player, slotId: Int, itemId: Int, option: Int ->
           val itemAtSlot = player.inventory.getItem(slotId)
           if (itemAtSlot != null && !itemAtSlot.isTradable)
           {
               player.sendMessage(, My Tradeable Inventory || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInventoryInterface.kt
Middle Man Trade Request Core game content ) { player ->
           player.awaitInputInt {
               player.middleManOfferAmount = it
               player.packetDispatcher.updateOfferAmount(player.middleManOfferAmount)
           }
       }
       bind(, ) { player ->
           player.packetDispatcher.updateOfferAmount(--player.middleManOfferAmount )
       }
       bind(, ) { player ->
           player.sendInputString(, Cancel, Confirm, Enter name, Minus 1, Plus 1, Set quantity || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/request/MiddleManTradeRequestInterface.kt
Remnant Pet Perk Core game content Reroll, Upgrade core/src/main/kotlin/com/near_reality/game/content/remnantpets/RemnantPetPerkInterface.kt
Cape Customizer Interface Plugin Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/model/ui/cape_customizer/CapeCustomizerInterfacePlugin.kt
Chat Channel Interface Type Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/ChatChannelInterfaceType.kt
Group Ironman Chat Channel Core game content , ChatChannelType.IronGroup)
       bind(, , ChatChannelType.YourClan)
       bind(, Clat-channel, Grouping, Iron Group, View, View another clan, Your Clan || core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/GroupIronmanChatChannelInterface.kt
Regular Chat Channel Core game content , ChatChannelType.ChatChannel)
       bind(, , ChatChannelType.ViewAnotherClan)
       bind(, Chat-channel, Grouping, View, View another clan, Your Clan || core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/RegularChatChannelInterface.kt
Credit Package Core game content ) { player ->
           GameInterface.CREDIT_STORE.open(player)
       }
       bind(, ) { player, slotId, _, option ->
           player.creditPackagePaymentMethodSelected = CreditPackageOrder.PaymentMethod.fromComponent(slotId)
       }
   }
   override fun getInterface(): GameInterface =
       GameInterface.CREDIT_PACKAGES
   override fun open(player: Player) {
       player.packetDispatcher.sendURL(STORE_URL)
       player.sendMessage(, checkout, go_back, payment_options || core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditPackageInterface.kt
Credit Store Core game content , CreditStoreModel::buyCredits)
       bind(, ) { player ->
           player.interfaceHandler.closeInterface(this)
       }
       bind(, ) { player ->
           promptDPinSelectionAndOpenMiddlemanInterface(player)
       }
   }
   override fun open(player: Player) {
       if (player.getBooleanAttribute(, ) { player, slotId, _, _ ->
           val tab = CreditStoreTab.findTab(slotId)
           CreditStoreModel.updateSelectedTabContents(player, tab)
           player.storeTabSelected = tab
       }
       bind(, buy, buy_credits_button, categories_dropdown, checkout_button, close, container, middleman_button, tabs || core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditStoreInterface.kt
Donation Deals Core game content ) { player -> DonationDealsModel.previewClaim(player) }
       bind(, ) { player -> player.packetDispatcher.sendComponentVisibility(id, 159, true) }
   }
   override fun open(player: Player) {
       super.open(player)
       DonationDealsModel.open(player)
   }
   override fun close(player: Player, replacement: Optional<GameInterface>) {
       player.temporaryAttributes.remove(DonationDealsModel.CLAIM_ITEMS_KEY)
   }
   override fun getInterface(): GameInterface = GameInterface.DONATION_DEALS

}

object DonationDealsModel {

   const val CLAIM_ITEMS_KEY = , claim, claim_deal, close_confirm, confirm, confirm_claim || core/src/main/kotlin/com/near_reality/game/model/ui/donationdeals/DonationDealsInterface.kt
Vote Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/model/ui/vote/VoteInterface.kt
Duel Confirmation Core game content ) { p: Player ->
           if (!p.inArea(, Confirm, Decline || core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/DuelConfirmationInterface.kt
Staking Duel Core game content ) { p -> p.duel?.confirm(DuelStage.STAKE) }
       bind(, ) { player: Player, _: Int, itemId: Int, option: Int ->
           val duel = player.duel ?: return@bind
           val myContainer = duel.getContainer(player)
           val stakeOption = when (option) {
               1 -> ItemStakeOption.Amount(1)
               2 -> ItemStakeOption.Amount(5)
               3 -> ItemStakeOption.Amount(10)
               4 -> ItemStakeOption.Amount(myContainer.getAmountOf(itemId))
               5 -> ItemStakeOption.X
               else -> return@bind
           }
           when (stakeOption) {
               is ItemStakeOption.Amount -> duel.removeItem(itemId, stakeOption.amount)
               ItemStakeOption.X -> player.sendInputInt(, Accept, Decline, My Staked Items, Target name || core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingDuelInterface.kt
Staking Inventory Core game content ) { player: Player, slotId: Int, itemId: Int, option: Int ->
           val itemAtSlot = player.inventory.getItem(slotId) ?: return@bind
           if (!itemAtSlot.isTradable) {
               player.sendMessage(, My Stakeable Inventory || core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingInventoryInterface.kt
Spellbook Open Teleport Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/zenyte/game/content/skills/magic/spells/teleports/SpellbookOpenTeleportInterface.kt
Universal Shop Core game content ) { player: Player, _: Int, _: Int, _: Int ->
               if(!player.univShopDoubleProcess) {
                   player.univShopSearchActive = !player.univShopSearchActive
                   player.univShopDoubleProcess = true
               } else {
                   player.univShopDoubleProcess = false
               }
           }
           bind(, ) { player: Player, slotId: Int, interfaceItem: Int, option: Int ->
               val trueTarget = if(player.selectedUniversalShopCategory > 1) slotId - 4 else slotId
               val categoryRow =
                   if(player.univShopSearchActive) UniversalShop.defaultBuyLocation(interfaceItem)
                   else UniversalShop.getCategoryRowIndexPair(player.selectedUniversalShopCategory, trueTarget)
               val categoryId = categoryRow.first
               val itemId = DBRowDefinition.getRowColumnByIndexesInt(UniversalShop.categoriesToIds.getOrDefault(categoryId, 1001), categoryRow.second, 3)
               if (UniversalShop.isRemovedItem(itemId)) {
                   player.sendMessage(, categories_list, search, search_button, stock_list || core/src/main/kotlin/com/zenyte/game/content/universalshop/UniversalShopInterface.kt
Character Designer Enabled plugin , ::handleConfirm)
       bind(, , ::handleMale)
       bind(, , ::handlePreviousArms)
       bind(, , ::handlePreviousFeet)
       bind(, , ::handlePreviousFeetColour)
       bind(, , ::handlePreviousHairColour)
       bind(, , ::handlePreviousHands)
       bind(, , ::handlePreviousHead)
       bind(, , ::handlePreviousJaw)
       bind(, , ::handlePreviousLegs)
       bind(, , ::handlePreviousLegsColour)
       bind(, , ::handlePreviousSkinColour)
       bind( || plugins/interfaces/characterdesign/src/main/kotlin/com/near_reality/plugins/interfaces/characterdesign/CharacterDesignerInterface.kt
Deaths Office Retrieval Enabled plugin Claim plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_retrieval.interface.kts
Deaths Office Sacrifice Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_sacrifice_inv.interface.kts
Deaths Office Sacrifice Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_sacrifice.interface.kts
Deaths Office Retrieval Enabled plugin Claim plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeRetrievalInterface.kt
Deaths Office Sacrifice Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeSacrificeInterface.kt
Deaths Office Sacrifice Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeSacrificeInvInterface.kt
Gravestone Reclaim Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/gravestone_reclaim.interface.kts
Gravestone Reclaim Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/GravestoneReclaimInterface.kt
Items Kept On Death Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/ItemsKeptOnDeathInterface.kt
Remnant Exch Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/remnant_exch.interface.kts
Remnant Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/remnant_inv.interface.kts
Remnant Exch Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/RemnantExchInterface.kt
Remnant Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/RemnantInvInterface.kt
Univ Shop Inv Enabled plugin Sell plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/univ_shop_inv.interface.kts
Slayer Enabled plugin Buy plugins/interfaces/slayer/src/main/kotlin/com/zenyte/game/content/skills/slayer/slayer.interface.kts
Slayer Enabled plugin Buy plugins/interfaces/slayer/src/main/kotlin/com/zenyte/game/content/skills/slayer/SlayerInterface.kt
Teleport Interface Dialog Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/teleports/src/main/kotlin/com/near_reality/plugins/interfaces/teleports/TeleportInterfaceDialog.kt
Teleports Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/teleports/src/main/kotlin/com/near_reality/plugins/interfaces/teleports/TeleportsInterface.kt
World Switcher Interface Plugin Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/worldswitcher/src/main/kotlin/cloud/rsps/game/plugins/interfaces/WorldSwitcherInterfacePlugin.kt

Custom interfaces with full guides

Daily challenges, Daily login rewards, Vote streaks, Burn Points, Pet perks, Combat Buddies, Drop Viewer, Item upgrades, Universal shop, Game notice board, Command hub, Collection log, Server events, Teleport destinations, Automated bingo, Well of Goodwill, Achievements and Task book have dedicated player guides and screenshots.

Buying, selling and exchanging

  • Standard shop screens support item/currency transactions according to the bound shop definition.
  • The Universal Shop uses categories, item IDs, per-item price calculation, quantities and a selected currency.
  • The Remnant Forge and Perk Master expose Buy Perks, Exchange Items, Item Values and the Burn Point Shop; see Burn Points.
  • Reward containers such as the Colosseum chest can expose take, take-all, bank-all and destructive discard actions.
  • Never infer a price from an interface button. The live bound shop, exchange manager or value table is authoritative.
Ready to play Age of Embers?
Use this guide in-game, then jump straight into the server. Progress is persistent across the supported desktop, mobile and web-client routes.