Code:
package org.apollo.net.release.release31;
import org.apollo.game.event.impl.RegionChangeEvent;
import org.apollo.game.model.Position;
import org.apollo.game.model.World;
import org.apollo.net.codec.game.DataOrder;
import org.apollo.net.codec.game.DataTransformation;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.meta.PacketType;
import org.apollo.net.release.EventEncoder;
public final class RegionChangeEventEncoder extends EventEncoder<RegionChangeEvent> {
@Override
public GamePacket encode(RegionChangeEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(87, PacketType.VARIABLE_SHORT);
Position pos = event.getPosition();
int regionX = pos.getCentralSectorX();
int regionY = pos.getCentralSectorY();
builder.put(DataType.BYTE, DataTransformation.SUBTRACT, pos.getHeight());
builder.put(DataType.SHORT, DataOrder.LITTLE, regionY);
boolean forceSend = true;
if ((((regionX / 8) == 48) || ((regionX / 8) == 49)) && ((regionY / 8) == 48)) {
forceSend = false;
}
if (((regionX / 8) == 48) && ((regionY / 8) == 148)) {
forceSend = false;
}
for (int xCalc = (regionX - 6) / 8; xCalc <= ((regionX + 6) / 8); xCalc++) {
for (int yCalc = (regionY - 6) / 8; yCalc <= ((regionY + 6) / 8); yCalc++) {
int region = (xCalc << 8) + yCalc;
int[] xtea = World.getWorld().getXtea().get(region);
if (forceSend || ((yCalc != 49) && (yCalc != 149) && (yCalc != 147) && (xCalc != 50) && ((xCalc != 49) || (yCalc != 47)))) {
if (xtea != null) {
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, xtea[0]);
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, xtea[1]);
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, xtea[2]);
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, xtea[3]);
} else {
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, 0);
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, 0);
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, 0);
builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, 0);
}
}
}
}
builder.put(DataType.SHORT, DataOrder.LITTLE, pos.getLocalX());
builder.put(DataType.SHORT, pos.getLocalY());
builder.put(DataType.SHORT, DataTransformation.ADD, regionX);
return builder.toGamePacket();
}
}