Search in sources :

Example 21 with CompoundTag

use of cn.nukkit.nbt.tag.CompoundTag in project Nukkit by Nukkit.

the class Entity method saveNBT.

public void saveNBT() {
    if (!(this instanceof Player)) {
        this.namedTag.putString("id", this.getSaveId());
        if (!this.getNameTag().equals("")) {
            this.namedTag.putString("CustomName", this.getNameTag());
            this.namedTag.putBoolean("CustomNameVisible", this.isNameTagVisible());
        } else {
            this.namedTag.remove("CustomName");
            this.namedTag.remove("CustomNameVisible");
        }
    }
    this.namedTag.putList(new ListTag<DoubleTag>("Pos").add(new DoubleTag("0", this.x)).add(new DoubleTag("1", this.y)).add(new DoubleTag("2", this.z)));
    this.namedTag.putList(new ListTag<DoubleTag>("Motion").add(new DoubleTag("0", this.motionX)).add(new DoubleTag("1", this.motionY)).add(new DoubleTag("2", this.motionZ)));
    this.namedTag.putList(new ListTag<FloatTag>("Rotation").add(new FloatTag("0", (float) this.yaw)).add(new FloatTag("1", (float) this.pitch)));
    this.namedTag.putFloat("FallDistance", this.fallDistance);
    this.namedTag.putShort("Fire", this.fireTicks);
    this.namedTag.putShort("Air", this.getDataPropertyShort(DATA_AIR));
    this.namedTag.putBoolean("OnGround", this.onGround);
    this.namedTag.putBoolean("Invulnerable", this.invulnerable);
    this.namedTag.putFloat("Scale", this.scale);
    if (!this.effects.isEmpty()) {
        ListTag<CompoundTag> list = new ListTag<>("ActiveEffects");
        for (Effect effect : this.effects.values()) {
            list.add(new CompoundTag(String.valueOf(effect.getId())).putByte("Id", effect.getId()).putByte("Amplifier", effect.getAmplifier()).putInt("Duration", effect.getDuration()).putBoolean("Ambient", false).putBoolean("ShowParticles", effect.isVisible()));
        }
        this.namedTag.putList(list);
    } else {
        this.namedTag.remove("ActiveEffects");
    }
}
Also used : Player(cn.nukkit.Player) FloatTag(cn.nukkit.nbt.tag.FloatTag) Effect(cn.nukkit.potion.Effect) DoubleTag(cn.nukkit.nbt.tag.DoubleTag) ListTag(cn.nukkit.nbt.tag.ListTag) CompoundTag(cn.nukkit.nbt.tag.CompoundTag)

Example 22 with CompoundTag

use of cn.nukkit.nbt.tag.CompoundTag in project Nukkit by Nukkit.

the class Entity method initEntity.

protected void initEntity() {
    if (this.namedTag.contains("ActiveEffects")) {
        ListTag<CompoundTag> effects = this.namedTag.getList("ActiveEffects", CompoundTag.class);
        for (CompoundTag e : effects.getAll()) {
            Effect effect = Effect.getEffect(e.getByte("Id"));
            if (effect == null) {
                continue;
            }
            effect.setAmplifier(e.getByte("Amplifier")).setDuration(e.getInt("Duration")).setVisible(e.getBoolean("showParticles"));
            this.addEffect(effect);
        }
    }
    if (this.namedTag.contains("CustomName")) {
        this.setNameTag(this.namedTag.getString("CustomName"));
        if (this.namedTag.contains("CustomNameVisible")) {
            this.setNameTagVisible(this.namedTag.getBoolean("CustomNameVisible"));
        }
    }
    this.scheduleUpdate();
}
Also used : Effect(cn.nukkit.potion.Effect) CompoundTag(cn.nukkit.nbt.tag.CompoundTag)

Example 23 with CompoundTag

use of cn.nukkit.nbt.tag.CompoundTag in project Nukkit by Nukkit.

the class EntityHumanType method saveNBT.

