Jump to content

Interface directory: Difference between revisions

From Age Of Embers Wiki
imported>Age Of Embers Editorial Team
Initial verified wiki package import
imported>Age Of Embers Editorial Team
Initial verified wiki package import
Line 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 || <code>core-restricted/src/main/java/com/near_reality/content/donatestore/DonationStoreInterface.java</code>
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumRewardChestInterface.java</code>
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumScoreboardInterface.java</code>
Line 95: Line 16:
| '''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 || <code>core-restricted/src/main/java/com/zenyte/game/content/colosseum/items/DizanaQuiverInterface.java</code>
|-
|-
| '''Toaparty''' || Restricted game content || , (player, slotId, itemId, option) -> {
| '''Toaparty''' || Restricted game content || Select, Select party || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyInterface.java</code>
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyManagementInterface.java</code>
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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOARewardInterface.java</code>
            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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOAScoreBoardInterface.java</code>
|-
|-
| '''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 || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplyBagInterface.java</code>
|-
|-
| '''Toasupply Select''' || Restricted game content || , player -> addContainer(player, 0));
| '''Toasupply Select''' || Restricted game content || Chaos, Chaos container, Life, Life container, Power, Power container || <code>core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplySelectInterface.java</code>
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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/bountyhunter/bounty_hunter.interface.kts</code>
Line 245: Line 34:
| '''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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/toa/rewards.interface.kts</code>
|-
|-
| '''Tournament Presets''' || Restricted game content || ) { player: Player ->
| '''Tournament Presets''' || Restricted game content || 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>
            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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/SpectatingInventoryInterface.kt</code>
Line 262: Line 40:
| '''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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentSpectatingInterface.kt</code>
|-
|-
| '''Tournament Viewer''' || Restricted game content || ) { player: Player -> this.refresh(player) }
| '''Tournament Viewer''' || Restricted game content || Players, Refresh, Round, View, View Fight || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentViewerInterface.kt</code>
        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 || <code>core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/TournamentRewardInterface.kt</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/achievementdiary/DiaryInterface.java</code>
