27
									
								
								packages/common/src/proxy.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								packages/common/src/proxy.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
let createProxy = eval(`
 | 
			
		||||
    function(handle){ return new JSAdapter(handle) }
 | 
			
		||||
`)
 | 
			
		||||
export interface ProxyHandle {
 | 
			
		||||
    get: (target: any, name: string) => any
 | 
			
		||||
    set: (target: any, name: string, value: any) => void
 | 
			
		||||
    construct: (target: any, ...args: any[]) => any
 | 
			
		||||
    has: (target: any, name: string) => boolean
 | 
			
		||||
    ownKeys: (target: any) => string[]
 | 
			
		||||
    values: (target: any) => any[];
 | 
			
		||||
    call: (target: any, name: string, ...args: any[]) => any
 | 
			
		||||
    delete: (target: any, name: string) => boolean
 | 
			
		||||
}
 | 
			
		||||
export class Proxy {
 | 
			
		||||
    static newProxy(target: any, handle: Partial<ProxyHandle>) {
 | 
			
		||||
        return createProxy({
 | 
			
		||||
            __get__: (name: string) => handle.get ? handle.get(target, name) : target[name],
 | 
			
		||||
            __put__: (name: string, value: any) => handle.set ? handle.set(target, name, value) : target[name] = value,
 | 
			
		||||
            __call__: (name: string, ...args: any) => handle.call ? handle.call(target, name, ...args) : target[name](...args),
 | 
			
		||||
            __new__: (...args: any) => handle.construct ? handle.construct(target, ...args) : new target(...args),
 | 
			
		||||
            __getIds__: () => handle.ownKeys ? handle.ownKeys(target) : Object.keys(target),
 | 
			
		||||
            __getValues__: () => handle.values ? handle.values(target) : Object.values(target),
 | 
			
		||||
            __has__: (name: string) => handle.has ? handle.has(target, name) : Object.getOwnPropertyDescriptor(target, name) != undefined,
 | 
			
		||||
            __delete__: (name: string) => handle.delete ? handle.delete(target, name) : delete target[name]
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										101
									
								
								packages/common/src/tellraw.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								packages/common/src/tellraw.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
class ChatMessagePart {
 | 
			
		||||
    private internal: any = {}
 | 
			
		||||
 | 
			
		||||
    get text() {
 | 
			
		||||
        return this.internal.text
 | 
			
		||||
    }
 | 
			
		||||
    set text(text: string) {
 | 
			
		||||
        this.internal.text = text
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    click(action: string, value: string) {
 | 
			
		||||
        this.internal.clickEvent = { action, value }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hover(action: string, value: string) {
 | 
			
		||||
        this.internal.hoverEvent = { action, value }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    convert() {
 | 
			
		||||
        return this.internal;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Tellraw {
 | 
			
		||||
    static duplicateChar = '§卐'
 | 
			
		||||
    static create() {
 | 
			
		||||
        return new Tellraw().then(Tellraw.duplicateChar);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private cache: string = '';
 | 
			
		||||
    private parts = [new ChatMessagePart()];
 | 
			
		||||
 | 
			
		||||
    then(part: ChatMessagePart | string) {
 | 
			
		||||
        if (typeof part === "string") {
 | 
			
		||||
            var newPart = new ChatMessagePart();
 | 
			
		||||
            newPart.text = part
 | 
			
		||||
            this.then(newPart);
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
        var last = this.latest();
 | 
			
		||||
        if (!last.text) {
 | 
			
		||||
            last.text = part.text;
 | 
			
		||||
        } else {
 | 
			
		||||
            this.parts.push(part);
 | 
			
		||||
        }
 | 
			
		||||
        this.cache = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    text(text: string) {
 | 
			
		||||
        this.latest().text = text;
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    tip(text: string) {
 | 
			
		||||
        this.latest().hover("show_text", text);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    item(text: string) {
 | 
			
		||||
        this.latest().hover("show_item", text);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    command(command: string) {
 | 
			
		||||
        this.latest().click("run_command", command);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    suggest(url: string) {
 | 
			
		||||
        this.latest().click("suggest_command", url);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    file(path: string) {
 | 
			
		||||
        this.latest().click("open_file", path);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    link(url: string) {
 | 
			
		||||
        this.latest().click("open_url", url);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    latest() {
 | 
			
		||||
        return this.parts[this.parts.length - 1];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    json() {
 | 
			
		||||
        if (!this.cache) {
 | 
			
		||||
            var temp = [];
 | 
			
		||||
            this.parts.forEach(function(t) {
 | 
			
		||||
                temp.push(t.convert());
 | 
			
		||||
            });
 | 
			
		||||
            this.cache = JSON.stringify(temp);
 | 
			
		||||
            console.trace(this.cache);
 | 
			
		||||
        }
 | 
			
		||||
        return this.cache;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default Tellraw
 | 
			
		||||
		Reference in New Issue
	
	Block a user