use of cn.nukkit.Player in project Nukkit by Nukkit.
the class BaseInventory method sendSlot.
@Override
public void sendSlot(int index, Player... players) {
InventorySlotPacket pk = new InventorySlotPacket();
pk.slot = index;
pk.item = this.getItem(index).clone();
for (Player player : players) {
int id = player.getWindowId(this);
if (id == -1) {
this.close(player);
continue;
}
pk.inventoryId = id;
player.dataPacket(pk);
}
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class BaseInventory method sendContents.
@Override
public void sendContents(Player... players) {
InventoryContentPacket pk = new InventoryContentPacket();
pk.slots = new Item[this.getSize()];
for (int i = 0; i < this.getSize(); ++i) {
pk.slots[i] = this.getItem(i);
}
for (Player player : players) {
int id = player.getWindowId(this);
if (id == -1 || !player.spawned) {
this.close(player);
continue;
}
pk.inventoryId = id;
player.dataPacket(pk);
}
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class EntityVehicle method mountEntity.
/**
* Mount or Dismounts an Entity from a vehicle
*
* @param entity The target Entity
* @return {@code true} if the mounting successful
*/
@Override
public boolean mountEntity(Entity entity) {
Objects.requireNonNull(entity, "The target of the mounting entity can't be null");
this.PitchDelta = 0.0D;
this.YawDelta = 0.0D;
if (entity.riding != null) {
EntityVehicleExitEvent ev = new EntityVehicleExitEvent(entity, this);
server.getPluginManager().callEvent(ev);
if (ev.isCancelled()) {
return false;
}
SetEntityLinkPacket pk;
pk = new SetEntityLinkPacket();
// Weird Weird Weird
pk.rider = getId();
pk.riding = entity.getId();
pk.type = 3;
Server.broadcastPacket(this.hasSpawned.values(), pk);
if (entity instanceof Player) {
pk = new SetEntityLinkPacket();
pk.rider = getId();
pk.riding = entity.getId();
pk.type = 3;
((Player) entity).dataPacket(pk);
}
entity.riding = null;
linkedEntity = null;
entity.setDataFlag(DATA_FLAGS, DATA_FLAG_RIDING, false);
return true;
}
EntityVehicleEnterEvent ev = new EntityVehicleEnterEvent(entity, this);
server.getPluginManager().callEvent(ev);
if (ev.isCancelled()) {
return false;
}
SetEntityLinkPacket pk;
pk = new SetEntityLinkPacket();
pk.rider = this.getId();
pk.riding = entity.getId();
pk.type = 2;
Server.broadcastPacket(this.hasSpawned.values(), pk);
if (entity instanceof Player) {
pk = new SetEntityLinkPacket();
pk.rider = this.getId();
pk.riding = 0;
pk.type = 2;
((Player) entity).dataPacket(pk);
}
entity.riding = this;
linkedEntity = entity;
entity.setDataFlag(DATA_FLAGS, DATA_FLAG_RIDING, true);
updateRiderPosition(getMountedYOffset());
return true;
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class EntityXPOrb method onUpdate.
@Override
public boolean onUpdate(int currentTick) {
if (this.closed) {
return false;
}
int tickDiff = currentTick - this.lastUpdate;
if (tickDiff <= 0 && !this.justCreated) {
return true;
}
this.lastUpdate = currentTick;
boolean hasUpdate = entityBaseTick(tickDiff);
if (this.isAlive()) {
if (this.pickupDelay > 0 && this.pickupDelay < 32767) {
// Infinite delay
this.pickupDelay -= tickDiff;
if (this.pickupDelay < 0) {
this.pickupDelay = 0;
}
} else {
for (Entity entity : this.level.getCollidingEntities(this.boundingBox, this)) {
if (entity instanceof Player) {
if (((Player) entity).pickupEntity(this, false)) {
return true;
}
}
}
}
this.motionY -= this.getGravity();
if (this.checkObstruction(this.x, this.y, this.z)) {
hasUpdate = true;
}
if (this.closestPlayer == null || this.closestPlayer.distanceSquared(this) > 64.0D) {
for (Player p : level.getPlayers().values()) {
if (!p.isSpectator() && p.distance(this) <= 8) {
this.closestPlayer = p;
break;
}
}
}
if (this.closestPlayer != null && this.closestPlayer.isSpectator()) {
this.closestPlayer = null;
}
if (this.closestPlayer != null) {
double dX = (this.closestPlayer.x - this.x) / 8.0D;
double dY = (this.closestPlayer.y + (double) this.closestPlayer.getEyeHeight() / 2.0D - this.y) / 8.0D;
double dZ = (this.closestPlayer.z - this.z) / 8.0D;
double d = Math.sqrt(dX * dX + dY * dY + dZ * dZ);
double diff = 1.0D - d;
if (diff > 0.0D) {
diff = diff * diff;
this.motionX += dX / d * diff * 0.1D;
this.motionY += dY / d * diff * 0.1D;
this.motionZ += dZ / d * diff * 0.1D;
}
}
this.move(this.motionX, this.motionY, this.motionZ);
double friction = 1d - this.getDrag();
if (this.onGround && (Math.abs(this.motionX) > 0.00001 || Math.abs(this.motionZ) > 0.00001)) {
friction = this.getLevel().getBlock(this.temporalVector.setComponents((int) Math.floor(this.x), (int) Math.floor(this.y - 1), (int) Math.floor(this.z) - 1)).getFrictionFactor() * friction;
}
this.motionX *= friction;
this.motionY *= 1 - this.getDrag();
this.motionZ *= friction;
if (this.onGround) {
this.motionY *= -0.5;
}
this.updateMovement();
if (this.age > 6000) {
this.kill();
hasUpdate = true;
}
}
return hasUpdate || !this.onGround || Math.abs(this.motionX) > 0.00001 || Math.abs(this.motionY) > 0.00001 || Math.abs(this.motionZ) > 0.00001;
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class EntityEnderPearl method onUpdate.
@Override
public boolean onUpdate(int currentTick) {
if (this.closed) {
return false;
}
this.timing.startTiming();
boolean hasUpdate = super.onUpdate(currentTick);
if (this.isCollided && this.shootingEntity instanceof Player) {
this.shootingEntity.teleport(new Vector3(NukkitMath.floorDouble(this.x) + 0.5, this.y, NukkitMath.floorDouble(this.z) + 0.5), TeleportCause.ENDER_PEARL);
if ((((Player) this.shootingEntity).getGamemode() & 0x01) == 0)
this.shootingEntity.attack(5);
this.level.addSound(this, Sound.MOB_ENDERMEN_PORTAL);
}
if (this.age > 1200 || this.isCollided) {
this.kill();
hasUpdate = true;
}
this.timing.stopTiming();
return hasUpdate;
}
Aggregations