diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataBool.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataBool.java index 5a79766..4e05584 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataBool.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataBool.java @@ -57,22 +57,22 @@ public class DataBool implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast a bool to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot cast a bool to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("cannot cast a bool to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("cannot cast a bool to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByte.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByte.java index b30e4c8..8d47543 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByte.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByte.java @@ -57,22 +57,22 @@ public class DataByte implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot convert a byte to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot convert a byte to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("Cannot cast a byte to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("Cannot cast a byte to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByteArray.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByteArray.java index 4227967..1e11da9 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByteArray.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByteArray.java @@ -133,7 +133,7 @@ public class DataByteArray implements IData { @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot convert list to map"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataDouble.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataDouble.java index 6cd0f7a..f5c3ee5 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataDouble.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataDouble.java @@ -57,22 +57,22 @@ public class DataDouble implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast a double to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot cast a double to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("Cannot cast a double to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("Cannot cast a double to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataFloat.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataFloat.java index e64d85a..1cdb170 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataFloat.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataFloat.java @@ -57,22 +57,22 @@ public class DataFloat implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast a float to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot cast a float to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("Cannot cast a float to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("Cannot cast a float to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataInt.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataInt.java index fae4dac..927757c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataInt.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataInt.java @@ -57,22 +57,22 @@ public class DataInt implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast an int to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot cast an int to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("Cannot cast an int to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("Cannot cast an int to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataIntArray.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataIntArray.java index f39787a..1507d5c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataIntArray.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataIntArray.java @@ -135,7 +135,7 @@ public class DataIntArray implements IData { @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot convert list to map"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataList.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataList.java index f585a03..c0c7e9f 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataList.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataList.java @@ -65,7 +65,7 @@ public class DataList implements IData { @Override public Map asMap() { - throw new RuntimeException("Cannot convert a list to a map"); + return null; } @Override @@ -87,20 +87,28 @@ public class DataList implements IData { @Override public byte[] asByteArray() { - byte[] result = new byte[values.size()]; - for (int i = 0; i < values.size(); i++) { - result[i] = values.get(i).asByte(); + try { + byte[] result = new byte[values.size()]; + for (int i = 0; i < values.size(); i++) { + result[i] = values.get(i).asByte(); + } + return result; + } catch (IllegalDataException ex) { + return null; } - return result; } @Override public int[] asIntArray() { - int[] result = new int[values.size()]; - for (int i = 0; i < values.size(); i++) { - result[i] = values.get(i).asInt(); + try { + int[] result = new int[values.size()]; + for (int i = 0; i < values.size(); i++) { + result[i] = values.get(i).asInt(); + } + return result; + } catch (IllegalDataException ex) { + return null; } - return result; } @Override @@ -134,13 +142,31 @@ public class DataList implements IData { @Override public boolean contains(IData data) { + List dataValues = data.asList(); + if (dataValues != null && containsList(dataValues)) + return true; + for (IData value : values) { - if (value.equals(data)) return true; + if (value.contains(data)) + return true; } return false; } + private boolean containsList(List dataValues) { + outer: for (IData dataValue : dataValues) { + for (IData value : values) { + if (value.contains(dataValue)) + continue outer; + } + + return false; + } + + return true; + } + @Override public boolean equals(IData data) { List otherValues = data.asList(); diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataMap.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataMap.java index ea74800..fb970d5 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataMap.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataMap.java @@ -153,7 +153,7 @@ public class DataMap implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast map to list"); + return null; } @Override @@ -167,12 +167,12 @@ public class DataMap implements IData { @Override public byte[] asByteArray() { - throw new UnsupportedOperationException("Cannot cast map to byte[]"); + return null; } @Override public int[] asIntArray() { - throw new UnsupportedOperationException("Cannot cast map to int[]"); + return null; } @Override @@ -211,6 +211,9 @@ public class DataMap implements IData { } Map dataMap = data.asMap(); + if (dataMap == null) + return false; + for (Map.Entry dataEntry : dataMap.entrySet()) { if (!this.data.containsKey(dataEntry.getKey())) { return false; diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataShort.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataShort.java index 86d443e..7d00c1a 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataShort.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataShort.java @@ -57,22 +57,22 @@ public class DataShort implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast a short to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot cast a short to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("Cannot cast a short to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("Cannot cast a short to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataString.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataString.java index c460355..9474528 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataString.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataString.java @@ -57,22 +57,22 @@ public class DataString implements IData { @Override public List asList() { - throw new UnsupportedOperationException("Cannot cast a string to a list"); + return null; } @Override public Map asMap() { - throw new UnsupportedOperationException("Cannot cast a string to a map"); + return null; } @Override public byte[] asByteArray() { - throw new RuntimeException("Cannot cast a string to a byte array"); + return null; } @Override public int[] asIntArray() { - throw new RuntimeException("Cannot cast a string to an int array"); + return null; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java index 53aebce..9972065 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java @@ -74,15 +74,39 @@ public interface IData { @ZenCaster public String asString(); + /** + * Attempts to convert this value to a List. Returns null if this value + * cannot be converted to a list. + * + * @return list data of this value, if any + */ @ZenCaster public List asList(); + /** + * Attempts to convert this value to a Map. Returns null if this value + * cannot be converted to a map. + * + * @return map data of this value, if any + */ @ZenCaster public Map asMap(); + /** + * Attempts to convert this value to a byte array. Returns null if this + * value cannot be converted to a byte array. + * + * @return byte array data of this value, if any + */ @ZenCaster public byte[] asByteArray(); + /** + * Attempts to convert this value to an int array. Returns null if this + * value cannot be converted to an int array. + * + * @return int array data of this value, if any + */ @ZenCaster public int[] asIntArray(); diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/IllegalDataException.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/IllegalDataException.java new file mode 100644 index 0000000..6ba07c0 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/IllegalDataException.java @@ -0,0 +1,17 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.data; + +/** + * + * @author Stan + */ +public class IllegalDataException extends RuntimeException +{ + public IllegalDataException(String message) { + super(message); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java b/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java index f1cb797..267b704 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java @@ -31,6 +31,11 @@ public class ParsedExpressionVariable extends ParsedExpression { public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { IPartialExpression result = environment.getValue(name, getPosition()); if (result == null) { + if (predictedType == null) { + environment.error(getPosition(), "could not find " + name); + return new ExpressionInvalid(getPosition()); + } + // enable usage of static members of the same type as the predicted type (eg. enum values) IPartialExpression member = predictedType.getStaticMember(getPosition(), environment, name); if (member == null || member.getType().getCastingRule(predictedType, environment) == null) { diff --git a/configuration.gradle b/configuration.gradle index c90a78f..acfc7f6 100644 --- a/configuration.gradle +++ b/configuration.gradle @@ -2,7 +2,7 @@ // ### Global settings ### // ####################### -ext.mineTweakerVersion = "3.0.9" +ext.mineTweakerVersion = "3.0.9B" ext.mineTweakerDebug = "false" ext.javaToolsJar = new File("C:/Program Files/Java/jdk1.8.0_05/lib/tools.jar")