Я использую этот код для чтения частных полей в Java, чтобы позже передать их в Maps for bukkit.Может только использовать код фрагмента дважды до получения ошибок
Field FieldF = net.minecraft.server.v1_9_R2.EntityTypes.class.getDeclaredField("F");
FieldF.setAccessible(true);
Object valueF = FieldF.get("valueF");
Однако, когда я делаю это, попробуйте еще раз, я получаю ошибки.
Unhandled exception type NoSuchFieldException
После того, как я добавить бросает декларации throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
я получаю другую ошибку:
После добавить бросками NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
Как я могу использовать первый код без всяких ошибки? Я могу использовать его только два раза, прежде чем я получу ошибку.
Полный код:
package io.github.rookietec9.EnderPlugin.Entities;
import java.lang.reflect.Field;
import java.util.Map;
import org.bukkit.Location;
import org.bukkit.World;
import net.minecraft.server.v1_9_R2.Entity;
public enum CustomBase {
// NAME("Entity name", Entity ID, yourcustomclass.class)
CUSTOM_SKELETON("Skeleton", 54, CustomSkeleton.class); // You can add as
// many as you want.
private CustomBase(String name, int id, Class<? extends Entity> custom) {
addToMaps(custom, name, id);
}
public static void spawnEntity(Entity entity, Location loc) {
Location Loc = new Location((World) entity.getWorld(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(),
loc.getPitch());
spawnEntity(entity, Loc);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private static void addToMaps(Class clazz, String name, int id) {
// Remove the lines with // in front of them if you want to override
// default entities (You'd have to remove the default entity from the
// map first though).
Field FieldF = net.minecraft.server.v1_9_R2.EntityTypes.class.getDeclaredField("F");
FieldF.setAccessible(true);
Object valueF = FieldF.get("valueF");
Field FieldC = net.minecraft.server.v1_9_R2.EntityTypes.class.getDeclaredField("D");
FieldC.setAccessible(true);
Object valueC = FieldC.get("valueC");
Field FieldD = net.minecraft.server.v1_9_R2.EntityTypes.class.getDeclaredField("C");
FieldD.setAccessible(true);
Object valueD = FieldD.get("valueD");
((Map) valueC).put(name, clazz);
((Map) valueD).put(clazz, name);
((Map) valueF).put(clazz, Integer.valueOf(id));
// ((Map)getPrivateField("e",
// net.minecraft.server.v1_7_R4.EntityTypes.class,
// null)).put(Integer.valueOf(id), clazz);
// ((Map)getPrivateField("g",
// net.minecraft.server.v1_7_R4.EntityTypes.class, null)).put(name,
// Integer.valueOf(id));
}
}