|-
|-
| '''Advent Calendar''' || Core game content || + day, player -> openDay(player, finalDay));
| '''Advent Calendar''' || Core game content || Day || <code>core/src/main/java/com/zenyte/game/content/advent/AdventCalendarInterface.java</code>
}
}
 
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 || <code>core/src/main/java/com/zenyte/game/content/boons/BoonPurchaseInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/casket/QuestJournalInterfaceManager.java</code>
|-
|-
| '''Raiding Parties''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Raiding Parties''' || Core game content || View, View party || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartiesInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartyInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidPartyInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/rewards/RaidRewardsInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/PrivateStorageInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/SharedStorageInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInterface.java</code>
|-
|-
| '''Storage Inventory''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Storage Inventory''' || Core game content || Dismiss storage warning, Interact with item || <code>core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/combatbuddies/CombatBuddyInterfaceManager.java</code>
Line 367: Line 80:
| '''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 || <code>core/src/main/java/com/zenyte/game/content/event/easter2020/NoticeboardInterface.java</code>
|-
|-
| '''Item Sets''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Item Sets''' || Core game content || Interact || <code>core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInventoryInterface.java</code>
|-
|-
| '''Hiscores''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Hiscores''' || Core game content || Dropdown, Entries, Group Ironman, Hardcore Ironman, Ironman, Ultimate Ironman || <code>core/src/main/java/com/zenyte/game/content/hiscores/HiscoresInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/content/itemtransportation/masterscrolls/MasterScrollBookInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/lootkeys/WildernessLootKeyInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/magicstorageunit/MagicStorageInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsOverlayInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsPuzzleInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsRewardsInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/content/minigame/castlewars/CatapultInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelArenaScoreboardInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelSettingsInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelStakingInterface.java</code>
//            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 || <code>core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlGameInterface.java</code>
Line 564: Line 110:
| '''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 || <code>core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlLanderInterface.java</code>
|-
|-
| '''Void Knight Rewards''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Void Knight Rewards''' || Core game content || Confirm, Confirm reward || <code>core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/VoidKnightRewardsInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/minigame/puropuro/ImplingTrackerInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/content/partyroom/PartyDropChestInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/partyroom/PartyDropInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInventoryInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/skills/hunter/CustomFurClothingInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/ArceuusLecternInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/RegularLecternInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/skills/slayer/SlayerPartnerInterface.java</code>
Line 718: Line 136:
| '''Clue''' || Core game content || Information || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/ClueInterface.java</code>
| '''Clue''' || Core game content || Information || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/ClueInterface.java</code>
|-
|-
| '''Clue Reward''' || Core game content || , container);
| '''Clue Reward''' || Core game content || Item list || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/ClueRewardInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/coordinateutils/SextantInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/LightBoxInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/PuzzleBoxInterface.java</code>
Line 748: Line 156:
| '''Game''' || Core game content || Open || <code>core/src/main/java/com/zenyte/game/GameInterface.java</code>
| '''Game''' || Core game content || Open || <code>core/src/main/java/com/zenyte/game/GameInterface.java</code>
|-
|-
| '''Shop''' || Core game content || , ((player, interfaceSlotId, itemId, option) -> {
| '''Shop''' || Core game content || Interact with item, Sell || <code>core/src/main/java/com/zenyte/game/model/shop/ShopInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/shop/ShopInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/DialogueInterface.java</code>
Line 762: Line 164:
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/Interface.java</code>
|-
|-
| '''Interface Handler''' || Core game content || , true);
| '''Interface Handler''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/game/model/ui/InterfaceHandler.java</code>
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 || <code>core/src/main/java/com/zenyte/game/model/ui/InterfacePosition.java</code>
Line 841: Line 170:
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/NewInterfaceHandler.java</code>
|-
|-
| '''Achievement Diary Tab''' || Core interface registry || , player -> Diary.sendDiary(player, ArdougneDiary.MAP));
| '''Achievement Diary Tab''' || Core interface registry || Diaries, Open || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AchievementDiaryTabInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/ColourPickerInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/SettingsInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AnotherClanInterface.java</code>
|-
|-
| '''Autocast''' || Core interface registry || , player -> close(player));
| '''Autocast''' || Core interface registry || Set autocast spell || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AutocastInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AvasDevicesInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankDepositInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInterface.java</code>
                -> {
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BattlestaffEnchantmentInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BountyHunterStoreInterface.java</code>
            /*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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BugReportInterface.java</code>
|-
|-
| '''Character Summary''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Character Summary''' || Core interface registry || Component layer, Element layer || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CharacterSummaryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChartershipInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatChannelInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanChatSetUpInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CombatTabInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DailyChallengesOverviewInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DecantingDialogueInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DropViewerInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EmoteTabInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentStatsInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentTabInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceLampInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceTrackerInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExplorerRingInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExtraQuestTabInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FixedPaneInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FriendsListInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameModeSetupInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameNoticeboardInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameSettingsInterface.java</code>
|-
|-
| '''Gnome Cocktail''' || Core interface registry || , player -> {
| '''Gnome Cocktail''' || Core interface registry || Create, select || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeCocktailInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeGliderInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GoldJewelleryInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeHistoryInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeOffersViewerInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GroupingTabInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HairdresserInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HouseOptionsTabInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/IgnoreListInterface.java</code>
|-
|-
| '''Item Retrieval Service''' || Core interface registry || , (player, slotId, itemId, option) -> {
| '''Item Retrieval Service''' || Core interface registry || Discard-All, Items, Take-All, Take-All/Unlock || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ItemRetrievalServiceInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/JournalHeaderTabInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/KourendFavourTabInterface.java</code>
Line 1,509: Line 266:
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LobbyInterface.java</code>
|-
|-
| '''Logout Tab''' || Core interface registry || , player -> player.clickedLogoutButton(null));
| '''Logout Tab''' || Core interface registry || Logout, World switcher || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LogoutTabInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LootingBagInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MakeOverInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinigameTabInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinimizedMinimapOrbsInterface.java</code>
            //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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MobilePaneInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MusicPlayerInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MyceliumTeleportInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/NieveGravestoneInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/OrbsInterface.java</code>
            //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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PetInsuranceInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PresetManagerInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuestTabInterface.java</code>
|-
|-
| '''Quick Prayer''' || Core interface registry || , (player, slotId, itemId, option) -> player.getPrayerManager().setQuickPrayer(slotId));
| '''Quick Prayer''' || Core interface registry || Confirm, Select, Select prayer || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuickPrayerInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/RemnantValueGuideInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ResizablePaneInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SeedBoxInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ServerEventsInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SettingsTabInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SidePanelsResizablePaneInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SilverJewelleryInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkillsTabInterface.java</code>
Line 1,783: Line 316:
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkotizoInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SpellbookInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TeleportInterface.java</code>
        }
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeInventoryInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage1Interface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage2Interface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TutorialMakeOverInterface.java</code>
Line 1,917: Line 334:
| '''Unmorph''' || Core interface registry || Unmorph || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/UnmorphInterface.java</code>
| '''Unmorph''' || Core interface registry || Unmorph || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/UnmorphInterface.java</code>
|-
|-
| '''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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WheelOfFortuneInterface.java</code>
        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 || <code>core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WorldMapInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/game/model/ui/UserInterface.java</code>
|-
|-
| '''Calog Boss''' || Core game content || , (player, slotId, itemId, option) -> {
| '''Calog Boss''' || Core game content || Collection log, General, Navigation, Select, Select task || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossOverviewInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogOverviewInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogRewardInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogTaskInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/collectionlog/CollectionLogInterface.java</code>
                /* 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 || <code>core/src/main/java/com/zenyte/game/world/entity/player/container/impl/bank/BankPinSettingsInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchHandler.java</code>
Line 2,036: Line 374:
| '''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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/DualItemOptionDialogueInterface.java</code>
|-
|-
| '''Furniture Creation''' || Enabled plugin || , (player, slotId, itemId, option) -> {
| '''Furniture Creation''' || Enabled plugin || Build furniture || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/FurnitureCreationInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/NormalDialogueInterface.java</code>
Line 2,053: Line 390:
| '''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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/TeleotherInterface.java</code>
|-
|-
| '''Wilderness Warning''' || Enabled plugin || , true);
| '''Wilderness Warning''' || Enabled plugin || Display, navigation or source-controlled interaction || <code>core/src/main/java/com/zenyte/plugins/interfaces/dialogue/WildernessWarningInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/GrandExchangeOffersInterface.java</code>
Line 2,062: Line 398:
| '''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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/ItemUpgraderInterface.java</code>
|-
|-
| '''Kill Log''' || Enabled plugin || , new Object[] { name, slotId });
| '''Kill Log''' || Enabled plugin || Select || <code>core/src/main/java/com/zenyte/plugins/interfaces/KillLogInterface.java</code>
} 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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/MysteryBoxInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/QuestJournalInterface.java</code>
Line 2,109: Line 408:
| '''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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/ReportAbuseInterface.java</code>
|-
|-
| '''Rune Pouch''' || Enabled plugin || , (player, slotId, itemId, option) -> {
| '''Rune Pouch''' || Enabled plugin || boonQuantStored, Deposit, Withdraw || <code>core/src/main/java/com/zenyte/plugins/interfaces/RunePouchInterface.java</code>
            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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/ScratchCardInterface.java</code>
Line 2,120: Line 416:
| '''Skill''' || Enabled plugin || view || <code>core/src/main/java/com/zenyte/plugins/interfaces/SkillInterface.java</code>
| '''Skill''' || Enabled plugin || view || <code>core/src/main/java/com/zenyte/plugins/interfaces/SkillInterface.java</code>
|-
|-
| '''Smithing''' || Enabled plugin || , player -> player.getVarManager().sendVar(QUANTITY_VARP, 1));
| '''Smithing''' || Enabled plugin || Quantity 1, Quantity 10, Quantity 5, Quantity All, Quantity X, Smith || <code>core/src/main/java/com/zenyte/plugins/interfaces/SmithingInterface.java</code>
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 || <code>core/src/main/java/com/zenyte/plugins/interfaces/TanningInterface.java</code>
Line 2,143: Line 432:
| '''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 || <code>core/src/main/kotlin/com/near_reality/game/content/bountyhunter/tasks/BountyHunterUpdatePlayerInterfaces.kt</code>
|-
|-
| '''Contest''' || Core game content || ) { player: Player, _: Int, _: Int, _: Int ->
| '''Contest''' || Core game content || Display, navigation or source-controlled interaction || <code>core/src/main/kotlin/com/near_reality/game/content/contests/launch/ContestInterface.kt</code>
            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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/handle/MiddleManHandleTradeInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/history/MiddleManTradeHistoryInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInterface.kt</code>
                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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInventoryInterface.kt</code>
            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 || <code>core/src/main/kotlin/com/near_reality/game/content/middleman/trade/request/MiddleManTradeRequestInterface.kt</code>
                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 || <code>core/src/main/kotlin/com/near_reality/game/content/remnantpets/RemnantPetPerkInterface.kt</code>
Line 2,236: Line 452:
| '''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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/ChatChannelInterfaceType.kt</code>
|-
|-
| '''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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/GroupIronmanChatChannelInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/RegularChatChannelInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditPackageInterface.kt</code>
            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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditStoreInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/donationdeals/DonationDealsInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/near_reality/game/model/ui/vote/VoteInterface.kt</code>
|-
|-
| '''Duel Confirmation''' || Core game content || ) { p: Player ->
| '''Duel Confirmation''' || Core game content || Confirm, Decline || <code>core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/DuelConfirmationInterface.kt</code>
            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 || <code>core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingDuelInterface.kt</code>
        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 || <code>core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingInventoryInterface.kt</code>
            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 || <code>core/src/main/kotlin/com/zenyte/game/content/skills/magic/spells/teleports/SpellbookOpenTeleportInterface.kt</code>
|-
|-
| '''Universal Shop''' || Core game content || ) { player: Player, _: Int, _: Int, _: Int ->
| '''Universal Shop''' || Core game content || categories_list, search, search_button, stock_list || <code>core/src/main/kotlin/com/zenyte/game/content/universalshop/UniversalShopInterface.kt</code>
                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 || <code>plugins/interfaces/characterdesign/src/main/kotlin/com/near_reality/plugins/interfaces/characterdesign/CharacterDesignerInterface.kt</code>
        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 || <code>plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_retrieval.interface.kts</code>

Revision as of 21:47, 23 July 2026

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


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

252 interface sources indexedDeclared button/action labels are extracted where available. An interface appearing here proves that its active module exists; it does not necessarily mean every player can open it without the associated NPC, object, item or progression requirement.
Interface Module type Declared actions Source
Donation Store Restricted game content loyalty_content_transmit, loyalty_footer_transmit, loyalty_side_transmit, popup_transmit, stock_transmit, tab_1, tab_2, tab_3, tab_4 core-restricted/src/main/java/com/near_reality/content/donatestore/DonationStoreInterface.java
Colosseum Reward Chest Restricted game content bank-all, discard-all, take, take-all core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumRewardChestInterface.java
Colosseum Scoreboard Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/java/com/zenyte/game/content/colosseum/ColosseumScoreboardInterface.java
Dizana Quiver Restricted game content ammo, charges, open core-restricted/src/main/java/com/zenyte/game/content/colosseum/items/DizanaQuiverInterface.java
Toaparty Restricted game content Select, Select party core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyInterface.java
Toaparty Management Restricted game content Open, Preset select, Reward info core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/lobby/TOAPartyManagementInterface.java
Toareward Restricted game content Bank-all, Discard-all, Inventory-all, Take-All, Take-x core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOARewardInterface.java
Toascore Board Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOAScoreBoardInterface.java
Toasupply Bag Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplyBagInterface.java
Toasupply Select Restricted game content Chaos, Chaos container, Life, Life container, Power, Power container core-restricted/src/main/java/com/zenyte/game/content/tombsofamascut/raid/TOASupplySelectInterface.java
Bounty Hunter Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/kotlin/com/near_reality/game/content/bountyhunter/bounty_hunter.interface.kts
Pvm Arena Hud Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/kotlin/com/near_reality/game/content/pvm_arena/widget/PvmArenaHudInterface.kt
Rewards Restricted game content Bank-all, Take-All core-restricted/src/main/kotlin/com/near_reality/game/content/toa/rewards.interface.kts
Tournament Presets Restricted game content Apply, Equipment Setup, Inventory Setup, Presets, Search, Select, Take Item, View core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/preset/TournamentPresetsInterface.kt
Spectating Inventory Restricted game content Center, Center-Model, North-East, North-East-Model, North-West, North-West-Model, South-East, South-East-Model, South-West, South-West-Model, Stop Viewing core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/SpectatingInventoryInterface.kt
Tournament Spectating Restricted game content Display, navigation or source-controlled interaction core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentSpectatingInterface.kt
Tournament Viewer Restricted game content Players, Refresh, Round, View, View Fight core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/spectating/TournamentViewerInterface.kt
Tournament Reward Restricted game content Buy, Buy reward core-restricted/src/main/kotlin/com/near_reality/game/content/tournament/TournamentRewardInterface.kt
Diary Core game content close core/src/main/java/com/zenyte/game/content/achievementdiary/DiaryInterface.java
Advent Calendar Core game content Day core/src/main/java/com/zenyte/game/content/advent/AdventCalendarInterface.java
Boon Purchase Core game content Buy, Entry, Open, Open Exchange core/src/main/java/com/zenyte/game/content/boons/BoonPurchaseInterface.java
Quest Journal Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/casket/QuestJournalInterfaceManager.java
Raiding Parties Core game content View, View party core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartiesInterface.java
Raiding Party Core game content Toggle, view core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidingPartyInterface.java
Raid Party Core game content Refresh, Start raid core/src/main/java/com/zenyte/game/content/chambersofxeric/party/RaidPartyInterface.java
Raid Rewards Core game content Take item core/src/main/java/com/zenyte/game/content/chambersofxeric/rewards/RaidRewardsInterface.java
Private Storage Core game content Deposit, Deposit/Bank all, Interact with item, Shared storage button, Size, Withdraw, Withdraw all core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/PrivateStorageInterface.java
Shared Storage Core game content Container size, Interact with item, Switch to private storage core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/SharedStorageInterface.java
Storage Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInterface.java
Storage Inventory Core game content Dismiss storage warning, Interact with item core/src/main/java/com/zenyte/game/content/chambersofxeric/storageunit/StorageInventoryInterface.java
Combat Buddy Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/combatbuddies/CombatBuddyInterfaceManager.java
Comp Progress Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/compcapes/CompProgressInterface.java
Comp Selection Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/compcapes/CompSelectionInterface.java
Daily Task Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/dailychallenge/DailyTaskInterfaceManager.java
Quest Completed Core game content Award line 1, Award line 2, Award line 3, Award line 4, Award line 5, Award line 6, Award line 7, Quest completed item, Quest completed title, Quest points core/src/main/java/com/zenyte/game/content/event/christmas2019/QuestCompletedInterface.java
Noticeboard Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/event/easter2020/NoticeboardInterface.java
Item Sets Core game content Interact core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInterface.java
Item Sets Inventory Core game content Interact core/src/main/java/com/zenyte/game/content/grandexchange/ItemSetsInventoryInterface.java
Hiscores Core game content Dropdown, Entries, Group Ironman, Hardcore Ironman, Ironman, Ultimate Ironman core/src/main/java/com/zenyte/game/content/hiscores/HiscoresInterface.java
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 core/src/main/java/com/zenyte/game/content/itemtransportation/masterscrolls/MasterScrollBookInterface.java
Wilderness Loot Key Core game content Bank-All, Destroy, Note, Take, Take-All, Withdraw, Withdraw all to bank, Withdraw all to inventory core/src/main/java/com/zenyte/game/content/lootkeys/WildernessLootKeyInterface.java
Magic Storage Core game content Interact with element core/src/main/java/com/zenyte/game/content/magicstorageunit/MagicStorageInterface.java
Barrows Overlay Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsOverlayInterface.java
Barrows Puzzle Core game content Answer option 0, Answer option 1, Answer option 2, Option 0, Option 1, Option 2, Select, Select option 0, Select option 1, Select option 2 core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsPuzzleInterface.java
Barrows Rewards Core game content Examine core/src/main/java/com/zenyte/game/content/minigame/barrows/BarrowsRewardsInterface.java
Catapult Core game content Cross, Decrease horizontal, Decrease vertical, Fire, First horizontal digit, First vertical digit, Increase horizontal, Increase vertical, Second horizontal digit, Second vertical digit core/src/main/java/com/zenyte/game/content/minigame/castlewars/CatapultInterface.java
Duel Arena Scoreboard Core game content Duels Lost, Duels Won, Scoreboard core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelArenaScoreboardInterface.java
Duel Settings Core game content Ammunition, Back, Boxing settings, Confirm, Decline, Feet, Hand, Head, Left hand, Leg, Load last duel settings, Load preset settings core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelSettingsInterface.java
Duel Staking Core game content Close, Confirm, GP quantity, Load Previous Stake, Platinum quantity, Target name core/src/main/java/com/zenyte/game/content/minigame/duelarena/interfaces/DuelStakingInterface.java
Pest Control Game Core game content Damage dealt, Eastern health, Eastern shield, South-Eastern health, South-Eastern shield, South-Western health, South-Western shield, Time remaining, Void knight health, Western health, Western shield core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlGameInterface.java
Pest Control Lander Core game content Lander flag, Lander type, Next departure, Pest points, Players ready core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/PestControlLanderInterface.java
Void Knight Rewards Core game content Confirm, Confirm reward core/src/main/java/com/zenyte/game/content/minigame/pestcontrol/VoidKnightRewardsInterface.java
Impling Tracker Core game content Eighth, Fifth, First, Fourth, Puro-Puro, Second, Seventh, Sixth, Surface World, Third core/src/main/java/com/zenyte/game/content/minigame/puropuro/ImplingTrackerInterface.java
Party Drop Chest Core game content Accept, Add 1, Add 5, Add all, Add x, Chest private deposit container, Chest public deposit container core/src/main/java/com/zenyte/game/content/partyroom/PartyDropChestInterface.java
Party Drop Inventory Core game content Interact with item core/src/main/java/com/zenyte/game/content/partyroom/PartyDropInventoryInterface.java
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 core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInterface.java
Farming Storage Inventory Enabled plugin Bottomless buckets, Empty buckets, Gardening trowel, Normal compost, Plant cure, Rake, Secateurs, Seed dibber, Spade, Supercompost, Ultracompost, Watering can core/src/main/java/com/zenyte/game/content/skills/farming/plugins/FarmingStorageInventoryInterface.java
Seed Vault Core game content Categories, Deposit, Deposit-All, Search, Withdraw, Withdraw-1, Withdraw-10, Withdraw-5, Withdraw-All, Withdraw-X core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInterface.java
Seed Vault Inventory Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/skills/farming/seedvault/SeedVaultInventoryInterface.java
Custom Fur Clothing Core game content Interact with item core/src/main/java/com/zenyte/game/content/skills/hunter/CustomFurClothingInterface.java
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 core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/ArceuusLecternInterface.java
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 core/src/main/java/com/zenyte/game/content/skills/magic/lecterns/RegularLecternInterface.java
Slayer Partner Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/skills/slayer/SlayerPartnerInterface.java
Clue Core game content Information core/src/main/java/com/zenyte/game/content/treasuretrails/ClueInterface.java
Clue Reward Core game content Item list core/src/main/java/com/zenyte/game/content/treasuretrails/ClueRewardInterface.java
Sextant Core game content Arm, Down arrow, Frame, Get location, Grass, Index mirror, Left arrow, Right arrow, Sun, Up arrow core/src/main/java/com/zenyte/game/content/treasuretrails/coordinateutils/SextantInterface.java
Light Box Core game content A, B, C, D, E, F, G, H core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/LightBoxInterface.java
Puzzle Box Core game content Puzzle piece core/src/main/java/com/zenyte/game/content/treasuretrails/interfaces/PuzzleBoxInterface.java
Stash Unit Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/treasuretrails/stash/StashUnitInterface.java
Treasure Trail Statistics Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/treasuretrails/TreasureTrailStatisticsInterface.java
Well Of Goodwill Interface Manager Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/well/WellOfGoodwillInterfaceManager.java
Vault Overlay Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/content/wildernessVault/VaultOverlayInterface.java
Vault Reward Core game content Take item core/src/main/java/com/zenyte/game/content/wildernessVault/VaultRewardInterface.java
Game Core game content Open core/src/main/java/com/zenyte/game/GameInterface.java
Shop Core game content Interact with item, Sell core/src/main/java/com/zenyte/game/model/shop/ShopInterface.java
Shop Inventory Core game content Interact with item, Sell core/src/main/java/com/zenyte/game/model/shop/ShopInventoryInterface.java
Dialogue Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/DialogueInterface.java
Interface Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/Interface.java
Interface Handler Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/InterfaceHandler.java
Interface Position Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/InterfacePosition.java
New Interface Handler Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/NewInterfaceHandler.java
Achievement Diary Tab Core interface registry Diaries, Open core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AchievementDiaryTabInterface.java
Colour Picker Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/ColourPickerInterface.java
Settings Core interface registry Cancel drop-down selection, Category, Close, Drop-down menu, Search, Setting, Show less/more information, Slider core/src/main/java/com/zenyte/game/model/ui/testinterfaces/advancedsettings/SettingsInterface.java
Another Clan Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AnotherClanInterface.java
Autocast Core interface registry Set autocast spell core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AutocastInterface.java
Avas Devices Core interface registry Purchase ava's accumulator, Purchase ava's assembler, Purchase ava's attractor core/src/main/java/com/zenyte/game/model/ui/testinterfaces/AvasDevicesInterface.java
Bank Deposit Core interface registry 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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankDepositInterface.java
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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInterface.java
Bank Inventory Core interface registry Deposit, Deposit Looting Bag Item, Empty Looting Bag, Interact with Item, Wear core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BankInventoryInterface.java
Battlestaff Enchantment Core interface registry Air battlestaff, Dust battlestaff, Earth battlestaff, Fire battlestaff, Lava battlestaff, Mist battlestaff, Mud battlestaff, Smoke battlestaff, Steam battlestaff, Water battlestaff core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BattlestaffEnchantmentInterface.java
Bounty Hunter Store Core interface registry Item layer, Scrollbar core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BountyHunterStoreInterface.java
Bug Report Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/BugReportInterface.java
Character Summary Core interface registry Component layer, Element layer core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CharacterSummaryInterface.java
Chartership Core interface registry Brimhaven, Catherby, Corsair Cove, Mos Le'Harmless, Musa Point, Port Khazard, Port Phasmatys, Port Sarim, Port Tyras, Prifddinas, Shipyard core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChartershipInterface.java
Chat Channel Core interface registry Open, Open clan chat set-up core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatChannelInterface.java
Chat Core interface registry Report button, Set channel filter, Set clan filter, Set game filter, Set group filter, Set private filter core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ChatInterface.java
Clan Chat Set Up Core interface registry Disable/set prefix, Set enter rank, Set kick rank, Set talk rank core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanChatSetUpInterface.java
Clan Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ClanInterface.java
Combat Tab Core interface registry Attack style 1, Attack style 2, Attack style 3, Attack style 4, Auto retaliate, Autocast, Defensive autocast, Special attack core/src/main/java/com/zenyte/game/model/ui/testinterfaces/CombatTabInterface.java
Daily Challenges Overview Core interface registry 0, 1, 2, 3, 4 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DailyChallengesOverviewInterface.java
Decanting Dialogue Core interface registry 1-dose, 2-dose, 3-dose, 4-dose core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DecantingDialogueInterface.java
Drop Viewer Core interface registry Rarity Display, Search, Search button, Select, Select Item, Select NPC, View, View Result core/src/main/java/com/zenyte/game/model/ui/testinterfaces/DropViewerInterface.java
Emote Tab Core interface registry Play emote core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EmoteTabInterface.java
Equipment Inventory Core interface registry Interact with Item core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentInventoryInterface.java
Equipment Stats Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentStatsInterface.java
Equipment Tab Core interface registry Call follower, dizana quiver, Price checker, View, View equipment stats, View items kept on death core/src/main/java/com/zenyte/game/model/ui/testinterfaces/EquipmentTabInterface.java
Experience Lamp Core interface registry Confirm, Text core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceLampInterface.java
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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExperienceTrackerInterface.java
Explorer Ring Core interface registry Charges, Close, High alchemy, Inventory, Low alchemy core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExplorerRingInterface.java
Extra Quest Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ExtraQuestTabInterface.java
Fixed Pane Core interface registry Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FixedPaneInterface.java
Friends List Core interface registry View, View Ignore List core/src/main/java/com/zenyte/game/model/ui/testinterfaces/FriendsListInterface.java
Game Mode Setup Core interface registry Mode, Rate 1, Rate 2, Rate 3, Rate 4, review core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameModeSetupInterface.java
Game Noticeboard Core interface registry Bonus XP, Boss task, Daily Challenges, Day, Discord, Discord row, Drop rate, Drop Viewer, Game Mode, Game Settings, Highscores, Highscores row core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameNoticeboardInterface.java
Game Settings Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GameSettingsInterface.java
Gnome Cocktail Core interface registry Create, select core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeCocktailInterface.java
Gnome Glider Core interface registry Gandius, Kar-Hewo, Lemanto Andra, Lemantolly Undri, Ookookolly Undri, Sindarpos, Ta Quir Priw core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GnomeGliderInterface.java
Gold Jewellery Core interface registry Make all, Make five, Make one, Make ten, Make x core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GoldJewelleryInterface.java
Grand Exchange History Core interface registry Click history entry, Open, Open Offers core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeHistoryInterface.java
Grand Exchange Offers Viewer Core interface registry 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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GrandExchangeOffersViewerInterface.java
Grouping Tab Core interface registry Select, Select minigame, Teleport core/src/main/java/com/zenyte/game/model/ui/testinterfaces/GroupingTabInterface.java
Hairdresser Core interface registry Finish make-over, Select, Select hair/beard colour, Select hair/beard style core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HairdresserInterface.java
House Options Tab Core interface registry 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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/HouseOptionsTabInterface.java
Ignore List Core interface registry View, View Friends List core/src/main/java/com/zenyte/game/model/ui/testinterfaces/IgnoreListInterface.java
Item Retrieval Service Core interface registry Discard-All, Items, Take-All, Take-All/Unlock core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ItemRetrievalServiceInterface.java
Journal Header Tab Core interface registry Achievement Diary, Character Summary, Extra, Game Noticeboard, Quests, Server Events core/src/main/java/com/zenyte/game/model/ui/testinterfaces/JournalHeaderTabInterface.java
Kourend Favour Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/KourendFavourTabInterface.java
Lobby Core interface registry Bank pin, Click here to play, Message of the week core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LobbyInterface.java
Logout Tab Core interface registry Logout, World switcher core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LogoutTabInterface.java
Looting Bag Core interface registry Close, deposit, Store/Examine, Value, Withdraw core/src/main/java/com/zenyte/game/model/ui/testinterfaces/LootingBagInterface.java
Make Over Core interface registry CONFIRM, Finish make-over, Select, Select female, Select male, Select skin colour core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MakeOverInterface.java
Minigame Tab Core interface registry PvM Arena, Select, Select minigame, Teleport core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinigameTabInterface.java
Minimized Minimap Orbs Core interface registry Cure Toxins, Experience Tracker, Prayer, Run, Toggle, Toggle special, View, View World Map core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MinimizedMinimapOrbsInterface.java
Mobile Pane Core interface registry Combat tab, Function button, Logout tab, Select, Show keyboard, Start chatting core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MobilePaneInterface.java
Music Player Core interface registry Auto, Loop, Manual, Play song, Song name core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MusicPlayerInterface.java
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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/MyceliumTeleportInterface.java
Nieve Gravestone Core interface registry Line 1, Line 10, Line 11, Line 12, Line 2, Line 3, Line 4, Line 5, Line 6, Line 7, Line 8, Line 9 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/NieveGravestoneInterface.java
Orbs Core interface registry Cure Toxins, Daily activity, Experience Tracker, Open, Open Store, Prayer, Run, Toggle, Toggle special, View, View World Map core/src/main/java/com/zenyte/game/model/ui/testinterfaces/OrbsInterface.java
Pet Insurance Core interface registry Buy, Buy Reclaims, Confirm, Reclaim Insured Pet core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PetInsuranceInterface.java
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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PresetManagerInterface.java
Price Checker Core interface registry Add all, Interact with item, Item name in search, Item sprite in search, Search, Search for item, Select core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInterface.java
Price Checker Inventory Core interface registry Interact with item core/src/main/java/com/zenyte/game/model/ui/testinterfaces/PriceCheckerInventoryInterface.java
Quest Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuestTabInterface.java
Quick Prayer Core interface registry Confirm, Select, Select prayer core/src/main/java/com/zenyte/game/model/ui/testinterfaces/QuickPrayerInterface.java
Remnant Value Guide Core interface registry Search, Select, Sell core/src/main/java/com/zenyte/game/model/ui/testinterfaces/RemnantValueGuideInterface.java
Resizable Pane Core interface registry Character Summary, Gravestone info, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ResizablePaneInterface.java
Seed Box Core interface registry Empty box, Fill box, Remove core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SeedBoxInterface.java
Server Events Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/ServerEventsInterface.java
Settings Tab Core interface registry 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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SettingsTabInterface.java
Side Panels Resizable Pane Core interface registry Character Summary, Gravestone info, helper_cox, Open, Open Game Noticeboard, Toggle, Toggle prayer filtering, Toggle spell filtering core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SidePanelsResizablePaneInterface.java
Silver Jewellery Core interface registry Make all, Make five, Make one, Make ten, Make x core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SilverJewelleryInterface.java
Skills Tab Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkillsTabInterface.java
Skotizo Core interface registry Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SkotizoInterface.java
Spellbook Core interface registry 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 core/src/main/java/com/zenyte/game/model/ui/testinterfaces/SpellbookInterface.java
Storage Room Core interface registry Deposit, Deposit inventory, Deposit mode, Items core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInterface.java
Storage Room Inventory Core interface registry Items core/src/main/java/com/zenyte/game/model/ui/testinterfaces/StorageRoomInventoryInterface.java
Teleport Core interface registry Back, Category button, Favourite row, Favourite selected, List row, Next page, Previous page, Remove favourite, Search, Select, Teleport core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TeleportInterface.java
Trade Inventory Core interface registry Add Item core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeInventoryInterface.java
Trade Stage1 Core interface registry Accept, Remove Item core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage1Interface.java
Trade Stage2 Core interface registry Accept, Decline core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TradeStage2Interface.java
Tutorial Make Over Core interface registry Title core/src/main/java/com/zenyte/game/model/ui/testinterfaces/TutorialMakeOverInterface.java
Unmorph Core interface registry Unmorph core/src/main/java/com/zenyte/game/model/ui/testinterfaces/UnmorphInterface.java
Wheel Of Fortune Core interface registry Claim, Claim later, Deposit, Deposit to bank, Discard, Examine item, Spin core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WheelOfFortuneInterface.java
World Map Core interface registry Close, Esc Close, Menu core/src/main/java/com/zenyte/game/model/ui/testinterfaces/WorldMapInterface.java
User Core game content Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/game/model/ui/UserInterface.java
Calog Boss Core game content Collection log, General, Navigation, Select, Select task core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossInterface.java
Calog Boss Overview Core game content Navigation, Select core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogBossOverviewInterface.java
Calog Overview Core game content Navigation, Task selection core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogOverviewInterface.java
Calog Reward Core game content Navigation core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogRewardInterface.java
Calog Task Core game content Completed, Monster, Navigation, Tier, Type core/src/main/java/com/zenyte/game/world/entity/player/calog/CALogTaskInterface.java
Collection Log Core game content Claim, Claim Reward, Close, Combat achievements, Search, Search letter core/src/main/java/com/zenyte/game/world/entity/player/collectionlog/CollectionLogInterface.java
Bank Pin Settings Core game content 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 core/src/main/java/com/zenyte/game/world/entity/player/container/impl/bank/BankPinSettingsInterface.java
Interface Switch Handler Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchHandler.java
Interface Switch Plugin Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/handlers/InterfaceSwitchPlugin.java
Bingo Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/BingoInterface.java
Canoe Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/CanoeInterface.java
Combat Buddy Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/CombatBuddyInterface.java
Daily Login Rewards Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/DailyLoginRewardsInterface.java
Daily Task Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/DailyTaskInterface.java
Daily Vote Streak Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/DailyVoteStreakInterface.java
Book Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/BookInterface.java
Dual Item Option Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/DualItemOptionDialogueInterface.java
Furniture Creation Enabled plugin Build furniture core/src/main/java/com/zenyte/plugins/interfaces/dialogue/FurnitureCreationInterface.java
Normal Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/NormalDialogueInterface.java
Option Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/OptionDialogueInterface.java
Orb Of Oculus Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/OrbOfOculusInterface.java
Poll Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/PollInterface.java
Room Creation Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/RoomCreationInterface.java
Skill Dialogue Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/SkillDialogueInterface.java
Teleother Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/TeleotherInterface.java
Wilderness Warning Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/dialogue/WildernessWarningInterface.java
Grand Exchange Offers Enabled plugin buy, sell core/src/main/java/com/zenyte/plugins/interfaces/GrandExchangeOffersInterface.java
House Viewer Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/HouseViewerInterface.java
Item Upgrader Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ItemUpgraderInterface.java
Kill Log Enabled plugin Select core/src/main/java/com/zenyte/plugins/interfaces/KillLogInterface.java
Mystery Box Enabled plugin Close, mbox_supplies, Purchase boxes, Reward text, Spin core/src/main/java/com/zenyte/plugins/interfaces/MysteryBoxInterface.java
Quest Journal Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/QuestJournalInterface.java
Remnant Pet Perk Interface Plugin Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/RemnantPetPerkInterfacePlugin.java
Report Abuse Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ReportAbuseInterface.java
Rune Pouch Enabled plugin boonQuantStored, Deposit, Withdraw core/src/main/java/com/zenyte/plugins/interfaces/RunePouchInterface.java
Scratch Card Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ScratchCardInterface.java
Shop Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/ShopInterface.java
Skill Enabled plugin view core/src/main/java/com/zenyte/plugins/interfaces/SkillInterface.java
Smithing Enabled plugin Quantity 1, Quantity 10, Quantity 5, Quantity All, Quantity X, Smith core/src/main/java/com/zenyte/plugins/interfaces/SmithingInterface.java
Tanning Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/TanningInterface.java
Task Book Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/TaskBookInterface.java
Warrior Guild Catapult Enabled plugin catapultStance core/src/main/java/com/zenyte/plugins/interfaces/WarriorGuildCatapultInterface.java
Well Of Goodwill Enabled plugin Display, navigation or source-controlled interaction core/src/main/java/com/zenyte/plugins/interfaces/WellOfGoodwillInterface.java
Interface Extractor Core game content Graphic, Layer, Line, Model, Rectangle, Text core/src/main/java/com/zenyte/tools/InterfaceExtractor.java
Bhinterface Update Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/content/bountyhunter/BHInterfaceUpdate.kt
Bounty Hunter Update Player Interfaces Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/content/bountyhunter/tasks/BountyHunterUpdatePlayerInterfaces.kt
Contest Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/content/contests/launch/ContestInterface.kt
Middle Man Handle Trade Core game content Logs, Player 1 Offer, Player 2 Offer, Refresh, Status core/src/main/kotlin/com/near_reality/game/content/middleman/trade/handle/MiddleManHandleTradeInterface.kt
Middle Man Trade History Core game content MM Home core/src/main/kotlin/com/near_reality/game/content/middleman/trade/history/MiddleManTradeHistoryInterface.kt
Middle Man Trade Offer Core game content Cancel, Confirm, Minus 1, My Offered Items, player ->
           player.sendInputInt, Plus 1, Set quantity || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInterface.kt
Middle Man Trade Offer Inventory Core game content My Tradeable Inventory core/src/main/kotlin/com/near_reality/game/content/middleman/trade/offer/MiddleManTradeOfferInventoryInterface.kt
Middle Man Trade Request Core game content Cancel, Confirm, Enter name, Minus 1, player ->
           player.sendInputString, Plus 1, Set quantity || core/src/main/kotlin/com/near_reality/game/content/middleman/trade/request/MiddleManTradeRequestInterface.kt
Remnant Pet Perk Core game content Reroll, Upgrade core/src/main/kotlin/com/near_reality/game/content/remnantpets/RemnantPetPerkInterface.kt
Cape Customizer Interface Plugin Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/model/ui/cape_customizer/CapeCustomizerInterfacePlugin.kt
Chat Channel Interface Type Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/ChatChannelInterfaceType.kt
Group Ironman Chat Channel Core game content Clat-channel, Grouping, Iron Group, View, View another clan, Your Clan core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/GroupIronmanChatChannelInterface.kt
Regular Chat Channel Core game content Chat-channel, Grouping, View, View another clan, Your Clan core/src/main/kotlin/com/near_reality/game/model/ui/chat_channel/RegularChatChannelInterface.kt
Credit Package Core game content checkout, go_back, payment_options core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditPackageInterface.kt
Credit Store Core game content buy, buy_credits_button, categories_dropdown, checkout_button, close, middleman_button, tabs core/src/main/kotlin/com/near_reality/game/model/ui/credit_store/CreditStoreInterface.kt
Donation Deals Core game content claim, claim_deal, close_confirm, confirm, confirm_claim core/src/main/kotlin/com/near_reality/game/model/ui/donationdeals/DonationDealsInterface.kt
Vote Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/near_reality/game/model/ui/vote/VoteInterface.kt
Duel Confirmation Core game content Confirm, Decline core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/DuelConfirmationInterface.kt
Staking Duel Core game content Accept, Decline, My Staked Items, Target name core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingDuelInterface.kt
Staking Inventory Core game content My Stakeable Inventory core/src/main/kotlin/com/zenyte/game/content/minigame/duelarena/interfaces/StakingInventoryInterface.kt
Spellbook Open Teleport Core game content Display, navigation or source-controlled interaction core/src/main/kotlin/com/zenyte/game/content/skills/magic/spells/teleports/SpellbookOpenTeleportInterface.kt
Universal Shop Core game content categories_list, search, search_button, stock_list core/src/main/kotlin/com/zenyte/game/content/universalshop/UniversalShopInterface.kt
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 plugins/interfaces/characterdesign/src/main/kotlin/com/near_reality/plugins/interfaces/characterdesign/CharacterDesignerInterface.kt
Deaths Office Retrieval Enabled plugin Claim plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_retrieval.interface.kts
Deaths Office Sacrifice Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_sacrifice_inv.interface.kts
Deaths Office Sacrifice Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/deaths_office_sacrifice.interface.kts
Deaths Office Retrieval Enabled plugin Claim plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeRetrievalInterface.kt
Deaths Office Sacrifice Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeSacrificeInterface.kt
Deaths Office Sacrifice Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/DeathsOfficeSacrificeInvInterface.kt
Gravestone Reclaim Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/gravestone_reclaim.interface.kts
Gravestone Reclaim Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/GravestoneReclaimInterface.kt
Items Kept On Death Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/ItemsKeptOnDeathInterface.kt
Remnant Exch Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/remnant_exch.interface.kts
Remnant Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/remnant_inv.interface.kts
Remnant Exch Enabled plugin Confirm, Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/RemnantExchInterface.kt
Remnant Inv Enabled plugin Select plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/RemnantInvInterface.kt
Univ Shop Inv Enabled plugin Sell plugins/interfaces/death/src/main/kotlin/com/near_reality/plugins/interfaces/death/univ_shop_inv.interface.kts
Slayer Enabled plugin Buy plugins/interfaces/slayer/src/main/kotlin/com/zenyte/game/content/skills/slayer/slayer.interface.kts
Slayer Enabled plugin Buy plugins/interfaces/slayer/src/main/kotlin/com/zenyte/game/content/skills/slayer/SlayerInterface.kt
Teleport Interface Dialog Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/teleports/src/main/kotlin/com/near_reality/plugins/interfaces/teleports/TeleportInterfaceDialog.kt
Teleports Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/teleports/src/main/kotlin/com/near_reality/plugins/interfaces/teleports/TeleportsInterface.kt
World Switcher Interface Plugin Enabled plugin Display, navigation or source-controlled interaction plugins/interfaces/worldswitcher/src/main/kotlin/cloud/rsps/game/plugins/interfaces/WorldSwitcherInterfacePlugin.kt

Custom interfaces with full guides

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

Buying, selling and exchanging

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