/** * Copyright (c) Lambda Innovation, 2013-2016 * This file is part of the AcademyCraft mod. * https://github.com/LambdaInnovation/AcademyCraft * Licensed under GPLv3, see project root for more information. */ package cn.academy.vanilla.teleporter.entity; import cn.academy.ability.api.data.AbilityData; import cn.academy.vanilla.teleporter.client.MarkRender; import cn.academy.vanilla.teleporter.client.TPParticleFactory; import cn.lambdalib.annoreg.core.Registrant; import cn.lambdalib.annoreg.mc.RegEntity; import cn.lambdalib.util.entityx.EntityAdvanced; import cn.lambdalib.util.generic.RandUtils; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; /** * Spawn a position mark indicating where the player would be teleport to. You * should spawn it in CLIENT ONLY. * * @author WeathFolD */ @Registrant @RegEntity(clientOnly = true) @SideOnly(Side.CLIENT) @RegEntity.HasRender public class EntityTPMarking extends EntityAdvanced { @RegEntity.Render @SideOnly(Side.CLIENT) public static MarkRender render; static TPParticleFactory particleFac = TPParticleFactory.instance; final AbilityData data; protected final EntityPlayer player; public boolean available = true; public EntityTPMarking(EntityPlayer player) { super(player.worldObj); data = AbilityData.get(player); this.player = player; setPosition(player.posX, player.posY, player.posZ); } @Override public void onUpdate() { super.onUpdate(); rotationPitch = player.rotationPitch; rotationYaw = player.rotationYaw; if (available && rand.nextDouble() < 0.4) { particleFac.setPosition(posX + RandUtils.ranged(-1, 1), posY + RandUtils.ranged(0.2, 1.6) - 1.6, posZ + RandUtils.ranged(-1, 1)); particleFac.setVelocity(RandUtils.ranged(-.03, .03), RandUtils.ranged(0, 0.05), RandUtils.ranged(-.03, .03)); worldObj.spawnEntityInWorld(particleFac.next(worldObj)); } } @Override public boolean shouldRenderInPass(int pass) { return pass == 1; } public double getDist() { return this.getDistanceToEntity(player); } @Override protected void readEntityFromNBT(NBTTagCompound p_70037_1_) { } @Override protected void writeEntityToNBT(NBTTagCompound p_70014_1_) { } }