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
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{System infobox|name=Interface directory|type=Complete UI source index|status=Active modules only|source=Core, restricted and enabled plugin interfaces}}
{{System infobox|name=Interface directory|type=Complete UI source index|status=Active modules only}}


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.
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.
Line 8: Line 8:
! Interface !! Module type !! Declared actions !! Source
! Interface !! Module type !! Declared actions !! Source
|-
|-
| '''Donation Store''' || Restricted game content || , (player, slotId, itemId, option) -> {
| '''Donation Store''' || Restricted game content || loyalty_content_transmit, loyalty_footer_transmit, loyalty_side_transmit, popup_transmit, stock_transmit, tab_1, tab_2, tab_3, tab_4 || verified game data
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 || <code>core-restricted/src/main/java/com/near_reality/content/donatestore/DonationStoreInterface.java</code>
|-
|-
| '''Colosseum Reward Chest''' || Restricted game content || , (player, slotId, itemId, option) -> {
| '''Colosseum Reward Chest''' || Restricted game content || bank-all, discard-all, take, take-all || verified game data
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumRewardChestInterface.java</code>
|-
|-
| '''Colosseum Scoreboard''' || Restricted game content || Display, navigation or source-controlled interaction || <code>core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumScoreboardInterface.java</code>
| '''Colosseum Scoreboard''' || Restricted game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Dizana Quiver''' || Restricted game content || ammo, charges, open || <code>core-restricted/src/main/java/com/zenyte/game/content/colosseum/items/DizanaQuiverInterface.java</code>
| '''Dizana Quiver''' || Restricted game content || ammo, charges, open || verified game data
|-
|-
| '''Toaparty''' || Restricted game content || , (player, slotId, itemId, option) -> {
| '''Toaparty''' || Restricted game content || Select, Select party || verified game data
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyInterface.java</code>
|-
|-
| '''Toaparty Management''' || Restricted game content || + slot, (player, slotId, itemId, option) -> {
| '''Toaparty Management''' || Restricted game content || Open, Preset select, Reward info || verified game data
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 &#124;&#124; !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 &#124;&#124; 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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyManagementInterface.java</code>
|-
|-
| '''Toareward''' || Restricted game content || , (player, slotId, itemId, option) -> {
| '''Toareward''' || Restricted game content || Bank-all, Discard-all, Inventory-all, Take-All, Take-x || verified game data
            final Container container = player.getTOAManager().getRewardContainer();
            if (container == null &#124;&#124; container.isEmpty() &#124;&#124; 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 &#124;&#124; container.isEmpty()) {
                player.sendMessage(, Bank-all, Discard-all, Inventory-all, Take-All, Take-x || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOARewardInterface.java</code>
|-
|-
| '''Toascore Board''' || Restricted game content || Display, navigation or source-controlled interaction || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOAScoreBoardInterface.java</code>
| '''Toascore Board''' || Restricted game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Toasupply Bag''' || Restricted game content || Container || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplyBagInterface.java</code>
| '''Toasupply Bag''' || Restricted game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Toasupply Select''' || Restricted game content || , player -> addContainer(player, 0));
| '''Toasupply Select''' || Restricted game content || Chaos, Chaos container, Life, Life container, Power, Power container || verified game data
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplySelectInterface.java</code>
|-
|-
| '''Bounty Hunter''' || Restricted game content || Display, navigation or source-controlled interaction || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/bountyhunter/bounty_hunter.interface.kts</code>
| '''Bounty Hunter''' || Restricted game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Pvm Arena Hud''' || Restricted game content || Display, navigation or source-controlled interaction || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/pvm_arena/widget/PvmArenaHudInterface.kt</code>
| '''Pvm Arena Hud''' || Restricted game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Rewards''' || Restricted game content || Bank-all, Take-All || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/toa/rewards.interface.kts</code>
| '''Rewards''' || Restricted game content || Bank-all, Take-All || verified game data
|-
|-
| '''Tournament Presets''' || Restricted game content || ) { player: Player ->
| '''Tournament Presets''' || Restricted game content || Apply, Equipment Setup, Inventory Setup, Presets, Search, Select, Take Item, View || verified game data
            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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/preset/TournamentPresetsInterface.kt</code>
|-
|-
| '''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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/SpectatingInventoryInterface.kt</code>
| '''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 || verified game data
|-
|-
| '''Tournament Spectating''' || Restricted game content || Display, navigation or source-controlled interaction || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentSpectatingInterface.kt</code>
| '''Tournament Spectating''' || Restricted game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Tournament Viewer''' || Restricted game content || ) { player: Player -> this.refresh(player) }
| '''Tournament Viewer''' || Restricted game content || Players, Refresh, Round, View, View Fight || verified game data
        bind(, Players, Refresh, Round, View, View Fight || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentViewerInterface.kt</code>
|-
|-
| '''Tournament Reward''' || Restricted game content || ) { player: Player, slotId: Int, itemId: Int, option: Int ->
| '''Tournament Reward''' || Restricted game content || Buy, Buy reward || verified game data
            if (!GameToggles.TOURNAMENTS_ENABLED) {
                player.sendMessage(, Buy, Buy reward || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/TournamentRewardInterface.kt</code>
|-
|-
| '''Diary''' || Core game content || close || <code>core/src/main/java/com/zenyte/game/content/achievementdiary/DiaryInterface.java</code>
| '''Diary''' || Core game content || close || verified game data
|-
|-
| '''Advent Calendar''' || Core game content || + day, player -> openDay(player, finalDay));
| '''Advent Calendar''' || Core game content || Day || verified game data
}
}
 
private static void openDay(Player player, int day) {
if (!AdventCalendarManager.adventEnabled()) {
player.sendMessage(, Day || <code>core/src/main/java/com/zenyte/game/content/advent/AdventCalendarInterface.java</code>
|-
|-
| '''Boon Purchase''' || Core game content || , (player, slotId, itemId, option) -> player.getBoonManager().purchaseBoon(BoonWrapper.get(itemId).getPerk(), itemId));
| '''Boon Purchase''' || Core game content || Buy, Entry, Open, Open Exchange || verified game data
        bind(, Buy, Entry, Open, Open Exchange || <code>core/src/main/java/com/zenyte/game/content/boons/BoonPurchaseInterface.java</code>
|-
|-
| '''Quest Journal Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/casket/QuestJournalInterfaceManager.java</code>
| '''Quest Journal Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Raiding Parties''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Raiding Parties''' || Core game content || View, View party || verified game data
            final RaidParty party = advertisedParties.get(slotId);
            if (party == null) {
                return;
            }
            player.getTemporaryAttributes().put(, , RaidingPartiesInterface::refresh);
        bind(, View, View party || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartiesInterface.java</code>
|-
|-
| '''Raiding Party''' || Core game content || , player -> {
| '''Raiding Party''' || Core game content || Toggle, view || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartyInterface.java</code>
|-
|-
| '''Raid Party''' || Core game content || , player -> refresh(player, player.getRaid().orElseThrow(RuntimeException::new)));
| '''Raid Party''' || Core game content || Refresh, Start raid || verified game data
        bind(, Refresh, Start raid || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidPartyInterface.java</code>
|-
|-
| '''Raid Rewards''' || Core game content || , (player, slotId, itemId, option) -> player.getRaid().ifPresent(raid -> {
| '''Raid Rewards''' || Core game content || Take item || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/rewards/RaidRewardsInterface.java</code>
|-
|-
| '''Private Storage''' || Core game content || , player -> {
| '''Private Storage''' || Core game content || Deposit, Deposit/Bank all, Interact with item, Shared storage button, Size, Withdraw, Withdraw all || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/PrivateStorageInterface.java</code>
|-
|-
| '''Shared Storage''' || Core game content || , player -> {
| '''Shared Storage''' || Core game content || Container size, Interact with item, Switch to private storage || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/SharedStorageInterface.java</code>
|-
|-
| '''Storage''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInterface.java</code>
| '''Storage''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Storage Inventory''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Storage Inventory''' || Core game content || Dismiss storage warning, Interact with item || verified game data
            final Inventory inventory = player.getInventory();
            final Item item = inventory.getItem(slotId);
            if (item == null &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInventoryInterface.java</code>
|-
|-
| '''Combat Buddy Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/combatbuddies/CombatBuddyInterfaceManager.java</code>
| '''Combat Buddy Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Comp Progress''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/compcapes/CompProgressInterface.java</code>
| '''Comp Progress''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Comp Selection''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/compcapes/CompSelectionInterface.java</code>
| '''Comp Selection''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Daily Task Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/dailychallenge/DailyTaskInterfaceManager.java</code>
| '''Daily Task Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/content/event/christmas2019/QuestCompletedInterface.java</code>
| '''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 || verified game data
|-
|-
| '''Noticeboard''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/event/easter2020/NoticeboardInterface.java</code>
| '''Noticeboard''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Item Sets''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Item Sets''' || Core game content || Interact || verified game data
            if (player.getGameMode().equals(GameMode.ULTIMATE_IRON_MAN)) {
                player.sendMessage(, Interact || <code>core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInterface.java</code>
|-
|-
| '''Item Sets Inventory''' || Core game content || Interact || <code>core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInventoryInterface.java</code>
| '''Item Sets Inventory''' || Core game content || Interact || verified game data
|-
|-
| '''Hiscores''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Hiscores''' || Core game content || Dropdown, Entries, Group Ironman, Hardcore Ironman, Ironman, Ultimate Ironman || verified game data
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 || <code>core/src/main/java/com/zenyte/game/content/hiscores/HiscoresInterface.java</code>
|-
|-
| '''Master Scroll Book''' || Core game content || , (player, slotId, itemId, option) -> handle(player, ScrollBookTeleport.ELF_CAMP, option));
| '''Master Scroll Book''' || Core game content || Digsite, Elf Camp, Feldip Hills, Key Master, Lumberyard, Lunar Isle, master scroll book teleport, Mort'ton, Mos Le'Harmless, Nardah, Pest Control, Piscatoris || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/itemtransportation/masterscrolls/MasterScrollBookInterface.java</code>
|-
|-
| '''Wilderness Loot Key''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Wilderness Loot Key''' || Core game content || Bank-All, Destroy, Note, Take, Take-All, Withdraw, Withdraw all to bank, Withdraw all to inventory || verified game data
            if (option == 1 &#124;&#124; option == 2 &#124;&#124; option == 5 &#124;&#124; option == 3 &#124;&#124; option == 4 )
                withdrawToInventory(player, itemId, option);
            // 6 = bank x &#124; 7 = bank all
            if (option == 6 &#124;&#124; option == 7)
                withdrawToBank(player, itemId, option);
            // 8 = destroy x &#124; 9 = destroy y
            if (option == 8 &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/content/lootkeys/WildernessLootKeyInterface.java</code>
|-
|-
| '''Magic Storage''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Magic Storage''' || Core game content || Interact with element || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/magicstorageunit/MagicStorageInterface.java</code>
|-
|-
| '''Barrows Overlay''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsOverlayInterface.java</code>
| '''Barrows Overlay''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Barrows Puzzle''' || Core game content || , player -> player.getBarrows().getPuzzle().select(0));
| '''Barrows Puzzle''' || Core game content || 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 || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsPuzzleInterface.java</code>
|-
|-
| '''Barrows Rewards''' || Core game content || Examine || <code>core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsRewardsInterface.java</code>
| '''Barrows Rewards''' || Core game content || Examine || verified game data
|-
|-
| '''Catapult''' || Core game content || , player -> {
| '''Catapult''' || Core game content || Cross, Decrease horizontal, Decrease vertical, Fire, First horizontal digit, First vertical digit, Increase horizontal, Increase vertical, Second horizontal digit, Second vertical digit || verified game data
            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 &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/content/minigame/castlewars/CatapultInterface.java</code>
|-
|-
| '''Duel Arena Scoreboard''' || Core game content || Duels Lost, Duels Won, Scoreboard || <code>core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelArenaScoreboardInterface.java</code>
| '''Duel Arena Scoreboard''' || Core game content || Duels Lost, Duels Won, Scoreboard || verified game data
|-
|-
| '''Duel Settings''' || Core game content || ,         p -> { final Duel d = p.getDuel(); if (d != null) d.toggleRule(DuelSetting.NO_FOOD); });
| '''Duel Settings''' || Core game content || Ammunition, Back, Boxing settings, Confirm, Decline, Feet, Hand, Head, Left hand, Leg, Load last duel settings, Load preset settings || verified game data
        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( || <code>core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelSettingsInterface.java</code>
|-
|-
| '''Duel Staking''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Duel Staking''' || Core game content || Close, Confirm, GP quantity, Load Previous Stake, Platinum quantity, Target name || verified game data
//            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 || <code>core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelStakingInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlGameInterface.java</code>
| '''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 || verified game data
|-
|-
| '''Pest Control Lander''' || Core game content || Lander flag, Lander type, Next departure, Pest points, Players ready || <code>core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlLanderInterface.java</code>
| '''Pest Control Lander''' || Core game content || Lander flag, Lander type, Next departure, Pest points, Players ready || verified game data
|-
|-
| '''Void Knight Rewards''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Void Knight Rewards''' || Core game content || Confirm, Confirm reward || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/VoidKnightRewardsInterface.java</code>
|-
|-
| '''Impling Tracker''' || Core game content || Eighth, Fifth, First, Fourth, Puro-Puro, Second, Seventh, Sixth, Surface World, Third || <code>core/src/main/java/com/zenyte/game/content/minigame/puropuro/ImplingTrackerInterface.java</code>
| '''Impling Tracker''' || Core game content || Eighth, Fifth, First, Fourth, Puro-Puro, Second, Seventh, Sixth, Surface World, Third || verified game data
|-
|-
| '''Party Drop Chest''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Party Drop Chest''' || Core game content || Accept, Add 1, Add 5, Add all, Add x, Chest private deposit container, Chest public deposit container || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/partyroom/PartyDropChestInterface.java</code>
|-
|-
| '''Party Drop Inventory''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Party Drop Inventory''' || Core game content || Interact with item || verified game data
            final Inventory inventory = player.getInventory();
            final Item item = inventory.getItem(slotId);
            if (item == null &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/content/partyroom/PartyDropInventoryInterface.java</code>
|-
|-
| '''Farming Storage''' || Enabled plugin || , (player, slotId, itemId, option) -> remove(player, Storable.EMPTY_BUCKET, option));
| '''Farming Storage''' || Enabled plugin || Bottomless bucket, Empty buckets, Gardening trowel, Normal compost, Plant cure, Quantity 1, Quantity 5, Quantity All, Quantity X, Rake, Secateurs, Seed dibber || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInterface.java</code>
|-
|-
| '''Farming Storage Inventory''' || Enabled plugin || , (player, slotId, itemId, option) -> add(player, Storable.EMPTY_BUCKET, option));
| '''Farming Storage Inventory''' || Enabled plugin || Bottomless buckets, Empty buckets, Gardening trowel, Normal compost, Plant cure, Rake, Secateurs, Seed dibber, Spade, Supercompost, Ultracompost, Watering can || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInventoryInterface.java</code>
|-
|-
| '''Seed Vault''' || Core game content || , ((player, slotId, itemId, option) -> player.getVarManager().sendBit(CATEGORY_VARBIT, slotId)));
| '''Seed Vault''' || Core game content || Categories, Deposit, Deposit-All, Search, Withdraw, Withdraw-1, Withdraw-10, Withdraw-5, Withdraw-All, Withdraw-X || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInterface.java</code>
|-
|-
| '''Seed Vault Inventory''' || Core game content || , ((player, slotId, itemId, optionId) -> {
| '''Seed Vault Inventory''' || Core game content || Display, navigation or source-controlled interaction || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInventoryInterface.java</code>
|-
|-
| '''Custom Fur Clothing''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Custom Fur Clothing''' || Core game content || Interact with item || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/content/skills/hunter/CustomFurClothingInterface.java</code>
|-
|-
| '''Arceuus Lectern''' || Core game content || ,               player -> setType(player, RUBY_ENCHANTMENT));
| '''Arceuus Lectern''' || Core game content || Ardounge Teleport, Battlefront, Bones to Bananas, Bones to Peaches, Camelot Teleport, Civitas illa Fortis Teleport, Create, Draynor manor, Enchant Diamond, Enchant Dragonstone, Enchant Emerald, Enchant Onyx || verified game data
        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( || <code>core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/ArceuusLecternInterface.java</code>
|-
|-
| '''Regular Lectern''' || Core game content || , (player, slotId, itemId, option) -> create(player, RegularTablet.BONES_TO_BANANAS, option));
| '''Regular Lectern''' || Core game content || Ardougne teleport, Bones to bananas, Bones to peaches, Camelot teleport, Enchant diamond, Enchant dragonstone, Enchant emerald, Enchant onyx, Enchant ruby, Enchant sapphire, Falador teleport, House teleport || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/RegularLecternInterface.java</code>
|-
|-
| '''Slayer Partner''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/skills/slayer/SlayerPartnerInterface.java</code>
| '''Slayer Partner''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Clue''' || Core game content || Information || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/ClueInterface.java</code>
| '''Clue''' || Core game content || Information || verified game data
|-
|-
| '''Clue Reward''' || Core game content || , container);
| '''Clue Reward''' || Core game content || Item list || verified game data
        player.getPacketDispatcher().sendComponentSettings(getInterface(), getComponent(, Item list || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/ClueRewardInterface.java</code>
|-
|-
| '''Sextant''' || Core game content || , player -> {
| '''Sextant''' || Core game content || Arm, Down arrow, Frame, Get location, Grass, Index mirror, Left arrow, Right arrow, Sun, Up arrow || verified game data
            final Inventory inventory = player.getInventory();
            if (!inventory.containsItem(ItemId.WATCH, 1) &#124;&#124; !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 || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/coordinateutils/SextantInterface.java</code>
|-
|-
| '''Light Box''' || Core game content || , player -> player.getLightBox().press(0));
| '''Light Box''' || Core game content || A, B, C, D, E, F, G, H || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/LightBoxInterface.java</code>
|-
|-
| '''Puzzle Box''' || Core game content || Puzzle piece || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/PuzzleBoxInterface.java</code>
| '''Puzzle Box''' || Core game content || Puzzle piece || verified game data
|-
|-
| '''Stash Unit''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/stash/StashUnitInterface.java</code>
| '''Stash Unit''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Treasure Trail Statistics''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/TreasureTrailStatisticsInterface.java</code>
| '''Treasure Trail Statistics''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Well Of Goodwill Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/well/WellOfGoodwillInterfaceManager.java</code>
| '''Well Of Goodwill Interface Manager''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Vault Overlay''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/content/wildernessVault/VaultOverlayInterface.java</code>
| '''Vault Overlay''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Vault Reward''' || Core game content || Take item || <code>core/src/main/java/com/zenyte/game/content/wildernessVault/VaultRewardInterface.java</code>
| '''Vault Reward''' || Core game content || Take item || verified game data
|-
|-
| '''Game''' || Core game content || Open || <code>core/src/main/java/com/zenyte/game/GameInterface.java</code>
| '''Game''' || Core game content || Open || verified game data
|-
|-
| '''Shop''' || Core game content || , ((player, interfaceSlotId, itemId, option) -> {
| '''Shop''' || Core game content || Interact with item, Sell || verified game data
            final int slotId = interfaceSlotId - 1;
            final Shop shop = getShopAttr(player);
            final Item item = shop.getContainer().get(slotId);
            if (ItemDefinitions.isInvalid(itemId) &#124;&#124; item == null &#124;&#124; item.getId() != itemId) return;
            final int mobileBuyAmount = player.getNumericTemporaryAttribute(, Interact with item, Sell || <code>core/src/main/java/com/zenyte/game/model/shop/ShopInterface.java</code>
|-
|-
| '''Shop Inventory''' || Core game content || , ((player, slotId, itemId, option) -> {
| '''Shop Inventory''' || Core game content || Interact with item, Sell || verified game data
            final Object shopAttr = player.getTemporaryAttributes().get(, Interact with item, Sell || <code>core/src/main/java/com/zenyte/game/model/shop/ShopInventoryInterface.java</code>
|-
|-
| '''Dialogue''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/DialogueInterface.java</code>
| '''Dialogue''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Interface''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/Interface.java</code>
| '''Interface''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Interface Handler''' || Core game content || , true);
| '''Interface Handler''' || Core game content || Display, navigation or source-controlled interaction || verified game data
dispatcher.sendPane(pane);
this.pane = pane;
visible.forcePut(pane.getId() << 16, pane.getId());
for (final InterfacePosition position : InterfacePosition.VALUES) {
if (position.getGameframeInterfaceId() == -1 &#124;&#124; position.equals(InterfacePosition.FRIENDS_TAB) &#124;&#124; 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,  || <code>core/src/main/java/com/zenyte/game/model/ui/InterfaceHandler.java</code>
|-
|-
| '''Interface Position''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/InterfacePosition.java</code>
| '''Interface Position''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''New Interface Handler''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/NewInterfaceHandler.java</code>
| '''New Interface Handler''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Achievement Diary Tab''' || Core interface registry || , player -> Diary.sendDiary(player, ArdougneDiary.MAP));
| '''Achievement Diary Tab''' || Core interface registry || Diaries, Open || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AchievementDiaryTabInterface.java</code>
|-
|-
| '''Colour Picker''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/ColourPickerInterface.java</code>
| '''Colour Picker''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Settings''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Settings''' || Core interface registry || Cancel drop-down selection, Category, Close, Drop-down menu, Search, Setting, Show less/more information, Slider || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/SettingsInterface.java</code>
|-
|-
| '''Another Clan''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AnotherClanInterface.java</code>
| '''Another Clan''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Autocast''' || Core interface registry || , player -> close(player));
| '''Autocast''' || Core interface registry || Set autocast spell || verified game data
        bind(, Set autocast spell || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AutocastInterface.java</code>
|-
|-
| '''Avas Devices''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Avas Devices''' || Core interface registry || Purchase ava's accumulator, Purchase ava's assembler, Purchase ava's attractor || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AvasDevicesInterface.java</code>
|-
|-
| '''Bank Deposit''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Bank Deposit''' || Core interface registry || Default Quantity 1, Default Quantity 10, Default Quantity 5, Default Quantity All, Default Quantity X, Deposit, Deposit inventory, Deposit lock settings, Deposit loot, Deposit worn items, Interact with Item, Select || verified game data
            final Item item = player.getInventory().getItem(slotId);
            if (item == null &#124;&#124; 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) &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankDepositInterface.java</code>
|-
|-
| '''Bank''' || Core interface registry || + slot, (player, slotId, itemId, optionId)
| '''Bank''' || Core interface registry || Add bank fillers, Always set placeholders, Bank size, Bank size tooltip 1, Bank size tooltip 2, Deposit, Deposit equipment, Deposit inventory, Deposit inventory button, Deposit lock settings, Deposit to potion store, Deposit worn items button || verified game data
                -> {
            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( || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInterface.java</code>
|-
|-
| '''Bank Inventory''' || Core interface registry || , ((player, slotId, itemId, option) -> {
| '''Bank Inventory''' || Core interface registry || Deposit, Deposit Looting Bag Item, Empty Looting Bag, Interact with Item, Wear || verified game data
            final Item item = player.getInventory().getItem(slotId);
            if (item == null &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInventoryInterface.java</code>
|-
|-
| '''Battlestaff Enchantment''' || Core interface registry || , player -> enchant(player, Battlestaff.AIR_BATTLESTAFF));
| '''Battlestaff Enchantment''' || Core interface registry || Air battlestaff, Dust battlestaff, Earth battlestaff, Fire battlestaff, Lava battlestaff, Mist battlestaff, Mud battlestaff, Smoke battlestaff, Steam battlestaff, Water battlestaff || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BattlestaffEnchantmentInterface.java</code>
|-
|-
| '''Bounty Hunter Store''' || Core interface registry || , (player, slotId, itemId, optionId) -> {
| '''Bounty Hunter Store''' || Core interface registry || Item layer, Scrollbar || verified game data
            /*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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BountyHunterStoreInterface.java</code>
|-
|-
| '''Bug Report''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BugReportInterface.java</code>
| '''Bug Report''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Character Summary''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Character Summary''' || Core interface registry || Component layer, Element layer || verified game data
            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 &#124; getComponent(, Component layer, Element layer || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CharacterSummaryInterface.java</code>
|-
|-
| '''Chartership''' || Core interface registry || , player -> charter(player, BRIMHAVEN));
| '''Chartership''' || Core interface registry || Brimhaven, Catherby, Corsair Cove, Mos Le'Harmless, Musa Point, Port Khazard, Port Phasmatys, Port Sarim, Port Tyras, Prifddinas, Shipyard || verified game data
        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 &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChartershipInterface.java</code>
|-
|-
| '''Chat Channel''' || Core interface registry || , player -> {
| '''Chat Channel''' || Core interface registry || Open, Open clan chat set-up || verified game data
            if (player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                player.sendMessage(, Open, Open clan chat set-up || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatChannelInterface.java</code>
|-
|-
| '''Chat''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Chat''' || Core interface registry || Report button, Set channel filter, Set clan filter, Set game filter, Set group filter, Set private filter || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatInterface.java</code>
|-
|-
| '''Clan Chat Set Up''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Clan Chat Set Up''' || Core interface registry || Disable/set prefix, Set enter rank, Set kick rank, Set talk rank || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanChatSetUpInterface.java</code>
|-
|-
| '''Clan''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanInterface.java</code>
| '''Clan''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Combat Tab''' || Core interface registry || , player -> {
| '''Combat Tab''' || Core interface registry || Attack style 1, Attack style 2, Attack style 3, Attack style 4, Auto retaliate, Autocast, Defensive autocast, Special attack || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CombatTabInterface.java</code>
|-
|-
| '''Daily Challenges Overview''' || Core interface registry || , player -> claim(player, 0));
| '''Daily Challenges Overview''' || Core interface registry || 0, 1, 2, 3, 4 || verified game data
        bind(, , player -> claim(player, 2));
        bind(, 0, 1, 2, 3, 4 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DailyChallengesOverviewInterface.java</code>
|-
|-
| '''Decanting Dialogue''' || Core interface registry || , player -> player.getDialogueManager().onClick(1, -1));
| '''Decanting Dialogue''' || Core interface registry || 1-dose, 2-dose, 3-dose, 4-dose || verified game data
        bind(, , player -> player.getDialogueManager().onClick(3, -1));
        bind(, 1-dose, 2-dose, 3-dose, 4-dose || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DecantingDialogueInterface.java</code>
|-
|-
| '''Drop Viewer''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Drop Viewer''' || Core interface registry || Rarity Display, Search, Search button, Select, Select Item, Select NPC, View, View Result || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DropViewerInterface.java</code>
|-
|-
| '''Emote Tab''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Emote Tab''' || Core interface registry || Play emote || verified game data
            if (player.getNumericTemporaryAttribute(, Play emote || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EmoteTabInterface.java</code>
|-
|-
| '''Equipment Inventory''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Equipment Inventory''' || Core interface registry || Interact with Item || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentInventoryInterface.java</code>
|-
|-
| '''Equipment Stats''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentStatsInterface.java</code>
| '''Equipment Stats''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Equipment Tab''' || Core interface registry || , (player, slotId, itemId, optionId) -> {
| '''Equipment Tab''' || Core interface registry || Call follower, dizana quiver, Price checker, View, View equipment stats, View items kept on death || verified game data
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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentTabInterface.java</code>
|-
|-
| '''Experience Lamp''' || Core interface registry || , (player, slot, __, ___) -> {
| '''Experience Lamp''' || Core interface registry || Confirm, Text || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceLampInterface.java</code>
|-
|-
| '''Experience Tracker''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Experience Tracker''' || Core interface registry || Configure skill, Save goal, Select, Select goal, Select no tracker or goal, Select tracker, Set colour, Set counter, Set duration, Set fake drops, Set goal end point, Set goal start point || verified game data
            if (slotId < 0 &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceTrackerInterface.java</code>
|-
|-
| '''Explorer Ring''' || Core interface registry || , ((player, slotId, itemId, option) -> {
| '''Explorer Ring''' || Core interface registry || Charges, Close, High alchemy, Inventory, Low alchemy || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExplorerRingInterface.java</code>
|-
|-
| '''Extra Quest Tab''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExtraQuestTabInterface.java</code>
| '''Extra Quest Tab''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Fixed Pane''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Fixed Pane''' || Core interface registry || Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FixedPaneInterface.java</code>
|-
|-
| '''Friends List''' || Core interface registry || View, View Ignore List || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FriendsListInterface.java</code>
| '''Friends List''' || Core interface registry || View, View Ignore List || verified game data
|-
|-
| '''Game Mode Setup''' || Core interface registry || , player -> selectExpMode(player, 0));
| '''Game Mode Setup''' || Core interface registry || Mode, Rate 1, Rate 2, Rate 3, Rate 4, review || verified game data
        bind(, , player -> selectExpMode(player, 2));
        bind(, Mode, Rate 1, Rate 2, Rate 3, Rate 4, review || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameModeSetupInterface.java</code>
|-
|-
| '''Game Noticeboard''' || Core interface registry || , com.near_reality.game.content.commands.DeveloperCommands::openStore);
| '''Game Noticeboard''' || Core interface registry || Bonus XP, Boss task, Daily Challenges, Day, Discord, Discord row, Drop rate, Drop Viewer, Game Mode, Game Settings, Highscores, Highscores row || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameNoticeboardInterface.java</code>
|-
|-
| '''Game Settings''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameSettingsInterface.java</code>
| '''Game Settings''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Gnome Cocktail''' || Core interface registry || , player -> {
| '''Gnome Cocktail''' || Core interface registry || Create, select || verified game data
            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) &#124;&#124; shaker.equals(CocktailShaker.DRUNK_DRAGON)) ? , Create, select || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeCocktailInterface.java</code>
|-
|-
| '''Gnome Glider''' || Core interface registry || , player -> handle(player, GliderLocation.GANDIUS));
| '''Gnome Glider''' || Core interface registry || Gandius, Kar-Hewo, Lemanto Andra, Lemantolly Undri, Ookookolly Undri, Sindarpos, Ta Quir Priw || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeGliderInterface.java</code>
|-
|-
| '''Gold Jewellery''' || Core interface registry || , player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));
| '''Gold Jewellery''' || Core interface registry || Make all, Make five, Make one, Make ten, Make x || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GoldJewelleryInterface.java</code>
|-
|-
| '''Grand Exchange History''' || Core interface registry || , player -> player.getGrandExchange().openOffersInterface());
| '''Grand Exchange History''' || Core interface registry || Click history entry, Open, Open Offers || verified game data
        bind(, Click history entry, Open, Open Offers || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeHistoryInterface.java</code>
|-
|-
| '''Grand Exchange Offers Viewer''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Grand Exchange Offers Viewer''' || Core interface registry || Exchange, GE Item price, Item name, Item sprite in search, Offer Entry, Search, Search for item, Select, Sort by name, Sort by price, Sort by quantity, View || verified game data
            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() &#124;&#124; offer.isAborted() &#124;&#124; 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() &#124;&#124; offer.isAborted() &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeOffersViewerInterface.java</code>
|-
|-
| '''Grouping Tab''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Grouping Tab''' || Core interface registry || Select, Select minigame, Teleport || verified game data
            final MinigameGroupFinder minigame = MinigameGroupFinder.getMinigame(slotId);
            if (minigame == null) {
                player.sendMessage(, Select, Select minigame, Teleport || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GroupingTabInterface.java</code>
|-
|-
| '''Hairdresser''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Hairdresser''' || Core interface registry || Finish make-over, Select, Select hair/beard colour, Select hair/beard style || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HairdresserInterface.java</code>
|-
|-
| '''House Options Tab''' || Core interface registry || , player -> {
| '''House Options Tab''' || Core interface registry || Building mode OFF, Building mode ON, Expel guests, Leave house, Number of rooms, Open, Open house viewer, Render doors closed, Render doors open, Render no doors, Teleport inside OFF, Teleport inside ON || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HouseOptionsTabInterface.java</code>
|-
|-
| '''Ignore List''' || Core interface registry || View, View Friends List || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/IgnoreListInterface.java</code>
| '''Ignore List''' || Core interface registry || View, View Friends List || verified game data
|-
|-
| '''Item Retrieval Service''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Item Retrieval Service''' || Core interface registry || Discard-All, Items, Take-All, Take-All/Unlock || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ItemRetrievalServiceInterface.java</code>
|-
|-
| '''Journal Header Tab''' || Core interface registry || , player -> player.getInterfaceHandler().setJournal(InterfaceHandler.Journal.CHARACTER_SUMMARY));
| '''Journal Header Tab''' || Core interface registry || Achievement Diary, Character Summary, Extra, Game Noticeboard, Quests, Server Events || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/JournalHeaderTabInterface.java</code>
|-
|-
| '''Kourend Favour Tab''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/KourendFavourTabInterface.java</code>
| '''Kourend Favour Tab''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Lobby''' || Core interface registry || Bank pin, Click here to play, Message of the week || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LobbyInterface.java</code>
| '''Lobby''' || Core interface registry || Bank pin, Click here to play, Message of the week || verified game data
|-
|-
| '''Logout Tab''' || Core interface registry || , player -> player.clickedLogoutButton(null));
| '''Logout Tab''' || Core interface registry || Logout, World switcher || verified game data
        bind(, Logout, World switcher || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LogoutTabInterface.java</code>
|-
|-
| '''Looting Bag''' || Core interface registry || , player -> close(player));
| '''Looting Bag''' || Core interface registry || Close, deposit, Store/Examine, Value, Withdraw || verified game data
        bind(, Close, deposit, Store/Examine, Value, Withdraw || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LootingBagInterface.java</code>
|-
|-
| '''Make Over''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Make Over''' || Core interface registry || CONFIRM, Finish make-over, Select, Select female, Select male, Select skin colour || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MakeOverInterface.java</code>
|-
|-
| '''Minigame Tab''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Minigame Tab''' || Core interface registry || PvM Arena, Select, Select minigame, Teleport || verified game data
            final MinigameGroupFinder minigame = MinigameGroupFinder.getMinigame(slotId);
            if (minigame == null) {
                player.sendMessage(, PvM Arena, Select, Select minigame, Teleport || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinigameTabInterface.java</code>
|-
|-
| '''Minimized Minimap Orbs''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Minimized Minimap Orbs''' || Core interface registry || Cure Toxins, Experience Tracker, Prayer, Run, Toggle, Toggle special, View, View World Map || verified game data
            //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() &#124;&#124; 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() &#124;&#124; player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                    player.sendMessage(, , (player, slotId, itemId, option) -> {
            if (player.isLocked() &#124;&#124; player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                player.sendMessage(, , player -> player.setRun(!player.isRun()));
        bind(, Cure Toxins, Experience Tracker, Prayer, Run, Toggle, Toggle special, View || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinimizedMinimapOrbsInterface.java</code>
|-
|-
| '''Mobile Pane''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Mobile Pane''' || Core interface registry || Combat tab, Function button, Logout tab, Select, Show keyboard, Start chatting || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MobilePaneInterface.java</code>
|-
|-
| '''Music Player''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Music Player''' || Core interface registry || Auto, Loop, Manual, Play song, Song name || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MusicPlayerInterface.java</code>
|-
|-
| '''Mycelium Teleport''' || Core interface registry || , player -> teleport(player, 0));
| '''Mycelium Teleport''' || Core interface registry || Teleport 1, Teleport 1 Text, Teleport 2, Teleport 2 Text, Teleport 3, Teleport 3 Text, Teleport 4, Teleport 4 Text || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MyceliumTeleportInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/NieveGravestoneInterface.java</code>
| '''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 || verified game data
|-
|-
| '''Orbs''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Orbs''' || Core interface registry || Cure Toxins, Daily activity, Experience Tracker, Open, Open Store, Prayer, Run, Toggle, Toggle special, View, View World Map || verified game data
            //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() &#124;&#124; 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() &#124;&#124; player.getInterfaceHandler().containsInterface(InterfacePosition.CENTRAL)) {
                    player.sendMessage(, , (player, slotId, itemId, option) -> {
            if (player.isLocked() &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/OrbsInterface.java</code>
|-
|-
| '''Pet Insurance''' || Core interface registry || , (player, slotId, ook, option) -> {
| '''Pet Insurance''' || Core interface registry || Buy, Buy Reclaims, Confirm, Reclaim Insured Pet || verified game data
            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 &#124;&#124; !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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PetInsuranceInterface.java</code>
|-
|-
| '''Preset Manager''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Preset Manager''' || Core interface registry || Always set placeholders, Ancient Spellbook, Apply, Arceuus Spellbook, Bank, Capacity tooltip, Create Preset, Delete, Inventory, Lunar Spellbook, Move preset down, Move preset up || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PresetManagerInterface.java</code>
|-
|-
| '''Price Checker''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Price Checker''' || Core interface registry || Add all, Interact with item, Item name in search, Item sprite in search, Search, Search for item, Select || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInterface.java</code>
|-
|-
| '''Price Checker Inventory''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Price Checker Inventory''' || Core interface registry || Interact with item || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInventoryInterface.java</code>
|-
|-
| '''Quest Tab''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuestTabInterface.java</code>
| '''Quest Tab''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Quick Prayer''' || Core interface registry || , (player, slotId, itemId, option) -> player.getPrayerManager().setQuickPrayer(slotId));
| '''Quick Prayer''' || Core interface registry || Confirm, Select, Select prayer || verified game data
        bind(, Confirm, Select, Select prayer || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuickPrayerInterface.java</code>
|-
|-
| '''Remnant Value Guide''' || Core interface registry || Search, Select, Sell || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/RemnantValueGuideInterface.java</code>
| '''Remnant Value Guide''' || Core interface registry || Search, Select, Sell || verified game data
|-
|-
| '''Resizable Pane''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Resizable Pane''' || Core interface registry || Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ResizablePaneInterface.java</code>
|-
|-
| '''Seed Box''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Seed Box''' || Core interface registry || Empty box, Fill box, Remove || verified game data
            if (option == 5) {
                player.sendInputInt(, , player -> player.getSeedBox().empty());
        bind(, Empty box, Fill box, Remove || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SeedBoxInterface.java</code>
|-
|-
| '''Server Events''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ServerEventsInterface.java</code>
| '''Server Events''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Settings Tab''' || Core interface registry || , (player, slotId, itemId, option) -> player.getVarManager().sendVar(SettingVariables.NPC_ATTACK_OPTIONS_VARP_ID, slotId - 1));
| '''Settings Tab''' || Core interface registry || Accept aid, All Settings, Area Sound Volume, Brightness, Disable zooming with scroll wheel, Game Client Layout, House options, Music unlock message, Music Volume, Mute Area Sounds, Mute Music, Mute Sound Effects || verified game data
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SettingsTabInterface.java</code>
|-
|-
| '''Side Panels Resizable Pane''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Side Panels Resizable Pane''' || Core interface registry || Character Summary, Gravestone info, helper_cox, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SidePanelsResizablePaneInterface.java</code>
|-
|-
| '''Silver Jewellery''' || Core interface registry || , (player) -> player.getVarManager().sendVar(SMITHING_AMOUNT_VARP, 1));
| '''Silver Jewellery''' || Core interface registry || Make all, Make five, Make one, Make ten, Make x || verified game data
        bind(, , (player) -> player.getVarManager().sendVar(SMITHING_AMOUNT_VARP, 10));
        bind(, Make all, Make five, Make one, Make ten, Make x || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SilverJewelleryInterface.java</code>
|-
|-
| '''Skills Tab''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkillsTabInterface.java</code>
| '''Skills Tab''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Skotizo''' || Core interface registry || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkotizoInterface.java</code>
| '''Skotizo''' || Core interface registry || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Spellbook''' || Core interface registry || , (player, slotId, itemId, option) ->
| '''Spellbook''' || Core interface registry || Crossbow Bolt Enchantments, Jewellery Enchantments, Lvl-1 Enchant, Lvl-2 Enchant, Lvl-3 Enchant, Lvl-4 Enchant, Lvl-5 Enchant, Lvl-6 Enchant, Lvl-7 Enchant, Spell filters, Teleport to Target || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SpellbookInterface.java</code>
|-
|-
| '''Storage Room''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Storage Room''' || Core interface registry || Deposit, Deposit inventory, Deposit mode, Items || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInterface.java</code>
|-
|-
| '''Storage Room Inventory''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Storage Room Inventory''' || Core interface registry || Items || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInventoryInterface.java</code>
|-
|-
| '''Teleport''' || Core interface registry || + index, (player, slotId, itemId, option) -> clickListRow(player, row));
| '''Teleport''' || Core interface registry || Back, Category button, Favourite row, Favourite selected, List row, Next page, Previous page, Remove favourite, Search, Select, Teleport || verified game data
        }
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TeleportInterface.java</code>
|-
|-
| '''Trade Inventory''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Trade Inventory''' || Core interface registry || Add Item || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeInventoryInterface.java</code>
|-
|-
| '''Trade Stage1''' || Core interface registry || , player -> {
| '''Trade Stage1''' || Core interface registry || Accept, Remove Item || verified game data
            if(FlowerPokerManager.get(player).inInterface)
                FlowerPokerManager.get(player).accept(1);
            else
                player.getTrade().accept(1);
        });
        bind(, Accept, Remove Item || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage1Interface.java</code>
|-
|-
| '''Trade Stage2''' || Core interface registry || , player ->  {
| '''Trade Stage2''' || Core interface registry || Accept, Decline || verified game data
            if(FlowerPokerManager.get(player).inInterface)
                FlowerPokerManager.get(player).accept(2);
            else
                player.getTrade().accept(2);
        });
        bind(, Accept, Decline || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage2Interface.java</code>
|-
|-
| '''Tutorial Make Over''' || Core interface registry || Title || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TutorialMakeOverInterface.java</code>
| '''Tutorial Make Over''' || Core interface registry || Title || verified game data
|-
|-
| '''Unmorph''' || Core interface registry || Unmorph || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/UnmorphInterface.java</code>
| '''Unmorph''' || Core interface registry || Unmorph || verified game data
|-
|-
| '''Wheel Of Fortune''' || Core interface registry || , (player, slotId, itemId, option) -> ItemUtil.sendItemExamine(player, itemId));
| '''Wheel Of Fortune''' || Core interface registry || Claim, Claim later, Deposit, Deposit to bank, Discard, Examine item, Spin || verified game data
        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) || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WheelOfFortuneInterface.java</code>
|-
|-
| '''World Map''' || Core interface registry || , player -> {
| '''World Map''' || Core interface registry || Close, Esc Close, Menu || verified game data
            if (player.isLocked()) {
                return;
            }
            player.getWorldMap().close();
        });
        bind(, Close, Esc Close, Menu || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WorldMapInterface.java</code>
|-
|-
| '''User''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/UserInterface.java</code>
| '''User''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Calog Boss''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Calog Boss''' || Core game content || Collection log, General, Navigation, Select, Select task || verified game data
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossInterface.java</code>
|-
|-
| '''Calog Boss Overview''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Calog Boss Overview''' || Core game content || Navigation, Select || verified game data
if (slotId >= 1 && slotId <= 50) {
player.getVarManager().sendBitInstant(BOSS_SELECT_VARBIT, slotId);
GameInterface.CA_BOSS.open(player);
}
});
bind(, Navigation, Select || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossOverviewInterface.java</code>
|-
|-
| '''Calog Overview''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Calog Overview''' || Core game content || Navigation, Task selection || verified game data
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogOverviewInterface.java</code>
|-
|-
| '''Calog Reward''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Calog Reward''' || Core game content || Navigation || verified game data
System.out.println(, Navigation || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogRewardInterface.java</code>
|-
|-
| '''Calog Task''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Calog Task''' || Core game content || Completed, Monster, Navigation, Tier, Type || verified game data
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogTaskInterface.java</code>
|-
|-
| '''Collection Log''' || Core game content || + c, (player) -> {
| '''Collection Log''' || Core game content || Claim, Claim Reward, Close, Combat achievements, Search, Search letter || verified game data
                /* 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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/collectionlog/CollectionLogInterface.java</code>
|-
|-
| '''Bank Pin Settings''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Bank Pin Settings''' || Core game content || Cancel PIN option, Change PIN, Change PIN Delay, Delete PIN, Interface base, Login Secure Delay, Message, PIN Alteration Confirm, PIN Alteration Deny, Pin enabled options, Pin lock on login, PIN pending options || verified game data
            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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/container/impl/bank/BankPinSettingsInterface.java</code>
|-
|-
| '''Interface Switch Handler''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchHandler.java</code>
| '''Interface Switch Handler''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Interface Switch Plugin''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchPlugin.java</code>
| '''Interface Switch Plugin''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Bingo''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/BingoInterface.java</code>
| '''Bingo''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Canoe''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/CanoeInterface.java</code>
| '''Canoe''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Combat Buddy''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/CombatBuddyInterface.java</code>
| '''Combat Buddy''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Daily Login Rewards''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/DailyLoginRewardsInterface.java</code>
| '''Daily Login Rewards''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Daily Task''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/DailyTaskInterface.java</code>
| '''Daily Task''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Daily Vote Streak''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/DailyVoteStreakInterface.java</code>
| '''Daily Vote Streak''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Book''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/BookInterface.java</code>
| '''Book''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Dual Item Option Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/DualItemOptionDialogueInterface.java</code>
| '''Dual Item Option Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Furniture Creation''' || Enabled plugin || , (player, slotId, itemId, option) -> {
| '''Furniture Creation''' || Enabled plugin || Build furniture || verified game data
            if (player.getTemporaryAttributes().containsKey(, Build furniture || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/FurnitureCreationInterface.java</code>
|-
|-
| '''Normal Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/NormalDialogueInterface.java</code>
| '''Normal Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Option Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/OptionDialogueInterface.java</code>
| '''Option Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Orb Of Oculus''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/OrbOfOculusInterface.java</code>
| '''Orb Of Oculus''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Poll''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/PollInterface.java</code>
| '''Poll''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Room Creation''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/RoomCreationInterface.java</code>
| '''Room Creation''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Skill Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/SkillDialogueInterface.java</code>
| '''Skill Dialogue''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Teleother''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/TeleotherInterface.java</code>
| '''Teleother''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Wilderness Warning''' || Enabled plugin || , true);
| '''Wilderness Warning''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
WildernessDitchObject.jump(player, (WorldObject) player.getTemporaryAttributes().get( || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/WildernessWarningInterface.java</code>
|-
|-
| '''Grand Exchange Offers''' || Enabled plugin || buy, sell || <code>core/src/main/java/com/zenyte/plugins/interfaces/GrandExchangeOffersInterface.java</code>
| '''Grand Exchange Offers''' || Enabled plugin || buy, sell || verified game data
|-
|-
| '''House Viewer''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/HouseViewerInterface.java</code>
| '''House Viewer''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Item Upgrader''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/ItemUpgraderInterface.java</code>
| '''Item Upgrader''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Kill Log''' || Enabled plugin || , new Object[] { name, slotId });
| '''Kill Log''' || Enabled plugin || Select || verified game data
} else if (componentId == 25) {
final Object[] data = (Object[]) player.getTemporaryAttributes().get(, Select || <code>core/src/main/java/com/zenyte/plugins/interfaces/KillLogInterface.java</code>
|-
|-
| '''Mystery Box''' || Enabled plugin || , (player, slotId, itemId, option) -> {
| '''Mystery Box''' || Enabled plugin || Close, mbox_supplies, Purchase boxes, Reward text, Spin || verified game data
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() &#124;&#124; 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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/MysteryBoxInterface.java</code>
|-
|-
| '''Quest Journal''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/QuestJournalInterface.java</code>
| '''Quest Journal''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Remnant Pet Perk Interface Plugin''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/RemnantPetPerkInterfacePlugin.java</code>
| '''Remnant Pet Perk Interface Plugin''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Report Abuse''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/ReportAbuseInterface.java</code>
| '''Report Abuse''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Rune Pouch''' || Enabled plugin || , (player, slotId, itemId, option) -> {
| '''Rune Pouch''' || Enabled plugin || boonQuantStored, Deposit, Withdraw || verified game data
            withdraw(player, slotId, option);
        });
        bind(, boonQuantStored, Deposit, Withdraw || <code>core/src/main/java/com/zenyte/plugins/interfaces/RunePouchInterface.java</code>
|-
|-
| '''Scratch Card''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/ScratchCardInterface.java</code>
| '''Scratch Card''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Shop''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/ShopInterface.java</code>
| '''Shop''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Skill''' || Enabled plugin || view || <code>core/src/main/java/com/zenyte/plugins/interfaces/SkillInterface.java</code>
| '''Skill''' || Enabled plugin || view || verified game data
|-
|-
| '''Smithing''' || Enabled plugin || , player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));
| '''Smithing''' || Enabled plugin || Quantity 1, Quantity 10, Quantity 5, Quantity All, Quantity X, Smith || verified game data
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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/SmithingInterface.java</code>
|-
|-
| '''Tanning''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/TanningInterface.java</code>
| '''Tanning''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Task Book''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/TaskBookInterface.java</code>
| '''Task Book''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Warrior Guild Catapult''' || Enabled plugin || catapultStance || <code>core/src/main/java/com/zenyte/plugins/interfaces/WarriorGuildCatapultInterface.java</code>
| '''Warrior Guild Catapult''' || Enabled plugin || catapultStance || verified game data
|-
|-
| '''Well Of Goodwill''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/WellOfGoodwillInterface.java</code>
| '''Well Of Goodwill''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Interface Extractor''' || Core game content || Graphic, Layer, Line, Model, Rectangle, Text || <code>core/src/main/java/com/zenyte/tools/InterfaceExtractor.java</code>
| '''Interface Extractor''' || Core game content || Graphic, Layer, Line, Model, Rectangle, Text || verified game data
|-
|-
| '''Bhinterface Update''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/near_reality/game/content/bountyhunter/BHInterfaceUpdate.kt</code>
| '''Bhinterface Update''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Bounty Hunter Update Player Interfaces''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/near_reality/game/content/bountyhunter/tasks/BountyHunterUpdatePlayerInterfaces.kt</code>
| '''Bounty Hunter Update Player Interfaces''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Contest''' || Core game content || ) { player: Player, _: Int, _: Int, _: Int ->
| '''Contest''' || Core game content || Display, navigation or source-controlled interaction || verified game data
            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 || <code>core/src/main/kotlin/com/near_reality/game/content/contests/launch/ContestInterface.kt</code>
|-
|-
| '''Middle Man Handle Trade''' || Core game content || , this::populatePendingTradeListView)
| '''Middle Man Handle Trade''' || Core game content || Logs, Player 1 Offer, Player 2 Offer, Refresh, Status || verified game data
        bind(, Logs, Player 1 Offer, Player 2 Offer, Refresh, Status || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/handle/MiddleManHandleTradeInterface.kt</code>
|-
|-
| '''Middle Man Trade History''' || Core game content || , GameInterface.MIDDLE_MAN_MONITORING::open)
| '''Middle Man Trade History''' || Core game content || MM Home || verified game data
        bind(, List, MM Home || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/history/MiddleManTradeHistoryInterface.kt</code>
|-
|-
| '''Middle Man Trade Offer''' || Core game content || , Handler { player, slotId, itemId, option ->
| '''Middle Man Trade Offer''' || Core game content || Cancel, Confirm, Minus 1, My Offered Items, player ->
            if (option == 10) {
             player.sendInputInt, Plus 1, Set quantity || verified game data
                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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInterface.kt</code>
|-
|-
| '''Middle Man Trade Offer Inventory''' || Core game content || ) { player: Player, slotId: Int, itemId: Int, option: Int ->
| '''Middle Man Trade Offer Inventory''' || Core game content || My Tradeable Inventory || verified game data
            val itemAtSlot = player.inventory.getItem(slotId)
            if (itemAtSlot != null && !itemAtSlot.isTradable)
            {
                player.sendMessage(, My Tradeable Inventory || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInventoryInterface.kt</code>
|-
|-
| '''Middle Man Trade Request''' || Core game content || ) { player ->
| '''Middle Man Trade Request''' || Core game content || Cancel, Confirm, Enter name, Minus 1, player ->
            player.awaitInputInt {
             player.sendInputString, Plus 1, Set quantity || verified game data
                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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/request/MiddleManTradeRequestInterface.kt</code>
|-
|-
| '''Remnant Pet Perk''' || Core game content || Reroll, Upgrade || <code>core/src/main/kotlin/com/near_reality/game/content/remnantpets/RemnantPetPerkInterface.kt</code>
| '''Remnant Pet Perk''' || Core game content || Reroll, Upgrade || verified game data
|-
|-
| '''Cape Customizer Interface Plugin''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/near_reality/game/model/ui/cape_customizer/CapeCustomizerInterfacePlugin.kt</code>
| '''Cape Customizer Interface Plugin''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Chat Channel Interface Type''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/ChatChannelInterfaceType.kt</code>
| '''Chat Channel Interface Type''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Group Ironman Chat Channel''' || Core game content || , ChatChannelType.IronGroup)
| '''Group Ironman Chat Channel''' || Core game content || Clat-channel, Grouping, Iron Group, View, View another clan, Your Clan || verified game data
        bind(, , ChatChannelType.YourClan)
        bind(, Clat-channel, Grouping, Iron Group, View, View another clan, Your Clan || <code>core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/GroupIronmanChatChannelInterface.kt</code>
|-
|-
| '''Regular Chat Channel''' || Core game content || , ChatChannelType.ChatChannel)
| '''Regular Chat Channel''' || Core game content || Chat-channel, Grouping, View, View another clan, Your Clan || verified game data
        bind(, , ChatChannelType.ViewAnotherClan)
        bind(, Chat-channel, Grouping, View, View another clan, Your Clan || <code>core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/RegularChatChannelInterface.kt</code>
|-
|-
| '''Credit Package''' || Core game content || ) { player ->
| '''Credit Package''' || Core game content || checkout, go_back, payment_options || verified game data
            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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditPackageInterface.kt</code>
|-
|-
| '''Credit Store''' || Core game content || , CreditStoreModel::buyCredits)
| '''Credit Store''' || Core game content || buy, buy_credits_button, categories_dropdown, checkout_button, close, middleman_button, tabs || verified game data
        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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditStoreInterface.kt</code>
|-
|-
| '''Donation Deals''' || Core game content || ) { player -> DonationDealsModel.previewClaim(player) }
| '''Donation Deals''' || Core game content || claim, claim_deal, close_confirm, confirm, confirm_claim || verified game data
        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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/donationdeals/DonationDealsInterface.kt</code>
|-
|-
| '''Vote''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/near_reality/game/model/ui/vote/VoteInterface.kt</code>
| '''Vote''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Duel Confirmation''' || Core game content || ) { p: Player ->
| '''Duel Confirmation''' || Core game content || Confirm, Decline || verified game data
            if (!p.inArea(, Confirm, Decline || <code>core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/DuelConfirmationInterface.kt</code>
|-
|-
| '''Staking Duel''' || Core game content || )  { p -> p.duel?.confirm(DuelStage.STAKE) }
| '''Staking Duel''' || Core game content || Accept, Decline, My Staked Items, Target name || verified game data
        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 || <code>core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingDuelInterface.kt</code>
|-
|-
| '''Staking Inventory''' || Core game content || ) { player: Player, slotId: Int, itemId: Int, option: Int ->
| '''Staking Inventory''' || Core game content || My Stakeable Inventory || verified game data
            val itemAtSlot = player.inventory.getItem(slotId) ?: return@bind
            if (!itemAtSlot.isTradable) {
                player.sendMessage(, My Stakeable Inventory || <code>core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingInventoryInterface.kt</code>
|-
|-
| '''Spellbook Open Teleport''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/zenyte/game/content/skills/magic/spells/teleports/SpellbookOpenTeleportInterface.kt</code>
| '''Spellbook Open Teleport''' || Core game content || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Universal Shop''' || Core game content || ) { player: Player, _: Int, _: Int, _: Int ->
| '''Universal Shop''' || Core game content || categories_list, search, search_button, stock_list || verified game data
                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 || <code>core/src/main/kotlin/com/zenyte/game/content/universalshop/UniversalShopInterface.kt</code>
|-
|-
| '''Character Designer''' || Enabled plugin || , ::handleConfirm)
| '''Character Designer''' || Enabled plugin || Confirm, Female, Male, Next arms, Next feet, Next feet colour, Next hair colour, Next hands, Next head, Next jaw, Next legs, Next legs colour || verified game data
        bind(, , ::handleMale)
        bind(, , ::handlePreviousArms)
        bind(, , ::handlePreviousFeet)
        bind(, , ::handlePreviousFeetColour)
        bind(, , ::handlePreviousHairColour)
        bind(, , ::handlePreviousHands)
        bind(, , ::handlePreviousHead)
        bind(, , ::handlePreviousJaw)
        bind(, , ::handlePreviousLegs)
        bind(, , ::handlePreviousLegsColour)
        bind(, , ::handlePreviousSkinColour)
        bind( || <code>plugins/interfaces/characterdesign/src/main/kotlin/com/near_reality/plugins/interfaces/characterdesign/CharacterDesignerInterface.kt</code>
|-
|-
| '''Deaths Office Retrieval''' || Enabled plugin || Claim || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_retrieval.interface.kts</code>
| '''Deaths Office Retrieval''' || Enabled plugin || Claim || verified game data
|-
|-
| '''Deaths Office Sacrifice Inv''' || Enabled plugin || Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_sacrifice_inv.interface.kts</code>
| '''Deaths Office Sacrifice Inv''' || Enabled plugin || Select || verified game data
|-
|-
| '''Deaths Office Sacrifice''' || Enabled plugin || Confirm, Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_sacrifice.interface.kts</code>
| '''Deaths Office Sacrifice''' || Enabled plugin || Confirm, Select || verified game data
|-
|-
| '''Deaths Office Retrieval''' || Enabled plugin || Claim || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeRetrievalInterface.kt</code>
| '''Deaths Office Retrieval''' || Enabled plugin || Claim || verified game data
|-
|-
| '''Deaths Office Sacrifice''' || Enabled plugin || Confirm, Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeSacrificeInterface.kt</code>
| '''Deaths Office Sacrifice''' || Enabled plugin || Confirm, Select || verified game data
|-
|-
| '''Deaths Office Sacrifice Inv''' || Enabled plugin || Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeSacrificeInvInterface.kt</code>
| '''Deaths Office Sacrifice Inv''' || Enabled plugin || Select || verified game data
|-
|-
| '''Gravestone Reclaim''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/gravestone_reclaim.interface.kts</code>
| '''Gravestone Reclaim''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Gravestone Reclaim''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/GravestoneReclaimInterface.kt</code>
| '''Gravestone Reclaim''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Items Kept On Death''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/ItemsKeptOnDeathInterface.kt</code>
| '''Items Kept On Death''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Remnant Exch''' || Enabled plugin || Confirm, Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/remnant_exch.interface.kts</code>
| '''Remnant Exch''' || Enabled plugin || Confirm, Select || verified game data
|-
|-
| '''Remnant Inv''' || Enabled plugin || Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/remnant_inv.interface.kts</code>
| '''Remnant Inv''' || Enabled plugin || Select || verified game data
|-
|-
| '''Remnant Exch''' || Enabled plugin || Confirm, Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/RemnantExchInterface.kt</code>
| '''Remnant Exch''' || Enabled plugin || Confirm, Select || verified game data
|-
|-
| '''Remnant Inv''' || Enabled plugin || Select || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/RemnantInvInterface.kt</code>
| '''Remnant Inv''' || Enabled plugin || Select || verified game data
|-
|-
| '''Univ Shop Inv''' || Enabled plugin || Sell || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/univ_shop_inv.interface.kts</code>
| '''Univ Shop Inv''' || Enabled plugin || Sell || verified game data
|-
|-
| '''Slayer''' || Enabled plugin || Buy || <code>plugins/interfaces/slayer/src/main/kotlin/com/zenyte/game/content/skills/slayer/slayer.interface.kts</code>
| '''Slayer''' || Enabled plugin || Buy || verified game data
|-
|-
| '''Slayer''' || Enabled plugin || Buy || <code>plugins/interfaces/slayer/src/main/kotlin/com/zenyte/game/content/skills/slayer/SlayerInterface.kt</code>
| '''Slayer''' || Enabled plugin || Buy || verified game data
|-
|-
| '''Teleport Interface Dialog''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>plugins/interfaces/teleports/src/main/kotlin/com/near_reality/plugins/interfaces/teleports/TeleportInterfaceDialog.kt</code>
| '''Teleport Interface Dialog''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''Teleports''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>plugins/interfaces/teleports/src/main/kotlin/com/near_reality/plugins/interfaces/teleports/TeleportsInterface.kt</code>
| '''Teleports''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|-
|-
| '''World Switcher Interface Plugin''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>plugins/interfaces/worldswitcher/src/main/kotlin/cloud/rsps/game/plugins/interfaces/WorldSwitcherInterfacePlugin.kt</code>
| '''World Switcher Interface Plugin''' || Enabled plugin || Display, navigation or source-controlled interaction || verified game data
|}
|}


Line 2,407: Line 526:


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



Latest revision as of 22:11, 23 July 2026

Interface directory
TypeComplete UI source index
StatusActive modules only


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 loyalty_content_transmit, loyalty_footer_transmit, loyalty_side_transmit, popup_transmit, stock_transmit, tab_1, tab_2, tab_3, tab_4 verified game data
Colosseum Reward Chest Restricted game content bank-all, discard-all, take, take-all verified game data
Colosseum Scoreboard Restricted game content Display, navigation or source-controlled interaction verified game data
Dizana Quiver Restricted game content ammo, charges, open verified game data
Toaparty Restricted game content Select, Select party verified game data
Toaparty Management Restricted game content Open, Preset select, Reward info verified game data
Toareward Restricted game content Bank-all, Discard-all, Inventory-all, Take-All, Take-x verified game data
Toascore Board Restricted game content Display, navigation or source-controlled interaction verified game data
Toasupply Bag Restricted game content Display, navigation or source-controlled interaction verified game data
Toasupply Select Restricted game content Chaos, Chaos container, Life, Life container, Power, Power container verified game data
Bounty Hunter Restricted game content Display, navigation or source-controlled interaction verified game data
Pvm Arena Hud Restricted game content Display, navigation or source-controlled interaction verified game data
Rewards Restricted game content Bank-all, Take-All verified game data
Tournament Presets Restricted game content Apply, Equipment Setup, Inventory Setup, Presets, Search, Select, Take Item, View verified game data
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 verified game data
Tournament Spectating Restricted game content Display, navigation or source-controlled interaction verified game data
Tournament Viewer Restricted game content Players, Refresh, Round, View, View Fight verified game data
Tournament Reward Restricted game content Buy, Buy reward verified game data
Diary Core game content close verified game data
Advent Calendar Core game content Day verified game data
Boon Purchase Core game content Buy, Entry, Open, Open Exchange verified game data
Quest Journal Interface Manager Core game content Display, navigation or source-controlled interaction verified game data
Raiding Parties Core game content View, View party verified game data
Raiding Party Core game content Toggle, view verified game data
Raid Party Core game content Refresh, Start raid verified game data
Raid Rewards Core game content Take item verified game data
Private Storage Core game content Deposit, Deposit/Bank all, Interact with item, Shared storage button, Size, Withdraw, Withdraw all verified game data
Shared Storage Core game content Container size, Interact with item, Switch to private storage verified game data
Storage Core game content Display, navigation or source-controlled interaction verified game data
Storage Inventory Core game content Dismiss storage warning, Interact with item verified game data
Combat Buddy Interface Manager Core game content Display, navigation or source-controlled interaction verified game data
Comp Progress Core game content Display, navigation or source-controlled interaction verified game data
Comp Selection Core game content Display, navigation or source-controlled interaction verified game data
Daily Task Interface Manager Core game content Display, navigation or source-controlled interaction verified game data
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 verified game data
Noticeboard Core game content Display, navigation or source-controlled interaction verified game data
Item Sets Core game content Interact verified game data
Item Sets Inventory Core game content Interact verified game data
Hiscores Core game content Dropdown, Entries, Group Ironman, Hardcore Ironman, Ironman, Ultimate Ironman verified game data
Master Scroll Book Core game content Digsite, Elf Camp, Feldip Hills, Key Master, Lumberyard, Lunar Isle, master scroll book teleport, Mort'ton, Mos Le'Harmless, Nardah, Pest Control, Piscatoris verified game data
Wilderness Loot Key Core game content Bank-All, Destroy, Note, Take, Take-All, Withdraw, Withdraw all to bank, Withdraw all to inventory verified game data
Magic Storage Core game content Interact with element verified game data
Barrows Overlay Core game content Display, navigation or source-controlled interaction verified game data
Barrows Puzzle Core game content 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 verified game data
Barrows Rewards Core game content Examine verified game data
Catapult Core game content Cross, Decrease horizontal, Decrease vertical, Fire, First horizontal digit, First vertical digit, Increase horizontal, Increase vertical, Second horizontal digit, Second vertical digit verified game data
Duel Arena Scoreboard Core game content Duels Lost, Duels Won, Scoreboard verified game data
Duel Settings Core game content Ammunition, Back, Boxing settings, Confirm, Decline, Feet, Hand, Head, Left hand, Leg, Load last duel settings, Load preset settings verified game data
Duel Staking Core game content Close, Confirm, GP quantity, Load Previous Stake, Platinum quantity, Target name verified game data
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 verified game data
Pest Control Lander Core game content Lander flag, Lander type, Next departure, Pest points, Players ready verified game data
Void Knight Rewards Core game content Confirm, Confirm reward verified game data
Impling Tracker Core game content Eighth, Fifth, First, Fourth, Puro-Puro, Second, Seventh, Sixth, Surface World, Third verified game data
Party Drop Chest Core game content Accept, Add 1, Add 5, Add all, Add x, Chest private deposit container, Chest public deposit container verified game data
Party Drop Inventory Core game content Interact with item verified game data
Farming Storage Enabled plugin Bottomless bucket, Empty buckets, Gardening trowel, Normal compost, Plant cure, Quantity 1, Quantity 5, Quantity All, Quantity X, Rake, Secateurs, Seed dibber verified game data
Farming Storage Inventory Enabled plugin Bottomless buckets, Empty buckets, Gardening trowel, Normal compost, Plant cure, Rake, Secateurs, Seed dibber, Spade, Supercompost, Ultracompost, Watering can verified game data
Seed Vault Core game content Categories, Deposit, Deposit-All, Search, Withdraw, Withdraw-1, Withdraw-10, Withdraw-5, Withdraw-All, Withdraw-X verified game data
Seed Vault Inventory Core game content Display, navigation or source-controlled interaction verified game data
Custom Fur Clothing Core game content Interact with item verified game data
Arceuus Lectern Core game content Ardounge Teleport, Battlefront, Bones to Bananas, Bones to Peaches, Camelot Teleport, Civitas illa Fortis Teleport, Create, Draynor manor, Enchant Diamond, Enchant Dragonstone, Enchant Emerald, Enchant Onyx verified game data
Regular Lectern Core game content Ardougne teleport, Bones to bananas, Bones to peaches, Camelot teleport, Enchant diamond, Enchant dragonstone, Enchant emerald, Enchant onyx, Enchant ruby, Enchant sapphire, Falador teleport, House teleport verified game data
Slayer Partner Core game content Display, navigation or source-controlled interaction verified game data
Clue Core game content Information verified game data
Clue Reward Core game content Item list verified game data
Sextant Core game content Arm, Down arrow, Frame, Get location, Grass, Index mirror, Left arrow, Right arrow, Sun, Up arrow verified game data
Light Box Core game content A, B, C, D, E, F, G, H verified game data
Puzzle Box Core game content Puzzle piece verified game data
Stash Unit Core game content Display, navigation or source-controlled interaction verified game data
Treasure Trail Statistics Core game content Display, navigation or source-controlled interaction verified game data
Well Of Goodwill Interface Manager Core game content Display, navigation or source-controlled interaction verified game data
Vault Overlay Core game content Display, navigation or source-controlled interaction verified game data
Vault Reward Core game content Take item verified game data
Game Core game content Open verified game data
Shop Core game content Interact with item, Sell verified game data
Shop Inventory Core game content Interact with item, Sell verified game data
Dialogue Core game content Display, navigation or source-controlled interaction verified game data
Interface Core game content Display, navigation or source-controlled interaction verified game data
Interface Handler Core game content Display, navigation or source-controlled interaction verified game data
Interface Position Core game content Display, navigation or source-controlled interaction verified game data
New Interface Handler Core game content Display, navigation or source-controlled interaction verified game data
Achievement Diary Tab Core interface registry Diaries, Open verified game data
Colour Picker Core interface registry Display, navigation or source-controlled interaction verified game data
Settings Core interface registry Cancel drop-down selection, Category, Close, Drop-down menu, Search, Setting, Show less/more information, Slider verified game data
Another Clan Core interface registry Display, navigation or source-controlled interaction verified game data
Autocast Core interface registry Set autocast spell verified game data
Avas Devices Core interface registry Purchase ava's accumulator, Purchase ava's assembler, Purchase ava's attractor verified game data
Bank Deposit Core interface registry Default Quantity 1, Default Quantity 10, Default Quantity 5, Default Quantity All, Default Quantity X, Deposit, Deposit inventory, Deposit lock settings, Deposit loot, Deposit worn items, Interact with Item, Select verified game data
Bank Core interface registry Add bank fillers, Always set placeholders, Bank size, Bank size tooltip 1, Bank size tooltip 2, Deposit, Deposit equipment, Deposit inventory, Deposit inventory button, Deposit lock settings, Deposit to potion store, Deposit worn items button verified game data
Bank Inventory Core interface registry Deposit, Deposit Looting Bag Item, Empty Looting Bag, Interact with Item, Wear verified game data
Battlestaff Enchantment Core interface registry Air battlestaff, Dust battlestaff, Earth battlestaff, Fire battlestaff, Lava battlestaff, Mist battlestaff, Mud battlestaff, Smoke battlestaff, Steam battlestaff, Water battlestaff verified game data
Bounty Hunter Store Core interface registry Item layer, Scrollbar verified game data
Bug Report Core interface registry Display, navigation or source-controlled interaction verified game data
Character Summary Core interface registry Component layer, Element layer verified game data
Chartership Core interface registry Brimhaven, Catherby, Corsair Cove, Mos Le'Harmless, Musa Point, Port Khazard, Port Phasmatys, Port Sarim, Port Tyras, Prifddinas, Shipyard verified game data
Chat Channel Core interface registry Open, Open clan chat set-up verified game data
Chat Core interface registry Report button, Set channel filter, Set clan filter, Set game filter, Set group filter, Set private filter verified game data
Clan Chat Set Up Core interface registry Disable/set prefix, Set enter rank, Set kick rank, Set talk rank verified game data
Clan Core interface registry Display, navigation or source-controlled interaction verified game data
Combat Tab Core interface registry Attack style 1, Attack style 2, Attack style 3, Attack style 4, Auto retaliate, Autocast, Defensive autocast, Special attack verified game data
Daily Challenges Overview Core interface registry 0, 1, 2, 3, 4 verified game data
Decanting Dialogue Core interface registry 1-dose, 2-dose, 3-dose, 4-dose verified game data
Drop Viewer Core interface registry Rarity Display, Search, Search button, Select, Select Item, Select NPC, View, View Result verified game data
Emote Tab Core interface registry Play emote verified game data
Equipment Inventory Core interface registry Interact with Item verified game data
Equipment Stats Core interface registry Display, navigation or source-controlled interaction verified game data
Equipment Tab Core interface registry Call follower, dizana quiver, Price checker, View, View equipment stats, View items kept on death verified game data
Experience Lamp Core interface registry Confirm, Text verified game data
Experience Tracker Core interface registry Configure skill, Save goal, Select, Select goal, Select no tracker or goal, Select tracker, Set colour, Set counter, Set duration, Set fake drops, Set goal end point, Set goal start point verified game data
Explorer Ring Core interface registry Charges, Close, High alchemy, Inventory, Low alchemy verified game data
Extra Quest Tab Core interface registry Display, navigation or source-controlled interaction verified game data
Fixed Pane Core interface registry Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering verified game data
Friends List Core interface registry View, View Ignore List verified game data
Game Mode Setup Core interface registry Mode, Rate 1, Rate 2, Rate 3, Rate 4, review verified game data
Game Noticeboard Core interface registry Bonus XP, Boss task, Daily Challenges, Day, Discord, Discord row, Drop rate, Drop Viewer, Game Mode, Game Settings, Highscores, Highscores row verified game data
Game Settings Core interface registry Display, navigation or source-controlled interaction verified game data
Gnome Cocktail Core interface registry Create, select verified game data
Gnome Glider Core interface registry Gandius, Kar-Hewo, Lemanto Andra, Lemantolly Undri, Ookookolly Undri, Sindarpos, Ta Quir Priw verified game data
Gold Jewellery Core interface registry Make all, Make five, Make one, Make ten, Make x verified game data
Grand Exchange History Core interface registry Click history entry, Open, Open Offers verified game data
Grand Exchange Offers Viewer Core interface registry Exchange, GE Item price, Item name, Item sprite in search, Offer Entry, Search, Search for item, Select, Sort by name, Sort by price, Sort by quantity, View verified game data
Grouping Tab Core interface registry Select, Select minigame, Teleport verified game data
Hairdresser Core interface registry Finish make-over, Select, Select hair/beard colour, Select hair/beard style verified game data
House Options Tab Core interface registry Building mode OFF, Building mode ON, Expel guests, Leave house, Number of rooms, Open, Open house viewer, Render doors closed, Render doors open, Render no doors, Teleport inside OFF, Teleport inside ON verified game data
Ignore List Core interface registry View, View Friends List verified game data
Item Retrieval Service Core interface registry Discard-All, Items, Take-All, Take-All/Unlock verified game data
Journal Header Tab Core interface registry Achievement Diary, Character Summary, Extra, Game Noticeboard, Quests, Server Events verified game data
Kourend Favour Tab Core interface registry Display, navigation or source-controlled interaction verified game data
Lobby Core interface registry Bank pin, Click here to play, Message of the week verified game data
Logout Tab Core interface registry Logout, World switcher verified game data
Looting Bag Core interface registry Close, deposit, Store/Examine, Value, Withdraw verified game data
Make Over Core interface registry CONFIRM, Finish make-over, Select, Select female, Select male, Select skin colour verified game data
Minigame Tab Core interface registry PvM Arena, Select, Select minigame, Teleport verified game data
Minimized Minimap Orbs Core interface registry Cure Toxins, Experience Tracker, Prayer, Run, Toggle, Toggle special, View, View World Map verified game data
Mobile Pane Core interface registry Combat tab, Function button, Logout tab, Select, Show keyboard, Start chatting verified game data
Music Player Core interface registry Auto, Loop, Manual, Play song, Song name verified game data
Mycelium Teleport Core interface registry Teleport 1, Teleport 1 Text, Teleport 2, Teleport 2 Text, Teleport 3, Teleport 3 Text, Teleport 4, Teleport 4 Text verified game data
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 verified game data
Orbs Core interface registry Cure Toxins, Daily activity, Experience Tracker, Open, Open Store, Prayer, Run, Toggle, Toggle special, View, View World Map verified game data
Pet Insurance Core interface registry Buy, Buy Reclaims, Confirm, Reclaim Insured Pet verified game data
Preset Manager Core interface registry Always set placeholders, Ancient Spellbook, Apply, Arceuus Spellbook, Bank, Capacity tooltip, Create Preset, Delete, Inventory, Lunar Spellbook, Move preset down, Move preset up verified game data
Price Checker Core interface registry Add all, Interact with item, Item name in search, Item sprite in search, Search, Search for item, Select verified game data
Price Checker Inventory Core interface registry Interact with item verified game data
Quest Tab Core interface registry Display, navigation or source-controlled interaction verified game data
Quick Prayer Core interface registry Confirm, Select, Select prayer verified game data
Remnant Value Guide Core interface registry Search, Select, Sell verified game data
Resizable Pane Core interface registry Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering verified game data
Seed Box Core interface registry Empty box, Fill box, Remove verified game data
Server Events Core interface registry Display, navigation or source-controlled interaction verified game data
Settings Tab Core interface registry Accept aid, All Settings, Area Sound Volume, Brightness, Disable zooming with scroll wheel, Game Client Layout, House options, Music unlock message, Music Volume, Mute Area Sounds, Mute Music, Mute Sound Effects verified game data
Side Panels Resizable Pane Core interface registry Character Summary, Gravestone info, helper_cox, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering verified game data
Silver Jewellery Core interface registry Make all, Make five, Make one, Make ten, Make x verified game data
Skills Tab Core interface registry Display, navigation or source-controlled interaction verified game data
Skotizo Core interface registry Display, navigation or source-controlled interaction verified game data
Spellbook Core interface registry Crossbow Bolt Enchantments, Jewellery Enchantments, Lvl-1 Enchant, Lvl-2 Enchant, Lvl-3 Enchant, Lvl-4 Enchant, Lvl-5 Enchant, Lvl-6 Enchant, Lvl-7 Enchant, Spell filters, Teleport to Target verified game data
Storage Room Core interface registry Deposit, Deposit inventory, Deposit mode, Items verified game data
Storage Room Inventory Core interface registry Items verified game data
Teleport Core interface registry Back, Category button, Favourite row, Favourite selected, List row, Next page, Previous page, Remove favourite, Search, Select, Teleport verified game data
Trade Inventory Core interface registry Add Item verified game data
Trade Stage1 Core interface registry Accept, Remove Item verified game data
Trade Stage2 Core interface registry Accept, Decline verified game data
Tutorial Make Over Core interface registry Title verified game data
Unmorph Core interface registry Unmorph verified game data
Wheel Of Fortune Core interface registry Claim, Claim later, Deposit, Deposit to bank, Discard, Examine item, Spin verified game data
World Map Core interface registry Close, Esc Close, Menu verified game data
User Core game content Display, navigation or source-controlled interaction verified game data
Calog Boss Core game content Collection log, General, Navigation, Select, Select task verified game data
Calog Boss Overview Core game content Navigation, Select verified game data
Calog Overview Core game content Navigation, Task selection verified game data
Calog Reward Core game content Navigation verified game data
Calog Task Core game content Completed, Monster, Navigation, Tier, Type verified game data
Collection Log Core game content Claim, Claim Reward, Close, Combat achievements, Search, Search letter verified game data
Bank Pin Settings Core game content Cancel PIN option, Change PIN, Change PIN Delay, Delete PIN, Interface base, Login Secure Delay, Message, PIN Alteration Confirm, PIN Alteration Deny, Pin enabled options, Pin lock on login, PIN pending options verified game data
Interface Switch Handler Enabled plugin Display, navigation or source-controlled interaction verified game data
Interface Switch Plugin Enabled plugin Display, navigation or source-controlled interaction verified game data
Bingo Enabled plugin Display, navigation or source-controlled interaction verified game data
Canoe Enabled plugin Display, navigation or source-controlled interaction verified game data
Combat Buddy Enabled plugin Display, navigation or source-controlled interaction verified game data
Daily Login Rewards Enabled plugin Display, navigation or source-controlled interaction verified game data
Daily Task Enabled plugin Display, navigation or source-controlled interaction verified game data
Daily Vote Streak Enabled plugin Display, navigation or source-controlled interaction verified game data
Book Enabled plugin Display, navigation or source-controlled interaction verified game data
Dual Item Option Dialogue Enabled plugin Display, navigation or source-controlled interaction verified game data
Furniture Creation Enabled plugin Build furniture verified game data
Normal Dialogue Enabled plugin Display, navigation or source-controlled interaction verified game data
Option Dialogue Enabled plugin Display, navigation or source-controlled interaction verified game data
Orb Of Oculus Enabled plugin Display, navigation or source-controlled interaction verified game data
Poll Enabled plugin Display, navigation or source-controlled interaction verified game data
Room Creation Enabled plugin Display, navigation or source-controlled interaction verified game data
Skill Dialogue Enabled plugin Display, navigation or source-controlled interaction verified game data
Teleother Enabled plugin Display, navigation or source-controlled interaction verified game data
Wilderness Warning Enabled plugin Display, navigation or source-controlled interaction verified game data
Grand Exchange Offers Enabled plugin buy, sell verified game data
House Viewer Enabled plugin Display, navigation or source-controlled interaction verified game data
Item Upgrader Enabled plugin Display, navigation or source-controlled interaction verified game data
Kill Log Enabled plugin Select verified game data
Mystery Box Enabled plugin Close, mbox_supplies, Purchase boxes, Reward text, Spin verified game data
Quest Journal Enabled plugin Display, navigation or source-controlled interaction verified game data
Remnant Pet Perk Interface Plugin Enabled plugin Display, navigation or source-controlled interaction verified game data
Report Abuse Enabled plugin Display, navigation or source-controlled interaction verified game data
Rune Pouch Enabled plugin boonQuantStored, Deposit, Withdraw verified game data
Scratch Card Enabled plugin Display, navigation or source-controlled interaction verified game data
Shop Enabled plugin Display, navigation or source-controlled interaction verified game data
Skill Enabled plugin view verified game data
Smithing Enabled plugin Quantity 1, Quantity 10, Quantity 5, Quantity All, Quantity X, Smith verified game data
Tanning Enabled plugin Display, navigation or source-controlled interaction verified game data
Task Book Enabled plugin Display, navigation or source-controlled interaction verified game data
Warrior Guild Catapult Enabled plugin catapultStance verified game data
Well Of Goodwill Enabled plugin Display, navigation or source-controlled interaction verified game data
Interface Extractor Core game content Graphic, Layer, Line, Model, Rectangle, Text verified game data
Bhinterface Update Core game content Display, navigation or source-controlled interaction verified game data
Bounty Hunter Update Player Interfaces Core game content Display, navigation or source-controlled interaction verified game data
Contest Core game content Display, navigation or source-controlled interaction verified game data
Middle Man Handle Trade Core game content Logs, Player 1 Offer, Player 2 Offer, Refresh, Status verified game data
Middle Man Trade History Core game content MM Home verified game data
Middle Man Trade Offer Core game content Cancel, Confirm, Minus 1, My Offered Items, player ->
           player.sendInputInt, Plus 1, Set quantity || verified game data
Middle Man Trade Offer Inventory Core game content My Tradeable Inventory verified game data
Middle Man Trade Request Core game content Cancel, Confirm, Enter name, Minus 1, player ->
           player.sendInputString, Plus 1, Set quantity || verified game data
Remnant Pet Perk Core game content Reroll, Upgrade verified game data
Cape Customizer Interface Plugin Core game content Display, navigation or source-controlled interaction verified game data
Chat Channel Interface Type Core game content Display, navigation or source-controlled interaction verified game data
Group Ironman Chat Channel Core game content Clat-channel, Grouping, Iron Group, View, View another clan, Your Clan verified game data
Regular Chat Channel Core game content Chat-channel, Grouping, View, View another clan, Your Clan verified game data
Credit Package Core game content checkout, go_back, payment_options verified game data
Credit Store Core game content buy, buy_credits_button, categories_dropdown, checkout_button, close, middleman_button, tabs verified game data
Donation Deals Core game content claim, claim_deal, close_confirm, confirm, confirm_claim verified game data
Vote Core game content Display, navigation or source-controlled interaction verified game data
Duel Confirmation Core game content Confirm, Decline verified game data
Staking Duel Core game content Accept, Decline, My Staked Items, Target name verified game data
Staking Inventory Core game content My Stakeable Inventory verified game data
Spellbook Open Teleport Core game content Display, navigation or source-controlled interaction verified game data
Universal Shop Core game content categories_list, search, search_button, stock_list verified game data
Character Designer Enabled plugin Confirm, Female, Male, Next arms, Next feet, Next feet colour, Next hair colour, Next hands, Next head, Next jaw, Next legs, Next legs colour verified game data
Deaths Office Retrieval Enabled plugin Claim verified game data
Deaths Office Sacrifice Inv Enabled plugin Select verified game data
Deaths Office Sacrifice Enabled plugin Confirm, Select verified game data
Deaths Office Retrieval Enabled plugin Claim verified game data
Deaths Office Sacrifice Enabled plugin Confirm, Select verified game data
Deaths Office Sacrifice Inv Enabled plugin Select verified game data
Gravestone Reclaim Enabled plugin Display, navigation or source-controlled interaction verified game data
Gravestone Reclaim Enabled plugin Display, navigation or source-controlled interaction verified game data
Items Kept On Death Enabled plugin Display, navigation or source-controlled interaction verified game data
Remnant Exch Enabled plugin Confirm, Select verified game data
Remnant Inv Enabled plugin Select verified game data
Remnant Exch Enabled plugin Confirm, Select verified game data
Remnant Inv Enabled plugin Select verified game data
Univ Shop Inv Enabled plugin Sell verified game data
Slayer Enabled plugin Buy verified game data
Slayer Enabled plugin Buy verified game data
Teleport Interface Dialog Enabled plugin Display, navigation or source-controlled interaction verified game data
Teleports Enabled plugin Display, navigation or source-controlled interaction verified game data
World Switcher Interface Plugin Enabled plugin Display, navigation or source-controlled interaction verified game data

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.