Added system to detect annotations and use them

Untested but then again the entire registration system is so...
This commit is contained in:
DarkGuardsman 2013-09-20 08:52:37 -04:00
parent 657e3cddf9
commit 775b153b68
2 changed files with 71 additions and 11 deletions

View file

@ -1,11 +1,12 @@
package dark.core.registration; package dark.core.registration;
import java.io.File; import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -111,8 +112,65 @@ public class ModObjectRegistry
public static void finishCreation(Block block, BlockBuildData data) public static void finishCreation(Block block, BlockBuildData data)
{ {
if (data != null && block != null) if (data != null)
{ {
if (block != null)
{
// Read block class annotions
for (Annotation annotian : block.getClass().getDeclaredAnnotations())
{
if (annotian instanceof TileEntityUser)
{
Class<? extends TileEntity>[] tileEntities = ((TileEntityUser) annotian).tileEntities();
String[] tileEntitiesNames = ((TileEntityUser) annotian).tileEntitiesNames();
if (tileEntities != null && tileEntities.length > 0 && tileEntitiesNames != null && tileEntitiesNames.length > 0)
{
for (int i = 0; i < tileEntities.length && i < tileEntitiesNames.length; i++)
{
GameRegistry.registerTileEntityWithAlternatives(tileEntities[i], tileEntitiesNames[i], "DM" + tileEntitiesNames[i]);
}
}
}
}
// Read threw the block class looking for annotions on fields
for (Method method : block.getClass().getMethods())
{
for (Annotation annotian : method.getDeclaredAnnotations())
{
if (annotian instanceof BlockConfigFile)
{
Type[] types = method.getParameterTypes();
if (types.length == 1 && types[0] instanceof Configuration)
{
Configuration extraBlockConfig = new Configuration(new File(Loader.instance().getConfigDir(), "Dark/blocks/" + block.getUnlocalizedName() + ".cfg"));
extraBlockConfig.load();
try
{
method.setAccessible(true);
method.invoke(null, extraBlockConfig);
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
extraBlockConfig.save();
}
}
}
}
// Load data from BlockBuildData
if (data.tiles != null) if (data.tiles != null)
{ {
for (Pair<String, Class<? extends TileEntity>> par : data.tiles) for (Pair<String, Class<? extends TileEntity>> par : data.tiles)
@ -125,6 +183,7 @@ public class ModObjectRegistry
block.setCreativeTab(data.creativeTab); block.setCreativeTab(data.creativeTab);
} }
} }
}
if (block instanceof IExtraObjectInfo) if (block instanceof IExtraObjectInfo)
{ {
if (((IExtraObjectInfo) block).hasExtraConfigs()) if (((IExtraObjectInfo) block).hasExtraConfigs())
@ -142,6 +201,7 @@ public class ModObjectRegistry
GameRegistry.registerTileEntityWithAlternatives(par.getValue(), par.getKey(), "DM" + par.getKey()); GameRegistry.registerTileEntityWithAlternatives(par.getValue(), par.getKey(), "DM" + par.getKey());
} }
} }
} }
public static void registerBlock(Block block, Class<? extends ItemBlock> itemClass, String name, String modID) public static void registerBlock(Block block, Class<? extends ItemBlock> itemClass, String name, String modID)

View file

@ -16,5 +16,5 @@ public @interface TileEntityUser
/** Array of tile entities names that are used to register the tile entity. Is a parallel array /** Array of tile entities names that are used to register the tile entity. Is a parallel array
* in combo with tileEntities */ * in combo with tileEntities */
Class<? extends TileEntity>[] tileEntitiesNames() default {}; String[] tileEntitiesNames() default {};
} }