UNPKG

@magikcraft/mct1

Version:

Minecraft for Type 1 Diabetes

99 lines (86 loc) 3.15 kB
import { QuestConfig, QuestMCT1 } from '@magikcraft/mct1/quests/Quest' import * as questTools from '@magikcraft/mct1/quests/quest-tools' import { worldly } from '@magikcraft/mct1/world' import ArenaStairs from './arena-stairs' import * as Locations from './locs' const Material = Java.type('org.bukkit.Material') const Location = Java.type('org.bukkit.Location') const EntityType = Java.type('org.bukkit.entity.EntityType') export default class QuestMCT1Magmaboss extends QuestMCT1 { arenaStairs: any constructor(conf: QuestConfig) { super(conf) this.Locs = Locations.getLocations(this.world) this.state = { bossSceneStarted: false, magmaboss: undefined, } } start() { super.start() super.registerEvents() const { player, world, log, options, Locs, state } = this const { regions, locations, waypoints } = Locs // Setup arenaStairs this.arenaStairs = new ArenaStairs(Locs.regions.arenaStairs) this.arenaStairs.saveRegion() this.arenaStairs.hideRegion() // Region: complete worldly(world).registerRegion( 'arenaThreshold', waypoints.arenaThreshold.region[0], waypoints.arenaThreshold.region[1] ) worldly(world).registerPlayerEnterRegionEvent( 'arenaThreshold', event => { this.startBossScene() } ) this.setTimeout(() => { Locs.locations.dispensers.forEach(loc => { loc.block.setType(Material.DISPENSER) loc.block.setData(1) }) }, 1000) } startBossScene() { const { player, world, log, options, Locs, state } = this if (state.bossSceneStarted) return state.bossSceneStarted = true state.magmaboss = world.spawnEntity( Locs.locations.magmabossSpawn, EntityType.MAGMA_CUBE ) state.magmaboss.setSize(5) const marker = questTools.makeInvisibleArmourStand( Locs.locations.magmabossSpawn ) // Reveal arena stairs once the magmaboss is dead. this.setInterval(() => { let magambossStillAlive = false marker.getNearbyEntities(40, 20, 40).forEach(e => { if (e.type == 'MAGMA_CUBE') magambossStillAlive = true }) if (!magambossStillAlive) { this.arenaStairs.replaceRegion() } }, 3000) // ## helper const dispenseLava = loc => { if (loc.block.type != 'DISPENSER') return questTools.shootDispenser(loc.block, 'LAVA_BUCKET') const lavaLoc = new Location(loc.world, loc.x, loc.y + 1, loc.z) this.setTimeout(() => { lavaLoc.block.setType(Material.AIR) }, 7500) } // Dispense lava on interval Locs.locations.dispensers.forEach((loc, i) => { dispenseLava(loc) this.setInterval(() => { dispenseLava(loc) }, 25000) }) } }