-
Notifications
You must be signed in to change notification settings - Fork 497
/
SchematicRegistry.java
68 lines (57 loc) · 1.82 KB
/
SchematicRegistry.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.api.blueprints;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.init.Blocks;
public class SchematicRegistry {
private static class SchematicConstructor {
Class clas;
Object [] params;
}
private static final HashMap <Block, SchematicConstructor> schematicClasses =
new HashMap<Block, SchematicConstructor>();
public static void registerSchematicClass (Block block, Class clas, Object ... params) {
SchematicConstructor c = new SchematicConstructor ();
c.clas = clas;
c.params = params;
schematicClasses.put(block, c);
}
public static SchematicBlock newSchematic (Block block) {
if (block == Blocks.air) {
return null;
}
if (!schematicClasses.containsKey(block)) {
if (block instanceof ITileEntityProvider) {
registerSchematicClass(block, SchematicTile.class);
} else {
registerSchematicClass(block, SchematicBlock.class);
}
}
try {
SchematicConstructor c = schematicClasses.get(block);
SchematicBlock s = (SchematicBlock) c.clas.getConstructors() [0].newInstance(c.params);
s.block = block;
return s;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
return null;
}
}