313 lines
7.1 KiB
Java
313 lines
7.1 KiB
Java
package tschipp.carryon.common.helper;
|
|
|
|
import java.util.Map;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.nbt.NBTBase;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.scoreboard.Score;
|
|
import net.minecraft.scoreboard.ScoreObjective;
|
|
import net.minecraft.scoreboard.Scoreboard;
|
|
import net.minecraft.stats.Achievement;
|
|
import net.minecraft.stats.AchievementList;
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
public class ScriptParseHelper
|
|
{
|
|
|
|
public static boolean matches(double number, String cond)
|
|
{
|
|
if (cond == null)
|
|
return true;
|
|
|
|
try
|
|
{
|
|
if (cond.contains("<="))
|
|
{
|
|
return number <= Double.parseDouble(cond.replace("<=", ""));
|
|
}
|
|
if (cond.contains(">="))
|
|
{
|
|
return number >= Double.parseDouble(cond.replace(">=", ""));
|
|
}
|
|
if (cond.contains("<"))
|
|
{
|
|
return number < Double.parseDouble(cond.replace("<", ""));
|
|
}
|
|
if (cond.contains(">"))
|
|
{
|
|
return number > Double.parseDouble(cond.replace(">", ""));
|
|
}
|
|
if (cond.contains("="))
|
|
{
|
|
return number == Double.parseDouble(cond.replace("=", ""));
|
|
}
|
|
else
|
|
return number == Double.parseDouble(cond);
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
new InvalidConfigException(e.getMessage()).printException();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static boolean matches(Block block, String cond)
|
|
{
|
|
if (cond == null)
|
|
return true;
|
|
|
|
Block toCheck = StringParser.getBlock(cond);
|
|
if (toCheck != null)
|
|
return block == toCheck;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static boolean matches(NBTTagCompound toCheck, NBTTagCompound toMatch)
|
|
{
|
|
if (toCheck == null || toMatch == null)
|
|
return true;
|
|
|
|
boolean matching = true;
|
|
for (String key : toMatch.getKeySet())
|
|
{
|
|
NBTBase tag = toMatch.getTag(key);
|
|
key = key.replace("\"", "");
|
|
NBTBase tagToCheck = toCheck.getTag(key);
|
|
if (!tag.equals(tagToCheck))
|
|
matching = false;
|
|
}
|
|
|
|
return matching;
|
|
}
|
|
|
|
public static double[] getXYZArray(String s)
|
|
{
|
|
double[] d = new double[3];
|
|
d[0] = getValueFromString(s, "x");
|
|
d[1] = getValueFromString(s, "y");
|
|
d[2] = getValueFromString(s, "z");
|
|
|
|
return d;
|
|
}
|
|
|
|
|
|
public static double[] getScale(String s)
|
|
{
|
|
double[] d = new double[3];
|
|
d[0] = getScaleValueFromString(s, "x");
|
|
d[1] = getScaleValueFromString(s, "y");
|
|
d[2] = getScaleValueFromString(s, "z");
|
|
|
|
return d;
|
|
}
|
|
|
|
public static double getScaleValueFromString(String toGetFrom, String key)
|
|
{
|
|
if(toGetFrom == null)
|
|
return 1;
|
|
|
|
String[] s = toGetFrom.split(",");
|
|
for (String string : s)
|
|
{
|
|
if (string.contains(key) && string.contains("="))
|
|
{
|
|
double numb = 1;
|
|
string = string.replace(key + "=", "");
|
|
|
|
try
|
|
{
|
|
numb = Double.parseDouble(string);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
}
|
|
|
|
return numb;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
public static Achievement getAchievementFromString(String s)
|
|
{
|
|
if (s == null)
|
|
return null;
|
|
|
|
for (Achievement a : AchievementList.ACHIEVEMENTS)
|
|
{
|
|
if (a.statId.equals(s))
|
|
return a;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static boolean matchesScore(EntityPlayer player, String cond)
|
|
{
|
|
if (cond == null)
|
|
return true;
|
|
|
|
Scoreboard score = player.getWorldScoreboard();
|
|
String numb;
|
|
String scorename;
|
|
int iE = cond.indexOf("=");
|
|
int iG = cond.indexOf(">");
|
|
int iL = cond.indexOf("<");
|
|
|
|
if (iG == -1 ? true : iE < iG && iL == -1 ? true : iE < iL && iE != -1)
|
|
numb = cond.substring(iE);
|
|
else if (iE == -1 ? true : iG < iE && iL == -1 ? true : iG < iL && iG != -1)
|
|
numb = cond.substring(iG);
|
|
else
|
|
numb = cond.substring(iL);
|
|
|
|
scorename = cond.replace(numb, "");
|
|
Map<ScoreObjective, Score> o = score.getObjectivesForEntity(player.getGameProfile().getName());
|
|
if (o != null)
|
|
{
|
|
Score sc = o.get(score.getObjective(scorename));
|
|
if (sc != null)
|
|
{
|
|
int points = sc.getScorePoints();
|
|
|
|
return matches(points, numb);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static boolean matches(BlockPos pos, String cond)
|
|
{
|
|
if (cond == null)
|
|
return true;
|
|
|
|
BlockPos blockpos = new BlockPos(getValueFromString(cond, "x"), getValueFromString(cond, "y"), getValueFromString(cond, "z"));
|
|
BlockPos expand = new BlockPos(getValueFromString(cond, "dx"), getValueFromString(cond, "dy"), getValueFromString(cond, "dz"));
|
|
BlockPos expanded = blockpos.add(expand);
|
|
|
|
boolean x = (pos.getX() >= blockpos.getX() && pos.getX() <= expanded.getX()) || blockpos.getX() == 0;
|
|
boolean y = (pos.getY() >= blockpos.getY() && pos.getY() <= expanded.getY()) || blockpos.getY() == 0;
|
|
boolean z = (pos.getZ() >= blockpos.getZ() && pos.getZ() <= expanded.getZ()) || blockpos.getZ() == 0;
|
|
|
|
return x && y && z;
|
|
}
|
|
|
|
public static double getValueFromString(String toGetFrom, String key)
|
|
{
|
|
if(toGetFrom == null)
|
|
return 0;
|
|
|
|
String[] s = toGetFrom.split(",");
|
|
for (String string : s)
|
|
{
|
|
if (string.contains(key) && string.contains("="))
|
|
{
|
|
double numb = 0;
|
|
string = string.replace(key + "=", "");
|
|
|
|
try
|
|
{
|
|
numb = Double.parseDouble(string);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
}
|
|
|
|
return numb;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static boolean matches(Material material, String cond)
|
|
{
|
|
if (cond == null)
|
|
return true;
|
|
|
|
switch (cond)
|
|
{
|
|
case "air":
|
|
return material == Material.AIR;
|
|
case "anvil":
|
|
return material == Material.ANVIL;
|
|
case "barrier":
|
|
return material == Material.BARRIER;
|
|
case "cactus":
|
|
return material == Material.CACTUS;
|
|
case "cake":
|
|
return material == Material.CAKE;
|
|
case "carpet":
|
|
return material == Material.CARPET;
|
|
case "circuits":
|
|
return material == Material.CIRCUITS;
|
|
case "clay":
|
|
return material == Material.CLAY;
|
|
case "cloth":
|
|
return material == Material.CLOTH;
|
|
case "coral":
|
|
return material == Material.CORAL;
|
|
case "dragon_egg":
|
|
return material == Material.DRAGON_EGG;
|
|
case "fire":
|
|
return material == Material.FIRE;
|
|
case "glass":
|
|
return material == Material.GLASS;
|
|
case "gourd":
|
|
return material == Material.GOURD;
|
|
case "grass":
|
|
return material == Material.GRASS;
|
|
case "ground":
|
|
return material == Material.GROUND;
|
|
case "ice":
|
|
return material == Material.ICE;
|
|
case "iron":
|
|
return material == Material.IRON;
|
|
case "lava":
|
|
return material == Material.LAVA;
|
|
case "leaves":
|
|
return material == Material.LEAVES;
|
|
case "packed_ice":
|
|
return material == Material.PACKED_ICE;
|
|
case "piston":
|
|
return material == Material.PISTON;
|
|
case "plants":
|
|
return material == Material.PLANTS;
|
|
case "portal":
|
|
return material == Material.PORTAL;
|
|
case "redstone_light":
|
|
return material == Material.REDSTONE_LIGHT;
|
|
case "rock":
|
|
return material == Material.ROCK;
|
|
case "sand":
|
|
return material == Material.SAND;
|
|
case "snow":
|
|
return material == Material.SNOW;
|
|
case "sponge":
|
|
return material == Material.SPONGE;
|
|
case "structure_void":
|
|
return material == Material.STRUCTURE_VOID;
|
|
case "tnt":
|
|
return material == Material.TNT;
|
|
case "vine":
|
|
return material == Material.VINE;
|
|
case "water":
|
|
return material == Material.WATER;
|
|
case "web":
|
|
return material == Material.WEB;
|
|
case "wood":
|
|
return material == Material.WOOD;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|