For those who didn't want to read my tutorial or just cba.
Code:
protected void appendPlayerChatText(Stream str) {
str.writeWordBigEndian(((chatTextColor & 0xFF) << 8)
+ (chatTextEffects & 0xFF));
str.writeByte(playerRights);
str.writeByteC(chatTextSize);
str.writeBytes_reverse(chatText, chatTextSize, 0);
}
private void appendAnimationRequest(Stream str) {
str.writeWordBigEndian(animationRequest);
str.writeByteC(animationWaitCycles);
}
public int focusPointX = -1, focusPointY = -1;
private void appendSetFocusDestination(Stream str) {
str.writeWordBigEndianA(focusPointX);
str.writeWordBigEndian(focusPointY);
faceFocusRequired = true;
updateRequired = true;
}
public boolean mask400updateRequired = false;
private void appendMask400Update(Stream str) {
str.writeByteS(92);
str.writeByteS(92);
str.writeByteS(92);
str.writeByteS(92);
str.writeWordBigEndianA(98);
str.writeWordA(32);
str.writeByteS(59);
}
public boolean hitUpdateRequired = false;
public int hitDiff, hitType;
private void appendHitUpdate(Stream str) {
str.writeByte(hitDiff);
str.writeByteA(hitType); // 0: red 1: blue 2: green 3: orange
str.writeByteC(playerLevel[3]);
str.writeByte(((Client) this).getActionAssistant().getLevelForXP(
playerXP[3]));
}
public boolean gfxUpdateRequired = false;
public int gfxId, gfxDelay;
private void appendGfxUpdate(Stream str) {
str.writeWordBigEndian(gfxId);
str.writeDWord(gfxDelay);
}
public boolean forceChatUpdateRequired = false;
public String chatMessage;
private void appendForceText(Stream str) {
str.writeString(chatMessage);
}
public boolean faceEntityRequired = false;
public int entityId;
public boolean isPlayer = false;
private void appendFaceEntity(Stream str) {
str.writeWordBigEndian(entityId);
}
public boolean secondHitRequired = false;
private void appendSecondHitUpdate(Stream str) {
str.writeByte(50);
str.writeByteS(1);
str.writeByteC(playerLevel[3]);
str.writeByte(((Client) this).getActionAssistant().getLevelForXP(
playerXP[3]));
}
public boolean faceFocusRequired = false;
public void appendPlayerUpdateBlock(Stream str) {
if (!updateRequired && !chatTextUpdateRequired)
return;
int updateMask = 0;
if (mask400updateRequired) updateMask |= 0x400;
if (gfxUpdateRequired) updateMask |= 0x100;
if (animationUpdateRequired) updateMask |= 8;
if (forceChatUpdateRequired) updateMask |= 4;
if (chatTextUpdateRequired) updateMask |= 0x80;
if (faceEntityRequired) updateMask |= 1;
if (appearanceUpdateRequired)updateMask |= 0x10;
if (faceFocusRequired) updateMask |= 2;
if (hitUpdateRequired) updateMask |= 0x20;
if (secondHitRequired) updateMask |= 0x200;
if (updateMask >= 0x100) {
updateMask |= 0x40;
str.writeByte(updateMask & 0xFF);
str.writeByte(updateMask >> 8);
} else {
str.writeByte(updateMask);
}
if (mask400updateRequired) appendMask400Update(str);
if (gfxUpdateRequired) appendGfxUpdate(str);
if (animationUpdateRequired) appendAnimationRequest(str);
if (forceChatUpdateRequired) appendForceText(str);
if (chatTextUpdateRequired) appendPlayerChatText(str);
if (faceEntityRequired) appendFaceEntity(str);
if (appearanceUpdateRequired) appendPlayerAppearance(str);
if (faceFocusRequired) appendSetFocusDestination(str);
if (hitUpdateRequired) appendHitUpdate(str);
if (secondHitRequired) appendSecondHitUpdate(str);
}
public void clearUpdateFlags() {
updateRequired = false;
mask400updateRequired = false;
secondHitRequired = false;
gfxUpdateRequired = false;
chatTextUpdateRequired = false;
appearanceUpdateRequired = false;
animationUpdateRequired = false;
forceChatUpdateRequired = false;
faceFocusRequired = false;
hitUpdateRequired = false;
if((!isPlayer) && entityId != -1) {
entityId = -1;
faceEntityRequired = true;
updateRequired = true;
}
}