Last active
September 2, 2017 14:12
-
-
Save jwulf/2b3af7f1809cc09c971df021da051fba to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| type TextComponent = any; | |
| declare interface IMagikCraftAPI { | |
| getMappedItem: () => string; | |
| setMappedItem: (key: string, value: string) => void; | |
| getSpellsList: (sender: BukkitPlayer, senderName: string) => string[]; | |
| } | |
| declare const MagikCraftAPI: IMagikCraftAPI; | |
| interface ICanon { | |
| _darkmagik_: any; | |
| console: any; | |
| constant: any; | |
| displayLocalMsg: (msg: string, ...args: any[]) => void; | |
| globalLocale: string; | |
| http: any; | |
| localiseMsg: (msg: string, ...args: any[]) => string; | |
| log: any; | |
| magik: any; | |
| MSG: any; | |
| msg: (msg_id: string) => void; | |
| plugin: any; | |
| sender: any; | |
| } | |
| interface HashMap { | |
| clear(): void; | |
| clone(): HashMap; | |
| containsKey(key: string): boolean; | |
| containsValue(value: any): boolean; | |
| entrySet(): Set<any>; | |
| get(key: string): any | undefined; | |
| isEmpty(): boolean; | |
| keySet(): Set<string>; | |
| put(key: string, value: any): void; | |
| putAll(map: HashMap): void; | |
| remove(key: string): void; | |
| size(): number; | |
| values(): any[]; | |
| toString(): string; | |
| } | |
| interface BukkitLocation { | |
| setX(x: number): void; | |
| setY(y: number): void; | |
| setZ(z: number): void; | |
| setPitch(pitch: number): void; | |
| setYaw(yaw: number): void; | |
| setWorld(world: any): void; | |
| getX(): number; | |
| getY(): number; | |
| getZ(): number; | |
| getYaw(): number; | |
| getPitch(): number; | |
| getWorld(): BukkitWorld; | |
| getBlock(): BukkitBlock; | |
| getDirection(): vector; | |
| clone(): BukkitLocation; | |
| } | |
| interface vector { | |
| multiply(num: number): vector; | |
| } | |
| interface BukkitWorldBorder { | |
| getSize(): number; | |
| setSize(size: number): void; | |
| setCenter(location: BukkitLocation): void; | |
| } | |
| interface BukkitWorld { | |
| getBlockAt(location: BukkitLocation): BukkitBlock; | |
| strikeLightning(location: BukkitLocation): void; | |
| spawnEntity(location: BukkitLocation, entityType: any): void; | |
| createExplosion(location: BukkitLocation, times: number): void; | |
| getWorldBorder(): BukkitWorldBorder; | |
| } | |
| interface BukkitBlock { | |
| location: BukkitLocation; | |
| getType(): BukkitBlockType; | |
| getRelative(x: number, y: number, z: number): BukkitBlock; | |
| setType(newType: BukkitBlockType): void; | |
| } | |
| interface BukkitBlockType { | |
| equals(comparison: any): boolean; | |
| } | |
| interface BukkitPlayer { | |
| addPotionEffect(effect: any): void; | |
| getFoodLevel(): number; | |
| setFoodLevel(level: number): void; | |
| getWorld(): BukkitWorld; | |
| getName(): string; | |
| getLocation(): BukkitLocation; | |
| getEyeLocation(): BukkitLocation; | |
| getLineOfSight(blocks: BukkitMaterial[], maxDistance: number): BukkitBlock[]; | |
| launchProjectile(projectileType: any): void; | |
| isSneaking(): boolean; | |
| } | |
| type BukkitPlugin = any; | |
| type BukkitMaterial = any; | |
| type JavaType = any; | |
| interface BossBarAPI { | |
| addBar( | |
| player: BukkitPlayer, | |
| text: TextComponent, | |
| color: BarsColor, | |
| stinterfaceyle: BarsStyle, | |
| progress: number | |
| ): BossBar; | |
| getBossBars(): BossBar[]; | |
| addBarForPlayer(player: BukkitPlayer, bossBar: BossBar): void; | |
| removeBarForPlayer(player: BukkitPlayer, bossBar: BossBar): void; | |
| Color: BarsColor; | |
| Style: BarsStyle; | |
| } | |
| interface BossBar { | |
| addPlayer(player: BukkitPlayer): void; | |
| removePlayer(player: BukkitPlayer): void; | |
| getColor(): BarsColor; | |
| setColor(color: BarsColor): void; | |
| getStyle(): BarsStyle; | |
| setStyle(style: BarsStyle): void; | |
| setProperty(property: any, flag: boolean): void; | |
| getMessage(): string; | |
| setMessage(msg: string): void; | |
| setVisible(flag: boolean): void; | |
| isVisible(): boolean; | |
| getProgress(): number; | |
| setProgress(progress: number): void; | |
| } | |
| interface BarsColor { | |
| readonly PINK: any; | |
| readonly RED: any; | |
| readonly GREEN: any; | |
| readonly BLUE: any; | |
| readonly YELLOW: any; | |
| readonly PURPLE: any; | |
| readonly WHITE: any; | |
| } | |
| interface BarsStyle { | |
| readonly PROGRESS: any; | |
| readonly NOTCHED_6: any; | |
| readonly NOTCHED_10: any; | |
| readonly NOTCHED_12: any; | |
| readonly NOTCHED_20: any; | |
| } | |
| declare namespace Java { | |
| /** | |
| * | |
| * Return a reference to a Java class. In the Nashorn JavaScript engine you can instantiate Java class instances and get a JavaScript reference to them. | |
| * | |
| * Example: | |
| * ``` | |
| * | |
| * ``` | |
| */ | |
| export function type(classname: string): any; | |
| } | |
| interface magik { | |
| /** | |
| * | |
| * A HashMap that survives engine reload, but not quitting and rejoining the server. | |
| * | |
| * @type {HashMap} | |
| * @memberof magik | |
| */ | |
| playerMap: HashMap; | |
| /** | |
| * | |
| * A HashMap that survives engine reload and quitting and rejoining the server, but not server reboot. | |
| * | |
| * @type {HashMap} | |
| * @memberof magik | |
| */ | |
| durablePlayerMap: HashMap; | |
| /** | |
| * | |
| * A shared state HashMap that is persistent for the lifecycle of the server, and is accessible from all players' engines. | |
| * | |
| * @type {HashMap} | |
| * @memberof magik | |
| */ | |
| globalMap: HashMap; | |
| /** | |
| * Return a Java class reference to an org.bukkit.* class. | |
| * | |
| * Refer to the Bukkit API documentation at https://bukkit.magikcraft.io. | |
| */ | |
| type(classname: string): JavaType; | |
| /** | |
| * Return a reference to the Magikcraft Bukkit Plugin | |
| * | |
| */ | |
| getPlugin(): BukkitPlugin; | |
| TextComponent(label: string): TextComponent; | |
| /** | |
| * Execute the callback function once, after the delay in milliseconds | |
| * | |
| * @export | |
| * @param {() => void} callback | |
| * @param {number} delay | |
| * @returns {number} | |
| */ | |
| setTimeout(callback: () => void, delay: number): number; | |
| /** | |
| * Execute the callback function multiple times, after the delay in milliseconds. | |
| * Returns a handle that can be used to clear the interval timer. | |
| * | |
| * @export | |
| * @param {() => void} callback | |
| * @param {number} delay | |
| * @returns {number} | |
| */ | |
| setInterval(callback: () => void, delay: number): number; | |
| /** | |
| * Clear the interval timer. | |
| */ | |
| clearInterval(handle: number): void; | |
| /** | |
| * User interface bars. These use BossBarAPI. | |
| */ | |
| Bars: BossBarAPI; | |
| /** | |
| * Volare means to fly. This has you float up into the air. | |
| * Be careful, because you will take damage if you fall on the ground. Landing in water causes no damage. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function fly() { | |
| * magik.volare(); | |
| * } | |
| * ``` | |
| */ | |
| volare(duration?: number): void; | |
| /** | |
| * | |
| * Return a reference to where you are looking. | |
| * | |
| * Example: | |
| * | |
| * Here's a spell that teleports you to where you are looking. | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function blink() { | |
| * const there = magik.aspecto(); | |
| * magik.ianuae(there); | |
| * } | |
| * ``` | |
| */ | |
| aspecto(): BukkitLocation; | |
| /** | |
| * The caldarium function takes an array of ingredients and returns a secret. Sometimes it's a new function name, sometimes it's a clue. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function pot() { | |
| * | |
| * } | |
| * ``` | |
| */ | |
| caldarium(ingredientsList: string[]): string; | |
| /** | |
| * Launch a firework. | |
| * | |
| * Example: | |
| * This spell will launch a firework where you are looking. | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function rocket() { | |
| * const there = magik.aspecto(); | |
| * magik.stella(there); | |
| * } | |
| * ``` | |
| */ | |
| stella(location: BukkitLocation): void; | |
| /** | |
| * Declaro - to manifest (to make clear, to bring into clarity). Manifests an item in Minecraft. | |
| * | |
| * The argument is a special code that can be found from clues in the Magikcraft universe. | |
| * | |
| * Example: | |
| * Here is how you get an elytra: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function magik_carpet() { | |
| * magik.declaro('elytra'); | |
| * } | |
| * ``` | |
| */ | |
| declaro(item: string): void; | |
| /** | |
| * | |
| * Strike lightning. | |
| * | |
| * Defaults to where you are looking if you do not specify a location. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function lightning() { | |
| * magik.shakti(); | |
| * } | |
| * ``` | |
| */ | |
| shakti(location?: BukkitLocation): void; | |
| /** | |
| * Satio feeds you with magik, giving you a full health bar. | |
| * | |
| * Example: | |
| * | |
| * ``` | |
| * function feedme() { | |
| * magik.satio(); | |
| * } | |
| * ``` | |
| */ | |
| satio(): void; | |
| /** | |
| * Generate and return a random number. | |
| * | |
| * Example: | |
| * | |
| * Here's a spell that rolls a die and produces a random number. | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function rollDie(sides = 6) { | |
| * const dieroll = magik.random(1, sides); | |
| * magik.dixit(`You rolled: ${dieroll}`); | |
| * return dieroll; | |
| * } | |
| * ``` | |
| */ | |
| random(min: number, max: number): number; | |
| /** | |
| * Return a reference to the current player Bukkit API object. | |
| * On Magikcraft campaign servers this will return null if you do not have sufficient permissions. | |
| * On Magikcraft Open Source Platform servers this always returns a reference to the player Bukkit API object. | |
| * | |
| */ | |
| getSender(): BukkitPlayer; | |
| /** | |
| * Dixit prints a message out to the user's Minecraft console. It's useful for debugging. | |
| * This is the equivalent of `console.log`. | |
| * You can send a message to another user by passing their name as the optional second argument. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function say(msg="Hello world!") { | |
| * magik.dixit(msg); | |
| * } | |
| * ``` | |
| */ | |
| dixit(message: string, playername?: string): void; | |
| /** | |
| * Call a task function the specified number of times. When finished, optionally execute a callback function. Delay is the number of milliseconds between invocations of the task function. | |
| * | |
| * Example: | |
| * This spell will have you jump multiple times in a row, to get extra height. Be careful though - jump too high and you'll hurt yourself if you fall! | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function multiJump(times = 2) { | |
| * magik.doNTimes(exsultus, times, 1000); | |
| * } | |
| * ``` | |
| * | |
| * Here is a version with a callback function that executes when it is finished: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function mj(times = 2, delay = 1000) { | |
| * magik.doNTimes(exsultus, times, delay, () => magik.dixit("Done!")); | |
| * } | |
| * ``` | |
| */ | |
| doNTimes(task: () => void | any, times: number, delay: number, callback?: () => void | any): void; | |
| /** | |
| * Jump into the air. | |
| * | |
| * The power parameter is between 0 and 100 - it is a percentage of your maximum jumping power. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function jump(power = 100) { | |
| * magik.exsultus(power); | |
| * } | |
| * ``` | |
| */ | |
| exsultus(power: number): void; | |
| /** | |
| * | |
| * Recall your memory, which can be of any type, including a dictionary-like object. | |
| * | |
| * Examples: | |
| * | |
| * Here is a simple example that retrieves your memory: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function remember() { | |
| * const thing = magik.exmemento(); | |
| * magik.dixit(thing.toString()); | |
| * } | |
| * ``` | |
| * | |
| * Here's a more advanced example that retrieves memories by name, using a dictionary-like object: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function remember(name = "default") { | |
| * const memory = magik.exmemento() || {}; | |
| * if (memory[name]) { | |
| * magik.dixit(memory[name]); | |
| * } else { | |
| * magik.dixit("I don't remember that!"); | |
| * } | |
| * } | |
| */ | |
| exmemento(): any; | |
| /** | |
| * Create a global namespace. Use this to maintain state. | |
| * | |
| * Example: | |
| * Create a namespace called 'mct1'. | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function initialiseMCT1() { | |
| * const mct1 = magik.global('mct1'); | |
| * mct1.state = { | |
| * insulin: 0.4, | |
| * bgl: 0.3 | |
| * } | |
| * } | |
| * ``` | |
| */ | |
| global(namespace: string): object; | |
| /** | |
| * Return a reference to the current location. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function where() { | |
| * const here = magik.hic(); | |
| * magik.dixit(here); | |
| * return here; | |
| * } | |
| * ``` | |
| * | |
| */ | |
| hic(): BukkitLocation; | |
| /** | |
| * Toss another player. Iacta gives us "eject" in English. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function toss(playername) { | |
| * magik.iacta(playername); | |
| * } | |
| * ``` | |
| */ | |
| iacta(playername: string): void; | |
| /** | |
| * Teleport. Ianuae comes from Janus, the guardian of doorways. January is the gateway or entry to the year. | |
| * | |
| * Examples: | |
| * Here is a spell that takes a location from your memory and teleports you there. | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function teleport() { | |
| * const where = magik.exmemento(); | |
| * magik.ianuae(where); | |
| * } | |
| * ``` | |
| * Here is a more advanced version that assumes that your memory contains a dictionary of locations: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function tp(where = "default") { | |
| * const memory = magik.exmemento(); | |
| * if (memory[where]) { | |
| * magik.ianuae(memory[where]); | |
| * } else { | |
| * magik.dixit(`I don't remember ${where}!`); | |
| * } | |
| * } | |
| * ``` | |
| */ | |
| ianuae(location: BukkitLocation): void; | |
| /** | |
| * Set another player on fire. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function ignite(name: string) { | |
| * magik.incendium(name); | |
| * } | |
| */ | |
| incendium(playername: string): void; | |
| /** | |
| * Memorize something for later. You have a single memory location that can store anything, including a dictionary-like object. This memory is wiped when you disconnect from the server. | |
| * | |
| * Examples: | |
| * | |
| * Here is a simple example that allows you to remember the current location: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function memorize() { | |
| * const here = magik.hic(); | |
| * magik.memento(hic); | |
| * } | |
| * ``` | |
| * | |
| * Here's a more advanced example that allows you to remember various locations: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function memorize(name = "default") { | |
| * const memory = magik.exmemento() || {}; | |
| * memory[name] = magik.hic(); | |
| * magik.memento(memory); | |
| * } | |
| */ | |
| memento(thing: any): void; | |
| /** | |
| * Shoot a fireball. | |
| * | |
| * Example: | |
| * ``` | |
| * const magik = magikcraft.io; | |
| * | |
| * function fireball() { | |
| * magik.infierno(); | |
| * } | |
| * ``` | |
| */ | |
| infierno(): void; | |
| } | |
| declare namespace http { | |
| /** | |
| * HTTP GET a resource from a URL | |
| * | |
| * @param {string} url | |
| * @returns {*} | |
| */ | |
| function get(url: string): any; | |
| function post(url: string, data: any, contentType?: string): any; | |
| } | |
| /** | |
| * The eventbus is a global pub/sub system. It is useful for your own code, and it also the mechanism that allows your code to communicate with code that others are running on the server. | |
| * | |
| * Use it to publish to a topic, and other players can consume the data by subscribing to the same topic. | |
| * | |
| */ | |
| declare namespace eventbus { | |
| interface MessageData { | |
| data: string | object; | |
| type: string; | |
| } | |
| /** | |
| * Your subscription callback function will receive a single parameter of type `MessageData`. | |
| */ | |
| type SubscriptionCallback = (message: MessageData) => void; | |
| interface Subscription { | |
| /** | |
| * Cancel the subscription. This stops your callback from being triggered when this topic is published. | |
| * | |
| * Example: | |
| * ``` | |
| * const mysub = eventbus.subscribe('sitapati.highscore', (score) => { | |
| * if (score === "-1") { | |
| * return mysub.cancel(); // Stop listening to this topic. | |
| * } | |
| * magik.dixit(`High score is ${score`); | |
| * }); | |
| * ``` | |
| * @memberof Subscription | |
| */ | |
| cancel(): void; | |
| } | |
| /** | |
| * Subscribe to a topic on the eventbus. | |
| * Topic names are arbitrary, and the topic namespace is global, so you probably want to namespace your topics, for example by using your username, like: 'sitapati.myTopic' | |
| * | |
| * Example: | |
| * ``` | |
| * const sub = eventbus.subscribe('sitapati.messages', (msg) => { | |
| * if (msg.type === "string") { | |
| * magik.dixit(msg.data); | |
| * } | |
| * if (msg.type === "json") { | |
| * magik.dixit(Object.keys(msg.data).toString()); | |
| * } | |
| * }); | |
| * ``` | |
| */ | |
| function subscribe(topic: string, callback: SubscriptionCallback): Subscription; | |
| /** | |
| * Publish to a topic. You can publish a string, or a JSON Object. | |
| * | |
| * Example: | |
| * ``` | |
| * eventbus.publish('sitapati.messages', 'Hope everyone is feeling fabulous today!'); | |
| * | |
| * eventbus.publish('sitapati.messages', {data: 'You can also publish JSON objects', moredata: 'The consumer should check the data type in their subscription'}); | |
| * ``` | |
| * | |
| */ | |
| function publish(topic: string, data: string | object): void; | |
| /** | |
| * To cancel a subscription, you call the `cancel()` method of the subscription object returned from `eventbus.subscribe()`. | |
| * However, sometimes you lose the reference to that object - or you want to unsubscribe a bunch of listeners all at once. | |
| * | |
| * In this case, you can use `eventbus.unsubscribeFromTopic()`. | |
| * You specify which topic you want to unsubscribe from, and all your subscriptions to that topic will be cancelled. | |
| * | |
| * This does not unsubscribe anyone else - just your subscriptions. | |
| * | |
| * Example: | |
| * ``` | |
| * // Subscribe without getting a reference to the subscription | |
| * eventbus.subscribe('magikcraft.news', news => magik.dixit(news.data)); | |
| * ... | |
| * // Somewhere else, we don't have a subscription to cancel, but we can cancel all subscriptions to that topic: | |
| * eventbus.unsubscribeFromTopic('magikcraft.news'); | |
| * ``` | |
| */ | |
| function unsubscribeFromTopic(topic: string): boolean; | |
| /** | |
| * Sometimes, things get real messed up and you just need to hit the reset button. | |
| * | |
| * You can quit from the server and rejoin, and this will clear all your eventbus subscriptions. | |
| * | |
| * You can also call `eventbus.cancelAllSubscriptions()`. This will cancel all subscriptions you have created for all topics. | |
| * | |
| */ | |
| function cancelAllSubscriptions(): boolean; | |
| } | |
| declare const magikcraft: {io: magik}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment