use of cn.nukkit.Player in project Nukkit by Nukkit.
the class PlayerInventory method sendHeldItem.
public void sendHeldItem(Player... players) {
Item item = this.getItemInHand();
MobEquipmentPacket pk = new MobEquipmentPacket();
pk.item = item;
pk.inventorySlot = pk.hotbarSlot = this.getHeldItemIndex();
for (Player player : players) {
pk.eid = this.getHolder().getId();
if (player.equals(this.getHolder())) {
pk.eid = player.getId();
this.sendSlot(this.getHeldItemIndex(), player);
}
player.dataPacket(pk);
}
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class RakNetInterface method closeSession.
@Override
public void closeSession(String identifier, String reason) {
if (this.players.containsKey(identifier)) {
Player player = this.players.get(identifier);
this.identifiers.remove(player.rawHashCode());
this.players.remove(identifier);
this.networkLatency.remove(identifier);
this.identifiersACK.remove(identifier);
player.close(player.getLeaveMessage(), reason);
}
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class RakNetInterface method putPacket.
@Override
public Integer putPacket(Player player, DataPacket packet, boolean needACK, boolean immediate) {
if (this.identifiers.containsKey(player.rawHashCode())) {
byte[] buffer;
if (packet.pid() == ProtocolInfo.BATCH_PACKET) {
buffer = ((BatchPacket) packet).payload;
} else if (!needACK) {
this.server.batchPackets(new Player[] { player }, new DataPacket[] { packet }, true);
return null;
} else {
if (!packet.isEncoded) {
packet.encode();
packet.isEncoded = true;
}
buffer = packet.getBuffer();
try {
buffer = Zlib.deflate(Binary.appendBytes(Binary.writeUnsignedVarInt(buffer.length), buffer), Server.getInstance().networkCompressionLevel);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
String identifier = this.identifiers.get(player.rawHashCode());
EncapsulatedPacket pk = null;
if (!needACK) {
if (packet.encapsulatedPacket == null) {
packet.encapsulatedPacket = new CacheEncapsulatedPacket();
packet.encapsulatedPacket.identifierACK = null;
packet.encapsulatedPacket.buffer = Binary.appendBytes((byte) 0xfe, buffer);
if (packet.getChannel() != 0) {
packet.encapsulatedPacket.reliability = 3;
packet.encapsulatedPacket.orderChannel = packet.getChannel();
packet.encapsulatedPacket.orderIndex = 0;
} else {
packet.encapsulatedPacket.reliability = 2;
}
}
pk = packet.encapsulatedPacket;
}
if (pk == null) {
pk = new EncapsulatedPacket();
pk.buffer = Binary.appendBytes((byte) 0xfe, buffer);
if (packet.getChannel() != 0) {
packet.reliability = 3;
packet.orderChannel = packet.getChannel();
packet.orderIndex = 0;
} else {
packet.reliability = 2;
}
if (needACK) {
int iACK = this.identifiersACK.get(identifier);
iACK++;
pk.identifierACK = iACK;
this.identifiersACK.put(identifier, iACK);
}
}
this.handler.sendEncapsulated(identifier, pk, (needACK ? RakNet.FLAG_NEED_ACK : 0) | (immediate ? RakNet.PRIORITY_IMMEDIATE : RakNet.PRIORITY_NORMAL));
return pk.identifierACK;
}
return null;
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class BlockFire method onEntityCollide.
@Override
public void onEntityCollide(Entity entity) {
if (!entity.hasEffect(Effect.FIRE_RESISTANCE)) {
entity.attack(new EntityDamageByBlockEvent(this, entity, DamageCause.FIRE, 1));
}
EntityCombustByBlockEvent ev = new EntityCombustByBlockEvent(this, entity, 8);
if (entity instanceof EntityArrow) {
ev.setCancelled();
}
Server.getInstance().getPluginManager().callEvent(ev);
if (!ev.isCancelled() && entity instanceof Player && !((Player) entity).isCreative()) {
entity.setOnFire(ev.getDuration());
}
}
use of cn.nukkit.Player in project Nukkit by Nukkit.
the class BlockPressurePlateBase method onEntityCollide.
@Override
public void onEntityCollide(Entity entity) {
int power = getRedstonePower();
if (power == 0) {
Event ev;
if (entity instanceof Player) {
ev = new PlayerInteractEvent((Player) entity, null, this, null, Action.PHYSICAL);
} else {
ev = new EntityInteractEvent(entity, this);
}
this.level.getServer().getPluginManager().callEvent(ev);
if (!ev.isCancelled()) {
updateState(power);
}
}
}
Aggregations