mirror of
https://github.com/GTNewHorizons/CraftTweaker.git
synced 2026-11-14 01:04:14 +00:00
82 lines
2.8 KiB
Java
82 lines
2.8 KiB
Java
package minetweaker.mc1102.brackets;
|
|
|
|
import minetweaker.*;
|
|
import minetweaker.annotations.BracketHandler;
|
|
import minetweaker.api.oredict.IOreDictEntry;
|
|
import minetweaker.mc1102.oredict.MCOreDictEntry;
|
|
import minetweaker.runtime.GlobalRegistry;
|
|
import stanhebben.zenscript.compiler.IEnvironmentGlobal;
|
|
import stanhebben.zenscript.expression.*;
|
|
import stanhebben.zenscript.expression.partial.IPartialExpression;
|
|
import stanhebben.zenscript.parser.Token;
|
|
import stanhebben.zenscript.symbols.IZenSymbol;
|
|
import stanhebben.zenscript.type.natives.*;
|
|
import stanhebben.zenscript.util.ZenPosition;
|
|
|
|
import java.util.*;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* @author Stan
|
|
*/
|
|
@BracketHandler
|
|
public class OreBracketHandler implements IBracketHandler {
|
|
|
|
public static IOreDictEntry getOre(String name) {
|
|
return new MCOreDictEntry(name);
|
|
}
|
|
|
|
public static List<IOreDictEntry> getOreList(String wildcardName) {
|
|
List<IOreDictEntry> result = new ArrayList<>();
|
|
Pattern wildcardPattern = Pattern.compile(wildcardName.replaceAll("\\*", ".+"));
|
|
|
|
for(IOreDictEntry someOreDict : MineTweakerAPI.oreDict.getEntries()) {
|
|
String oreDictName = someOreDict.getName();
|
|
if(wildcardPattern.matcher(oreDictName).matches()) {
|
|
result.add(getOre(oreDictName));
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
@Override
|
|
public IZenSymbol resolve(IEnvironmentGlobal environment, List<Token> tokens) {
|
|
if(tokens.size() > 2) {
|
|
if(tokens.get(0).getValue().equals("ore") && tokens.get(1).getValue().equals(":")) {
|
|
return find(environment, tokens, 2, tokens.size());
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private IZenSymbol find(IEnvironmentGlobal environment, List<Token> 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(environment, valueBuilder.toString());
|
|
}
|
|
|
|
private class OreReferenceSymbol implements IZenSymbol {
|
|
|
|
private final IEnvironmentGlobal environment;
|
|
private final String name;
|
|
|
|
public OreReferenceSymbol(IEnvironmentGlobal environment, String name) {
|
|
this.environment = environment;
|
|
this.name = name;
|
|
}
|
|
|
|
@Override
|
|
public IPartialExpression instance(ZenPosition position) {
|
|
IJavaMethod method = JavaMethod.get(GlobalRegistry.getTypeRegistry(), OreBracketHandler.class, name.contains("*") ? "getOreList" : "getOre", String.class);
|
|
|
|
return new ExpressionCallStatic(position, environment, method, new ExpressionString(position, name));
|
|
}
|
|
}
|
|
}
|