Posted June 24, 201312 yr Hello all! - I've been working on creating a new experience called "XM." The problem is that once you "pick it up (collide with it)," it doesn't go away, but instead keeps floating by your head. I use LivingDeathEvent to spawn in the XM. It seems like the "setDead()" function is not working...Any idea why this is happening? EntityXMOrb.java package twixthehero.ingress.entity; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import twixthehero.ingress.Ingress; import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.Player; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagInt; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.world.World; public class EntityXMOrb extends EntityXPOrb { public EntityXMOrb(World world, double x, double y, double z, int value) { super(world, x, y, z, value); } @Override public void onCollideWithPlayer(EntityPlayer player) { if (!this.worldObj.isRemote) { if (this.field_70532_c == 0 && player.xpCooldown == 0) { player.xpCooldown = 2; this.playSound("random.orb", 0.1F, 0.5F * ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.8F)); player.onItemPickup(this, 1); updatePlayer(player); informPlayer(player); this.setDead(); } } } private void updatePlayer(EntityPlayer player) { NBTTagCompound tag = player.getEntityData(); NBTBase modeTag = tag.getTag("XM"); int currentXM = ((NBTTagInt)modeTag).data; tag.setInteger("XM", currentXM + this.getXpValue()); } private void informPlayer(EntityPlayer player) { ByteArrayOutputStream os = new ByteArrayOutputStream(; DataOutputStream dos = new DataOutputStream(os); try { dos.writeInt(Ingress.XM_PICKUP_PACKET); dos.writeInt(this.getXpValue()); } catch (IOException e) { e.printStackTrace(); } Packet250CustomPayload packet = new Packet250CustomPayload(); packet.channel = "IngressXM"; packet.data = os.toByteArray(); packet.length = os.size(); PacketDispatcher.sendPacketToPlayer(packet, (Player)player); } } IngressEventHandler.java package twixthehero.ingress; import twixthehero.ingress.entity.EntityXMOrb; import net.minecraft.entity.Entity; import net.minecraftforge.event.EventPriority; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingDeathEvent; public class IngressEventHandler { @ForgeSubscribe(priority=EventPriority.HIGH) public void entityUpdate(LivingDeathEvent event) { Entity e = event.entity; int i = 125; while (i > 0) { int j = EntityXMOrb.getXPSplit(i); i -= j; e.worldObj.spawnEntityInWorld(new EntityXMOrb(e.worldObj, e.posX, e.posY, e.posZ, j)); } } }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.