Search in sources :

Example 26 with Player

use of cn.nukkit.Player in project Nukkit by Nukkit.

the class QueryRegenerateEvent method getLongQuery.

public byte[] getLongQuery(byte[] buffer) {
    if (buffer == null)
        buffer = new byte[Character.MAX_VALUE];
    FastByteArrayOutputStream query = new FastByteArrayOutputStream(buffer);
    try {
        String plist = this.server_engine;
        if (this.plugins.length > 0 && this.listPlugins) {
            plist += ":";
            for (Plugin p : this.plugins) {
                PluginDescription d = p.getDescription();
                plist += " " + d.getName().replace(";", "").replace(":", "").replace(" ", "_") + " " + d.getVersion().replace(";", "").replace(":", "").replace(" ", "_") + ";";
            }
            plist = plist.substring(0, plist.length() - 2);
        }
        query.write("splitnum".getBytes());
        query.write((byte) 0x00);
        query.write((byte) 128);
        query.write((byte) 0x00);
        LinkedHashMap<String, String> KVdata = new LinkedHashMap<>();
        KVdata.put("hostname", this.serverName);
        KVdata.put("gametype", this.gameType);
        KVdata.put("game_id", GAME_ID);
        KVdata.put("version", this.version);
        KVdata.put("server_engine", this.server_engine);
        KVdata.put("plugins", plist);
        KVdata.put("map", this.map);
        KVdata.put("numplayers", String.valueOf(this.numPlayers));
        KVdata.put("maxplayers", String.valueOf(this.maxPlayers));
        KVdata.put("whitelist", this.whitelist);
        KVdata.put("hostip", this.ip);
        KVdata.put("hostport", String.valueOf(this.port));
        for (Map.Entry<String, String> entry : KVdata.entrySet()) {
            query.write(entry.getKey().getBytes(StandardCharsets.UTF_8));
            query.write((byte) 0x00);
            query.write(entry.getValue().getBytes(StandardCharsets.UTF_8));
            query.write((byte) 0x00);
        }
        query.write(new byte[] { 0x00, 0x01 });
        query.write("player_".getBytes());
        query.write(new byte[] { 0x00, 0x00 });
        for (Player player : this.players) {
            query.write(player.getName().getBytes(StandardCharsets.UTF_8));
            query.write((byte) 0x00);
        }
        query.write((byte) 0x00);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return query.toByteArray();
}
Also used : Player(cn.nukkit.Player) FastByteArrayOutputStream(cn.nukkit.nbt.stream.FastByteArrayOutputStream) IOException(java.io.IOException) PluginDescription(cn.nukkit.plugin.PluginDescription) Plugin(cn.nukkit.plugin.Plugin)

Example 27 with Player

use of cn.nukkit.Player in project Nukkit by Nukkit.

the class PlayerInventory method sendArmorSlot.

public void sendArmorSlot(int index, Player[] players) {
    Item[] armor = this.getArmorContents();
    MobArmorEquipmentPacket pk = new MobArmorEquipmentPacket();
    pk.eid = this.getHolder().getId();
    pk.slots = armor;
    pk.encode();
    pk.isEncoded = true;
    for (Player player : players) {
        if (player.equals(this.getHolder())) {
            InventorySlotPacket pk2 = new InventorySlotPacket();
            pk2.inventoryId = InventoryContentPacket.SPECIAL_ARMOR;
            pk2.slot = index - this.getSize();
            pk2.item = this.getItem(index);
            player.dataPacket(pk2);
        } else {
            player.dataPacket(pk);
        }
    }
}
Also used : Item(cn.nukkit.item.Item) Player(cn.nukkit.Player) InventorySlotPacket(cn.nukkit.network.protocol.InventorySlotPacket) MobArmorEquipmentPacket(cn.nukkit.network.protocol.MobArmorEquipmentPacket)

Example 28 with Player

use of cn.nukkit.Player in project Nukkit by Nukkit.

the class PlayerInventory 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) {
        if (player.equals(this.getHolder())) {
            pk.inventoryId = ContainerIds.INVENTORY;
            player.dataPacket(pk);
        } else {
            int id = player.getWindowId(this);
            if (id == -1) {
                this.close(player);
                continue;
            }
            pk.inventoryId = id;
            player.dataPacket(pk.clone());
        }
    }
}
Also used : Player(cn.nukkit.Player) InventorySlotPacket(cn.nukkit.network.protocol.InventorySlotPacket)

