2014-12-15 00:11:48 +00:00
|
|
|
package com.cricketcraft.chisel.utils;
|
2014-03-16 22:26:43 +01:00
|
|
|
|
2014-12-14 20:05:39 +00:00
|
|
|
import java.util.Random;
|
|
|
|
|
|
2015-01-18 14:40:39 -05:00
|
|
|
import joptsimple.internal.Strings;
|
2014-03-16 22:26:43 +01:00
|
|
|
import net.minecraft.block.Block;
|
|
|
|
|
import net.minecraft.entity.Entity;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
|
|
|
import net.minecraft.item.Item;
|
|
|
|
|
import net.minecraft.item.ItemStack;
|
2015-01-09 02:33:03 -05:00
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
2014-03-16 22:26:43 +01:00
|
|
|
import net.minecraft.util.MathHelper;
|
|
|
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
|
|
|
import net.minecraft.util.Vec3;
|
|
|
|
|
import net.minecraft.world.World;
|
|
|
|
|
|
2015-01-18 14:40:39 -05:00
|
|
|
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
|
|
|
|
|
import com.cricketcraft.chisel.carving.Carving;
|
2015-01-18 16:17:04 -05:00
|
|
|
import com.cricketcraft.chisel.item.chisel.ChiselMode;
|
2015-01-18 14:40:39 -05:00
|
|
|
|
2015-01-07 19:50:18 -05:00
|
|
|
public class General {
|
|
|
|
|
|
|
|
|
|
public static Random rand = new Random();
|
|
|
|
|
|
|
|
|
|
public static void propelTowards(Entity what, Entity whereTo, double force) {
|
|
|
|
|
double dx = whereTo.posX - what.posX;
|
|
|
|
|
double dy = whereTo.posY - what.posY;
|
|
|
|
|
double dz = whereTo.posZ - what.posZ;
|
|
|
|
|
double total = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
|
|
|
|
|
|
|
|
if (total == 0) {
|
|
|
|
|
what.motionX = 0;
|
|
|
|
|
what.motionY = 0;
|
|
|
|
|
what.motionZ = 0;
|
|
|
|
|
} else {
|
|
|
|
|
what.motionX = dx / total * force;
|
|
|
|
|
what.motionY = dy / total * force;
|
|
|
|
|
what.motionZ = dz / total * force;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static boolean isInRange(double distance, double x1, double y1, double z1, double x2, double y2, double z2) {
|
|
|
|
|
double x = x1 - x2;
|
|
|
|
|
double y = y1 - y2;
|
|
|
|
|
double z = z1 - z2;
|
|
|
|
|
|
|
|
|
|
return x * x + y * y + z * z < distance * distance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Item getItem(ItemStack stack) {
|
|
|
|
|
if (stack == null)
|
|
|
|
|
return null;
|
|
|
|
|
if (stack.getItem() == null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
return stack.getItem();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static String getName(Item item) {
|
|
|
|
|
String res = item.getUnlocalizedName();
|
|
|
|
|
return cleanTags(res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static String getName(Block block) {
|
|
|
|
|
String res = block.getUnlocalizedName();
|
|
|
|
|
return cleanTags(res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static String cleanTags(String tag) {
|
|
|
|
|
return tag.replaceAll("[Cc]hisel\\p{Punct}", "").replaceFirst("^tile\\.", "").replaceFirst("^item\\.", "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3) {
|
|
|
|
|
float var4 = 1.0F;
|
|
|
|
|
float var5 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * var4;
|
|
|
|
|
float var6 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * var4;
|
|
|
|
|
double var7 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * var4;
|
|
|
|
|
double var9 = par2EntityPlayer.prevPosY + (par2EntityPlayer.posY - par2EntityPlayer.prevPosY) * var4 + 1.62D - par2EntityPlayer.yOffset;
|
|
|
|
|
double var11 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * var4;
|
|
|
|
|
// TODO- 1.7.10 fix?
|
|
|
|
|
Vec3 var13 = Vec3.createVectorHelper(var7, var9, var11);
|
|
|
|
|
float var14 = MathHelper.cos(-var6 * 0.017453292F - (float) Math.PI);
|
|
|
|
|
float var15 = MathHelper.sin(-var6 * 0.017453292F - (float) Math.PI);
|
|
|
|
|
float var16 = -MathHelper.cos(-var5 * 0.017453292F);
|
|
|
|
|
float var17 = MathHelper.sin(-var5 * 0.017453292F);
|
|
|
|
|
float var18 = var15 * var16;
|
|
|
|
|
float var20 = var14 * var16;
|
|
|
|
|
double var21 = 5.0D;
|
|
|
|
|
|
|
|
|
|
if (par2EntityPlayer instanceof EntityPlayerMP) {
|
|
|
|
|
var21 = ((EntityPlayerMP) par2EntityPlayer).theItemInWorldManager.getBlockReachDistance();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Vec3 var23 = var13.addVector(var18 * var21, var17 * var21, var20 * var21);
|
|
|
|
|
return par1World.rayTraceBlocks(var13, var23, par3);
|
|
|
|
|
}
|
2015-01-09 02:33:03 -05:00
|
|
|
|
|
|
|
|
public static ItemStack getChiselTarget(ItemStack chisel) {
|
|
|
|
|
return chisel.hasTagCompound() ? ItemStack.loadItemStackFromNBT(chisel.stackTagCompound.getCompoundTag("chiselTarget")) : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static final String[] sGNames = new String[] { "White", "Orange", "Magenta", "Light Blue", "Yellow", "Lime", "Pink", "Gray", "Light Gray", "Cyan", "Purple", "Blue", "Brown", "Green",
|
|
|
|
|
"Red", "Black" };
|
|
|
|
|
|
2015-01-18 14:40:39 -05:00
|
|
|
public static final String[] featureColors = new String[] { "white", "orange", "magenta", "lightblue", "yellow", "lime", "pink", "darkgray", "lightgray", "cyan", "purple", "blue", "brown",
|
|
|
|
|
"green", "red", "black" };
|
2015-01-11 20:53:24 -05:00
|
|
|
|
2015-01-09 02:33:03 -05:00
|
|
|
public static void setChiselTarget(ItemStack chisel, ItemStack target) {
|
|
|
|
|
initTag(chisel);
|
|
|
|
|
NBTTagCompound targetTag = new NBTTagCompound();
|
|
|
|
|
if (target != null) {
|
|
|
|
|
target.writeToNBT(targetTag);
|
|
|
|
|
}
|
|
|
|
|
chisel.getTagCompound().setTag("chiselTarget", targetTag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void initTag(ItemStack stack) {
|
|
|
|
|
if (!stack.hasTagCompound()) {
|
|
|
|
|
stack.setTagCompound(new NBTTagCompound());
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-01-18 14:40:39 -05:00
|
|
|
|
|
|
|
|
private static final String MODE_KEY = "chiselMode";
|
|
|
|
|
public static ChiselMode getChiselMode(ItemStack chisel) {
|
|
|
|
|
if (chisel.stackTagCompound == null || Strings.isNullOrEmpty(chisel.stackTagCompound.getString(MODE_KEY))) {
|
|
|
|
|
initTag(chisel);
|
|
|
|
|
chisel.stackTagCompound.setString(MODE_KEY, ChiselMode.SINGLE.name());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Enum.valueOf(ChiselMode.class, chisel.stackTagCompound.getString(MODE_KEY));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void setChiselMode(ItemStack chisel, ChiselMode mode) {
|
|
|
|
|
initTag(chisel);
|
|
|
|
|
chisel.stackTagCompound.setString(MODE_KEY, mode.name());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static ICarvingVariation getVariation(ItemStack stack) {
|
|
|
|
|
return Carving.chisel.getVariation(Block.getBlockFromItem(stack.getItem()), stack.getItemDamage());
|
|
|
|
|
}
|
2014-03-16 22:26:43 +01:00
|
|
|
}
|