1
									
								
								packages/client/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								packages/client/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
				
			|||||||
src/emp.ts
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
../../.npmignore
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "private": true,
 | 
					 | 
				
			||||||
    "name": "@ccms/client",
 | 
					 | 
				
			||||||
    "version": "0.26.0",
 | 
					 | 
				
			||||||
    "description": "MiaoScript client package",
 | 
					 | 
				
			||||||
    "keywords": [
 | 
					 | 
				
			||||||
        "miaoscript",
 | 
					 | 
				
			||||||
        "minecraft",
 | 
					 | 
				
			||||||
        "bukkit",
 | 
					 | 
				
			||||||
        "sponge"
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    "author": "MiaoWoo <admin@yumc.pw>",
 | 
					 | 
				
			||||||
    "homepage": "https://github.com/circlecloud/ms.git",
 | 
					 | 
				
			||||||
    "license": "ISC",
 | 
					 | 
				
			||||||
    "main": "dist/index.js",
 | 
					 | 
				
			||||||
    "scripts": {
 | 
					 | 
				
			||||||
        "dev": "ts-node-dev --respawn --debounce=1500 src/index.ts",
 | 
					 | 
				
			||||||
        "clean": "rimraf dist",
 | 
					 | 
				
			||||||
        "watch": "tsc --watch",
 | 
					 | 
				
			||||||
        "build": "yarn clean && tsc",
 | 
					 | 
				
			||||||
        "start": "node dist/index.js",
 | 
					 | 
				
			||||||
        "debug": "DEBUG=minecraft-protocol node dist/index.js",
 | 
					 | 
				
			||||||
        "emp": "node dist/emp.js",
 | 
					 | 
				
			||||||
        "test": "echo \"Error: run tests from root\" && exit 1"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "dependencies": {
 | 
					 | 
				
			||||||
        "axios": "^1.3.2",
 | 
					 | 
				
			||||||
        "https-proxy-agent": "^5.0.1",
 | 
					 | 
				
			||||||
        "minecraft-protocol": "^1.40.3",
 | 
					 | 
				
			||||||
        "minecraft-protocol-forge": "^1.0.0",
 | 
					 | 
				
			||||||
        "proxy-agent": "^5.0.0"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "devDependencies": {
 | 
					 | 
				
			||||||
        "@types/node": "^18.13.0",
 | 
					 | 
				
			||||||
        "lerna": "^6.4.1",
 | 
					 | 
				
			||||||
        "rimraf": "^4.1.2",
 | 
					 | 
				
			||||||
        "typescript": "^4.9.5"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,101 +0,0 @@
 | 
				
			|||||||
class MessagePart {
 | 
					 | 
				
			||||||
    text: string
 | 
					 | 
				
			||||||
    color: string
 | 
					 | 
				
			||||||
    clickEvent: MessagePartEvent
 | 
					 | 
				
			||||||
    hoverEvent: MessagePartEvent
 | 
					 | 
				
			||||||
    translate: string
 | 
					 | 
				
			||||||
    with: MessagePart[]
 | 
					 | 
				
			||||||
    extra: MessagePart[]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class MessagePartEvent {
 | 
					 | 
				
			||||||
    action: string
 | 
					 | 
				
			||||||
    value: string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var colorMap = []
 | 
					 | 
				
			||||||
colorMap['0'] = '38;5;0'
 | 
					 | 
				
			||||||
colorMap['1'] = '38;5;4'
 | 
					 | 
				
			||||||
colorMap['2'] = '38;5;2'
 | 
					 | 
				
			||||||
colorMap['3'] = '38;5;6'
 | 
					 | 
				
			||||||
colorMap['4'] = '38;5;1'
 | 
					 | 
				
			||||||
colorMap['5'] = '38;5;5'
 | 
					 | 
				
			||||||
colorMap['6'] = '38;5;3'
 | 
					 | 
				
			||||||
colorMap['7'] = '38;5;7'
 | 
					 | 
				
			||||||
colorMap['8'] = '38;5;8'
 | 
					 | 
				
			||||||
colorMap['9'] = '38;5;12'
 | 
					 | 
				
			||||||
colorMap['a'] = '38;5;10'
 | 
					 | 
				
			||||||
colorMap['b'] = '38;5;14'
 | 
					 | 
				
			||||||
colorMap['c'] = '38;5;9'
 | 
					 | 
				
			||||||
colorMap['d'] = '38;5;13'
 | 
					 | 
				
			||||||
colorMap['e'] = '38;5;11'
 | 
					 | 
				
			||||||
colorMap['f'] = '38;5;15'
 | 
					 | 
				
			||||||
colorMap['r'] = '0'
 | 
					 | 
				
			||||||
colorMap['l'] = '1'
 | 
					 | 
				
			||||||
colorMap['n'] = '4'
 | 
					 | 
				
			||||||
var regexMap = []
 | 
					 | 
				
			||||||
for (const c in colorMap) {
 | 
					 | 
				
			||||||
    regexMap[colorMap[c]] = new RegExp(`§${c}`, "g")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
function mcColor2ANSI(str) {
 | 
					 | 
				
			||||||
    for (const regex in regexMap) {
 | 
					 | 
				
			||||||
        str = str.replace(regexMap[regex], `\u001b[${regex}m`)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return str;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let jsonColorMap = {
 | 
					 | 
				
			||||||
    "black": '0',
 | 
					 | 
				
			||||||
    "dark_blue": '1',
 | 
					 | 
				
			||||||
    "dark_green": '2',
 | 
					 | 
				
			||||||
    "dark_aqua": '3',
 | 
					 | 
				
			||||||
    "dark_red": '4',
 | 
					 | 
				
			||||||
    "dark_purple": '5',
 | 
					 | 
				
			||||||
    "gold": '6',
 | 
					 | 
				
			||||||
    "gray": '7',
 | 
					 | 
				
			||||||
    "dark_gray": '8',
 | 
					 | 
				
			||||||
    "blue": '9',
 | 
					 | 
				
			||||||
    "green": 'a',
 | 
					 | 
				
			||||||
    "aqua": 'b',
 | 
					 | 
				
			||||||
    "red": 'c',
 | 
					 | 
				
			||||||
    "light_purple": 'd',
 | 
					 | 
				
			||||||
    "yellow": 'e',
 | 
					 | 
				
			||||||
    "white": 'f',
 | 
					 | 
				
			||||||
    "obfuscated": 'k',
 | 
					 | 
				
			||||||
    "bold": 'l',
 | 
					 | 
				
			||||||
    "strikethrough": 'm',
 | 
					 | 
				
			||||||
    "underline": 'n',
 | 
					 | 
				
			||||||
    "italic": 'o',
 | 
					 | 
				
			||||||
    "reset": 'r',
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function json2text(json: MessagePart): string {
 | 
					 | 
				
			||||||
    let temp = "";
 | 
					 | 
				
			||||||
    if (json.color) {
 | 
					 | 
				
			||||||
        temp += `§${jsonColorMap[json.color]}`
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    temp += json.text || json.translate || ''
 | 
					 | 
				
			||||||
    if (json.extra) {
 | 
					 | 
				
			||||||
        json.extra.forEach((ext) => {
 | 
					 | 
				
			||||||
            temp += json2text(ext)
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return temp += '§r'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function $(input: any) {
 | 
					 | 
				
			||||||
    if (typeof input === "string") {
 | 
					 | 
				
			||||||
        input = JSON.parse(input)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    input = json2text(input) + '§r'
 | 
					 | 
				
			||||||
    if (input.startsWith('§卐')) {
 | 
					 | 
				
			||||||
        input = input.substring(2)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return mcColor2ANSI(input)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export {
 | 
					 | 
				
			||||||
    json2text,
 | 
					 | 
				
			||||||
    mcColor2ANSI,
 | 
					 | 
				
			||||||
    $
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,33 +0,0 @@
 | 
				
			|||||||
import { $ } from './color'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export function attachEvents(client) {
 | 
					 | 
				
			||||||
    client.on('chat', (packet) => {
 | 
					 | 
				
			||||||
        // Listen for chat messages and echo them back.
 | 
					 | 
				
			||||||
        var jsonMsg = JSON.parse(packet.message)
 | 
					 | 
				
			||||||
        console.log($(jsonMsg))
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('state', (newState, oldState) => {
 | 
					 | 
				
			||||||
        console.log('Client Change State', oldState, 'to', newState)
 | 
					 | 
				
			||||||
        let targetServer = process.argv[6]
 | 
					 | 
				
			||||||
        if (newState == "play" && targetServer) {
 | 
					 | 
				
			||||||
            setTimeout(() => {
 | 
					 | 
				
			||||||
                client.write('chat', {
 | 
					 | 
				
			||||||
                    message: '/server ' + targetServer
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
            }, 3000)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('update_health', (packet) => {
 | 
					 | 
				
			||||||
        if (packet.health <= 0) {
 | 
					 | 
				
			||||||
            console.log("Player Dead Auto Respawn...")
 | 
					 | 
				
			||||||
            client.write('client_command', { payload: 0 })
 | 
					 | 
				
			||||||
        } else if (packet.health > 0) {
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('kick_disconnect', (packet) => {
 | 
					 | 
				
			||||||
        console.log($(packet.reason))
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('disconnect', (packet) => {
 | 
					 | 
				
			||||||
        console.log($(packet.reason))
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
export function attachForge(client) {
 | 
					 | 
				
			||||||
    client.on('custom_payload', function(packet) {
 | 
					 | 
				
			||||||
        if (packet.channel === 'FML|HS') {
 | 
					 | 
				
			||||||
            client.write('custom_payload', {
 | 
					 | 
				
			||||||
                channel: 'FML|HS',
 | 
					 | 
				
			||||||
                data: Buffer.of(0x01, 0x02)
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
            client.write('custom_payload', {
 | 
					 | 
				
			||||||
                channel: 'FML|HS',
 | 
					 | 
				
			||||||
                data: Buffer.of(0x02, 0x00)
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,124 +0,0 @@
 | 
				
			|||||||
import { createInterface } from 'readline'
 | 
					 | 
				
			||||||
import { Client, createClient } from 'minecraft-protocol'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { attachForge } from './forge'
 | 
					 | 
				
			||||||
import { attachEvents } from './event'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let readUserInfo = process.argv[2] || 'Mr_jtb'
 | 
					 | 
				
			||||||
let realUserInfo = readUserInfo.split(":")
 | 
					 | 
				
			||||||
let username = realUserInfo[0]
 | 
					 | 
				
			||||||
let password = realUserInfo[1] || ''
 | 
					 | 
				
			||||||
let version = process.argv[3] || '1.12.2'
 | 
					 | 
				
			||||||
let readAddress = process.argv[4] || '192.168.2.25:25565'
 | 
					 | 
				
			||||||
let realAddress = readAddress.split(":")
 | 
					 | 
				
			||||||
let address = realAddress[0]
 | 
					 | 
				
			||||||
let port = parseInt(realAddress[1] || "25565")
 | 
					 | 
				
			||||||
let client = commandLineCreateClient()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function commandLineCreateClient() {
 | 
					 | 
				
			||||||
    return createConnection(address, port, username, password)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function createConnection(host: string, port: number, username: string, password: string) {
 | 
					 | 
				
			||||||
    let clientOptions: any = {
 | 
					 | 
				
			||||||
        version,
 | 
					 | 
				
			||||||
        host,
 | 
					 | 
				
			||||||
        port,
 | 
					 | 
				
			||||||
        username,
 | 
					 | 
				
			||||||
        password,
 | 
					 | 
				
			||||||
        // clientToken: 'd02c7f39-2376-45da-a5a5-50e24fa8b185',
 | 
					 | 
				
			||||||
        //@ts-ignore
 | 
					 | 
				
			||||||
        // authServer: 'https://skin.yumc.pw/api/yggdrasil/authserver',
 | 
					 | 
				
			||||||
        // sessionServer: 'https://skin.yumc.pw/api/yggdrasil/sessionserver'
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (clientOptions.password) {
 | 
					 | 
				
			||||||
        clientOptions.clientToken = 'd02c7f39-2376-45da-a5a5-50e24fa8b185'
 | 
					 | 
				
			||||||
        clientOptions.authServer = 'https://skin.yumc.pw/api/yggdrasil/authserver'
 | 
					 | 
				
			||||||
        clientOptions.sessionServer = 'https://skin.yumc.pw/api/yggdrasil/sessionserver'
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    let client = createClient(clientOptions)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    attachCommon(client)
 | 
					 | 
				
			||||||
    attachForge(client)
 | 
					 | 
				
			||||||
    attachEvents(client)
 | 
					 | 
				
			||||||
    return client
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function attachCommon(client: Client) {
 | 
					 | 
				
			||||||
    client.on('login', () => {
 | 
					 | 
				
			||||||
        // client.registerChannel('updater', ['string', []])
 | 
					 | 
				
			||||||
        // client.registerChannel('updater-enabled', ['string', []])
 | 
					 | 
				
			||||||
        // client.registerChannel('dragoncore', ['string', []])
 | 
					 | 
				
			||||||
        // client.registerChannel('dragoncore:main', ['string', []])
 | 
					 | 
				
			||||||
        client.on('REGISTER', (array) => {
 | 
					 | 
				
			||||||
            for (const channel of array) {
 | 
					 | 
				
			||||||
                client.on('channel', console.log)
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        // client.on('dragoncore:main', (data) => {
 | 
					 | 
				
			||||||
        //     console.log(data)
 | 
					 | 
				
			||||||
        // })
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('custom_payload', (data) => {
 | 
					 | 
				
			||||||
        console.log('custom_payload' + JSON.stringify(data))
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('error', (error) => {
 | 
					 | 
				
			||||||
        console.log("Client Error", error)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    client.on('end', (resone) => {
 | 
					 | 
				
			||||||
        console.log("Client End Resone:", resone)
 | 
					 | 
				
			||||||
        if (`${resone}` != "SocketClosed") {
 | 
					 | 
				
			||||||
            setTimeout(() => {
 | 
					 | 
				
			||||||
                client = commandLineCreateClient()
 | 
					 | 
				
			||||||
            }, 500)
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            process.exit(0)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const rl = createInterface({
 | 
					 | 
				
			||||||
    input: process.stdin,
 | 
					 | 
				
			||||||
    output: process.stdout,
 | 
					 | 
				
			||||||
    completer: (line, func) => {
 | 
					 | 
				
			||||||
        let args = line.split(' ')
 | 
					 | 
				
			||||||
        let comp = args[args.length - 1]
 | 
					 | 
				
			||||||
        client.once('tab_complete', (msg) => {
 | 
					 | 
				
			||||||
            let mcts = msg.matches.filter(s => s)
 | 
					 | 
				
			||||||
            func(null, [mcts, comp])
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        client.write('tab_complete', {
 | 
					 | 
				
			||||||
            text: line
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    terminal: true,
 | 
					 | 
				
			||||||
    prompt: ''
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
rl.on('line', function (line) {
 | 
					 | 
				
			||||||
    switch (line) {
 | 
					 | 
				
			||||||
        case "":
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        case "eval":
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        case "write":
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        case "/respawn":
 | 
					 | 
				
			||||||
            client.write('client_command', { payload: 0 })
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        case "//reco":
 | 
					 | 
				
			||||||
            client.end("")
 | 
					 | 
				
			||||||
            client = commandLineCreateClient()
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        case "//quit":
 | 
					 | 
				
			||||||
            console.info('Disconnected')
 | 
					 | 
				
			||||||
            client.end("")
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        case "//end":
 | 
					 | 
				
			||||||
            console.info('Forcibly ended client')
 | 
					 | 
				
			||||||
            process.exit(0)
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            client.write('chat', { message: line })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    rl.prompt()
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
while :; do
 | 
					 | 
				
			||||||
    yarn emp
 | 
					 | 
				
			||||||
    echo 进程退出 休眠120秒!
 | 
					 | 
				
			||||||
    sleep 120
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "extends": "../../tsconfig.json",
 | 
					 | 
				
			||||||
    "compilerOptions": {
 | 
					 | 
				
			||||||
        "baseUrl": "src",
 | 
					 | 
				
			||||||
        "outDir": "dist"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user