public void stringColor(String message, int color) {
getActionSener().sendStringColor(message, color);
}
private Client client;
public Client getClient() {
return client;
}
private ActionSender actionSender = new ActionSender(this);
/**
* Get ActionSender
*
* @return
*/
public ActionSender getActionSender() {
return actionSender;
}
package org.rs2.network;
import org.rs2.Constants;
import org.rs2.PlayerConstants;
import org.rs2.model.container.ItemContainer;
import org.rs2.model.entity.players.Player;
import org.rs2.model.items.Item;
import org.rs2.util.Misc;
public class ActionSender {
/**
* The player
*/
private Player player;
/**
* Creates the action for the player
* @param player
*/
public ActionSender(Player player) {
this.player = player;
}
/**
* Sends a chat interface
* @param chatInterfacId The chat interface id being sent
* @return the instance ActionSender
*/
public ActionSender sendChatInterface(int chatInterfaceId) {
player.getClient().getOutStream().createFrame(164);
player.getClient().getOutStream().writeWordBigEndian_dup(chatInterfaceId);
player.getClient().flushOutStream();
return this;
}
/**
* Sends a message in the chat area
* @param message The message being sent
* @return the instance ActionSender
*/
public ActionSender sendMessage(String message) {
if (player.getClient().getOutStream() != null) {
player.getClient().getOutStream().createFrameVarSize(253);
player.getClient().getOutStream().writeString(message);
player.getClient().getOutStream().endFrameVarSize();
}
return this;
}
/**
* Sends a config id
* @param configId
* @param state
* @return the instance ActionSender
*/
public ActionSender sendConfig(int configId, int state) {
player.getClient().getOutStream().createFrame(36);
player.getClient().getOutStream().writeWordBigEndian(configId);
player.getClient().getOutStream().writeByte(state);
player.getClient().flushOutStream();
return this;
}
/**
* Displays the "Input amount" interface.
*
* @param interfaceId
* @param itemid
* @return the instance ActionSender
*/
public ActionSender sendInputInterface(int interfaceId, int itemId) {
if (itemId > 0 || interfaceId > 0) {
player.setEnterXInterfaceId(interfaceId);
player.setEnterXItemId(itemId);
}
player.getClient().getOutStream().createFrame(27);
player.getClient().flushOutStream();
return this;
}
/**
* Displays a hint icon.
*
* @param entityType 1 for players, 10 for npcs
* @param entityIndex the entity's index
* @return the instance ActionSender
*/
public ActionSender sendHintIcon(int entityType, int entityIndex) {
player.getClient().getOutStream().createFrame(254);
player.getClient().getOutStream().writeByte(entityType);
player.getClient().getOutStream().writeWord(entityIndex);
player.getClient().getOutStream().write3Byte(0);
return this;
}
/**
* Sends the players head model to an interface
* @param interfaceId
* @return the instance ActionSender
*/
public ActionSender sendHeadInterface(int interfaceId) {
player.getClient().getOutStream().createFrame(185);
player.getClient().getOutStream().writeWordBigEndianA(interfaceId);
return this;
}
/**
* Sets an interface's model animation.
* @param interfaceId
* @param animationId
* @return the instance ActionSender
*/
public ActionSender sendInterfaceModelAnimation(int interfaceId, int animationId) {
player.getClient().getOutStream().createFrame(200);
player.getClient().getOutStream().writeWord(interfaceId);
player.getClient().getOutStream().writeWord(animationId);
player.getClient().flushOutStream();
return this;
}
/**
* Sets the offset for drawing of an interface.
* @param xOffset
* @param yOffset
* @param interfaceId
* @return the instance ActionSender
*/
public ActionSender sendInterfaceOffset(int xOffset, int yOffset, int interfaceId) {
player.getClient().getOutStream().createFrame(70);
player.getClient().getOutStream().writeWord(xOffset);
player.getClient().getOutStream().writeWordBigEndian(yOffset);
player.getClient().getOutStream().writeWordBigEndian(interfaceId);
player.getClient().flushOutStream();
return this;
}
/**
* Displays a normal interface.
* @param interfaceId
* @return the instance ActionSender
*/
public ActionSender sendInterface(int interfaceId) {
player.getClient().getOutStream().createFrame(97);
player.getClient().getOutStream().writeWord(interfaceId);
player.getClient().flushOutStream();
return this;
}
/**
* Sends items to an interface
* @param interfaceId
* @param slot
* @param column
* @param amount
* @return the instance ActionSender
*/
public ActionSender sendInventoryItem(int id, int slot, int column, int amount) {
player.getClient().getOutStream().createFrameVarSizeWord(34);
player.getClient().getOutStream().writeWord(column);
player.getClient().getOutStream().writeByte(4);
player.getClient().getOutStream().writeDWord(slot);
player.getClient().getOutStream().writeWord(id+1);
player.getClient().getOutStream().writeByte(amount);
player.getClient().getOutStream().endFrameVarSizeWord();
return this;
}
/**
* Displays an interface over the sidebar area.
* @param interfaceId
* @param overlayId
* @return the instance ActionSender
*/
public ActionSender sendInventoryOverlay(int interfaceId, int overlayId) {
player.getClient().getOutStream().createFrame(24
;
player.getClient().getOutStream().writeWordA(interfaceId);
player.getClient().getOutStream().writeWord(overlayId);
player.getClient().flushOutStream();
return this;
}
/**
* Sends the item container
* @param ItemContainer
* @return the instance ActionSender
*/
public ActionSender sendItemContainer(ItemContainer container) {
if (player.getClient().getOutStream() != null && player.getClient() != null) {
player.getClient().getOutStream().createFrameVarSizeWord(53);
player.getClient().getOutStream().writeWord(container.interfaceId());
player.getClient().getOutStream().writeWord(container.getItems().length);
for (Item item : container.getItems()) {
if (item.getAmount() > 254) {
player.getClient().getOutStream().writeByte(255);
player.getClient().getOutStream().writeDWord_v2(item.getAmount());
} else {
player.getClient().getOutStream().writeByte(item.getAmount());
}
player.getClient().getOutStream().writeWordBigEndianA(item.getId());
}
player.getClient().getOutStream().endFrameVarSizeWord();
player.getClient().flushOutStream();
}
return this;
}
/**
* Displays an item model inside an interface.
* @param interfaceId
* @param zoom
* @param itemId
* @return the instance ActionSender
*/
public ActionSender sendItemOnInterface(int interfaceId, int zoom, int itemId) {
player.getClient().getOutStream().createFrame(246);
player.getClient().getOutStream().writeWordBigEndian(interfaceId);
player.getClient().getOutStream().writeWord(zoom);
player.getClient().getOutStream().writeWord(itemId);
player.getClient().flushOutStream();
return this;
}
/**
* Sends a link
* @param link
* @return the instance ActionSender
*/
public ActionSender sendLink(String link) {
player.getClient().getOutStream().createFrameVarSizeWord(187);
player.getClient().getOutStream().writeString(link);
return this;
}
/**
* Creates an arrow at a specific location<br>
* Positions<br>
* 2 - Middle <br>
* 3 - West<br>
* 4 - East<br>
* 5 - South<br>
* 6 - North<br>
* @param position
* @param x
* @param y
* @param height
* @return the instance ActionSender
*/
public ActionSender sendHintIcon(int position, int x, int y, int height) {
player.getClient().getOutStream().createFrame(254);
player.getClient().getOutStream().writeByte(position);
player.getClient().getOutStream().writeWord(x);
player.getClient().getOutStream().writeWord(y);
player.getClient().getOutStream().writeByte(height);
return this;
}
/**
* Loads a new map region.
* @return the instance ActionSender
*/
public ActionSender loadMapRegion() {
player.getClient().getOutStream().createFrame(73);
player.getClient().getOutStream().writeWordA(player.mapRegionX + 6);
player.getClient().getOutStream().writeWord(player.mapRegionY + 6);
player.getClient().flushOutStream();
return this;
}
/**
* Unknown function<br>
* Used in the PrivateMessaging class<br>
* logIntoPM() and updatePM<br>
* @param username
* @param world
* @return the instance ActionSender
*/
public ActionSender sendMessageServer(long username, int world) {
if (world != 0) {
world += 9;
} else if (!Constants.WORLD_LIST_FIX) {
world += 1;
}
player.getClient().getOutStream().createFrame(50);
player.getClient().getOutStream().writeQWord(username);
player.getClient().getOutStream().writeByte(world);
player.getClient().flushOutStream();
return this;
}
/**
* Sets the mini map's state.<br>
* 0 - Active: Clickable and viewable.<br>
* 1 - Locked: viewable but not clickable<br>
* 2 - Blacked-out: Minimap is replaced with black background<br>
* @param state
* @return the instance ActionSender
*/
public ActionSender sendMinimapState(int state) {
player.getClient().getOutStream().createFrame(99);
player.getClient().getOutStream().writeByte(state);
player.getClient().flushOutStream();
return this;
}
/**
* Shows the player that they are in a multi-combat zone.
* @param icon
* @return the instance ActionSender
*/
public ActionSender sendMultiIcon(int icon) {
player.getClient().outStream.createFrame(61);
player.getClient().outStream.writeByte(icon);
//player.getPA().requestUpdates();
return this;
}
/**
* Place the head of an NPC on an interface
* @param npcId
* @param interfaceId
* @return the instance ActionSender
*/
public ActionSender sendNpcHeadOnInterface(int npcId, int interfaceId) {
player.getClient().getOutStream().createFrame(75);
player.getClient().getOutStream().writeWordBigEndianA(npcId);
player.getClient().getOutStream().writeWordBigEndianA(interfaceId);
player.getClient().flushOutStream();
return this;
}
/**
* Send object
* @param objectId
* @param objectX
* @param objectY
* @param z
* @param face
* @param objectType
* @return the instance ActionSender
*/
public ActionSender sendObject(int objectId, int objectX, int objectY, int z, int face, int objectType) {
if (player.heightLevel != z) {
return this;
}
player.getClient().getOutStream().createFrame(85);
player.getClient().getOutStream().writeByteC(objectY - (player.getMapRegionY() *
);
player.getClient().getOutStream().writeByteC(objectX - (player.getMapRegionX() *
);
player.getClient().getOutStream().createFrame(101);
player.getClient().getOutStream().writeByteC((objectType << 2) + (face & 3));
player.getClient().getOutStream().writeByte(0);
if (objectId != -1) {
player.getClient().getOutStream().createFrame(151);
player.getClient().getOutStream().writeByteS(0);
player.getClient().getOutStream().writeWordBigEndian(objectId);
player.getClient().getOutStream().writeByteS((objectType << 2) + (face & 3));
}
player.getClient().flushOutStream();
return this;
}
/**
* Sends an option<br>
* Unknown parameters
* @param i
* @param l
* @param option
* @return the instance ActionSender
*/
public ActionSender sendOption(int i, int l, String option) {
player.getClient().getOutStream().createFrameVarSize(104);
player.getClient().getOutStream().writeByteC(i);
player.getClient().getOutStream().writeByteA(l);
player.getClient().getOutStream().writeString(option);
player.getClient().getOutStream().endFrameVarSize();
player.getClient().flushOutStream();
return this;
}
/**
* Sends the player's membership status and their<br>
* current index on the server's player list.<br>
* Unused because everyone should be member and<br>
* Have access to member item<br>
* Flags:<br>
* 1 - Members<br>
* 0 - Free
* @param flag
* @return the instance ActionSender
*/
public ActionSender sendPlayerInitialization() {
player.getClient().getOutStream().createFrame(249);
player.getClient().getOutStream().writeByteA(1);
player.getClient().getOutStream().writeWordBigEndianA(player.getIndex());
return this;
}
/**
* Sends a private message to another player.
* @param username
* @param right
* @param message
* @param size
* @return the instance ActionSender
*/
public ActionSender sendPrivateMessage(long username, int rights, byte[] message, int size) {
player.getClient().getOutStream().createFrameVarSize(196);
player.getClient().getOutStream().writeQWord(username);
player.getClient().getOutStream().writeDWord(player.lastChatId++);
player.getClient().getOutStream().writeByte(rights);
player.getClient().getOutStream().writeBytes(message, size, 0);
player.getClient().getOutStream().endFrameVarSize();
player.getClient().flushOutStream();
return this;
}
/**
* Friends list load status.
* @param status
* @return the instance ActionSender
*/
public ActionSender sendPrivateMessageStatus(int status) {
player.getClient().getOutStream().createFrame(221);
player.getClient().getOutStream().writeByte(status);
player.getClient().flushOutStream();
return this;
}
/**
* Removes the current displayed interface
* @retuen the instance ActionSender
*/
public ActionSender sendRemoveInterface() {
player.getClient().getOutStream().createFrame(219);
player.getClient().flushOutStream();
return this;
}
/**
* Resets the camera position
* @return the instance ActionSender
*/
public ActionSender sendResetCamera() {
player.getClient().getOutStream().createFrame(107);
player.getClient().flushOutStream();
return this;
}
/**
* Sends a skill level to the player.getClient().
* @param skill
* @param level
* @param experience
* @return the instance ActionSender
*/
public ActionSender sendSkillLevel(int skill, int level, int experience) {
player.getClient().getOutStream().createFrame(134);
player.getClient().getOutStream().writeByte(skill);
player.getClient().getOutStream().writeDWord_v1(experience);
player.getClient().getOutStream().writeByte(level);
player.getClient().flushOutStream();
return this;
}
/**
* Starts playing a song.
* @param songId
* @return the instance ActionSender
*/
public ActionSender sendSong(int songId) {
player.getClient().getOutStream().createFrame(74);
player.getClient().getOutStream().writeWordBigEndian(songId);
return this;
}
/**
* Outputs a send packet which is built from the data
* params provided towards a connected user client channel.
* @param id The identification number of the sound.
* @param volume The volume amount of the sound (1-100)
* @param delay The delay (0 = immediately 30 = 1/2cycle 60=full cycle) before
* the sound plays.
*/
public ActionSender sendSound(int id, int volume, int delay) {
try {
player.getClient().getOutStream().createFrame(174);
player.getClient().getOutStream().writeWord(id);
player.getClient().getOutStream().writeByte(volume);
player.getClient().getOutStream().writeWord(delay);
} catch (Exception e) {
e.printStackTrace();
}
return this;
}
/**
* Outputs a send packet which is built from the data
* params provided towards a connected user client channel.
* @param id The identification number of the sound.
* @param volume The volume amount of the sound (1-100)
*/
public ActionSender sendSound(int id, int volume) {
sendSound(id, volume, 0);
return this;
}
/**
* Outputs a send packet which is built from the data
* params provided towards a connected user client channel.
* @param id The identification number of the sound.
*/
public ActionSender sendSound(int id) {
sendSound(id, 100);
return this;
}
/**
* Play sounds
* @param SOUNDID : ID
* @param delay : SOUND DELAY
*/
public ActionSender playSound(int soundId, int delay) {
if (PlayerConstants.SOUND) {
if (player.getClient() != null) {
if (PlayerConstants.SOUND_VOLUME >= 0) {
if (Misc.goodDistance(player.getX(), player.getY(), player.getX(), player.getY(), 2)) {
System.out.println("Playing sound "+player.getUsername()+", Id: "+soundId+", Vol: "+PlayerConstants.SOUND_VOLUME);
player.getClient().getOutStream().createFrame(174);
player.getClient().getOutStream().writeWord(soundId);
player.getClient().getOutStream().writeByte(PlayerConstants.SOUND_VOLUME);
player.getClient().getOutStream().writeWord(delay);
}
}
}
}
return this;
}
/**
* Changes the color of interface text
* @param stringId
* @param color
* @return the instance ActionSender
*/
public ActionSender sendStringColor(int stringId, int color) {
player.getClient().getOutStream().createFrame(122);
player.getClient().getOutStream().writeWordBigEndianA(stringId);
player.getClient().getOutStream().writeWordBigEndianA(color);
return this;
}
/**
* Attaches text to an interface
* @param message
* @param stringId
* @return the instance ActionSender
*/
public ActionSender sendString(String message, int stringId) {
if(!player.getClient().checkPacket126Update(message, stringId)) {
int bytesSaved = (message.length() + 4);
return null;
}
if(player.getClient().getOutStream() != null && player.getClient() != null ) {
player.getClient().getOutStream().createFrameVarSizeWord(126);
player.getClient().getOutStream().writeString(message);
player.getClient().getOutStream().writeWordA(stringId);
player.getClient().getOutStream().endFrameVarSizeWord();
player.getClient().flushOutStream();
}
return this;
}
/**
* Draws an interface over the tab area.
* @param tabId
* @return the instance ActionSender
*/
public ActionSender sendInterfaceOverTab(int tabId) {
player.getClient().getOutStream().createFrame(106);
player.getClient().getOutStream().writeByteC(tabId);
player.getClient().flushOutStream();
return this;
}
/**
* Queues a song to be played next.
* @param songId
* @param songDelay
* @return the instance ActionSender
*/
public ActionSender sendQueueSong(int songId, int songDelay) {
player.getClient().getOutStream().createFrame(121);
player.getClient().getOutStream().writeWordBigEndian(songId);
player.getClient().getOutStream().writeWordBigEndian(songDelay);
player.getClient().flushOutStream();
return this;
}
/**
* Sends an interface while walking
* @param interfaceId
* @return the instance ActionSender
*/
public ActionSender sendWalkableInterface(int interfaceId) {
player.getClient().getOutStream().createFrame(20
;
player.getClient().getOutStream().writeWordBigEndian_dup(interfaceId);
player.getClient().flushOutStream();
return this;
}
/**
*
* @param name
* @param message
* @param clan
* @param rights
* @return the instance ActionSender
*/
public ActionSender sendClanMessage(String name, String message, String clan, int rights) {
player.getClient().getOutStream().createFrameVarSizeWord(217);
player.getClient().getOutStream().writeString(name);
player.getClient().getOutStream().writeString(message);
player.getClient().getOutStream().writeString(clan);
player.getClient().getOutStream().writeWord(rights);
player.getClient().getOutStream().endFrameVarSize();
return this;
}
}
Copyright © 2026, NextGenUpdate.
All Rights Reserved.