53 lines
1.6 KiB
Java
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]);
|
|
}
|
|
}
|
|
}
|