diff --git a/.gitignore b/.gitignore
index 72cfcd2b..0d9d16b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@
*.bak
*.swp
*~.nib
+/bin/
diff --git a/.project b/.project
new file mode 100644
index 00000000..88b57729
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ CodeMetropolis
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/README.md b/README.md
index 0eab3678..7bdbb380 100644
--- a/README.md
+++ b/README.md
@@ -4,3 +4,5 @@ CodeMetropolis
See your software as never before.
Official community page: https://plus.google.com/communities/110235162339639686953
+
+BlockModifier-API aviable at: https://github.com/blip24/BlockModifier-API
diff --git a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterLoader.java b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterLoader.java
index 39579620..47cd9b4b 100644
--- a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterLoader.java
+++ b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterLoader.java
@@ -5,6 +5,7 @@
import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
import codemetropolis.toolchain.converter.sonarqube.SonarQubeConverter;
import codemetropolis.toolchain.converter.sourcemeter.GraphConverter;
+import codemetropolis.toolchain.converter.pmd.PmdConverter;
public class ConverterLoader {
@@ -16,6 +17,8 @@ public static CdfConverter load(ConverterType converterType, Map
return new GraphConverter(params);
case SONARQUBE:
return new SonarQubeConverter(params);
+ case PMD:
+ return new PmdConverter(params);
default:
return null;
}
diff --git a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterType.java b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterType.java
index da4a69ad..c23dface 100644
--- a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterType.java
+++ b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/control/ConverterType.java
@@ -2,5 +2,6 @@
public enum ConverterType {
SOURCEMETER,
- SONARQUBE
+ SONARQUBE,
+ PMD
}
diff --git a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/pmd/PmdConverter.java b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/pmd/PmdConverter.java
new file mode 100644
index 00000000..d07e4679
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/pmd/PmdConverter.java
@@ -0,0 +1,143 @@
+package codemetropolis.toolchain.converter.pmd;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import codemetropolis.toolchain.commons.cdf.CdfElement;
+import codemetropolis.toolchain.commons.cdf.CdfTree;
+import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
+import codemetropolis.toolchain.commons.exceptions.CodeMetropolisException;
+import graphlib.AttributeString;
+import graphlib.Edge.EdgeIterator;
+import graphlib.Edge.EdgeType;
+import graphlib.Edge.eDirectionType;
+import codemetropolis.toolchain.commons.cdf.CdfProperty;
+
+public class PmdConverter extends CdfConverter {
+
+ int vCounter = 0;
+
+ public PmdConverter(Map params) {
+ super(params);
+ }
+
+ @Override
+ public CdfTree createElements(String source) throws CodeMetropolisException {
+
+ vCounter = 0;
+ Document doc = loadXml(source);
+ CdfElement root = createElementsRecursively(doc);
+ CdfTree tree = new CdfTree();
+ tree.setRoot(root);
+ return tree;
+ }
+
+ public CdfElement createElementsRecursively(Node root) {
+ CdfElement element = null;
+ element = cdfConvert(root);
+ if (element != null) {
+ addProperties(element, root);
+ NodeList children = root.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ CdfElement e = createElementsRecursively(children.item(i));
+ if (e != null) {
+ element.addChildElement(e);
+ }
+ }
+ }
+ return element;
+
+ }
+
+ public void addProperties(CdfElement elem, Node n) {
+ if (n.hasAttributes()) {
+ NamedNodeMap map = n.getAttributes();
+ for (int i = 0; i < map.getLength(); i++) {
+
+ elem.addProperty(map.item(i).getNodeName(), map.item(i).getNodeValue(),
+ convertType(map.item(i).getNodeValue()));
+ }
+ }
+ }
+
+ public CdfElement cdfConvert(Node n) {
+ CdfElement elem = null;
+ switch (n.getNodeName()) {
+ case "violation":
+ elem = new CdfElement(("violation" + vCounter), "violation");
+ vCounter++;
+ break;
+ case "file":
+ elem = new CdfElement(n.getAttributes().getNamedItem("name").getNodeValue(), "file");
+ break;
+ case "#document":
+ case "pmd":
+ elem = new CdfElement(n.getNodeName(), "other");
+ break;
+ default:
+
+ break;
+ }
+
+ return elem;
+
+ }
+
+ public CdfProperty.Type convertType(String str) {
+
+ if (isNumeric(str))
+ return CdfProperty.Type.INT;
+ else
+ return CdfProperty.Type.STRING;
+
+ }
+
+ public boolean isNumeric(String str) {
+ if (str.chars().allMatch(Character::isDigit))
+ return true;
+ else
+ return false;
+
+ }
+
+ public Document parseXml(String source, DocumentBuilder dBuilder) {
+ File xmlFile = new File(source);
+ Document doc = null;
+ try {
+ doc = dBuilder.parse(xmlFile);
+ } catch (SAXException e) {
+ System.out.println("Parsing xml input has failed");
+ } catch (IOException e) {
+
+ System.out.println("Reading xml input has failed");
+ }
+ return doc;
+ }
+
+ public Document loadXml(String source) {
+ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+ ;
+ DocumentBuilder dBuilder = null;
+
+ try {
+ dBuilder = dbFactory.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ System.out.println("Parse Configuration has failed");
+ }
+ Document doc = parseXml(source, dBuilder);
+ return doc;
+ }
+}
diff --git a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/addPropertiesTest.java b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/addPropertiesTest.java
new file mode 100644
index 00000000..19915492
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/addPropertiesTest.java
@@ -0,0 +1,46 @@
+package codemetropolis.toolchain.converter.test;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+import codemetropolis.toolchain.commons.cdf.CdfElement;
+import codemetropolis.toolchain.converter.pmd.PmdConverter;
+
+public class addPropertiesTest {
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void test() {
+ String filePath = new File("").getAbsolutePath();
+ PmdConverter c=new PmdConverter(null);
+ Document doc=c.loadXml(filePath+"//pom.xml");
+ boolean good=true;
+ Node n=doc;
+ CdfElement elem=new CdfElement();
+ c.addProperties(elem, n);
+ if(!n.hasAttributes()){
+ if(!elem.getProperties().isEmpty())
+ good=false;
+ }
+ else
+ {
+ int n1=elem.getProperties().size();
+ int n2=n.getAttributes().getLength();
+ if(n1!=n2) good=false;
+ }
+ Assert.assertTrue(good);
+
+
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/cdfConvertTest.java b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/cdfConvertTest.java
new file mode 100644
index 00000000..1985b76f
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/cdfConvertTest.java
@@ -0,0 +1,40 @@
+package codemetropolis.toolchain.converter.test;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+import codemetropolis.toolchain.commons.cdf.CdfElement;
+import codemetropolis.toolchain.converter.pmd.PmdConverter;
+
+public class cdfConvertTest {
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void test() {
+ String filePath = new File("").getAbsolutePath();
+ PmdConverter c=new PmdConverter(null);
+ Document doc=c.loadXml(filePath+"//pom.xml");
+ boolean good=true;
+ Node n=doc;
+ CdfElement elem=c.cdfConvert(n);
+
+ if(doc.getNodeName()=="#document"&&!elem.getName().equals("#document")) good=false;
+ if(doc.getNodeName()=="pmd"&&!elem.getName().equals("pmd")) good=false;
+ if(doc.getNodeName()=="violation"&&!elem.getType().equals("violation")) good=false;
+ Assert.assertTrue(good);
+
+ }
+
+
+
+}
diff --git a/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/cdfConvertTest2.java b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/cdfConvertTest2.java
new file mode 100644
index 00000000..10cecc11
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/main/java/codemetropolis/toolchain/converter/test/cdfConvertTest2.java
@@ -0,0 +1,42 @@
+package codemetropolis.toolchain.converter.test;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import codemetropolis.toolchain.commons.cdf.CdfElement;
+import codemetropolis.toolchain.converter.pmd.PmdConverter;
+
+public class cdfConvertTest2 {
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void test() {
+ String filePath = new File("").getAbsolutePath();
+ PmdConverter c=new PmdConverter(null);
+ Document doc=c.loadXml(filePath+"//pom.xml");
+ boolean good=true;
+ Node n=doc;
+ NodeList nl=n.getChildNodes();
+ for(int i=0;i idToName;
- public static final Map idToHumanReadableName;
- public static final Map nameToId;
- public static final Map humanReadableNameToId;
-
- static {
- NonBlock = new BasicBlock((short)-1 );
- idToName = new HashMap();
- idToHumanReadableName = new HashMap();
- nameToId = new HashMap();
- humanReadableNameToId = new HashMap();
+public class BasicBlock{
+
+ public static final BasicBlock NonBlock;
+ protected static final HashMap> idToBlock;
+ protected static final HashMap> nameToBlock;
+ protected static final HashMap humanReadableNameToBlock;
+ protected static final HashMap used;
+
+ static{
+ NonBlock = new BasicBlock((short) -1, 0, "NonBlock", "A non-existant block", (short) 2);
+ idToBlock = new HashMap>();
+ nameToBlock = new HashMap>();
+ humanReadableNameToBlock = new HashMap();
+ used = new HashMap();
InputStream csvStream = RenderingExecutor.class.getClassLoader().getResourceAsStream("blocks.csv");
- try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(csvStream, "UTF-8"))) {
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(csvStream, "UTF-8"))){
String line;
- while ((line = bufferedReader.readLine()) != null) {
+ while ((line = bufferedReader.readLine()) != null){
String[] blockInfo = line.split(",");
- idToName.put(Short.parseShort(blockInfo[0]), blockInfo[1]);
- idToHumanReadableName.put(Short.parseShort(blockInfo[0]), blockInfo[2]);
- nameToId.put(blockInfo[1], Short.parseShort(blockInfo[0]));
+ BasicBlock block = new BasicBlock(
+ Short.parseShort(blockInfo[0]),
+ Short.parseShort(blockInfo[1]),
+ blockInfo[2],
+ blockInfo[3],
+ Short.parseShort(blockInfo[4])
+ );
+
+ add(idToBlock, block.id, block);
+ add(nameToBlock, block.name, block);
+
+ humanReadableNameToBlock.put(block.getHumanReadableName().toLowerCase(), block);
+ // System.out.println(block);
}
- } catch (IOException e) {
+ }
+ catch (IOException e){
e.printStackTrace();
- }
+ }
}
- private short id;
- private int data;
+ private short id;
+ private int data;
+ private String name;
+ private String humanReadableName;
+ private short hazardous;
- public BasicBlock(short id) {
- this(id, 0);
+ public BasicBlock(BasicBlock original){
+ this.id = original.id;
+ this.data = original.data;
+ this.name = original.name;
+ this.humanReadableName = original.humanReadableName;
+ this.hazardous = original.hazardous;
}
-
- public BasicBlock(short id, int data) {
+
+ protected BasicBlock(short id, int data, String name, String humanReadableName, short hazardous){
this.id = id;
this.data = data;
+ this.name = name;
+ this.humanReadableName = humanReadableName;
+ this.hazardous = hazardous;
}
- public BasicBlock(String name) {
- this(nameToId.get(name), 0);
+ protected static void add(HashMap> map, K key, BasicBlock block){
+ /*
+ * This method overwrites previous key-BasicBlock pairs in the HashMap
+ * This is intentional behaviour, since .csv may contain
+ * "simplifications"
+ */
+ HashMap blocks = map.get(key);
+ if (blocks == null){
+ blocks = new HashMap();
+ map.put(key, blocks);
+ }
+ blocks.put(block.data, block);
}
- public BasicBlock(String name, int data) {
- this(nameToId.get(name), data);
+ // Return block
+ // String is the human readable name
+ // This method is used on user-inputed strings and it checks if it's allowed
+ public static BasicBlock userBlock(String name, BasicBlock fallback){
+ BasicBlock block = humanReadableNameToBlock.get(name);
+ if (!used.containsKey(name)){
+ used.put(name, true);
+ if (block == null){
+ System.out.println("ERROR\tBlock \"" + name + "\" was not found!");
+ System.out.println("\tInstead, using \"" + fallback.getHumanReadableName() + "\".");
+ }
+ else{
+ switch (block.getHazardous()){
+ case 0:
+ System.out.println("SUCCESS\tUsing \"" + block.getHumanReadableName() + "\" block.");
+ break;
+ case 1:
+ System.out.println("WARNING\tUsing \"" + block.getHumanReadableName() + "\" DANGEROUS block.");
+ break;
+ default:
+ System.out.println("ILLEGAL\tUse of \"" + block.getHumanReadableName() + "\" is restricted!");
+ System.out.println("\tFalling back to \"" + fallback.getHumanReadableName() + "\".");
+ break;
+ }
+ }
+ }
+ return (block != null && block.getHazardous() != 2) ? block : fallback;
}
- public BasicBlock(BasicBlock original) {
- this.id = original.id;
- this.data = original.data;
+ // Return block
+ // String is the in-game name
+ public static BasicBlock get(String name, int data){
+ BasicBlock ret = nameToBlock.get(name).get(data);
+ if (ret == null)
+ System.out.println("NullPointerException incoming!\nBlock name: " + name + ", data: " + data);
+ return ret;
}
- public String getName() {
- return idToName.get(id);
+ public static BasicBlock get(String name, Colour clr){
+ return get(name, clr.getValue());
}
- public String getHumanReadableName() {
- return idToHumanReadableName.get(id);
+ public static BasicBlock get(String name){
+ return get(name, 0);
}
-
- public short getId() {
+
+ // Return block
+ // Int is the ID
+ public static BasicBlock get(short id, int data){
+ BasicBlock ret = idToBlock.get(id).get(data);
+ if (ret == null)
+ System.out.println("NullPointerException incoming!\nBlock id: " + id + ", data: " + data);
+ return ret;
+ }
+
+ public static BasicBlock get(short id, Colour clr){
+ return get(id, clr.getValue());
+ }
+
+ public static BasicBlock get(short id){
+ return get(id, 0);
+ }
+
+ public short getId(){
return id;
}
-
- public int getData() {
+
+ public int getData(){
return data;
}
-
+
+ public String getName(){
+ return this.name;
+ }
+
+ public String getHumanReadableName(){
+ return this.humanReadableName;
+ }
+
+ public short getHazardous(){
+ return this.hazardous;
+ }
+
@Override
- public int hashCode() {
+ public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + data;
result = prime * result + id;
return result;
}
-
+
@Override
- public boolean equals(Object obj) {
+ public boolean equals(Object obj){
if (this == obj)
return true;
if (obj == null)
@@ -103,10 +192,24 @@ public boolean equals(Object obj) {
return false;
return true;
}
-
+
@Override
- public String toString() {
- return getHumanReadableName() + (data != 0 ? data : "");
+ public String toString(){
+ String str = "Block object: \"" + getHumanReadableName() + "\"";
+ str += " (id: " + id + ", name: " + name + ", data: " + data + ", hazard: ";
+ switch (hazardous){
+ case 0:
+ str += "safe";
+ break;
+ case 1:
+ str += "warn";
+ break;
+ default:
+ str += "forbidden";
+ break;
+ }
+ str += ")";
+ return str;
}
}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Cellar.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Cellar.java
index 1da38d20..cdfa7cf2 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Cellar.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Cellar.java
@@ -22,16 +22,16 @@ public Cellar(Buildable innerBuildable) throws BuildingTypeMismatchException {
new SolidBox(
position.translate( new Point( 1, 1, 1 ) ),
size.translate( new Point( -2, -2, -2 ) ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air" ) } } } ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air" ) } } } ),
Orientation.NearX ) );
primitives.add(
new SolidBox(
position.translate( new Point( center.getX() - 3, size.getY() + 1, center.getZ() - 3 ) ),
new Point( 7, 1, 7 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air" ) } } } ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air" ) } } } ),
Orientation.NearX ) );
}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Floor.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Floor.java
index ced4a538..d7e0e162 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Floor.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Floor.java
@@ -13,6 +13,7 @@
import codemetropolis.toolchain.rendering.model.primitive.SolidBox;
import codemetropolis.toolchain.rendering.model.primitive.WallSign;
import codemetropolis.toolchain.rendering.util.Character;
+import codemetropolis.toolchain.rendering.util.Colour;
import codemetropolis.toolchain.rendering.util.Orientation;
public class Floor extends Building {
@@ -31,16 +32,16 @@ public Floor(Buildable innerBuildable) throws BuildingTypeMismatchException {
}
protected void prepareDoor() {
- BasicBlock _red = new BasicBlock( "minecraft:redstone_block" );
- BasicBlock _lgt = new BasicBlock( "minecraft:lit_redstone_lamp" );
- BasicBlock _rwl = new BasicBlock( "minecraft:wool", 14 );
- BasicBlock _gwl = new BasicBlock( "minecraft:wool", 5 );
- BasicBlock _bwl = new BasicBlock( "minecraft:wool", 3 );
- BasicBlock _ywl = new BasicBlock( "minecraft:wool", 4 );
+ BasicBlock _red = BasicBlock.get( "minecraft:redstone_block" );
+ BasicBlock _lgt = BasicBlock.get( "minecraft:lit_redstone_lamp" );
+ BasicBlock _rwl = BasicBlock.get( "minecraft:wool", Colour.RED);
+ BasicBlock _gwl = BasicBlock.get( "minecraft:wool", Colour.LIME);
+ BasicBlock _bwl = BasicBlock.get( "minecraft:wool", Colour.LIGHT_BLUE);
+ BasicBlock _ywl = BasicBlock.get( "minecraft:wool", Colour.YELLOW);
primitives.add(
new SolidBox(
position.translate( new Point( center.getX() - 1, 0, 0 ) ), new Point( 3, 4, 1 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -56,7 +57,7 @@ protected void prepareDoor() {
primitives.add(
new SolidBox(
position.translate( new Point( center.getX() - 1, 0, size.getZ() - 1 ) ), new Point( 3, 4, 1 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -72,7 +73,7 @@ protected void prepareDoor() {
primitives.add(
new SolidBox(
position.translate( new Point( 0, 0, center.getZ()-1 ) ), new Point( 1, 4, 3 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -88,7 +89,7 @@ protected void prepareDoor() {
primitives.add(
new SolidBox(
position.translate( new Point( size.getX()-1, 0, center.getZ() - 1 ) ), new Point( 1, 4, 3 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -109,9 +110,14 @@ protected void prepareDoor() {
}
protected void prepareStairs() {
- BasicBlock _air = new BasicBlock( (short) 0 );
- BasicBlock _str = new BasicBlock( (short) 1 );
- BasicBlock _cre = new BasicBlock( (short) 85 );
+ BasicBlock _air = BasicBlock.get( (short) 0);
+ BasicBlock _str = BasicBlock.get( (short) 1);
+ BasicBlock _cre = BasicBlock.get( (short) 85);
+
+ // Use the topBlock, since that's (usually) a fence too
+ if(innerBuildable.hasAttribute("external_character"))
+ _cre = Character.getTopBlock(innerBuildable.getAttributeValue("external_character").toLowerCase(), _cre);
+
primitives.add(
new SolidBox(
position.translate( new Point( center.getX() - 2, 0, center.getZ() - 2 ) ),
@@ -176,7 +182,7 @@ protected void prepareStairs() {
{ _air, _air, _air, _air, _air }
}
} ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:fence" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { _cre } } } ),
Orientation.NearY ) );
}
@@ -188,30 +194,28 @@ protected void prepareWalls() {
BasicBlock _sideBlock;
BasicBlock _strcBlock;
- if(innerBuildable.hasAttribute( "character" ))
- {
- Character character = Character.parse(innerBuildable.getAttributeValue("character"));
- _sideBlock = character.getBlock();
- _topFill = new RepeationPattern( new BasicBlock[][][] { { { character.getTopBlock() } } } );
+ if(innerBuildable.hasAttribute( "character" )){
+ String str = innerBuildable.getAttributeValue("character").toLowerCase();
+ _sideBlock = Character.getBlock(str);
} else {
- _sideBlock = new BasicBlock( "minecraft:wool", 2 );
- _topFill = new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:wool", 2 ) } } } );
+ _sideBlock = BasicBlock.get( "minecraft:wool", Colour.MAGENTA);
}
- if(innerBuildable.hasAttribute( "external_character" ))
- {
- Character externalCharacter = Character.parse(innerBuildable.getAttributeValue("external_character"));
- _bottomFill = new RepeationPattern( new BasicBlock[][][] { { { externalCharacter.getBlock() } } } );
- _strcBlock = externalCharacter.getBlock();
- _stroke = new RepeationPattern( new BasicBlock[][][] { { { externalCharacter.getBlock() } } } );
+ if(innerBuildable.hasAttribute( "external_character" )){
+ String str = innerBuildable.getAttributeValue("external_character").toLowerCase();
+ _strcBlock = Character.getBlock(str);
+ _topFill = new RepeationPattern( new BasicBlock[][][] { { { Character.getTopBlock(str) } } } );
+ _bottomFill = new RepeationPattern( new BasicBlock[][][] { { { Character.getBlock(str) } } } );
+ _stroke = new RepeationPattern( new BasicBlock[][][] { { { Character.getBlock(str) } } } );
} else {
- _bottomFill = new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:wool", 2 ) } } } );
- _strcBlock = new BasicBlock( "minecraft:wool", 10 );
- _stroke = new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:wool", 15 ) } } } );
+ _strcBlock = BasicBlock.get( "minecraft:wool", 10 );
+ _topFill = new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:wool", Colour.MAGENTA) } } } );
+ _bottomFill = new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:wool", Colour.MAGENTA ) } } } );
+ _stroke = new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:wool", Colour.BLACK ) } } } );
}
RandomPattern _fallbackPattern = new RandomPattern( new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.NonBlock } } } ) );
- _fallbackPattern.add( new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:fence" ) } } } ), .5 );
+ _fallbackPattern.add( new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:fence" ) } } } ), .5 );
_sideFill = new RandomPattern( _fallbackPattern );
_sideFill.add(
new RepeationPattern(
@@ -317,7 +321,7 @@ private void prepareTorches( ) {
private BasicBlock[] createTorchPattern(int number, int data) {
BasicBlock[] pattern = null;
- BasicBlock torch = new BasicBlock((short) 50, data);
+ BasicBlock torch = BasicBlock.get((short) 50, data);
BasicBlock space = BasicBlock.NonBlock;
switch(number) {
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java
index 88b163b9..c500b7c2 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java
@@ -26,24 +26,24 @@ public Garden(Buildable innerBuildable) throws BuildingTypeMismatchException {
}
private void prepareBase( ) {
- BasicBlock _fnc = new BasicBlock( "minecraft:fence" );
- BasicBlock _sns = new BasicBlock( "minecraft:sandstone" );
+ BasicBlock _fnc = BasicBlock.get( "minecraft:fence" );
+ BasicBlock _sns = BasicBlock.get( "minecraft:sandstone" );
RandomPattern _flowers = new RandomPattern( new RepeationPattern( new BasicBlock[][][]{ { { BasicBlock.NonBlock } } } ) );
- RandomPattern _redOrYellow = new RandomPattern( new RepeationPattern( new BasicBlock[][][]{ { { new BasicBlock( "minecraft:yellow_flower" ) } } } ) );
- _redOrYellow.add(new RepeationPattern( new BasicBlock[][][]{ { { new BasicBlock( "minecraft:red_flower" ) } } } ), 0.5);
+ RandomPattern _redOrYellow = new RandomPattern( new RepeationPattern( new BasicBlock[][][]{ { { BasicBlock.get( "minecraft:yellow_flower" ) } } } ) );
+ _redOrYellow.add(new RepeationPattern( new BasicBlock[][][]{ { { BasicBlock.get( "minecraft:red_flower" ) } } } ), 0.5);
_flowers.add(
_redOrYellow,
innerBuildable.hasAttribute( "flower-ratio" )
? Double.parseDouble( innerBuildable.getAttributeValue("flower-ratio") )
: 0 );
_flowers.add(
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:brown_mushroom" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:brown_mushroom" ) } } } ),
innerBuildable.hasAttribute( "mushroom-ratio" )
? Double.parseDouble( innerBuildable.getAttributeValue("mushroom-ratio") )
: 0 );
_flowers.add(
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:sapling" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:sapling" ) } } } ),
innerBuildable.hasAttribute( "tree-ratio" )
? Double.parseDouble( innerBuildable.getAttributeValue("tree-ratio") )
: 0 );
@@ -52,7 +52,7 @@ private void prepareBase( ) {
position, new Point( size.getX(), 2, size.getZ() ),
new YSplitPattern(
0,
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:grass" ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:grass" ) } } } ),
_flowers ),
new RepeationPattern(
new BasicBlock[][][]
@@ -67,15 +67,15 @@ position, new Point( size.getX(), 2, size.getZ() ),
protected void prepareDoor( )
{
- BasicBlock _fnc = new BasicBlock( "minecraft:fence" );
- BasicBlock _rwl = new BasicBlock( "minecraft:wool", 14 );
- BasicBlock _gwl = new BasicBlock( "minecraft:wool", 5 );
- BasicBlock _bwl = new BasicBlock( "minecraft:wool", 3 );
- BasicBlock _ywl = new BasicBlock( "minecraft:wool", 4 );
+ BasicBlock _fnc = BasicBlock.get( "minecraft:fence" );
+ BasicBlock _rwl = BasicBlock.get( "minecraft:wool", 14 );
+ BasicBlock _gwl = BasicBlock.get( "minecraft:wool", 5 );
+ BasicBlock _bwl = BasicBlock.get( "minecraft:wool", 3 );
+ BasicBlock _ywl = BasicBlock.get( "minecraft:wool", 4 );
primitives.add(
new SolidBox(
position.translate( new Point( center.getX() - 1, 0, 0 ) ), new Point( 3, 4, 1 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -91,7 +91,7 @@ protected void prepareDoor( )
primitives.add(
new SolidBox(
position.translate( new Point( center.getX() - 1, 0, size.getZ() - 1 ) ), new Point( 3, 4, 1 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -107,7 +107,7 @@ protected void prepareDoor( )
primitives.add(
new SolidBox(
position.translate( new Point( 0, 0, center.getZ()-1 ) ), new Point( 1, 4, 3 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
@@ -123,7 +123,7 @@ protected void prepareDoor( )
primitives.add(
new SolidBox(
position.translate( new Point( size.getX()-1, 0, center.getZ() - 1 ) ), new Point( 1, 4, 3 ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:air", 2 ) } } } ),
+ new RepeationPattern( new BasicBlock[][][] { { { BasicBlock.get( "minecraft:air") } } } ),
new RepeationPattern(
new BasicBlock[][][]
{
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Ground.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Ground.java
index b7f24d6f..09be798b 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Ground.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Ground.java
@@ -10,33 +10,39 @@
import codemetropolis.toolchain.rendering.model.primitive.SolidBox;
import codemetropolis.toolchain.rendering.util.Orientation;
-public class Ground extends Building {
-
- public Ground(Buildable innerBuildable) throws BuildingTypeMismatchException {
+public class Ground extends Building{
+
+ public Ground(Buildable innerBuildable) throws BuildingTypeMismatchException{
super(innerBuildable);
-
- if ( innerBuildable.getType() != Type.GROUND )
+
+ if (innerBuildable.getType() != Type.GROUND)
throw new BuildingTypeMismatchException(innerBuildable.getType(), getClass());
-
+
prepareBase();
prepareSigns();
}
- private void prepareBase( ) {
- primitives.add(
- new SolidBox(
- position,
- new Point( size.getX(), 1, size.getZ() ),
- new RepeationPattern( new BasicBlock[][][]{ { { new BasicBlock( "minecraft:stone" ) } } } ),
- new RepeationPattern( new BasicBlock[][][] { { { new BasicBlock( "minecraft:stonebrick" ) } } } ),
- Orientation.NearX ) );
+ private void prepareBase(){
+ primitives.add(new SolidBox(position, new Point(size.getX(), 1, size.getZ()),
+ new RepeationPattern(new BasicBlock[][][] { { { BasicBlock.get("minecraft:stone") } } }),
+ new RepeationPattern(new BasicBlock[][][] { { { BasicBlock.get("minecraft:stone_slab", 5) } } }),
+ Orientation.NearX)
+ );
}
- private void prepareSigns( ) {
- primitives.add(new SignPost(position.getX(), position.getY() + 1, position.getZ(), SignPost.Orientation.NORTHWEST, innerBuildable.getName()));
- primitives.add(new SignPost(position.getX() + size.getX() - 1, position.getY() + 1, position.getZ(), SignPost.Orientation.NORTHEAST, innerBuildable.getName()));
- primitives.add(new SignPost(position.getX(), position.getY() + 1, position.getZ() + size.getZ() - 1, SignPost.Orientation.SOUTHWEST, innerBuildable.getName()));
- primitives.add(new SignPost(position.getX() + size.getX() - 1, position.getY() + 1, position.getZ() + size.getZ() - 1, SignPost.Orientation.SOUTHEAST, innerBuildable.getName()));
+ private void prepareSigns(){
+ primitives.add(new SignPost(position.getX() + 1, position.getY() + 1, position.getZ() + 1,
+ SignPost.Orientation.NORTHWEST, innerBuildable.getName())
+ );
+ primitives.add(new SignPost(position.getX() + size.getX() - 2, position.getY() + 1, position.getZ() + 1,
+ SignPost.Orientation.NORTHEAST, innerBuildable.getName())
+ );
+ primitives.add(new SignPost(position.getX() + 1, position.getY() + 1, position.getZ() + size.getZ() - 2,
+ SignPost.Orientation.SOUTHWEST, innerBuildable.getName())
+ );
+ primitives.add(new SignPost(position.getX() + size.getX() - 2, position.getY() + 1, position.getZ() + size.getZ() - 2,
+ SignPost.Orientation.SOUTHEAST, innerBuildable.getName())
+ );
}
-
+
}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Banner.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Banner.java
index f2a1dd13..aac50fc5 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Banner.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Banner.java
@@ -41,7 +41,7 @@ public Banner(int x, int y, int z, Orientation orientation, String color) {
@Override
public int toCSVFile(File directory) {
- new Boxel(new BasicBlock((short) 176, orientation.getValue()), position, color).toCSVFile(directory);
+ new Boxel(BasicBlock.get((short) 176, orientation.getValue()), position, color).toCSVFile(directory);
return 1;
}
@Override
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Boxel.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Boxel.java
index 931fff2c..c7cb0842 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Boxel.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Boxel.java
@@ -48,14 +48,14 @@ public void render(World world) {
public String toCSV() {
//if(block == BasicBlock.NonBlock) return null;
- if(block.getId() == -1) return null;
+ if (block.getId() == -1) return null;
return String.format("%d;%d;%d;%d;%d;%s", block.getId(), block.getData(), position.getX(), position.getY(), position.getZ(), (info == null || info.equals("") ? "NULL" : info));
}
public static Boxel parseCSV(String csv) {
String[] parts = csv.split(";");
return new Boxel(
- new BasicBlock(
+ BasicBlock.get(
Short.parseShort(parts[0]),
Integer.parseInt(parts[1])),
new Point(
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Door.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Door.java
index ca210c5f..9a96ee9a 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Door.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Door.java
@@ -35,8 +35,8 @@ public Door(int x, int y, int z, Orientation orientation) {
@Override
public int toCSVFile(File directory) {
- new Boxel(new BasicBlock((short) 64, orientation.getValue()), position).toCSVFile(directory);
- new Boxel(new BasicBlock((short) 64, 8), new Point(position.getX(), position.getY() + 1, position.getZ())).toCSVFile(directory);
+ new Boxel(BasicBlock.get((short) 64, orientation.getValue()), position).toCSVFile(directory);
+ new Boxel(BasicBlock.get((short) 64, 8), new Point(position.getX(), position.getY() + 1, position.getZ())).toCSVFile(directory);
return 2;
}
@Override
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/SignPost.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/SignPost.java
index ad90f5e1..a7644aa7 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/SignPost.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/SignPost.java
@@ -41,7 +41,7 @@ public SignPost(int x, int y, int z, Orientation orientation, String text) {
@Override
public int toCSVFile(File directory) {
- new Boxel(new BasicBlock((short) 63, orientation.getValue()), position, text).toCSVFile(directory);
+ new Boxel(BasicBlock.get((short) 63, orientation.getValue()), position, text).toCSVFile(directory);
return 1;
}
@Override
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/WallSign.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/WallSign.java
index 4c9b8921..259478e2 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/WallSign.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/WallSign.java
@@ -41,7 +41,7 @@ public WallSign(Point position, Orientation orientation, String text) {
@Override
public int toCSVFile(File directory) {
- new Boxel(new BasicBlock((short) 68, orientation.getValue()), position, text).toCSVFile(directory);
+ new Boxel(BasicBlock.get((short) 68, orientation.getValue()), position, text).toCSVFile(directory);
return 1;
}
@Override
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Character.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Character.java
index 6dab99fd..7a097e87 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Character.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Character.java
@@ -1,74 +1,52 @@
package codemetropolis.toolchain.rendering.util;
import codemetropolis.toolchain.rendering.model.BasicBlock;
+import codemetropolis.toolchain.rendering.util.Colour;
-public enum Character {
+public abstract class Character{
+ protected static BasicBlock _fallback;
+ protected static BasicBlock _topFallback;
- STONE,
- COBBLESTONE,
- MOSSY_STONE,
- SANDSTONE,
- OBSIDIAN,
- WOOD,
- DARK_WOOD,
- BIRCH_WOOD,
- PLANKS,
- DARK_PLANKS,
- METAL,
- DIRT,
- SAND,
- RED_SAND,
- BRICK,
- STONE_BRICK,
- DARK_BRICK,
- GLASS,
- GOLD,
- DIAMOND,
- UNDEFINED;
+ static{
+ _fallback = BasicBlock.get("minecraft:wool", Colour.MAGENTA.getValue());
+ _topFallback = BasicBlock.get("minecraft:fence", 0);
+ }
- public static Character parse(String str) {
- for(Character c : Character.values()) {
- if(c.toString().equalsIgnoreCase(str)) return c;
- }
- return Character.UNDEFINED;
+ public static BasicBlock getBlock(String str, BasicBlock fallback){
+ return BasicBlock.userBlock(str, fallback);
}
- public BasicBlock getBlock() {
- switch(this) {
- case STONE: return new BasicBlock( "minecraft:stone" );
- case COBBLESTONE: return new BasicBlock( "minecraft:cobblestone" );
- case MOSSY_STONE: return new BasicBlock( "minecraft:mossy_cobblestone" );
- case SANDSTONE: return new BasicBlock( "minecraft:sandstone" );
- case OBSIDIAN: return new BasicBlock( "minecraft:obsidian" );
- case WOOD: return new BasicBlock( "minecraft:log" );
- case DARK_WOOD: return new BasicBlock( "minecraft:log", 1 );
- case BIRCH_WOOD: return new BasicBlock( "minecraft:log", 2 );
- case PLANKS: return new BasicBlock( "minecraft:planks" );
- case DARK_PLANKS: return new BasicBlock( "minecraft:planks", 5 );
- case METAL: return new BasicBlock( "minecraft:iron_block" );
- case DIRT: return new BasicBlock( "minecraft:dirt" );
- case SAND: return new BasicBlock( "minecraft:sandstone" , 2 );
- case RED_SAND: return new BasicBlock( "minecraft:sand" );
- case BRICK: return new BasicBlock( "minecraft:double_stone_slab", 4 );
- case STONE_BRICK: return new BasicBlock( "minecraft:double_stone_slab", 5 );
- case DARK_BRICK: return new BasicBlock( "minecraft:double_stone_slab", 6 );
- case GLASS: return new BasicBlock( "minecraft:glass" );
- case GOLD: return new BasicBlock( "minecraft:gold_block" );
- case DIAMOND: return new BasicBlock( "minecraft:diamond_block" );
- case UNDEFINED: return new BasicBlock( "minecraft:wool", 2 );
- default: return null;
- }
+ public static BasicBlock getBlock(String str){
+ return getBlock(str, _fallback);
+ }
+
+ public static BasicBlock getTopBlock(String str){
+ return getTopBlock(str, _topFallback);
}
- public BasicBlock getTopBlock() {
- switch(this) {
- case WOOD:
- case DARK_WOOD:
- case BIRCH_WOOD:
- case PLANKS:
- case DARK_PLANKS:
- return new BasicBlock( "minecraft:fence" );
- default: return getBlock();
+ public static BasicBlock getTopBlock(String str, BasicBlock fallback){
+ BasicBlock block = BasicBlock.userBlock(str, fallback);
+ if (block != null){
+ switch (block.getName()){
+ // TODO Add more fences in the .csv
+ case "minecraft:planks": // 5
+ case "minecraft:log": // 17
+ case "minecraft:log2": // 162
+ return BasicBlock.get("minecraft:fence");
+ case "minecraft:stone": // 1
+ case "minecraft:double_stone_slab": // 43
+ case "minecraft:stone_slab": // 44
+ return BasicBlock.get("minecraft:cobblestone_wall", 0); // Regular cobblestone wall
+ case "minecraft:mossy_cobblestone": // 48
+ return BasicBlock.get("minecraft:cobblestone_wall", 1); // Mossy cobblestone wall
+ case "minecraft:nether_brick": // 112
+ return BasicBlock.get("minecraft:nether_brick_fence");
+ case "minecraft:stonebrick": // 98
+ if (block.getData() == 1)
+ return BasicBlock.get("minecraft:cobblestone_wall", 1); // Mossy cobblestone wall
+ return BasicBlock.get("minecraft:cobblestone_wall", 0); // Regular cobblestone wall
+ }
}
+ return fallback;
}
}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Colour.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Colour.java
new file mode 100644
index 00000000..6c218ab6
--- /dev/null
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/util/Colour.java
@@ -0,0 +1,24 @@
+package codemetropolis.toolchain.rendering.util;
+
+public enum Colour {
+ WHITE,
+ ORANGE,
+ MAGENTA,
+ LIGHT_BLUE,
+ YELLOW,
+ LIME,
+ PINK,
+ GRAY,
+ LIGHT_GRAY,
+ CYAN,
+ PURPLE,
+ BLUE,
+ BROWN,
+ GREEN,
+ RED,
+ BLACK;
+
+ public int getValue(){
+ return this.ordinal();
+ }
+}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/resources/blocks.csv b/sources/codemetropolis-toolchain-rendering/src/main/resources/blocks.csv
index b8379969..06ec4867 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/resources/blocks.csv
+++ b/sources/codemetropolis-toolchain-rendering/src/main/resources/blocks.csv
@@ -1,171 +1,429 @@
-0,minecraft:air,Air
-1,minecraft:stone,Stone
-2,minecraft:grass,Grass Block
-3,minecraft:dirt,Dirt D B
-4,minecraft:cobblestone,Cobblestone
-5,minecraft:planks,Wood Planks D B
-6,minecraft:sapling,Saplings D B
-7,minecraft:bedrock,Bedrock
-8,minecraft:flowing_water,Water D
-9,minecraft:water,Stationary water D
-10,minecraft:flowing_lava,Lava D
-11,minecraft:lava,Stationary lava D
-12,minecraft:sand,Sand D B
-13,minecraft:gravel,Gravel
-14,minecraft:gold_ore,Gold Ore
-15,minecraft:iron_ore,Iron Ore
-16,minecraft:coal_ore,Coal Ore
-17,minecraft:log,Wood D B
-18,minecraft:leaves,Leaves D B
-19,minecraft:sponge,Sponge
-20,minecraft:glass,Glass
-21,minecraft:lapis_ore,Lapis Lazuli Ore
-22,minecraft:lapis_block,Lapis Lazuli Block
-23,minecraft:dispenser,Dispenser D T
-24,minecraft:sandstone,Sandstone D B
-25,minecraft:noteblock,Note Block T
-26,minecraft:bed,Bed D I
-27,minecraft:golden_rail,Powered Rail D
-28,minecraft:detector_rail,Detector Rail D
-29,minecraft:sticky_piston,Sticky Piston D
-30,minecraft:web,Cobweb
-31,minecraft:tallgrass,Grass D B
-32,minecraft:deadbush,Dead Bush
-33,minecraft:piston,Piston D
-34,minecraft:piston_head,Piston Extension D
-35,minecraft:wool,Wool D B
-36,minecraft:piston_extension,Block moved by Piston T
-37,minecraft:yellow_flower,Dandelion
-38,minecraft:red_flower,Poppy D B
-39,minecraft:brown_mushroom,Brown Mushroom
-40,minecraft:red_mushroom,Red Mushroom
-41,minecraft:gold_block,Block of Gold
-42,minecraft:iron_block,Block of Iron
-43,minecraft:double_stone_slab,Double Stone Slab D B
-44,minecraft:stone_slab,Stone Slab D B
-45,minecraft:brick_block,Bricks
-46,minecraft:tnt,TNT
-47,minecraft:bookshelf,Bookshelf
-48,minecraft:mossy_cobblestone,Moss Stone
-49,minecraft:obsidian,Obsidian
-50,minecraft:torch,Torch D
-51,minecraft:fire,Fire D
-52,minecraft:mob_spawner,Monster Spawner T
-53,minecraft:oak_stairs,Oak Wood Stairs D
-54,minecraft:chest,Chest D T
-55,minecraft:redstone_wire,Redstone Wire D I
-56,minecraft:diamond_ore,Diamond Ore
-57,minecraft:diamond_block,Block of Diamond
-58,minecraft:crafting_table,Crafting Table
-59,minecraft:wheat,Wheat D
-60,minecraft:farmland,Farmland D
-61,minecraft:furnace,Furnace D T
-62,minecraft:lit_furnace,Burning Furnace D T
-63,minecraft:standing_sign,Sign Post D I T
-64,minecraft:wooden_door,Wooden Door D I
-65,minecraft:ladder,Ladders D
-66,minecraft:rail,Rail D
-67,minecraft:stone_stairs,Cobblestone Stairs D
-68,minecraft:wall_sign,Wall Sign D T
-69,minecraft:lever,Lever D
-70,minecraft:stone_pressure_plate,Stone Pressure Plate D
-71,minecraft:iron_door,Iron Door D I
-72,minecraft:wooden_pressure_plate,Wooden Pressure Plate D
-73,minecraft:redstone_ore,Redstone Ore
-74,minecraft:lit_redstone_ore,Glowing Redstone Ore
-75,minecraft:unlit_redstone_torch,Redstone Torch (inactive) D
-76,minecraft:redstone_torch,Redstone Torch (active) D
-77,minecraft:stone_button,Stone Button D
-78,minecraft:snow_layer,Snow D
-79,minecraft:ice,Ice
-80,minecraft:snow,Snow
-81,minecraft:cactus,Cactus D
-82,minecraft:clay,Clay
-83,minecraft:reeds,Sugar Cane D I
-84,minecraft:jukebox,Jukebox D T
-85,minecraft:fence,Fence
-86,minecraft:pumpkin,Pumpkin D
-87,minecraft:netherrack,Netherrack
-88,minecraft:soul_sand,Soul Sand
-89,minecraft:glowstone,Glowstone
-90,minecraft:portal,Nether Portal
-91,minecraft:lit_pumpkin,Jack 'o' Lantern D
-92,minecraft:cake,Cake Block D I
-93,minecraft:unpowered_repeater,Redstone Repeater (inactive) D I
-94,minecraft:powered_repeater,Redstone Repeater (active) D I
-95,minecraft:stained_glass,Stained Glass
-96,minecraft:trapdoor,Trapdoor D
-97,minecraft:monster_egg,Monster Egg D B
-98,minecraft:stonebrick,Stone Bricks D B
-99,minecraft:brown_mushroom_block,Huge Brown Mushroom D
-100,minecraft:red_mushroom_block,Huge Red Mushroom D
-101,minecraft:iron_bars,Iron Bars
-102,minecraft:glass_pane,Glass Pane
-103,minecraft:melon_block,Melon
-104,minecraft:pumpkin_stem,Pumpkin Stem D
-105,minecraft:melon_stem,Melon Stem D
-106,minecraft:vine,Vines D
-107,minecraft:fence_gate,Fence Gate D
-108,minecraft:brick_stairs,Brick Stairs D
-109,minecraft:stone_brick_stairs,Stone Brick Stairs D
-110,minecraft:mycelium,Mycelium
-111,minecraft:waterlily,Lily Pad
-112,minecraft:nether_brick,Nether Brick
-113,minecraft:nether_brick_fence,Nether Brick Fence
-114,minecraft:nether_brick_stairs,Nether Brick Stairs D
-115,minecraft:nether_wart,Nether Wart D I
-116,minecraft:enchanting_table,Enchantment Table T
-117,minecraft:brewing_stand,Brewing Stand D T I
-118,minecraft:cauldron,Cauldron D I
-119,minecraft:end_portal,End Portal T
-120,minecraft:end_portal_frame,End Portal Block D
-121,minecraft:end_stone,End Stone
-122,minecraft:dragon_egg,Dragon Egg
-123,minecraft:redstone_lamp,Redstone Lamp (inactive)
-124,minecraft:lit_redstone_lamp,Redstone Lamp (active)
-125,minecraft:double_wooden_slab,Wooden Double Slab D B
-126,minecraft:wooden_slab,Wooden Slab D B
-127,minecraft:cocoa,Cocoa D I
-128,minecraft:sandstone_stairs,Sandstone Stairs D
-129,minecraft:emerald_ore,Emerald Ore
-130,minecraft:ender_chest,Ender Chest D T
-131,minecraft:tripwire_hook,Tripwire Hook D
-132,minecraft:tripwire,Tripwire D I
-133,minecraft:emerald_block,Block of Emerald
-134,minecraft:spruce_stairs,Spruce Wood Stairs D
-135,minecraft:birch_stairs,Birch Wood Stairs D
-136,minecraft:jungle_stairs,Jungle Wood Stairs D
-137,minecraft:command_block,Command Block T
-138,minecraft:beacon,Beacon T
-139,minecraft:cobblestone_wall,Cobblestone Wall D B
-140,minecraft:flower_pot,Flower Pot D I
-141,minecraft:carrots,Carrots D I
-142,minecraft:potatoes,Potatoes D I
-143,minecraft:wooden_button,Wooden Button D
-144,minecraft:skull,Mob Head D T I
-145,minecraft:anvil,Anvil D B
-146,minecraft:trapped_chest,Trapped Chest D T
-147,minecraft:light_weighted_pressure_plate,Weighted Pressure Plate (Light) D
-148,minecraft:heavy_weighted_pressure_plate,Weighted Pressure Plate (Heavy) D
-149,minecraft:unpowered_comparator,Redstone Comparator (inactive & active) D I
-150,,(unused)
-151,minecraft:daylight_detector,Daylight Sensor T
-152,minecraft:redstone_block,Block of Redstone
-153,minecraft:quartz_ore,Nether Quartz Ore
-154,minecraft:hopper,Hopper D T
-155,minecraft:quartz_block,Block of Quartz D B
-156,minecraft:quartz_stairs,Quartz Stairs D
-157,minecraft:activator_rail,Activator Rail D
-158,minecraft:dropper,Dropper D T
-159,minecraft:stained_hardened_clay,Stained Clay D B
-160,minecraft:stained_glass_pane,Stained Glass Pane D
-161,minecraft:leaves2,Leaves (Acacia/Dark Oak) D B
-162,minecraft:log2,Wood (Acacia/Dark Oak) D B
-163,minecraft:acacia_stairs,Acacia Wood Stairs D
-164,minecraft:dark_oak_stairs,Dark Oak Wood Stairs D
-170,minecraft:hay_block,Hay Block D
-171,minecraft:carpet,Carpet D B
-172,minecraft:hardened_clay,Hardened Clay
-173,minecraft:coal_block,Block of Coal
-174,minecraft:packed_ice,Packed Ice
-175,minecraft:double_plant,Large Flowers D B
\ No newline at end of file
+0,0,minecraft:air,Air,2
+1,0,minecraft:stone,Stone,0
+1,1,minecraft:stone,Granite,0
+1,2,minecraft:stone,Polished Granite,0
+1,3,minecraft:stone,Diorite,0
+1,4,minecraft:stone,Polished Diorite,0
+1,5,minecraft:stone,Andesite,0
+1,6,minecraft:stone,Polished Andesite,0
+2,0,minecraft:grass,Grass Block,0
+3,0,minecraft:dirt,Dirt,0
+3,1,minecraft:dirt,Coarse Dirt,0
+3,2,minecraft:dirt,Podzol,0
+4,0,minecraft:cobblestone,Cobblestone,0
+5,0,minecraft:planks,Planks,0
+5,0,minecraft:planks,Oak Planks,0
+5,1,minecraft:planks,Spruce Planks,0
+5,2,minecraft:planks,Birch Planks,0
+5,3,minecraft:planks,Jungle Planks,0
+5,4,minecraft:planks,Acacia Planks,0
+5,5,minecraft:planks,Dark Oak Planks,0
+6,0,minecraft:sapling,Saplings,0
+6,0,minecraft:sapling,Oak Sapling,0
+6,1,minecraft:sapling,Spruce Sapling,0
+6,2,minecraft:sapling,Birch Sapling,0
+6,3,minecraft:sapling,Jungle Sapling,0
+6,4,minecraft:sapling,Acacia Sapling,0
+6,5,minecraft:sapling,Dark Oak Sapling,0
+7,0,minecraft:bedrock,Bedrock,1
+8,0,minecraft:flowing_water,Flowing Water,2
+9,0,minecraft:water,Water,1
+10,0,minecraft:flowing_lava,Flowing Lava,2
+11,0,minecraft:lava,Lava,1
+12,0,minecraft:sand,Sand,0
+12,1,minecraft:sand,Red Sand,0
+13,0,minecraft:gravel,Gravel,0
+14,0,minecraft:gold_ore,Gold Ore,0
+15,0,minecraft:iron_ore,Iron Ore,0
+16,0,minecraft:coal_ore,Coal Ore,0
+17,0,minecraft:log,Wood,0
+17,0,minecraft:log,Oak Wood,0
+17,1,minecraft:log,Spruce Wood,0
+17,2,minecraft:log,Birch Wood,0
+17,3,minecraft:log,Jungle Wood,0
+18,0,minecraft:leaves,Leaves,0
+18,0,minecraft:leaves,Oak Leaves,0
+18,1,minecraft:leaves,Spruce Leaves,0
+18,2,minecraft:leaves,Birch Leaves,0
+18,3,minecraft:leaves,Jungle Leaves,0
+19,0,minecraft:sponge,Sponge,0
+19,1,minecraft:sponge,We Sponge,0
+20,0,minecraft:glass,Glass,0
+21,0,minecraft:lapis_ore,Lapis Lazuli Ore,0
+22,0,minecraft:lapis_block,Lapis Lazuli Block,0
+23,0,minecraft:dispenser,Dispenser,2
+24,0,minecraft:sandstone,Sandstone,0
+24,1,minecraft:sandstone,Chiseled Sandstone,0
+24,2,minecraft:sandstone,Smooth Sandstone,0
+25,0,minecraft:noteblock,Note Block,2
+26,0,minecraft:bed,Bed,2
+27,0,minecraft:golden_rail,Powered Rail,2
+28,0,minecraft:detector_rail,Detector Rail,2
+29,0,minecraft:sticky_piston,Sticky Piston,2
+30,0,minecraft:web,Cobweb,0
+31,0,minecraft:tallgrass,Grass,0
+31,0,minecraft:tallgrass,Shrub,0
+31,1,minecraft:tallgrass,Tall Grass,0
+31,2,minecraft:tallgrass,Fern,0
+32,0,minecraft:deadbush,Dead Bush,0
+33,0,minecraft:piston,Piston,2
+34,0,minecraft:piston_head,Piston Extension,2
+35,0,minecraft:wool,Wool,0
+35,0,minecraft:wool,White Wool,0
+35,1,minecraft:wool,Orange Wool,0
+35,2,minecraft:wool,Magenta Wool,0
+35,3,minecraft:wool,Light Blue Wool,0
+35,4,minecraft:wool,Yellow Wool,0
+35,5,minecraft:wool,Lime Wool,0
+35,6,minecraft:wool,Pink Wool,0
+35,7,minecraft:wool,Gray Wool,0
+35,8,minecraft:wool,Light Gray Wool,0
+35,9,minecraft:wool,Cyan Wool,0
+35,10,minecraft:wool,Purple Wool,0
+35,11,minecraft:wool,Blue Wool,0
+35,12,minecraft:wool,Brown Wool,0
+35,13,minecraft:wool,Green Wool,0
+35,14,minecraft:wool,Red Wool,0
+35,15,minecraft:wool,Black Wool,0
+36,0,minecraft:piston_extension,Block moved by Piston,2
+37,0,minecraft:yellow_flower,Dandelion,0
+38,0,minecraft:red_flower,Poppy,2
+38,1,minecraft:red_flower,Blue Orchid,2
+38,2,minecraft:red_flower,Allium,2
+38,3,minecraft:red_flower,Azure Bluet,2
+38,4,minecraft:red_flower,Red Tulip,2
+38,5,minecraft:red_flower,Orange Tulip,2
+38,6,minecraft:red_flower,White Tulip,2
+38,7,minecraft:red_flower,Pink Tulip,2
+38,8,minecraft:red_flower,Oxeye Daisy,0
+39,0,minecraft:brown_mushroom,Brown Mushroom,2
+40,0,minecraft:red_mushroom,Red Mushroom,2
+41,0,minecraft:gold_block,Block of Gold,0
+42,0,minecraft:iron_block,Block of Iron,0
+43,0,minecraft:double_stone_slab,Double Stone Slab,0
+43,1,minecraft:double_stone_slab,Double Sandstone Slab,0
+43,2,minecraft:double_stone_slab,Double Wooden Slab,0
+43,3,minecraft:double_stone_slab,Double Cobblestone Slab,0
+43,4,minecraft:double_stone_slab,Double Bricks Slab,0
+43,5,minecraft:double_stone_slab,Double Stone Brick Slab,0
+43,6,minecraft:double_stone_slab,Double Nether Brick Slab,0
+43,7,minecraft:double_stone_slab,Double Quartz Slab,0
+43,8,minecraft:double_stone_slab,Smooth Double Stone Slab,0
+43,9,minecraft:double_stone_slab,Smooth Double Sandstone Slab,0
+43,15,minecraft:double_stone_slab,Tile Double Quartz Slab,0
+44,0,minecraft:stone_slab,Stone Slab,0
+44,1,minecraft:stone_slab,Sandstone Slab,0
+44,2,minecraft:stone_slab,Wooden Slab,0
+44,3,minecraft:stone_slab,Cobblestone Slab,0
+44,4,minecraft:stone_slab,Bricks Slab,0
+44,5,minecraft:stone_slab,Stone Brick Slab,0
+44,6,minecraft:stone_slab,Nether Brick Slab,0
+44,7,minecraft:stone_slab,Quartz Slab,0
+44,8,minecraft:stone_slab,Upper Stone Slab,0
+44,9,minecraft:stone_slab,Upper Sandstone Slab,0
+44,10,minecraft:stone_slab,Upper Wooden Slab,0
+44,11,minecraft:stone_slab,Upper Cobblestone Slab,0
+44,12,minecraft:stone_slab,Upper Bricks Slab,0
+44,13,minecraft:stone_slab,Upper Stone Brick Slab,0
+44,14,minecraft:stone_slab,Upper Nether Brick Slab,0
+44,15,minecraft:stone_slab,Upper Quartz Slab,0
+45,0,minecraft:brick_block,Bricks,0
+46,0,minecraft:tnt,TNT,1
+47,0,minecraft:bookshelf,Bookshelf,0
+48,0,minecraft:mossy_cobblestone,Mossy Cobblestone,0
+49,0,minecraft:obsidian,Obsidian,0
+50,5,minecraft:torch,Torch,2
+50,1,minecraft:torch,Torch East,2
+50,2,minecraft:torch,Torch West,2
+50,3,minecraft:torch,Torch South,2
+50,4,minecraft:torch,Torch North,2
+51,0,minecraft:fire,Fire,2
+52,0,minecraft:mob_spawner,Monster Spawner,2
+53,0,minecraft:oak_stairs,Oak Wood Stairs,2
+54,0,minecraft:chest,Chest,2
+55,0,minecraft:redstone_wire,Redstone Wire,2
+56,0,minecraft:diamond_ore,Diamond Ore,0
+57,0,minecraft:diamond_block,Block of Diamond,0
+58,0,minecraft:crafting_table,Crafting Table,0
+59,0,minecraft:wheat,Wheat,2
+60,0,minecraft:farmland,Farmland,2
+60,7,minecraft:farmland,Wet Farmland,2
+61,0,minecraft:furnace,Furnace,1
+62,0,minecraft:lit_furnace,Burning Furnace,2
+63,0,minecraft:standing_sign,Sign Post,2
+63,0,minecraft:standing_sign,Sign Post (S),2
+63,1,minecraft:standing_sign,Sign Post (S-SW),2
+63,2,minecraft:standing_sign,Sign Post (SW),2
+63,3,minecraft:standing_sign,Sign Post (W-SW),2
+63,4,minecraft:standing_sign,Sign Post (W),2
+63,5,minecraft:standing_sign,Sign Post (W-NW),2
+63,6,minecraft:standing_sign,Sign Post (NW),2
+63,7,minecraft:standing_sign,Sign Post (N-NW),2
+63,8,minecraft:standing_sign,Sign Post (N),2
+63,9,minecraft:standing_sign,Sign Post (N-NE),2
+63,10,minecraft:standing_sign,Sign Post (NE),2
+63,11,minecraft:standing_sign,Sign Post (E-NE),2
+63,12,minecraft:standing_sign,Sign Post (E),2
+63,13,minecraft:standing_sign,Sign Post (E-SE),2
+63,14,minecraft:standing_sign,Sign Post (SE),2
+63,15,minecraft:standing_sign,Sign Post (S-SE),2
+64,0,minecraft:wooden_door,Wooden Door,2
+64,0,minecraft:wooden_door,Lower Wooden Door (Closed E),2
+64,1,minecraft:wooden_door,Lower Wooden Door (Closed S),2
+64,2,minecraft:wooden_door,Lower Wooden Door (Closed W),2
+64,3,minecraft:wooden_door,Lower Wooden Door (Closed N),2
+64,4,minecraft:wooden_door,Lower Wooden Door (Open E),2
+64,5,minecraft:wooden_door,Lower Wooden Door (Open S),2
+64,6,minecraft:wooden_door,Lower Wooden Door (Open W),2
+64,7,minecraft:wooden_door,Lower Wooden Door (Open N),2
+64,8,minecraft:wooden_door,Upper Wooden Door (Unpowered Left),2
+64,9,minecraft:wooden_door,Upper Wooden Door (Unpowered Right),2
+64,10,minecraft:wooden_door,Upper Wooden Door (Powered Left),2
+64,11,minecraft:wooden_door,Upper Wooden Door (Powered Right),2
+65,0,minecraft:ladder,Ladders,2
+66,0,minecraft:rail,Rail,2
+67,0,minecraft:stone_stairs,Cobblestone Stairs,2
+68,2,minecraft:wall_sign,Wall Sign,2
+68,2,minecraft:wall_sign,Wall Sign (N),2
+68,3,minecraft:wall_sign,Wall Sign (S),2
+68,4,minecraft:wall_sign,Wall Sign (W),2
+68,5,minecraft:wall_sign,Wall Sign (E),2
+69,0,minecraft:lever,Lever,2
+70,0,minecraft:stone_pressure_plate,Stone Pressure Plate,2
+71,0,minecraft:iron_door,Iron Door,2
+71,0,minecraft:iron_door,Lower Iron Door (Closed E),2
+71,1,minecraft:iron_door,Lower Iron Door (Closed S),2
+71,2,minecraft:iron_door,Lower Iron Door (Closed W),2
+71,3,minecraft:iron_door,Lower Iron Door (Closed N),2
+71,4,minecraft:iron_door,Lower Iron Door (Open E),2
+71,5,minecraft:iron_door,Lower Iron Door (Open S),2
+71,6,minecraft:iron_door,Lower Iron Door (Open W),2
+71,7,minecraft:iron_door,Lower Iron Door (Open N),2
+71,8,minecraft:iron_door,Upper Iron Door (Unpowered Left),2
+71,9,minecraft:iron_door,Upper Iron Door (Unpowered Right),2
+71,10,minecraft:iron_door,Upper Iron Door (Powered Left),2
+71,11,minecraft:iron_door,Upper Iron Door (Powered Right),2
+72,0,minecraft:wooden_pressure_plate,Wooden Pressure Plate,2
+73,0,minecraft:redstone_ore,Redstone Ore,0
+74,0,minecraft:lit_redstone_ore,Glowing Redstone Ore,0
+75,5,minecraft:unlit_redstone_torch,Redstone Torch (inactive),2
+75,1,minecraft:unlit_redstone_torch,Redstone Torch East (inactive),2
+75,2,minecraft:unlit_redstone_torch,Redstone Torch West (inactive),2
+75,3,minecraft:unlit_redstone_torch,Redstone Torch South (inactive),2
+75,4,minecraft:unlit_redstone_torch,Redstone Torch East (inactive),2
+76,5,minecraft:redstone_torch,Redstone Torch (active),2
+76,1,minecraft:unlit_redstone_torch,Redstone Torch East (active),2
+76,2,minecraft:unlit_redstone_torch,Redstone Torch West (active),2
+76,3,minecraft:unlit_redstone_torch,Redstone Torch South (active),2
+76,4,minecraft:unlit_redstone_torch,Redstone Torch East (active),2
+77,0,minecraft:stone_button,Stone Button,2
+78,0,minecraft:snow_layer,Snow,2
+79,0,minecraft:ice,Ice,1
+80,0,minecraft:snow,Snow,0
+81,0,minecraft:cactus,Cactus,2
+82,0,minecraft:clay,Clay,0
+83,0,minecraft:reeds,Sugar Cane,1
+84,0,minecraft:jukebox,Jukebox,2
+85,0,minecraft:fence,Fence,0
+86,0,minecraft:pumpkin,Pumpkin,0
+87,0,minecraft:netherrack,Netherrack,0
+88,0,minecraft:soul_sand,Soul Sand,0
+89,0,minecraft:glowstone,Glowstone,0
+90,0,minecraft:portal,Nether Portal,2
+91,0,minecraft:lit_pumpkin,Jack 'o' Lantern,0
+92,0,minecraft:cake,Cake Block,0
+93,0,minecraft:unpowered_repeater,Redstone Repeater (inactive),2
+94,0,minecraft:powered_repeater,Redstone Repeater (active),2
+95,0,minecraft:stained_glass,Stained Glass,0
+95,0,minecraft:stained_glass,White Stained Glass,0
+95,1,minecraft:stained_glass,Orange Stained Glass,0
+95,2,minecraft:stained_glass,Magenta Stained Glass,0
+95,3,minecraft:stained_glass,Light Blue Stained Glass,0
+95,4,minecraft:stained_glass,Yellow Stained Glass,0
+95,5,minecraft:stained_glass,Lime Stained Glass,0
+95,6,minecraft:stained_glass,Pink Stained Glass,0
+95,7,minecraft:stained_glass,Gray Stained Glass,0
+95,8,minecraft:stained_glass,Light Gray Stained Glass,0
+95,9,minecraft:stained_glass,Cyan Stained Glass,0
+95,10,minecraft:stained_glass,Purple Stained Glass,0
+95,11,minecraft:stained_glass,Blue Stained Glass,0
+95,12,minecraft:stained_glass,Brown Stained Glass,0
+95,13,minecraft:stained_glass,Green Stained Glass,0
+95,14,minecraft:stained_glass,Red Stained Glass,0
+95,15,minecraft:stained_glass,Black Stained Glass,0
+96,0,minecraft:trapdoor,Trapdoor,2
+97,0,minecraft:monster_egg,Monster Egg,1
+97,0,minecraft:monster_egg,Stone Monster Egg,1
+97,1,minecraft:monster_egg,Cobblestone Monster Egg,1
+97,2,minecraft:monster_egg,Stone Brick Monster Egg,1
+97,3,minecraft:monster_egg,Mossy Stone Brick Monster Egg,1
+97,4,minecraft:monster_egg,Cracked Stone Brick Monster Egg,1
+97,5,minecraft:monster_egg,Chiseled Stone Brick Monster Egg,1
+98,0,minecraft:stonebrick,Stone Bricks,0
+98,1,minecraft:stonebrick,Mossy Stone Brick,0
+98,2,minecraft:stonebrick,Cracked Stone Brick,0
+98,3,minecraft:stonebrick,Chiseled Stone Brick,0
+99,14,minecraft:brown_mushroom_block,Huge Brown Mushroom,0
+100,14,minecraft:red_mushroom_block,Huge Red Mushroom,0
+101,0,minecraft:iron_bars,Iron Bars,0
+102,0,minecraft:glass_pane,Glass Pane,0
+103,0,minecraft:melon_block,Melon,0
+104,0,minecraft:pumpkin_stem,Pumpkin Stem,2
+105,0,minecraft:melon_stem,Melon Stem,2
+106,0,minecraft:vine,Vines,2
+107,0,minecraft:fence_gate,Fence Gate,2
+108,0,minecraft:brick_stairs,Brick Stairs,2
+109,0,minecraft:stone_brick_stairs,Stone Brick Stairs,2
+110,0,minecraft:mycelium,Mycelium,0
+111,0,minecraft:waterlily,Lily Pad,2
+112,0,minecraft:nether_brick,Nether Brick,0
+113,0,minecraft:nether_brick_fence,Nether Brick Fence,0
+114,0,minecraft:nether_brick_stairs,Nether Brick Stairs,2
+115,0,minecraft:nether_wart,Nether Wart,2
+116,0,minecraft:enchanting_table,Enchantment Table,2
+117,0,minecraft:brewing_stand,Brewing Stand,2
+118,0,minecraft:cauldron,Cauldron,2
+119,0,minecraft:end_portal,End Portal,2
+120,0,minecraft:end_portal_frame,End Portal Block,1
+121,0,minecraft:end_stone,End Stone,0
+122,0,minecraft:dragon_egg,Dragon Egg,0
+123,0,minecraft:redstone_lamp,Redstone Lamp,0
+124,0,minecraft:lit_redstone_lamp,Redstone Lamp (active),2
+125,0,minecraft:double_wooden_slab,Wooden Double Slab,0
+125,0,minecraft:double_wooden_slab,Double Oak Wood Slab,0
+125,1,minecraft:double_wooden_slab,Double Spruce Wood Slab,0
+125,2,minecraft:double_wooden_slab,Double Birch Wood Slab,0
+125,3,minecraft:double_wooden_slab,Double Jungle Wood Slab,0
+125,4,minecraft:double_wooden_slab,Double Acacia Wood Slab,0
+125,5,minecraft:double_wooden_slab,Double Dark Oak Wood Slab,0
+126,0,minecraft:wooden_slab,Wooden Slab,0
+126,0,minecraft:wooden_slab,Oak Wood Slab,0
+126,1,minecraft:wooden_slab,Spruce Wood Slab,0
+126,2,minecraft:wooden_slab,Birch Wood Slab,0
+126,3,minecraft:wooden_slab,Jungle Wood Slab,0
+126,4,minecraft:wooden_slab,Acacia Wood Slab,0
+126,5,minecraft:wooden_slab,Dark Oak Wood Slab,0
+126,8,minecraft:wooden_slab,Upper Wooden Slab,0
+126,8,minecraft:wooden_slab,Upper Oak Wood Slab,0
+126,9,minecraft:wooden_slab,Upper Spruce Wood Slab,0
+126,10,minecraft:wooden_slab,Upper Birch Wood Slab,0
+126,11,minecraft:wooden_slab,Upper Jungle Wood Slab,0
+126,12,minecraft:wooden_slab,Upper Acacia Wood Slab,0
+126,13,minecraft:wooden_slab,Upper Dark Oak Wood Slab,0
+127,0,minecraft:cocoa,Cocoa,2
+128,0,minecraft:sandstone_stairs,Sandstone Stairs,2
+129,0,minecraft:emerald_ore,Emerald Ore,0
+130,0,minecraft:ender_chest,Ender Chest,2
+131,0,minecraft:tripwire_hook,Tripwire Hook,2
+132,0,minecraft:tripwire,Tripwire,2
+133,0,minecraft:emerald_block,Block of Emerald,0
+134,0,minecraft:spruce_stairs,Spruce Wood Stairs,2
+135,0,minecraft:birch_stairs,Birch Wood Stairs,2
+136,0,minecraft:jungle_stairs,Jungle Wood Stairs,2
+137,0,minecraft:command_block,Command Block,2
+138,0,minecraft:beacon,Beacon,2
+139,0,minecraft:cobblestone_wall,Cobblestone Wall,0
+139,1,minecraft:cobblestone_wall,Mossy Cobblestone Wall,0
+140,0,minecraft:flower_pot,Flower Pot,2
+141,0,minecraft:carrots,Carrots,2
+142,0,minecraft:potatoes,Potatoes,2
+143,0,minecraft:wooden_button,Wooden Button,2
+144,0,minecraft:skull,Mob Head,2
+145,0,minecraft:anvil,Anvil,2
+146,0,minecraft:trapped_chest,Trapped Chest,2
+147,0,minecraft:light_weighted_pressure_plate,Weighted Pressure Plate (Light),2
+148,0,minecraft:heavy_weighted_pressure_plate,Weighted Pressure Plate (Heavy),2
+149,0,minecraft:unpowered_comparator,Redstone Comparator (inactive & active),2
+150,0,,(unused),2
+151,0,minecraft:daylight_detector,Daylight Sensor,2
+152,0,minecraft:redstone_block,Block of Redstone,0
+153,0,minecraft:quartz_ore,Nether Quartz Ore,0
+154,0,minecraft:hopper,Hopper,2
+155,0,minecraft:quartz_block,Block of Quartz,0
+156,0,minecraft:quartz_stairs,Quartz Stairs,2
+157,0,minecraft:activator_rail,Activator Rail,2
+158,0,minecraft:dropper,Dropper,2
+159,0,minecraft:stained_hardened_clay,Stained Clay,0
+159,0,minecraft:stained_hardened_clay,White Hardened Clay,0
+159,1,minecraft:stained_hardened_clay,Orange Hardened Clay,0
+159,2,minecraft:stained_hardened_clay,Magenta Hardened Clay,0
+159,3,minecraft:stained_hardened_clay,Light Blue Hardened Clay,0
+159,4,minecraft:stained_hardened_clay,Yellow Hardened Clay,0
+159,5,minecraft:stained_hardened_clay,Lime Hardened Clay,0
+159,6,minecraft:stained_hardened_clay,Pink Hardened Clay,0
+159,7,minecraft:stained_hardened_clay,Gray Hardened Clay,0
+159,8,minecraft:stained_hardened_clay,Light Gray Hardened Clay,0
+159,9,minecraft:stained_hardened_clay,Cyan Hardened Clay,0
+159,10,minecraft:stained_hardened_clay,Purple Hardened Clay,0
+159,11,minecraft:stained_hardened_clay,Blue Hardened Clay,0
+159,12,minecraft:stained_hardened_clay,Brown Hardened Clay,0
+159,13,minecraft:stained_hardened_clay,Green Hardened Clay,0
+159,14,minecraft:stained_hardened_clay,Red Hardened Clay,0
+159,15,minecraft:stained_hardened_clay,Black Hardened Clay,0
+160,0,minecraft:stained_glass_pane,Stained Glass Pane,0
+160,0,minecraft:stained_glass_pane,White Stained Glass Pane,0
+160,1,minecraft:stained_glass_pane,Orange Stained Glass Pane,0
+160,2,minecraft:stained_glass_pane,Magenta Stained Glass Pane,0
+160,3,minecraft:stained_glass_pane,Light Blue Stained Glass Pane,0
+160,4,minecraft:stained_glass_pane,Yellow Stained Glass Pane,0
+160,5,minecraft:stained_glass_pane,Lime Stained Glass Pane,0
+160,6,minecraft:stained_glass_pane,Pink Stained Glass Pane,0
+160,7,minecraft:stained_glass_pane,Gray Stained Glass Pane,0
+160,8,minecraft:stained_glass_pane,Light Gray Stained Glass Pane,0
+160,9,minecraft:stained_glass_pane,Cyan Stained Glass Pane,0
+160,10,minecraft:stained_glass_pane,Purple Stained Glass Pane,0
+160,11,minecraft:stained_glass_pane,Blue Stained Glass Pane,0
+160,12,minecraft:stained_glass_pane,Brown Stained Glass Pane,0
+160,13,minecraft:stained_glass_pane,Green Stained Glass Pane,0
+160,14,minecraft:stained_glass_pane,Red Stained Glass Pane,0
+160,15,minecraft:stained_glass_pane,Black Stained Glass Pane,0
+161,0,minecraft:leaves2,Acacia Leaves,0
+161,1,minecraft:leaves3,Dark Oak Leaves,0
+162,0,minecraft:log2,Acacia Wood Slab,0
+162,1,minecraft:log2,Dark Oak Wood,0
+163,0,minecraft:acacia_stairs,Acacia Wood Stairs,2
+164,0,minecraft:dark_oak_stairs,Dark Oak Wood Stairs,2
+170,0,minecraft:hay_block,Hay Block,0
+171,0,minecraft:carpet,Carpet,0
+171,0,minecraft:carpet,White Carpet,0
+171,1,minecraft:carpet,Orange Carpet,0
+171,2,minecraft:carpet,Magenta Carpet,0
+171,3,minecraft:carpet,Light Blue Carpet,0
+171,4,minecraft:carpet,Yellow Carpet,0
+171,5,minecraft:carpet,Lime Carpet,0
+171,6,minecraft:carpet,Pink Carpet,0
+171,7,minecraft:carpet,Gray Carpet,0
+171,8,minecraft:carpet,Light Gray Carpet,0
+171,9,minecraft:carpet,Cyan Carpet,0
+171,10,minecraft:carpet,Purple Carpet,0
+171,11,minecraft:carpet,Blue Carpet,0
+171,12,minecraft:carpet,Brown Carpet,0
+171,13,minecraft:carpet,Green Carpet,0
+171,14,minecraft:carpet,Red Carpet,0
+171,15,minecraft:carpet,Black Carpet,0
+172,0,minecraft:hardened_clay,Hardened Clay,0
+172,0,minecraft:hardened_clay,White Hardened Clay,0
+172,1,minecraft:hardened_clay,Orange Hardened Clay,0
+172,2,minecraft:hardened_clay,Magenta Hardened Clay,0
+172,3,minecraft:hardened_clay,Light Blue Hardened Clay,0
+172,4,minecraft:hardened_clay,Yellow Hardened Clay,0
+172,5,minecraft:hardened_clay,Lime Hardened Clay,0
+172,6,minecraft:hardened_clay,Pink Hardened Clay,0
+172,7,minecraft:hardened_clay,Gray Hardened Clay,0
+172,8,minecraft:hardened_clay,Light Gray Hardened Clay,0
+172,9,minecraft:hardened_clay,Cyan Hardened Clay,0
+172,10,minecraft:hardened_clay,Purple Hardened Clay,0
+172,11,minecraft:hardened_clay,Blue Hardened Clay,0
+172,12,minecraft:hardened_clay,Brown Hardened Clay,0
+172,13,minecraft:hardened_clay,Green Hardened Clay,0
+172,14,minecraft:hardened_clay,Red Hardened Clay,0
+172,15,minecraft:hardened_clay,Black Hardened Clay,0
+173,0,minecraft:coal_block,Block of Coal,0
+174,0,minecraft:packed_ice,Packed Ice,0
+175,0,minecraft:double_plant,Large Flowers,0
+175,0,minecraft:double_plant,Sunflower,2
+175,1,minecraft:double_plant,Lilac,2
+175,2,minecraft:double_plant,Double Tallgrass,2
+175,3,minecraft:double_plant,Large Fern,2
+175,4,minecraft:double_plant,Rose Bush,2
+175,5,minecraft:double_plant,Peony,2