public static void increaseArray(Class<?> clazz, int length, String... args){
Object[] oldArray = null;
for(Field field : clazz.getDeclaredFields()){
try{
for(String s : args){
if(field.getName().equals(s)){
field.setAccessible(true);
if(Modifier.isFinal(field.getModifiers())){
Field modfield = Field.class.getDeclaredField("modifiers");
modfield.setAccessible(true);
modfield.setInt(field, field.getModifiers() & ~Modifier.FINAL);
}
oldArray = (Object[])field.get(null);
Object newArray = Array.newInstance(field.get(null).getClass().getComponentType(), length);
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
field.set(null, newArray);
}
}
}catch(ReflectiveOperationException e){
e.printStackTrace();
}
}
}
And call in your main class:
increaseArray(Potion.class, 256, "potionTypes", "obfName");