1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
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;
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;
}
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;
}
}
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);
}
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;
}
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;
}
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);
}
}
}
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);
}
public static TileEntity getTileInDirection(TileEntity tile, ForgeDirection direction) {
int targetX = tile.xCoord + direction.offsetX;
int targetY = tile.yCoord + direction.offsetY;
int targetZ = tile.zCoord + direction.offsetZ;
return tile.getWorldObj().getTileEntity(targetX, targetY, targetZ);
}
public static int getFirstNonAirBlockFromTop(World world, int x, int z) {
int y;
for (y = world.getActualHeight(); world.isAirBlock(x, y - 1, z) && y > 0; y--) {}
return y;
}
public static boolean isBlockHit(MovingObjectPosition mop, TileEntity tile) {
if (tile == null) return false;
return isBlockHit(mop, tile.xCoord, tile.yCoord, tile.zCoord);
}
public static boolean isBlockHit(MovingObjectPosition mop, int x, int y, int z) {
if (mop == null) return false;
return mop.blockX == x && mop.blockY == y && mop.blockZ == z;
}
}
|