Example 29 with Player

use of cn.nukkit.Player in project Nukkit by Nukkit.

the class PlayerInventory method equipItem.

/**
 * Called when a client equips a hotbar inventorySlot. This method should not be used by plugins.
 * This method will call PlayerItemHeldEvent.
 *
 * @param slot hotbar slot Number of the hotbar slot to equip.
 * @return boolean if the equipment change was successful, false if not.
 */
public boolean equipItem(int slot) {
    if (!isHotbarSlot(slot)) {
        this.sendContents((Player) this.getHolder());
        return false;
    }
    if (this.getHolder() instanceof Player) {
        PlayerItemHeldEvent ev = new PlayerItemHeldEvent((Player) this.getHolder(), this.getItem(slot), slot);
        this.getHolder().getLevel().getServer().getPluginManager().callEvent(ev);
        if (ev.isCancelled()) {
            this.sendContents(this.getViewers());
            return false;
        }
    }
    this.setHeldItemIndex(slot, false);
    return true;
}
Also used : Player(cn.nukkit.Player) PlayerItemHeldEvent(cn.nukkit.event.player.PlayerItemHeldEvent)

Example 30 with Player

use of cn.nukkit.Player in project Nukkit by Nukkit.

the class PlayerInventory method sendArmorContents.

public void sendArmorContents(Player[] players) {
    Item[] armor = this.getArmorContents();
    MobArmorEquipmentPacket pk = new MobArmorEquipmentPacket();
    pk.eid = this.getHolder().getId();
    pk.slots = armor;
    pk.encode();
    pk.isEncoded = true;
    for (Player player : players) {
        if (player.equals(this.getHolder())) {
            InventoryContentPacket pk2 = new InventoryContentPacket();
            pk2.inventoryId = InventoryContentPacket.SPECIAL_ARMOR;
            pk2.slots = armor;
            player.dataPacket(pk2);
        } else {
            player.dataPacket(pk);
        }
    }
}
Also used : Item(cn.nukkit.item.Item) Player(cn.nukkit.Player) MobArmorEquipmentPacket(cn.nukkit.network.protocol.MobArmorEquipmentPacket) InventoryContentPacket(cn.nukkit.network.protocol.InventoryContentPacket)

Aggregations

Player (cn.nukkit.Player)85 TranslationContainer (cn.nukkit.lang.TranslationContainer)24 Entity (cn.nukkit.entity.Entity)13 BlockEntity (cn.nukkit.blockentity.BlockEntity)10 Item (cn.nukkit.item.Item)10 Level (cn.nukkit.level.Level)7 IOException (java.io.IOException)6 CompoundTag (cn.nukkit.nbt.tag.CompoundTag)5 Block (cn.nukkit.block.Block)4 ItemBlock (cn.nukkit.item.ItemBlock)4 BlockAir (cn.nukkit.block.BlockAir)3 EventHandler (cn.nukkit.event.EventHandler)3 BaseFullChunk (cn.nukkit.level.format.generic.BaseFullChunk)3 InventoryContentPacket (cn.nukkit.network.protocol.InventoryContentPacket)3 InventorySlotPacket (cn.nukkit.network.protocol.InventorySlotPacket)3 User (me.lucko.luckperms.common.model.User)3 IPlayer (cn.nukkit.IPlayer)2 CommandSender (cn.nukkit.command.CommandSender)2 EntityItem (cn.nukkit.entity.item.EntityItem)2 EntityArrow (cn.nukkit.entity.projectile.EntityArrow)2