Java源码示例:cn.nukkit.block.BlockFire

示例1
public boolean isInsideOfFire() {
    for (Block block : this.getCollisionBlocks()) {
        if (block instanceof BlockFire) {
            return true;
        }
    }

    return false;
}
 
示例2
@Override
protected void initEntity() {
    super.initEntity();

    this.setHealth(4);
    this.setMaxHealth(4);

    this.state = 2;
    this.liveTime = this.level.rand.nextInt(3) + 1;

    if (isEffect && this.level.gameRules.getBoolean("dofiretick") && (this.server.getDifficulty() >= 2)) {
        Block block = this.getLevelBlock();
        if (block.getId() == 0 || block.getId() == Block.TALL_GRASS) {
            BlockFire fire = new BlockFire();
            fire.x = block.x;
            fire.y = block.y;
            fire.z = block.z;
            fire.level = level;
            this.getLevel().setBlock(fire, fire, true);
            if (fire.isBlockTopFacingSurfaceSolid(fire.down()) || fire.canNeighborBurn()) {

                BlockIgniteEvent e = new BlockIgniteEvent(block, null, this, BlockIgniteEvent.BlockIgniteCause.LIGHTNING);
                getServer().getPluginManager().callEvent(e);

                if (!e.isCancelled()) {
                    level.setBlock(fire, fire, true);
                    level.scheduleUpdate(fire, fire.tickRate() + level.rand.nextInt(10));
                }
            }
        }
    }
}
 
示例3
@Override
protected void initEntity() {
    super.initEntity();

    this.setHealth(4);
    this.setMaxHealth(4);

    this.state = 2;
    this.liveTime = ThreadLocalRandom.current().nextInt(3) + 1;

    if (isEffect && this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK) && (this.server.getDifficulty() >= 2)) {
        Block block = this.getLevelBlock();
        if (block.getId() == 0 || block.getId() == Block.TALL_GRASS) {
            BlockFire fire = (BlockFire) Block.get(BlockID.FIRE);
            fire.x = block.x;
            fire.y = block.y;
            fire.z = block.z;
            fire.level = level;
            this.getLevel().setBlock(fire, fire, true);
            if (fire.isBlockTopFacingSurfaceSolid(fire.down()) || fire.canNeighborBurn()) {

                BlockIgniteEvent e = new BlockIgniteEvent(block, null, this, BlockIgniteEvent.BlockIgniteCause.LIGHTNING);
                getServer().getPluginManager().callEvent(e);

                if (!e.isCancelled()) {
                    level.setBlock(fire, fire, true);
                    level.scheduleUpdate(fire, fire.tickRate() + ThreadLocalRandom.current().nextInt(10));
                }
            }
        }
    }
}
 
示例4
public boolean isInsideOfFire() {
    for (Block block : this.getCollisionBlocks()) {
        if (block instanceof BlockFire) {
            return true;
        }
    }

    return false;
}
 
示例5
@Override
protected void initEntity() {
    super.initEntity();

    this.setHealth(4);
    this.setMaxHealth(4);

    this.state = 2;
    this.liveTime = ThreadLocalRandom.current().nextInt(3) + 1;

    if (isEffect && this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK) && (this.server.getDifficulty() >= 2)) {
        Block block = this.getLevelBlock();
        if (block.getId() == 0 || block.getId() == Block.TALL_GRASS) {
            BlockFire fire = new BlockFire();
            fire.x = block.x;
            fire.y = block.y;
            fire.z = block.z;
            fire.level = level;
            this.getLevel().setBlock(fire, fire, true);
            if (fire.isBlockTopFacingSurfaceSolid(fire.down()) || fire.canNeighborBurn()) {

                BlockIgniteEvent e = new BlockIgniteEvent(block, null, this, BlockIgniteEvent.BlockIgniteCause.LIGHTNING);
                getServer().getPluginManager().callEvent(e);

                if (!e.isCancelled()) {
                    level.setBlock(fire, fire, true);
                    level.scheduleUpdate(fire, fire.tickRate() + ThreadLocalRandom.current().nextInt(10));
                }
            }
        }
    }
}
 
示例6
@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;

    this.entityBaseTick(tickDiff);

    if (this.state == 2) {
        this.level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_THUNDER, 93, -1, this);
        this.level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_EXPLODE, 93, -1, this);
    }

    this.state--;

    if (this.state < 0) {
        if (this.liveTime == 0) {
            this.close();
            return false;
        } else if (this.state < -this.level.rand.nextInt(10)) {
            this.liveTime--;
            this.state = 1;

            if (this.isEffect && this.level.gameRules.getBoolean("dofiretick")) {
                Block block = this.getLevelBlock();

                if (block.getId() == Block.AIR || block.getId() == Block.TALL_GRASS) {
                    BlockIgniteEvent e = new BlockIgniteEvent(block, null, this, BlockIgniteEvent.BlockIgniteCause.LIGHTNING);
                    getServer().getPluginManager().callEvent(e);

                    if (!e.isCancelled()) {
                        Block fire = new BlockFire();
                        this.level.setBlock(block, fire);
                        this.getLevel().scheduleUpdate(fire, fire.tickRate());
                    }
                }
            }
        }
    }

    if (this.state >= 0) {
        if (this.isEffect) {
            AxisAlignedBB bb = getBoundingBox().grow(3, 3, 3);
            bb.maxX += 6;

            for (Entity entity : this.level.getCollidingEntities(bb, this)) {
                entity.onStruckByLightning(this);
            }
        }
    }

    return true;
}
 
