package com.bergerkiller.bukkit.common.reflection.classes; import java.util.HashMap; import net.minecraft.util.com.mojang.authlib.GameProfile; import org.bukkit.entity.HumanEntity; import com.bergerkiller.bukkit.common.bases.IntVector3; import com.bergerkiller.bukkit.common.conversion.ConversionPairs; import com.bergerkiller.bukkit.common.conversion.type.HandleConverter; import com.bergerkiller.bukkit.common.reflection.ClassTemplate; import com.bergerkiller.bukkit.common.reflection.FieldAccessor; import com.bergerkiller.bukkit.common.reflection.TranslatorFieldAccessor; import com.bergerkiller.bukkit.common.reflection.NMSClassTemplate; import com.bergerkiller.bukkit.common.wrappers.PlayerAbilities; public class EntityHumanRef extends EntityLivingRef { public static final ClassTemplate<?> TEMPLATE = NMSClassTemplate.create("EntityHuman"); public static final TranslatorFieldAccessor<IntVector3> spawnCoord = TEMPLATE.getField("c").translate(ConversionPairs.chunkCoordinates); public static final FieldAccessor<Boolean> spawnForced = TEMPLATE.getField("d"); public static final FieldAccessor<String> spawnWorld = TEMPLATE.getField("spawnWorld"); public static final FieldAccessor<Object> foodData = TEMPLATE.getField("foodData"); public static final FieldAccessor<Float> exp = TEMPLATE.getField("exp"); public static final FieldAccessor<Integer> expLevel = TEMPLATE.getField("expLevel"); public static final FieldAccessor<Integer> expTotal = TEMPLATE.getField("expTotal"); // The below two fields are actually in EntityLiving! public static final FieldAccessor<HashMap<Integer, Object>> mobEffects = TEMPLATE.getField("effects"); public static final FieldAccessor<Boolean> updateEffects = TEMPLATE.getField("updateEffects"); public static final TranslatorFieldAccessor<PlayerAbilities> abilities = TEMPLATE.getField("abilities").translate(ConversionPairs.playerAbilities); public static final FieldAccessor<GameProfile> gameProfile = TEMPLATE.getField("i"); public static boolean canInstaBuild(HumanEntity human) { return abilities.get(HandleConverter.toEntityHandle.convert(human)).canInstantlyBuild(); } }