UNPKG

@magikcraft/mct1

Version:

Minecraft for Type 1 Diabetes

100 lines (99 loc) 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var vector3_1 = require("@magikcraft/mct1/vector3"); var utils = require("utils"); var log_1 = require("@magikcraft/mct1/log"); var log = log_1.Logger(__filename); var Material = Java.type('org.bukkit.Material'); var Effect = Java.type('org.bukkit.Effect'); var Sound = Java.type('org.bukkit.Sound'); var Rockfall = /** @class */ (function () { function Rockfall(region) { this.blocks = []; this.region = region; this.upperY = this.region.vectorA.y > this.region.vectorB.y ? this.region.vectorA.y : this.region.vectorB.y; this.saveRegion(); this.replaceRegion(); } Rockfall.prototype.saveRegion = function () { // Make schematic var startLoc = new vector3_1.Vector3(Math.min.apply(Math, this.region.xArray()), Math.min.apply(Math, this.region.yArray()), Math.min.apply(Math, this.region.zArray())); var world = utils.world(this.region.getWorld()); var layer = 0; for (var y = startLoc.y; y < startLoc.y + this.region.yLength(); y++) { layer++; for (var x = startLoc.x; x < startLoc.x + this.region.xLength(); x++) { for (var z = startLoc.z; z < startLoc.z + this.region.zLength(); z++) { var block = world.getBlockAt(x, y, z); this.blocks.push({ layer: layer, type: block.type, location: block.location, data: block.data, }); } } } }; Rockfall.prototype.replaceRegion = function () { var startLoc = new vector3_1.Vector3(Math.min.apply(Math, this.region.xArray()), Math.min.apply(Math, this.region.yArray()), Math.min.apply(Math, this.region.zArray())); var world = utils.world(this.region.getWorld()); for (var y = startLoc.y; y < startLoc.y + this.region.yLength(); y++) { for (var x = startLoc.x; x < startLoc.x + this.region.xLength(); x++) { for (var z = startLoc.z; z < startLoc.z + this.region.zLength(); z++) { world.getBlockAt(x, y, z).setType(Material.AIR); } } } }; Rockfall.prototype.doRockfall = function () { var _this = this; var world = utils.world(this.region.getWorld()); var soundIndex = 0; var sounds = [ Sound.BLOCK_GRAVEL_FALL, undefined, // undefined, undefined, Sound.BLOCK_SAND_FALL, undefined, // undefined, undefined, Sound.ENTITY_DRAGON_FIREBALL_EXPLODE, undefined, ]; var interval = 0; this.blocks.forEach(function (block) { interval = Math.floor(Math.random() * 100) * 5 + block.layer * 500; var sound = sounds[soundIndex]; soundIndex++; if (soundIndex === sounds.length) soundIndex = 0; setTimeout(function () { var loc = block.location; var dropLoc = loc; dropLoc.setY(_this.upperY - 1); dropLoc.setX(loc.x + 0.5); dropLoc.setZ(loc.z + 0.5); world.spawnFallingBlock(dropLoc, block.type, block.data); loc.world.playEffect(loc, Effect.WITHER_BREAK_BLOCK, 100); if (sound) loc.world.playSound(loc, sound, 5, 1); // BLOCK_STONE_FALL // world.createExplosion(loc.x, loc.y, loc.z, 1, false, false); }, interval); }); // After rockfall is complete... setTimeout(function () { world.entities.forEach(function (entity) { if (entity.type == 'DROPPED_ITEM') { entity.remove(); } }); log('rockfall complete!'); }, interval + 1000); }; return Rockfall; }()); exports.default = Rockfall;