@Override
public void saveNBT() {
    super.saveNBT();
    this.namedTag.putList(new ListTag<CompoundTag>("Inventory"));
    if (this.inventory != null) {
        for (int slot = 0; slot < 9; ++slot) {
            this.namedTag.getList("Inventory", CompoundTag.class).add(new CompoundTag().putByte("Count", 0).putShort("Damage", 0).putByte("Slot", slot).putByte("TrueSlot", -1).putShort("id", 0));
        }
        int slotCount = Player.SURVIVAL_SLOTS + 9;
        for (int slot = 9; slot < slotCount; ++slot) {
            Item item = this.inventory.getItem(slot - 9);
            this.namedTag.getList("Inventory", CompoundTag.class).add(NBTIO.putItemHelper(item, slot));
        }
        for (int slot = 100; slot < 104; ++slot) {
            Item item = this.inventory.getItem(this.inventory.getSize() + slot - 100);
            if (item != null && item.getId() != Item.AIR) {
                this.namedTag.getList("Inventory", CompoundTag.class).add(NBTIO.putItemHelper(item, slot));
            }
        }
    }
    this.namedTag.putList(new ListTag<CompoundTag>("EnderItems"));
    if (this.enderChestInventory != null) {
        for (int slot = 0; slot < 27; ++slot) {
            Item item = this.enderChestInventory.getItem(slot);
            if (item != null && item.getId() != Item.AIR) {
                this.namedTag.getList("EnderItems", CompoundTag.class).add(NBTIO.putItemHelper(item, slot));
            }
        }
    }
}
Also used : Item(cn.nukkit.item.Item) CompoundTag(cn.nukkit.nbt.tag.CompoundTag)

Example 24 with CompoundTag

use of cn.nukkit.nbt.tag.CompoundTag in project Nukkit by Nukkit.

the class ItemBow method onReleaseUsing.

public boolean onReleaseUsing(Player player) {
    Item itemArrow = Item.get(Item.ARROW, 0, 1);
    if (player.isSurvival() && !player.getInventory().contains(itemArrow)) {
        player.getInventory().sendContents(player);
        return false;
    }
    double damage = 2;
    boolean flame = false;
    if (this.hasEnchantments()) {
        Enchantment bowDamage = this.getEnchantment(Enchantment.ID_BOW_POWER);
        if (bowDamage != null && bowDamage.getLevel() > 0) {
            damage += 0.25 * (bowDamage.getLevel() + 1);
        }
        Enchantment flameEnchant = this.getEnchantment(Enchantment.ID_BOW_FLAME);
        flame = flameEnchant != null && flameEnchant.getLevel() > 0;
    }
    CompoundTag nbt = new CompoundTag().putList(new ListTag<DoubleTag>("Pos").add(new DoubleTag("", player.x)).add(new DoubleTag("", player.y + player.getEyeHeight())).add(new DoubleTag("", player.z))).putList(new ListTag<DoubleTag>("Motion").add(new DoubleTag("", -Math.sin(player.yaw / 180 * Math.PI) * Math.cos(player.pitch / 180 * Math.PI))).add(new DoubleTag("", -Math.sin(player.pitch / 180 * Math.PI))).add(new DoubleTag("", Math.cos(player.yaw / 180 * Math.PI) * Math.cos(player.pitch / 180 * Math.PI)))).putList(new ListTag<FloatTag>("Rotation").add(new FloatTag("", (player.yaw > 180 ? 360 : 0) - (float) player.yaw)).add(new FloatTag("", (float) -player.pitch))).putShort("Fire", player.isOnFire() || flame ? 45 * 60 : 0).putDouble("damage", damage);
    int diff = (Server.getInstance().getTick() - player.getStartActionTick());
    double p = (double) diff / 20;
    double f = Math.min((p * p + p * 2) / 3, 1) * 2;
    EntityShootBowEvent entityShootBowEvent = new EntityShootBowEvent(player, this, new EntityArrow(player.chunk, nbt, player, f == 2), f);
    if (f < 0.1 || diff < 5) {
        entityShootBowEvent.setCancelled();
    }
    Server.getInstance().getPluginManager().callEvent(entityShootBowEvent);
    if (entityShootBowEvent.isCancelled()) {
        entityShootBowEvent.getProjectile().kill();
        player.getInventory().sendContents(player);
    } else {
        entityShootBowEvent.getProjectile().setMotion(entityShootBowEvent.getProjectile().getMotion().multiply(entityShootBowEvent.getForce()));
        if (player.isSurvival()) {
            Enchantment infinity;
            if (!this.hasEnchantments() || (infinity = this.getEnchantment(Enchantment.ID_BOW_INFINITY)) == null || infinity.getLevel() <= 0)
                player.getInventory().removeItem(itemArrow);
            if (!this.isUnbreakable()) {
                Enchantment durability = this.getEnchantment(Enchantment.ID_DURABILITY);
                if (!(durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= new Random().nextInt(100))) {
                    this.setDamage(this.getDamage() + 1);
                    if (this.getDamage() >= 385) {
                        player.getInventory().setItemInHand(new ItemBlock(new BlockAir(), 0, 0));
                    } else {
                        player.getInventory().setItemInHand(this);
                    }
                }
            }
        }
        if (entityShootBowEvent.getProjectile() instanceof EntityProjectile) {
            ProjectileLaunchEvent projectev = new ProjectileLaunchEvent(entityShootBowEvent.getProjectile());
            Server.getInstance().getPluginManager().callEvent(projectev);
            if (projectev.isCancelled()) {
                entityShootBowEvent.getProjectile().kill();
            } else {
                entityShootBowEvent.getProjectile().spawnToAll();
                player.level.addSound(player, Sound.RANDOM_BOW, 1, 1, player.getViewers().values());
            }
        } else {
            entityShootBowEvent.getProjectile().spawnToAll();
        }
    }
    return true;
}
Also used : BlockAir(cn.nukkit.block.BlockAir) EntityArrow(cn.nukkit.entity.projectile.EntityArrow) EntityShootBowEvent(cn.nukkit.event.entity.EntityShootBowEvent) ProjectileLaunchEvent(cn.nukkit.event.entity.ProjectileLaunchEvent) DoubleTag(cn.nukkit.nbt.tag.DoubleTag) ListTag(cn.nukkit.nbt.tag.ListTag) FloatTag(cn.nukkit.nbt.tag.FloatTag) Random(java.util.Random) Enchantment(cn.nukkit.item.enchantment.Enchantment) CompoundTag(cn.nukkit.nbt.tag.CompoundTag) EntityProjectile(cn.nukkit.entity.projectile.EntityProjectile)

