orebfuscator/java/Orebfuscator/MapChunkBulk.java
2015-01-29 15:22:58 +07:00

53 lines
1.6 KiB
Java

package Orebfuscator;
import java.lang.reflect.Field;
import net.minecraft.network.play.server.S26PacketMapChunkBulk;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.World;
public class MapChunkBulk
{
public static Field fieldChunkX;
public static Field fieldChunkZ;
// 1110011 - íàáîð áëîêîâ (ExtendedBlockStorage.blockLSBArray) ïî âûñîòå (1 - åñòü áëîê, 0 - íåò áëîêà)
public static Field fieldStatusLSB = null;
// 0001110 - íàáîð áëîêîâ (ExtendedBlockStorage.blockMSBArray) ïî âûñîòå (1 - åñòü áëîê, 0 - íåò áëîêà)
public static Field fieldStatusMSB;
// -- ìàññèâ äàííûõ
public static Field fieldData;
public static ChunkInfo info;
public static void parse(World world, S26PacketMapChunkBulk packet)
{
if (fieldStatusLSB == null)
{
fieldChunkX = Fields.getField(packet, "field_149266_a");
fieldChunkZ = Fields.getField(packet, "field_149264_b");
fieldStatusLSB = Fields.getField(packet, "field_149265_c");
fieldStatusMSB = Fields.getField(packet, "field_149262_d");
fieldData = Fields.getField(packet, "field_149260_f");
info = new ChunkInfo();
}
int[] chunkX = (int[]) Fields.getValue(packet, fieldChunkX);
int[] chunkZ = (int[]) Fields.getValue(packet, fieldChunkZ);
int[] statusLSB = (int[]) Fields.getValue(packet, fieldStatusLSB);
int[] statusMSB = (int[]) Fields.getValue(packet, fieldStatusMSB);
byte[][] dataArray = (byte[][]) Fields.getValue(packet, fieldData);
for (int i = 0; i < statusLSB.length; i++)
{
info.parse(world, chunkX[i], chunkZ[i], statusLSB[i], statusMSB[i], dataArray[i]);
}
}
}