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

81 lines
2.3 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
import net.minestom.server.instance.Instance;
2020-04-24 03:25:58 +02:00
import net.minestom.server.network.packet.server.play.SpawnExperienceOrbPacket;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.Position;
2020-10-24 10:46:23 +02:00
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
2019-08-31 07:54:53 +02:00
public class ExperienceOrb extends Entity {
private short experienceCount;
public ExperienceOrb(short experienceCount, @NotNull Position spawnPosition) {
super(EntityType.EXPERIENCE_ORB, spawnPosition);
setGravity(0.02f, 0.04f, 1.96f);
2019-08-31 07:54:53 +02:00
setBoundingBox(0.5f, 0.5f, 0.5f);
this.experienceCount = experienceCount;
}
public ExperienceOrb(short experienceCount, @NotNull Position spawnPosition, @Nullable Instance instance) {
this(experienceCount, spawnPosition);
if (instance != null) {
setInstance(instance);
}
}
2019-08-31 07:54:53 +02:00
@Override
public void update(long time) {
2019-08-31 07:54:53 +02:00
// TODO slide toward nearest player
}
@Override
public void spawn() {
}
@Override
2020-10-24 10:46:23 +02:00
public boolean addViewer(@NotNull 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;
2019-08-31 07:54:53 +02:00
playerConnection.sendPacket(experienceOrbPacket);
playerConnection.sendPacket(getVelocityPacket());
2020-09-24 01:50:25 +02:00
return true;
2019-08-31 07:54:53 +02:00
}
/**
2020-10-15 21:16:31 +02:00
* Gets the experience count.
2020-08-03 06:36:42 +02:00
*
* @return the experience count
*/
2019-08-31 07:54:53 +02:00
public short getExperienceCount() {
return experienceCount;
}
/**
2020-10-15 21:16:31 +02:00
* Changes the experience count.
2020-08-03 06:36:42 +02:00
*
* @param experienceCount the new experience count
*/
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
2020-09-24 01:50:25 +02:00
getViewers().forEach(this::removeViewer);
2019-08-31 07:54:53 +02:00
this.experienceCount = experienceCount;
2020-09-24 01:50:25 +02:00
getViewers().forEach(this::addViewer);
2019-08-31 07:54:53 +02:00
}
}