package com.bergerkiller.bukkit.common.reflection.classes;
import java.util.List;
import java.util.Queue;
import com.bergerkiller.bukkit.common.conversion.ConversionPairs;
import com.bergerkiller.bukkit.common.reflection.ClassTemplate;
import com.bergerkiller.bukkit.common.reflection.FieldAccessor;
import com.bergerkiller.bukkit.common.reflection.MethodAccessor;
import com.bergerkiller.bukkit.common.reflection.NMSClassTemplate;
import com.bergerkiller.bukkit.common.reflection.TranslatorFieldAccessor;
import com.bergerkiller.bukkit.common.wrappers.LongHashMap;
public class PlayerChunkMapRef {
public static final ClassTemplate<?> TEMPLATE = NMSClassTemplate.create("PlayerChunkMap");
public static final FieldAccessor<List<?>> managedPlayers = TEMPLATE.getField("managedPlayers");
public static final FieldAccessor<Integer> radius = TEMPLATE.getField("g");
public static final TranslatorFieldAccessor<LongHashMap<Object>> playerInstances = TEMPLATE.getField("d").translate(ConversionPairs.longHashMap);
public static final FieldAccessor<Queue<?>> dirtyBlockChunks = TEMPLATE.getField("f");
public static final MethodAccessor<Boolean> shouldUnload = TEMPLATE.getMethod("a", int.class, int.class, int.class, int.class, int.class);
public static final MethodAccessor<Object> getChunk = TEMPLATE.getMethod("a", int.class, int.class, boolean.class);
private static final MethodAccessor<Void> flagDirty = TEMPLATE.getMethod("flagDirty", int.class, int.class, int.class);
public static void flagBlockDirty(Object playerChunkMap, int x, int y, int z) {
flagDirty.invoke(playerChunkMap, x, y, z);
}
public static Object getPlayerChunk(Object playerChunkMap, int x, int z) {
return LongHashMapRef.get.invoke(playerInstances.getInternal(playerChunkMap), x, z);
}
}