Minestom/src/main/java/net/minestom/server/entity/ExperienceOrb.java

66 lines
1.8 KiB
Java
Raw Normal View History

2020-04-24 03:25:58 +02:00
package net.minestom.server.entity;
2019-08-31 07:54:53 +02:00
2020-04-24 03:25:58 +02:00
import net.minestom.server.network.packet.server.play.SpawnExperienceOrbPacket;
import net.minestom.server.network.player.PlayerConnection;
2019-08-31 07:54:53 +02:00
import java.util.HashSet;
import java.util.Set;
2019-08-31 07:54:53 +02:00
public class ExperienceOrb extends Entity {
private short experienceCount;
public ExperienceOrb(short experienceCount) {
super(23);
setGravity(0.02f);
setBoundingBox(0.5f, 0.5f, 0.5f);
this.experienceCount = experienceCount;
}
@Override
public void update() {
// TODO slide toward nearest player
}
@Override
public void spawn() {
}
@Override
public boolean addViewer(Player player) {
2019-08-31 07:54:53 +02:00
PlayerConnection playerConnection = player.getPlayerConnection();
SpawnExperienceOrbPacket experienceOrbPacket = new SpawnExperienceOrbPacket();
experienceOrbPacket.entityId = getEntityId();
experienceOrbPacket.position = getPosition();
experienceOrbPacket.expCount = experienceCount;
2019-08-31 07:54:53 +02:00
playerConnection.sendPacket(experienceOrbPacket);
playerConnection.sendPacket(getVelocityPacket());
return super.addViewer(player); // Add player to viewers list
2019-08-31 07:54:53 +02:00
}
/**
* @return the experience amount contained in the entity
*/
2019-08-31 07:54:53 +02:00
public short getExperienceCount() {
return experienceCount;
}
/**
* @param experienceCount the new experience amount
*/
2019-08-31 07:54:53 +02:00
public void setExperienceCount(short experienceCount) {
// Remove the entity in order to respawn it with the correct experience count
Set<Player> viewerCache = new HashSet<>(getViewers());
viewerCache.forEach(player -> removeViewer(player));
2019-08-31 07:54:53 +02:00
this.experienceCount = experienceCount;
viewerCache.forEach(player -> addViewer(player));
2019-08-31 07:54:53 +02:00
}
}