From 6312636fd9a4d0f56dc7c9ff474a99d879bcb4e9 Mon Sep 17 00:00:00 2001 From: OnyxDarkKnight Date: Mon, 23 Mar 2015 14:51:06 +0000 Subject: Reworked the whole repo. --- .../darkknight/jewelrycraft/util/BlockUtils.java | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/main/java/darkknight/jewelrycraft/util/BlockUtils.java (limited to 'src/main/java/darkknight/jewelrycraft/util/BlockUtils.java') diff --git a/src/main/java/darkknight/jewelrycraft/util/BlockUtils.java b/src/main/java/darkknight/jewelrycraft/util/BlockUtils.java new file mode 100644 index 0000000..18cb9eb --- /dev/null +++ b/src/main/java/darkknight/jewelrycraft/util/BlockUtils.java @@ -0,0 +1,155 @@ +package darkknight.jewelrycraft.util; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockUtils +{ + public static final ForgeDirection DEFAULT_BLOCK_DIRECTION = ForgeDirection.WEST; + + /** + * This method is used to get the direction an entity is facing (NORTH, SOUTH, EAST or WEST) based on the entity's rotationYaw. + * + * @param entity the living entity + * @return a direction + */ + public static ForgeDirection get2dOrientation(EntityLivingBase entity) + { + int l = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 0.5D) & 0x3; + switch(l) + { + case 0: + return ForgeDirection.SOUTH; + case 1: + return ForgeDirection.WEST; + case 2: + return ForgeDirection.NORTH; + case 3: + return ForgeDirection.EAST; + } + return ForgeDirection.SOUTH; + } + + /** + * This gets a float value depending on a direction + * + * @param direction the forge direction + * @return value depending on direction + */ + public static float getRotationFromDirection(ForgeDirection direction) + { + switch(direction) + { + case NORTH: + return 0F; + case SOUTH: + return 180F; + case WEST: + return 90F; + case EAST: + return -90F; + case DOWN: + return -90f; + case UP: + return 90f; + default: + return 0f; + } + } + + /** + * This method is used to get the direction an entity is looking at (UP or DOWN) based on the entitiy's rotationPitch + * + * @param entity the living entity + * @return a forge direction + */ + public static ForgeDirection get3dOrientation(EntityLivingBase entity) + { + if (entity.rotationPitch > 45.5F) return ForgeDirection.DOWN; + else if (entity.rotationPitch < -45.5F) return ForgeDirection.UP; + return get2dOrientation(entity); + } + + /** + * This spawns the item specified and returns the EntityItem it created + * + * @param worldObj the world + * @param x position of the item to drop on the X axis + * @param y position of the item to drop on the Y axis + * @param z position of the item to drop on the Z axis + * @param stack the item to spawn + * @return the EntityItem of the stack + */ + public static EntityItem dropItemStackInWorld(World worldObj, double x, double y, double z, ItemStack stack) + { + float f = 0.7F; + float d0 = worldObj.rand.nextFloat() * f + (1.0F - f) * 0.5F; + float d1 = worldObj.rand.nextFloat() * f + (1.0F - f) * 0.5F; + float d2 = worldObj.rand.nextFloat() * f + (1.0F - f) * 0.5F; + EntityItem entityitem = new EntityItem(worldObj, x + d0, y + d1, z + d2, stack); + entityitem.delayBeforeCanPickup = 10; + if (stack.hasTagCompound()) entityitem.getEntityItem().setTagCompound((NBTTagCompound)stack.getTagCompound().copy()); + worldObj.spawnEntityInWorld(entityitem); + return entityitem; + } + + /** + * It spawns the item with momentum in a certain direction + * + * @param world the world to spawn the item + * @param x the X coordinate to spawn it in + * @param y the Y coordinate to spawn it in + * @param z the Z coordinate to spawn it in + * @param direction the direction towards which it should eject + * @param stack the item to spawn + * @return the spawned EntityItem + */ + public static EntityItem ejectItemInDirection(World world, double x, double y, double z, ForgeDirection direction, ItemStack stack) + { + EntityItem item = BlockUtils.dropItemStackInWorld(world, x, y, z, stack); + item.motionX = direction.offsetX / 5F; + item.motionY = direction.offsetY / 5F; + item.motionZ = direction.offsetZ / 5F; + return item; + } + + /** + * Drops the content of an inventory with doubles as coordinates + * + * @param inventory the inventory the items are contained in + * @param world the world in which to spawn + * @param x the X coordinate to spawn it in + * @param y the Y coordinate to spawn it in + * @param z the Z coordinate to spawn it in + */ + public static void dropInventory(IInventory inventory, World world, double x, double y, double z) + { + if (inventory == null) return; + for(int i = 0; i < inventory.getSizeInventory(); ++i){ + ItemStack itemStack = inventory.getStackInSlot(i); + if (itemStack != null) dropItemStackInWorld(world, x, y, z, itemStack); + } + } + + /** + * Drops the content of an inventory with integer as coordinates + * + * @param inventory the inventory the items are contained in + * @param world the world in which to spawn + * @param x the X coordinate to spawn it in + * @param y the Y coordinate to spawn it in + * @param z the Z coordinate to spawn it in + */ + public static void dropInventory(IInventory inventory, World world, int x, int y, int z) + { + dropInventory(inventory, world, x + 0.5, y + 0.5, z + 0.5); + } +} \ No newline at end of file -- cgit v1.2.3