package openmods.fakeplayer; import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; import openmods.fakeplayer.FakePlayerPool.PlayerUserReturning; import openmods.utils.InventoryUtils; import openmods.utils.MathUtils; public class UseItemAction implements PlayerUserReturning<ItemStack> { private final ItemStack stack; private final Vec3 playerPos; private final Vec3 clickPos; private final Vec3 hitPos; private final ForgeDirection side; public UseItemAction(ItemStack stack, Vec3 playerPos, Vec3 clickPos, Vec3 hitPos, ForgeDirection side) { this.stack = stack; this.playerPos = playerPos; this.clickPos = clickPos; this.hitPos = hitPos; this.side = side; } @Override public ItemStack usePlayer(OpenModsFakePlayer player) { player.inventory.currentItem = 0; player.inventory.setInventorySlotContents(0, stack); final float deltaX = (float)(clickPos.xCoord - playerPos.xCoord); final float deltaY = (float)(clickPos.yCoord - playerPos.yCoord); final float deltaZ = (float)(clickPos.zCoord - playerPos.zCoord); final float distanceInGroundPlain = (float)Math.sqrt((float)MathUtils.lengthSq(deltaX, deltaZ)); final float yaw = (float)(Math.atan2(deltaX, deltaZ) * -180 / Math.PI); final float pitch = (float)(Math.atan2(deltaY, distanceInGroundPlain) * -180 / Math.PI); player.setPositionAndRotation(playerPos.xCoord, playerPos.yCoord, playerPos.zCoord, yaw, pitch); player.tryPlaceItem( stack, (int)clickPos.xCoord, (int)clickPos.yCoord, (int)clickPos.zCoord, side, (float)hitPos.xCoord, (float)hitPos.yCoord, (float)hitPos.zCoord); return InventoryUtils.returnItem(player.inventory.getCurrentItem()); } }