From 3827eba3e217b702e423d47550cccd4b26e559b5 Mon Sep 17 00:00:00 2001 From: Stan Hebben Date: Sun, 22 Jun 2014 14:02:56 +0200 Subject: [PATCH] - Added toString to the data values - Added getPlayer to crafting inventory - Added crafting inventory to recipe function - Removed some print statements - Renamed the global minetweaker variable to tweaker - Bumped forge version to 1121 due to ore dictionary changes - Added bracket handler for ore entries - Enabled withTag(null) - Fixed issues with the new ore dictionary implementation in Forge 1113+ - Fixed bug in Ore recipe conversion - Fixed import errors not being detected and reported properly - Fixed nested NBT tags not being converted properly - Fixed something in any type implementation - Added commas in function name generation - Added class registries for IC2 and NEI integration --- .../java/minetweaker/api/data/DataBool.java | 5 ++ .../java/minetweaker/api/data/DataByte.java | 5 ++ .../minetweaker/api/data/DataByteArray.java | 5 ++ .../java/minetweaker/api/data/DataDouble.java | 5 ++ .../java/minetweaker/api/data/DataFloat.java | 5 ++ .../java/minetweaker/api/data/DataInt.java | 5 ++ .../minetweaker/api/data/DataIntArray.java | 5 ++ .../java/minetweaker/api/data/DataList.java | 7 +- .../java/minetweaker/api/data/DataLong.java | 5 ++ .../java/minetweaker/api/data/DataMap.java | 11 ++- .../java/minetweaker/api/data/DataShort.java | 5 ++ .../java/minetweaker/api/data/DataString.java | 5 ++ .../main/java/minetweaker/api/data/IData.java | 3 + .../api/recipes/ICraftingInventory.java | 4 + .../api/recipes/IRecipeFunction.java | 2 +- .../minetweaker/api/recipes/ShapedRecipe.java | 7 +- .../api/recipes/ShapelessRecipe.java | 2 +- .../minetweaker/runtime/GlobalRegistry.java | 2 +- MineTweaker3-MC17-Main/build.gradle | 2 +- .../minetweaker/mc172/MineTweakerMod.java | 5 ++ .../mc172/brackets/OreBracketHandler.java | 73 +++++++++++++++++++ .../mc172/item/TweakerItemStack.java | 16 ++-- .../mc172/oredict/OreDictEntry.java | 23 ++++-- .../mc172/recipes/MTRecipeManager.java | 1 + .../mc172/recipes/RecipeConverter.java | 1 + .../recipes/TweakerCraftingInventory.java | 22 ++++-- .../mc172/util/MineTweakerHacks.java | 20 +++-- .../mc172/util/MineTweakerObfuscation.java | 3 +- MineTweaker3-MC17-Mod-IC2/build.gradle | 2 +- .../minetweaker/mods/ic2/ClassRegistry.java | 29 ++++++++ MineTweaker3-MC17-Mod-NEI/build.gradle | 2 +- .../minetweaker/mods/nei/ClassRegistry.java | 19 +++++ .../stanhebben/zenscript/ZenParsedFile.java | 8 +- .../zenscript/compiler/EnvironmentScript.java | 6 +- .../expression/ExpressionFunction.java | 2 + .../zenscript/expression/ExpressionTable.java | 7 +- .../zenscript/symbols/SymbolPackage.java | 2 +- .../stanhebben/zenscript/type/ZenTypeAny.java | 10 +-- .../zenscript/type/ZenTypeFunction.java | 10 +++ 39 files changed, 301 insertions(+), 50 deletions(-) create mode 100644 MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java create mode 100644 MineTweaker3-MC17-Mod-IC2/src/main/java/minetweaker/mods/ic2/ClassRegistry.java create mode 100644 MineTweaker3-MC17-Mod-NEI/src/main/java/minetweaker/mods/nei/ClassRegistry.java 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 9999f07..7f9f288 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataBool.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataBool.java @@ -184,4 +184,9 @@ public class DataBool implements IData { public IData not() { return new DataBool(!value); } + + @Override + public String toString() { + return asString(); + } } 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 f41e700..8fe4db1 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByte.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByte.java @@ -184,4 +184,9 @@ public class DataByte implements IData { public IData not() { return new DataByte((byte) (~ value)); } + + @Override + public String toString() { + return asString() + " as byte"; + } } 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 2cf0874..1616539 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByteArray.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataByteArray.java @@ -217,4 +217,9 @@ public class DataByteArray implements IData { public T convert(IDataConverter converter) { return converter.fromByteArray(this.data); } + + @Override + public String toString() { + return asString() + " as byte[]"; + } } 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 e0a4323..3a6dc95 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataDouble.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataDouble.java @@ -184,4 +184,9 @@ public class DataDouble implements IData { public IData not() { throw new UnsupportedOperationException("Cannot perform bitwise operations on double"); } + + @Override + public String toString() { + return asString(); + } } 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 efc2b88..e076f93 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataFloat.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataFloat.java @@ -184,4 +184,9 @@ public class DataFloat implements IData { public IData not() { throw new UnsupportedOperationException("Cannot perform bitwise operations on float"); } + + @Override + public String toString() { + return asString() + " as float"; + } } 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 c869732..ce6a902 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataInt.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataInt.java @@ -184,4 +184,9 @@ public class DataInt implements IData { public IData not() { return new DataInt(~ value); } + + @Override + public String toString() { + return asString(); + } } 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 b8b7d1b..f87512b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataIntArray.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataIntArray.java @@ -219,4 +219,9 @@ public class DataIntArray implements IData { public T convert(IDataConverter converter) { return converter.fromIntArray(this.data); } + + @Override + public String toString() { + return asString() + " as int[]"; + } } 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 16ecef6..c438475 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataList.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataList.java @@ -84,7 +84,7 @@ public class DataList implements IData { } else { output.append(", "); } - output.append(value.asString()); + output.append(value.toString()); } output.append(']'); return output.toString(); @@ -240,4 +240,9 @@ public class DataList implements IData { public IData not() { throw new UnsupportedOperationException("Lists don't support bitwise operators"); } + + @Override + public String toString() { + return asString(); + } } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataLong.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataLong.java index 4e732c7..3407212 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataLong.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataLong.java @@ -184,4 +184,9 @@ public class DataLong implements IData { public IData not() { return new DataLong(~ value); } + + @Override + public String toString() { + return asString() + " as long"; + } } 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 ed4e414..a637366 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataMap.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataMap.java @@ -133,7 +133,7 @@ public class DataMap implements IData { public String asString() { StringBuilder result = new StringBuilder(); result.append('{'); - boolean first = false; + boolean first = true; for (Map.Entry entry : data.entrySet()) { if (first) { first = false; @@ -142,7 +142,7 @@ public class DataMap implements IData { } result.append(entry.getKey()); result.append(": "); - result.append(entry.getValue().asString()); + result.append(entry.getValue().toString()); } result.append('}'); return result.toString(); @@ -207,7 +207,7 @@ public class DataMap implements IData { for (Map.Entry dataEntry : dataMap.entrySet()) { if (!this.data.containsKey(dataEntry.getKey())) { return false; - } else if (!this.data.get(dataEntry.getKey()).contains(data)) { + } else if (!this.data.get(dataEntry.getKey()).contains(dataEntry.getValue())) { return false; } } @@ -269,4 +269,9 @@ public class DataMap implements IData { public T convert(IDataConverter converter) { return converter.fromMap(data); } + + @Override + public String toString() { + return asString(); + } } 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 3396942..8a35b0f 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataShort.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataShort.java @@ -184,4 +184,9 @@ public class DataShort implements IData { public IData not() { return new DataShort((short) (~ value)); } + + @Override + public String toString() { + return asString() + " as short"; + } } 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 50aa1b4..64e98d1 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/DataString.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/DataString.java @@ -188,4 +188,9 @@ public class DataString implements IData { public IData not() { throw new UnsupportedOperationException("Cannot perform bitwise arithmetic on a string"); } + + @Override + public String toString() { + return '\"' + value.replace("\"", "\\\"") + "\""; + } } 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 110ca37..8eeab64 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java @@ -120,4 +120,7 @@ public interface IData { public IData update(IData data); public T convert(IDataConverter converter); + + @Override + public String toString(); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java index 3618bf4..3368e46 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java @@ -7,6 +7,7 @@ package minetweaker.api.recipes; import minetweaker.api.item.IItemStack; +import minetweaker.api.player.IPlayer; import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenGetter; import stanhebben.zenscript.annotations.ZenMethod; @@ -17,6 +18,9 @@ import stanhebben.zenscript.annotations.ZenMethod; */ @ZenClass("minetweaker.recipes.ICraftingInventory") public interface ICraftingInventory { + @ZenGetter("player") + public IPlayer getPlayer(); + @ZenGetter("size") public int getSize(); diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java index 5aff388..8332a4a 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java @@ -16,5 +16,5 @@ import stanhebben.zenscript.annotations.ZenClass; */ @ZenClass("minetweaker.recipes.IRecipeFunction") public interface IRecipeFunction { - public IItemStack process(IItemStack output, Map inputs); + public IItemStack process(IItemStack output, Map inputs, ICraftingInventory inventory); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java index 6af2699..b26b853 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java @@ -64,11 +64,11 @@ public class ShapedRecipe { this.height = height1; this.mirrored = mirrored; - System.out.println("ShapedRecipe width=" + width + ", height=" + height); + /*System.out.println("ShapedRecipe width=" + width + ", height=" + height); System.out.println("Ingredients: "); for (int i = 0; i < this.ingredients.length; i++) { System.out.println("(" + posx[i] + ", " + posy[i] + "): " + this.ingredients[i]); - } + }*/ } public int getWidth() { @@ -187,7 +187,8 @@ public class ShapedRecipe { } } - output = function.process(output, tagged); + output = function.process(output, tagged, inventory); + System.out.println("Ouput: " + output); } if (output == null) { diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java index ceab116..de19dd6 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java @@ -54,7 +54,7 @@ public class ShapelessRecipe { } } - actualOutput = function.process(actualOutput, map); + actualOutput = function.process(actualOutput, map, inventory); } if (actualOutput == null) { diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java index 04ce3d3..194d9c9 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java @@ -84,7 +84,7 @@ public class GlobalRegistry { registerGlobal("min", getStaticFunction(Math.class, "min", int.class, int.class)); registerGlobal("logger", getStaticField(MineTweakerAPI.class, "logger")); - registerGlobal("minetweaker", getStaticField(MineTweakerAPI.class, "tweaker")); + registerGlobal("tweaker", getStaticField(MineTweakerAPI.class, "tweaker")); registerGlobal("recipes", getStaticField(MineTweakerAPI.class, "recipes")); registerGlobal("furnace", getStaticField(MineTweakerAPI.class, "furnace")); registerGlobal("oreDict", getStaticField(MineTweakerAPI.class, "oreDict")); diff --git a/MineTweaker3-MC17-Main/build.gradle b/MineTweaker3-MC17-Main/build.gradle index abdc042..1a6e15e 100644 --- a/MineTweaker3-MC17-Main/build.gradle +++ b/MineTweaker3-MC17-Main/build.gradle @@ -16,7 +16,7 @@ buildscript { } apply plugin: 'forge' -minecraft{version = "1.7.2-10.12.1.1112"} +minecraft{version = "1.7.2-10.12.2.1121"} version = "1.0" archivesBaseName = project.projectDir.name diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/MineTweakerMod.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/MineTweakerMod.java index a2c7a87..d7bb39c 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/MineTweakerMod.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/MineTweakerMod.java @@ -28,6 +28,7 @@ import minetweaker.MineTweakerAPI; import minetweaker.annotations.ModOnly; import minetweaker.mc172.brackets.ItemBracketHandler; import minetweaker.mc172.brackets.LiquidBracketHandler; +import minetweaker.mc172.brackets.OreBracketHandler; import minetweaker.mc172.network.MineTweakerLoadScriptsHandler; import minetweaker.mc172.network.MineTweakerLoadScriptsPacket; import minetweaker.mc172.oredict.OreDict; @@ -107,6 +108,9 @@ public class MineTweakerMod { public void reload() { MineTweakerAPI.tweaker.rollback(); MineTweakerAPI.tweaker.load(); + + // execute script on all connected clients + NETWORK.sendToAll(new MineTweakerLoadScriptsPacket(MineTweakerAPI.tweaker.getScriptData())); } // ########################## @@ -123,6 +127,7 @@ public class MineTweakerMod { public void onPostInit(FMLPostInitializationEvent ev) { MineTweakerAPI.registerBracketHandler(new ItemBracketHandler()); MineTweakerAPI.registerBracketHandler(new LiquidBracketHandler()); + MineTweakerAPI.registerBracketHandler(new OreBracketHandler()); for (String registry : REGISTRIES) { try { diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java new file mode 100644 index 0000000..9667065 --- /dev/null +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java @@ -0,0 +1,73 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.mc172.brackets; + +import java.util.List; +import minetweaker.IBracketHandler; +import minetweaker.mc172.oredict.OreDictEntry; +import minetweaker.api.oredict.IOreDictEntry; +import minetweaker.runtime.GlobalRegistry; +import stanhebben.zenscript.expression.ExpressionJavaCallStatic; +import stanhebben.zenscript.expression.ExpressionString; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.parser.Token; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.type.natives.JavaMethod; +import stanhebben.zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class OreBracketHandler implements IBracketHandler { + public static IOreDictEntry getOre(String name) { + return new OreDictEntry(name); + } + + @Override + public IZenSymbol resolve(List tokens) { + if (tokens.size() > 2) { + if (tokens.get(0).getValue().equals("ore") && tokens.get(1).getValue().equals(":")) { + return find(tokens, 2, tokens.size()); + } + } + + return null; + } + + private IZenSymbol find(List tokens, int startIndex, int endIndex) { + StringBuilder valueBuilder = new StringBuilder(); + for (int i = startIndex; i < endIndex; i++) { + Token token = tokens.get(i); + valueBuilder.append(token.getValue()); + } + + return new OreReferenceSymbol(valueBuilder.toString()); + } + + private class OreReferenceSymbol implements IZenSymbol { + private final String name; + + public OreReferenceSymbol(String name) { + this.name = name; + } + + @Override + public IPartialExpression instance(ZenPosition position) { + JavaMethod method = JavaMethod.get( + GlobalRegistry.getTypeRegistry(), + OreBracketHandler.class, + "getOre", + String.class); + + return new ExpressionJavaCallStatic( + position, + method, + new ExpressionString(position, name)); + } + } +} diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/item/TweakerItemStack.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/item/TweakerItemStack.java index 23c5a68..b08f906 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/item/TweakerItemStack.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/item/TweakerItemStack.java @@ -135,7 +135,11 @@ public class TweakerItemStack implements IItemStack { @Override public IItemStack withTag(IData tag) { ItemStack result = new ItemStack(stack.getItem(), stack.stackSize, stack.getItemDamage()); - result.stackTagCompound = (NBTTagCompound) NBTConverter.from(tag); + if (tag == null) { + result.stackTagCompound = null; + } else { + result.stackTagCompound = (NBTTagCompound) NBTConverter.from(tag); + } return new TweakerItemStack(result, tag); } @@ -226,17 +230,19 @@ public class TweakerItemStack implements IItemStack { result.append('<'); result.append(Item.itemRegistry.getNameForObject(stack.getItem())); - if (stack.getItemDamage() > 0) { + if (stack.getItemDamage() == OreDictionary.WILDCARD_VALUE) { + result.append(":*"); + } else if (stack.getItemDamage() > 0) { result.append(':').append(stack.getItemDamage()); } result.append('>'); if (stack.getTagCompound() != null) { - result.append(".withData("); - result.append(stack.stackTagCompound.toString()); + result.append(".withTag("); + result.append(NBTConverter.from(stack.getTagCompound(), wildcardSize).toString()); result.append(")"); } - + if (!wildcardSize) { result.append(" * ").append(stack.stackSize); } diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/oredict/OreDictEntry.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/oredict/OreDictEntry.java index c96bfd8..6ec6dae 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/oredict/OreDictEntry.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/oredict/OreDictEntry.java @@ -28,6 +28,9 @@ import net.minecraftforge.oredict.OreDictionary; * @author Stan */ public class OreDictEntry implements IOreDictEntry { + private static final List> OREDICT_CONTENTS = MineTweakerHacks.getOreIdStacks(); + private static final List> OREDICT_CONTENTS_UN = MineTweakerHacks.getOreIdStacksUn(); + private final Integer id; public OreDictEntry(Integer id) { @@ -185,7 +188,7 @@ public class OreDictEntry implements IOreDictEntry { @Override public void undo() { - OreDictionary.getOres(id).remove(item); + OREDICT_CONTENTS.get(id).remove(item); } @Override @@ -204,17 +207,20 @@ public class OreDictEntry implements IOreDictEntry { private final Integer idSource; private final ArrayList targetCopy; + private final ArrayList targetCopyUn; public ActionMirror(Integer idTarget, Integer idSource) { this.idTarget = idTarget; this.idSource = idSource; - targetCopy = OreDictionary.getOres(idTarget); + targetCopy = OREDICT_CONTENTS.get(idTarget); + targetCopyUn = OREDICT_CONTENTS_UN.get(idTarget); } @Override public void apply() { - MineTweakerHacks.getOreStacks().put(idTarget, OreDictionary.getOres(idSource)); + OREDICT_CONTENTS.set(idTarget, OREDICT_CONTENTS.get(idSource)); + OREDICT_CONTENTS_UN.set(idTarget, OREDICT_CONTENTS_UN.get(idSource)); } @Override @@ -224,7 +230,8 @@ public class OreDictEntry implements IOreDictEntry { @Override public void undo() { - MineTweakerHacks.getOreStacks().put(idTarget, targetCopy); + OREDICT_CONTENTS.set(idTarget, targetCopy); + OREDICT_CONTENTS_UN.set(idTarget, targetCopyUn); } @Override @@ -249,7 +256,7 @@ public class OreDictEntry implements IOreDictEntry { @Override public void apply() { - OreDictionary.getOres(id).add(item); + OREDICT_CONTENTS.get(id).remove(item); } @Override @@ -259,17 +266,17 @@ public class OreDictEntry implements IOreDictEntry { @Override public void undo() { - OreDictionary.getOres(id).remove(item); + OREDICT_CONTENTS.get(id).add(item); } @Override public String describe() { - return "Adding " + item.getDisplayName() + " to ore dictionary entry " + OreDictionary.getOreName(id); + return "Removing " + item.getDisplayName() + " from ore dictionary entry " + OreDictionary.getOreName(id); } @Override public String describeUndo() { - return "Removing " + item.getDisplayName() + " from ore dictionary entry " + OreDictionary.getOreName(id); + return "Restoring " + item.getDisplayName() + " to ore dictionary entry " + OreDictionary.getOreName(id); } } diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/MTRecipeManager.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/MTRecipeManager.java index b7ccdef..1603701 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/MTRecipeManager.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/MTRecipeManager.java @@ -246,6 +246,7 @@ public class MTRecipeManager implements IRecipeManager { } } } + InventoryCrafting inventory = new InventoryCrafting(container, width, height); for (int i = 0; i < iContents.length; i++) { inventory.setInventorySlotContents(i, iContents[i]); diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/RecipeConverter.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/RecipeConverter.java index a48d0ee..cdb7890 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/RecipeConverter.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/RecipeConverter.java @@ -106,6 +106,7 @@ public class RecipeConverter { pattern[j] = (char) ('A' + counter); rarguments.add(pattern[j]); rarguments.add(converted[off]); + counter++; } } parts[i] = new String(pattern); diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/TweakerCraftingInventory.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/TweakerCraftingInventory.java index 9a0e96f..b910249 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/TweakerCraftingInventory.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/recipes/TweakerCraftingInventory.java @@ -10,7 +10,9 @@ import java.util.List; import minetweaker.mc172.item.TweakerItemStack; import minetweaker.mc172.util.MineTweakerHacks; import minetweaker.api.item.IItemStack; +import minetweaker.api.player.IPlayer; import minetweaker.api.recipes.ICraftingInventory; +import minetweaker.mc172.player.TweakerPlayer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryCrafting; @@ -43,6 +45,7 @@ public class TweakerCraftingInventory implements ICraftingInventory { private IItemStack[] stacks; private ItemStack[] original; private int stackCount; + private TweakerPlayer player; private TweakerCraftingInventory(InventoryCrafting inventory) { this.inventory = inventory; @@ -56,11 +59,11 @@ public class TweakerCraftingInventory implements ICraftingInventory { List slots = container.inventorySlots; if (!slots.isEmpty() && slots.get(0) instanceof SlotCrafting) { SlotCrafting slotCrafting = (SlotCrafting) slots.get(0); - EntityPlayer player = MineTweakerHacks.getCraftingSlotPlayer(slotCrafting); - System.out.println("Crafting slot for " + player.getCommandSenderName()); + EntityPlayer playerEntity = MineTweakerHacks.getCraftingSlotPlayer(slotCrafting); + player = new TweakerPlayer(playerEntity); + } else { + player = null; } - - System.out.println("Container: " + MineTweakerHacks.getCraftingContainer(inventory)); } private void update() { @@ -73,7 +76,7 @@ public class TweakerCraftingInventory implements ICraftingInventory { for (int i = 0; i < inventory.getSizeInventory(); i++) { if (changed(i)) { - System.out.println("Slot " + i + " changed"); + //System.out.println("Slot " + i + " changed"); original[i] = inventory.getStackInSlot(i); if (inventory.getStackInSlot(i) != null) { if (stacks[i] == null) stackCount++; @@ -86,6 +89,11 @@ public class TweakerCraftingInventory implements ICraftingInventory { } //System.out.println("Num stack count: " + stackCount); } + + @Override + public IPlayer getPlayer() { + return player; + } @Override public int getSize() { @@ -119,7 +127,7 @@ public class TweakerCraftingInventory implements ICraftingInventory { @Override public void setStack(int x, int y, IItemStack stack) { - System.out.println("SetStack(" + x + ", " + y + ") " + stack); + //System.out.println("SetStack(" + x + ", " + y + ") " + stack); int ix = y * width + x; if (stack != stacks[ix]) { @@ -139,7 +147,7 @@ public class TweakerCraftingInventory implements ICraftingInventory { @Override public void setStack(int i, IItemStack stack) { - System.out.println("SetStack(" + i + ") " + stack); + //System.out.println("SetStack(" + i + ") " + stack); if (stack != stacks[i]) { if (stack == null) { diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerHacks.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerHacks.java index 8ac5069..dbf680f 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerHacks.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerHacks.java @@ -9,7 +9,6 @@ package minetweaker.mc172.util; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import minetweaker.MineTweakerAPI; import net.minecraft.entity.player.EntityPlayer; @@ -31,7 +30,8 @@ import net.minecraftforge.oredict.ShapedOreRecipe; */ public class MineTweakerHacks { private static final Field NBTTAGLIST_TAGLIST; - private static final Field OREDICTIONARY_ORESTACKS; + private static final Field OREDICTIONARY_IDTOSTACK; + private static final Field OREDICTIONARY_IDTOSTACKUN; private static final Field MINECRAFTSERVER_ANVILFILE; private static final Field SHAPEDORERECIPE_WIDTH; private static final Field INVENTORYCRAFTING_EVENTHANDLER; @@ -39,7 +39,8 @@ public class MineTweakerHacks { static { NBTTAGLIST_TAGLIST = getField(NBTTagList.class, MineTweakerObfuscation.NBTTAGLIST_TAGLIST); - OREDICTIONARY_ORESTACKS = getField(OreDictionary.class, MineTweakerObfuscation.OREDICTIONARY_ORESTACKS); + OREDICTIONARY_IDTOSTACK = getField(OreDictionary.class, MineTweakerObfuscation.OREDICTIONARY_IDTOSTACK); + OREDICTIONARY_IDTOSTACKUN = getField(OreDictionary.class, MineTweakerObfuscation.OREDICTIONARY_IDTOSTACKUN); MINECRAFTSERVER_ANVILFILE = getField(MinecraftServer.class, MineTweakerObfuscation.MINECRAFTSERVER_ANVILFILE); SHAPEDORERECIPE_WIDTH = getField(ShapedOreRecipe.class, new String[] {"width"}); INVENTORYCRAFTING_EVENTHANDLER = getField(InventoryCrafting.class, MineTweakerObfuscation.INVENTORYCRAFTING_EVENTHANDLER); @@ -61,9 +62,18 @@ public class MineTweakerHacks { } } - public static HashMap> getOreStacks() { + public static List> getOreIdStacks() { try { - return (HashMap>) OREDICTIONARY_ORESTACKS.get(null); + return (List>) OREDICTIONARY_IDTOSTACK.get(null); + } catch (IllegalAccessException ex) { + MineTweakerAPI.logger.logError("ERROR - could not load ore dictionary stacks!"); + return null; + } + } + + public static List> getOreIdStacksUn() { + try { + return (List>) OREDICTIONARY_IDTOSTACKUN.get(null); } catch (IllegalAccessException ex) { MineTweakerAPI.logger.logError("ERROR - could not load ore dictionary stacks!"); return null; diff --git a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerObfuscation.java b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerObfuscation.java index 2a817d7..61dc5ac 100644 --- a/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerObfuscation.java +++ b/MineTweaker3-MC17-Main/src/main/java/minetweaker/mc172/util/MineTweakerObfuscation.java @@ -15,7 +15,8 @@ public class MineTweakerObfuscation { public static final String[] NBTTAGLIST_TAGLIST = {"tagList", "field_74747_a"}; public static final String[] CRAFTINGMANAGER_RECIPES = {"recipes", "field_77597_b"}; - public static final String[] OREDICTIONARY_ORESTACKS = {"oreStacks"}; + public static final String[] OREDICTIONARY_IDTOSTACK = {"idToStack"}; + public static final String[] OREDICTIONARY_IDTOSTACKUN = {"idToStackUn"}; public static final String[] MINECRAFTSERVER_ANVILFILE = {"anvilFile", "field_71308_o"}; public static final String[] INVENTORYCRAFTING_EVENTHANDLER = {"eventHandler", "field_70465_c"}; public static final String[] SLOTCRAFTING_PLAYER = {"thePlayer", "field_75238_b"}; diff --git a/MineTweaker3-MC17-Mod-IC2/build.gradle b/MineTweaker3-MC17-Mod-IC2/build.gradle index 73913f7..cdae85d 100644 --- a/MineTweaker3-MC17-Mod-IC2/build.gradle +++ b/MineTweaker3-MC17-Mod-IC2/build.gradle @@ -16,7 +16,7 @@ buildscript { } apply plugin: 'forge' -minecraft{version = "1.7.2-10.12.1.1112"} +minecraft{version = "1.7.2-10.12.2.1121"} version = "1.0" archivesBaseName = project.projectDir.name diff --git a/MineTweaker3-MC17-Mod-IC2/src/main/java/minetweaker/mods/ic2/ClassRegistry.java b/MineTweaker3-MC17-Mod-IC2/src/main/java/minetweaker/mods/ic2/ClassRegistry.java new file mode 100644 index 0000000..5c9cd4d --- /dev/null +++ b/MineTweaker3-MC17-Mod-IC2/src/main/java/minetweaker/mods/ic2/ClassRegistry.java @@ -0,0 +1,29 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.mods.ic2; + +import minetweaker.MineTweakerAPI; +import minetweaker.mods.ic2.expand.ItemExpansion; +import minetweaker.mods.ic2.machines.Compressor; +import minetweaker.mods.ic2.machines.Extractor; +import minetweaker.mods.ic2.machines.Macerator; +import minetweaker.mods.ic2.machines.ThermalCentrifuge; + +/** + * + * @author Stan + */ +public class ClassRegistry { + public static void register() { + MineTweakerAPI.registerClass(ItemExpansion.class); + + MineTweakerAPI.registerClass(Compressor.class); + MineTweakerAPI.registerClass(Extractor.class); + MineTweakerAPI.registerClass(Macerator.class); + MineTweakerAPI.registerClass(ThermalCentrifuge.class); + } +} diff --git a/MineTweaker3-MC17-Mod-NEI/build.gradle b/MineTweaker3-MC17-Mod-NEI/build.gradle index 2a3142a..d1416db 100644 --- a/MineTweaker3-MC17-Mod-NEI/build.gradle +++ b/MineTweaker3-MC17-Mod-NEI/build.gradle @@ -16,7 +16,7 @@ buildscript { } apply plugin: 'forge' -minecraft{version = "1.7.2-10.12.1.1112"} +minecraft{version = "1.7.2-10.12.2.1121"} version = "1.0" archivesBaseName = project.projectDir.name diff --git a/MineTweaker3-MC17-Mod-NEI/src/main/java/minetweaker/mods/nei/ClassRegistry.java b/MineTweaker3-MC17-Mod-NEI/src/main/java/minetweaker/mods/nei/ClassRegistry.java new file mode 100644 index 0000000..367862f --- /dev/null +++ b/MineTweaker3-MC17-Mod-NEI/src/main/java/minetweaker/mods/nei/ClassRegistry.java @@ -0,0 +1,19 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.mods.nei; + +import minetweaker.MineTweakerAPI; + +/** + * + * @author Stan + */ +public class ClassRegistry { + public static void register() { + MineTweakerAPI.registerClass(NEI.class); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java b/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java index f5510c8..0de02f5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java @@ -12,6 +12,7 @@ import stanhebben.zenscript.definitions.ParsedFunction; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.parser.Token; import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolType; import stanhebben.zenscript.type.ZenType; @@ -105,7 +106,12 @@ public class ZenParsedFile { } if (type != null) { - environmentScript.putValue(imprt.getRename(), type.toSymbol()); + IZenSymbol symbol = type.toSymbol(); + if (symbol == null) { + environmentScript.error(imprt.getPosition(), "Not a valid type"); + } else { + environmentScript.putValue(imprt.getRename(), type.toSymbol()); + } } else { environmentScript.putValue(imprt.getRename(), new SymbolType(ZenType.ANY)); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java index 5441eef..54cb73e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java @@ -57,7 +57,9 @@ public class EnvironmentScript implements IEnvironmentGlobal { @Override public IPartialExpression getValue(String name, ZenPosition position) { if (imports.containsKey(name)) { - return imports.get(name).instance(position); + IZenSymbol imprt = imports.get(name); + if (imprt == null) throw new RuntimeException("How could this happen?"); + return imprt.instance(position); } else { return parent.getValue(name, position); } @@ -65,6 +67,8 @@ public class EnvironmentScript implements IEnvironmentGlobal { @Override public void putValue(String name, IZenSymbol value) { + if (value == null) throw new IllegalArgumentException("value cannot be null"); + imports.put(name, value); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java index b755b24..8c04222 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java @@ -32,6 +32,8 @@ public class ExpressionFunction extends Expression { public ExpressionFunction(ZenPosition position, List arguments, ZenType returnType, Statement[] statements) { super(position); + System.out.println("Function expression: " + arguments.size() + " arguments"); + this.arguments = arguments; this.returnType = returnType; this.statements = statements; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionTable.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionTable.java index bd5d648..5efb103 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionTable.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionTable.java @@ -66,6 +66,8 @@ public class ExpressionTable extends Expression { @Override public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { + System.out.println("Casting Table to " + type.getName()); + if (type instanceof ZenTypeAssociative) { ZenTypeAssociative keyType = (ZenTypeAssociative) type; Expression[] newKeys = new Expression[keys.length]; @@ -77,8 +79,11 @@ public class ExpressionTable extends Expression { } return new ExpressionTable(getPosition(), newKeys, newValues, type); + } else if (this.type.canCastImplicit(type, environment)) { + return this.type.cast(position, environment, this, type); } else { - return super.cast(position, environment, type); + environment.error(position, "cannot cast " + this.type + " to " + type); + return new ExpressionInvalid(position, type); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java index 9f0b16d..1ed79a4 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java @@ -68,7 +68,7 @@ public class SymbolPackage implements IZenSymbol { } } - System.out.println("Adding " + parts[parts.length - 1] + " to package " + pkgCurrent.getName() + "(" + symbol + ")"); + //System.out.println("Adding " + parts[parts.length - 1] + " to package " + pkgCurrent.getName() + "(" + symbol + ")"); if (pkgCurrent.members.containsKey(parts[parts.length - 1])) { errors.error(null, parts[parts.length - 1] + " is already defined in that package"); } else { diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java index fd21317..f7cd2c8 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java @@ -379,13 +379,9 @@ public class ZenTypeAny extends ZenType { @Override public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { - try { - return JavaMethod - .get(environment, IAny.class, "call", Class.forName("[" + signature(IAny.class))) - .callVirtual(position, environment, receiver, arguments); - } catch (ClassNotFoundException ex) { - throw new RuntimeException(ex); - } + return JavaMethod + .get(environment, IAny.class, "call", IAny[].class) + .callVirtual(position, environment, receiver, arguments); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java index c5335cd..8186388 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java @@ -37,7 +37,13 @@ public class ZenTypeFunction extends ZenType { StringBuilder nameBuilder = new StringBuilder(); nameBuilder.append("function("); + boolean first = true; for (ZenType type : argumentTypes) { + if (first) { + first = false; + } else { + nameBuilder.append(','); + } nameBuilder.append(type.getName()); } nameBuilder.append(returnType.getName()); @@ -53,6 +59,7 @@ public class ZenTypeFunction extends ZenType { for (ZenType type : argumentTypes) { nameBuilder.append(type.getName()); } + nameBuilder.append(')'); nameBuilder.append(returnType.getName()); name = nameBuilder.toString(); } @@ -165,6 +172,8 @@ public class ZenTypeFunction extends ZenType { private boolean canCastToNative(ZenType type) { if (!(type instanceof ZenTypeNative)) return false; + //System.out.println("Check cast to native type " + type.getName()); + ZenTypeNative ntype = (ZenTypeNative) type; if (ntype.getNativeClass().isInterface() && ntype.getNativeClass().getMethods().length == 1) { // ta-da! we got a functional interface @@ -173,6 +182,7 @@ public class ZenTypeFunction extends ZenType { return true; // assume for now it is } + System.out.println("Cannot cast"); return false; } }