public class GSClientTickHandler {
public Minecraft mc = Minecraft.getMinecraft();
private double c;
private double s;
private double x;
private double y;
private double z;
private double finalX;
private double finalY;
private double finalZ;
private double dx;
private double dy;
private double dz;
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onClientTick(ClientTickEvent event)
{
if(event.phase == Phase.END)
{
final Minecraft minecraft = FMLClientHandler.instance().getClient();
final EntityClientPlayerMP player = minecraft.thePlayer;
final WorldClient world = minecraft.theWorld;
if (Side.CLIENT != null)
{
if (player != null && world != null && player.inventory.armorItemInSlot(2) != null && player.inventory.armorItemInSlot(2).getItem() == ItemsAddon.JetPack && mc.gameSettings.keyBindJump.getIsKeyPressed() && player.posY < 360)
{/*
((JetPack) player.inventory.armorItemInSlot(2).getItem()).setActive();
player.motionY -= 0.05D;
player.motionY += 0.07 + player.rotationPitch * 2 / 150 * 0.750;
player.fallDistance = 0.0F;
*/
//dx - смещение партикля относительно игрока (при стандартном угле обзора) по оси Х
//dy - смещение партикля относительно игрока (при стандартном угле обзора) по оси Y
//dz - смещение партикля относительно игрока (при стандартном угле обзора) по оси Z
dx = 0.0D;
dy = -0.5D;
dz = 0.0D;
c = Math.cos(player.rotationYaw - 90);
s = Math.sin(player.rotationYaw - 90);
x = dx * c - dz * s; //поворачиваем партикль в пространстве игрока
y = dy; //по этой оси вращать не надо (если ты не хочешь, чтобы партикля меняла положение в зависимости от вертикального угла взгляда игрока
z = dx * s + dz * c;
finalX = x + player.posX;//перемещаем партикль в пространство мира
finalY = y + player.posY;
finalZ = z + player.posZ;
spawnAndSetParticle("flame", world, finalX + 0.2D, finalY, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX + 0.2D, finalY - 1.0D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX + 0.2D, finalY - 1.1D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX + 0.2D, finalY - 1.2D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.0D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.1D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.2D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.3D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX - 0.2D, finalY, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX - 0.2D, finalY - 1.0D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX - 0.2D, finalY - 1.1D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("flame", world, finalX - 0.2D, finalY - 1.2D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.0D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.1D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.2D, finalZ, 0, -0.5, 0);
spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.3D, finalZ, 0, -0.5, 0);
}
}
}
}
public void spawnAndSetParticle(String s, World world, double x, double y, double z, double velX, double velY, double velZ)
{
EntityFX fx = null;
if(s.equals("flame"))
{
fx = new EntityJetpackFlameFX(world, x, y, z, velX, velY, velZ);
}
else if(s.equals("smoke"))
{
fx = new EntityJetpackSmokeFX(world, x, y, z, velX, velY, velZ);
}
mc.effectRenderer.addEffect(fx);
}
}