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
|
|
|
|
|
|
|
public class ExperienceOrb extends Entity {
|
|
|
|
|
|
|
|
private short experienceCount;
|
|
|
|
|
|
|
|
public ExperienceOrb(short experienceCount) {
|
2020-08-03 18:45:58 +02:00
|
|
|
super(EntityType.EXPERIENCE_ORB);
|
2019-08-31 07:54:53 +02:00
|
|
|
setGravity(0.02f);
|
|
|
|
setBoundingBox(0.5f, 0.5f, 0.5f);
|
|
|
|
this.experienceCount = experienceCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-06-01 00:51:31 +02:00
|
|
|
public void update(long time) {
|
2019-08-31 07:54:53 +02:00
|
|
|
// TODO slide toward nearest player
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void spawn() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-05-23 17:57:56 +02:00
|
|
|
public boolean addViewer(Player player) {
|
2020-08-03 06:36:42 +02:00
|
|
|
final boolean result = super.addViewer(player); // Add player to viewers list
|
|
|
|
if (!result)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
final PlayerConnection playerConnection = player.getPlayerConnection();
|
2019-08-31 07:54:53 +02:00
|
|
|
|
|
|
|
SpawnExperienceOrbPacket experienceOrbPacket = new SpawnExperienceOrbPacket();
|
|
|
|
experienceOrbPacket.entityId = getEntityId();
|
|
|
|
experienceOrbPacket.position = getPosition();
|
|
|
|
experienceOrbPacket.expCount = experienceCount;
|
2020-05-24 20:21:17 +02:00
|
|
|
|
2019-08-31 07:54:53 +02:00
|
|
|
playerConnection.sendPacket(experienceOrbPacket);
|
2020-05-24 20:21:17 +02:00
|
|
|
playerConnection.sendPacket(getVelocityPacket());
|
|
|
|
|
2020-08-03 06:36:42 +02:00
|
|
|
return result;
|
2019-08-31 07:54:53 +02:00
|
|
|
}
|
|
|
|
|
2020-05-24 20:21:17 +02:00
|
|
|
/**
|
2020-08-03 06:36:42 +02:00
|
|
|
* Get the experience count
|
|
|
|
*
|
|
|
|
* @return the experience count
|
2020-05-24 20:21:17 +02:00
|
|
|
*/
|
2019-08-31 07:54:53 +02:00
|
|
|
public short getExperienceCount() {
|
|
|
|
return experienceCount;
|
|
|
|
}
|
|
|
|
|
2020-05-24 20:21:17 +02:00
|
|
|
/**
|
2020-08-03 06:36:42 +02:00
|
|
|
* Change the experience count
|
|
|
|
*
|
|
|
|
* @param experienceCount the new experience count
|
2020-05-24 20:21:17 +02:00
|
|
|
*/
|
2019-08-31 07:54:53 +02:00
|
|
|
public void setExperienceCount(short experienceCount) {
|
2020-05-24 20:21:17 +02:00
|
|
|
// Remove the entity in order to respawn it with the correct experience count
|
2020-08-03 06:36:42 +02:00
|
|
|
getViewers().forEach(player -> removeViewer(player));
|
2020-05-24 20:21:17 +02:00
|
|
|
|
2019-08-31 07:54:53 +02:00
|
|
|
this.experienceCount = experienceCount;
|
2020-05-24 20:21:17 +02:00
|
|
|
|
2020-08-03 06:36:42 +02:00
|
|
|
getViewers().forEach(player -> addViewer(player));
|
2019-08-31 07:54:53 +02:00
|
|
|
}
|
|
|
|
}
|