示例7
@Override
public boolean onActivate(Level level, Player player, Block block, Block target, BlockFace face, double fx, double fy, double fz) {
    if (block.getId() == AIR && (target instanceof BlockSolid)) {
        if (target.getId() == OBSIDIAN) {
            int targetX = target.getFloorX();
            int targetY = target.getFloorY();
            int targetZ = target.getFloorZ();
            int x_max = targetX;
            int x_min = targetX;
            int x;
            for (x = targetX + 1; level.getBlock(new Vector3(x, targetY, targetZ)).getId() == OBSIDIAN; x++) {
                x_max++;
            }
            for (x = targetX - 1; level.getBlock(new Vector3(x, targetY, targetZ)).getId() == OBSIDIAN; x--) {
                x_min--;
            }
            int count_x = x_max - x_min + 1;
            int z_max = targetZ;
            int z_min = targetZ;
            int z;
            for (z = targetZ + 1; level.getBlock(new Vector3(targetX, targetY, z)).getId() == OBSIDIAN; z++) {
                z_max++;
            }
            for (z = targetZ - 1; level.getBlock(new Vector3(targetX, targetY, z)).getId() == OBSIDIAN; z--) {
                z_min--;
            }
            int count_z = z_max - z_min + 1;
            int z_max_y = targetY;
            int z_min_y = targetY;
            int y;
            for (y = targetY; level.getBlock(new Vector3(targetX, y, z_max)).getId() == OBSIDIAN; y++) {
                z_max_y++;
            }
            for (y = targetY; level.getBlock(new Vector3(targetX, y, z_min)).getId() == OBSIDIAN; y++) {
                z_min_y++;
            }
            int y_max = Math.min(z_max_y, z_min_y) - 1;
            int count_y = y_max - targetY + 2;
            if ((count_x >= 4 && count_x <= 23 || count_z >= 4 && count_z <= 23) && count_y >= 5 && count_y <= 23) {
                int count_up = 0;
                for (int up_z = z_min; level.getBlock(new Vector3(targetX, y_max, up_z)).getId() == OBSIDIAN && up_z <= z_max; up_z++) {
                    count_up++;
                }
                if (count_up == count_z) {
                    for (int block_z = z_min + 1; block_z < z_max; block_z++) {
                        for (int block_y = targetY + 1; block_y < y_max; block_y++) {
                            level.setBlock(new Vector3(targetX, block_y, block_z), new BlockNetherPortal());
                        }
                    }
                    return true;
                }
            }
        }
        BlockFire fire = new BlockFire();
        fire.x = block.x;
        fire.y = block.y;
        fire.z = block.z;
        fire.level = level;

        if (fire.isBlockTopFacingSurfaceSolid(fire.down()) || fire.canNeighborBurn()) {
            BlockIgniteEvent e = new BlockIgniteEvent(block, null, player, BlockIgniteEvent.BlockIgniteCause.FLINT_AND_STEEL);
            block.getLevel().getServer().getPluginManager().callEvent(e);

            if (!e.isCancelled()) {
                level.setBlock(fire, fire, true);
                level.scheduleUpdate(fire, fire.tickRate() + level.rand.nextInt(10));
            }
            return true;
        }
        if ((player.gamemode & 0x01) == 0 && this.useOn(block)) {
            if (this.getDamage() >= this.getMaxDurability()) {
                player.getInventory().setItemInHand(new Item(Item.AIR, 0, 0));
            } else {
                this.meta++;
                player.getInventory().setItemInHand(this);
            }
        }
        return true;
    }
    return false;
}
 
示例8
@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;

    this.entityBaseTick(tickDiff);

    if (this.state == 2) {
        this.level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_THUNDER, 93, -1);
        this.level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_EXPLODE, 93, -1);
    }

    this.state--;

    if (this.state < 0) {
        if (this.liveTime == 0) {
            this.close();
            return false;
        } else if (this.state < -ThreadLocalRandom.current().nextInt(10)) {
            this.liveTime--;
            this.state = 1;

            if (this.isEffect && this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK)) {
                Block block = this.getLevelBlock();

                if (block.getId() == Block.AIR || block.getId() == Block.TALL_GRASS) {
                    BlockIgniteEvent e = new BlockIgniteEvent(block, null, this, BlockIgniteEvent.BlockIgniteCause.LIGHTNING);
                    getServer().getPluginManager().callEvent(e);

                    if (!e.isCancelled()) {
                        Block fire = new BlockFire();
                        this.level.setBlock(block, fire);
                        this.getLevel().scheduleUpdate(fire, fire.tickRate());
                    }
                }
            }
        }
    }

    if (this.state >= 0) {
        if (this.isEffect) {
            AxisAlignedBB bb = getBoundingBox().grow(3, 3, 3);
            bb.setMaxX(bb.getMaxX() + 6);

            for (Entity entity : this.level.getCollidingEntities(bb, this)) {
                entity.onStruckByLightning(this);
            }
        }
    }

    return true;
}