Example 25 with CompoundTag

use of cn.nukkit.nbt.tag.CompoundTag in project Nukkit by Nukkit.

the class Item method clearCustomName.

public Item clearCustomName() {
    if (!this.hasCompoundTag()) {
        return this;
    }
    CompoundTag tag = this.getNamedTag();
    if (tag.contains("display") && tag.get("display") instanceof CompoundTag) {
        tag.getCompound("display").remove("Name");
        if (tag.getCompound("display").isEmpty()) {
            tag.remove("display");
        }
        this.setNamedTag(tag);
    }
    return this;
}
Also used : CompoundTag(cn.nukkit.nbt.tag.CompoundTag)

Aggregations

CompoundTag (cn.nukkit.nbt.tag.CompoundTag)74 ListTag (cn.nukkit.nbt.tag.ListTag)28 BlockEntity (cn.nukkit.blockentity.BlockEntity)13 DoubleTag (cn.nukkit.nbt.tag.DoubleTag)13 FloatTag (cn.nukkit.nbt.tag.FloatTag)13 Tag (cn.nukkit.nbt.tag.Tag)13 StringTag (cn.nukkit.nbt.tag.StringTag)12 Map (java.util.Map)8 Entity (cn.nukkit.entity.Entity)7 IOException (java.io.IOException)7 Player (cn.nukkit.Player)5 BinaryStream (cn.nukkit.utils.BinaryStream)5 ArrayList (java.util.ArrayList)5 BlockRail (cn.nukkit.block.BlockRail)4 FullChunk (cn.nukkit.level.format.FullChunk)4 BaseFullChunk (cn.nukkit.level.format.generic.BaseFullChunk)4 Rail (cn.nukkit.utils.Rail)4 File (java.io.File)4 BlockEntityChest (cn.nukkit.blockentity.BlockEntityChest)3 BlockEntitySpawnable (cn.nukkit.blockentity.BlockEntitySpawnable)3