Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9fa13f49cd | |||
| 64a698089b | |||
| 53843b65d2 | |||
| 5f00431e8b | |||
| c947ff7a14 | |||
| be2988fc58 | |||
| 3beed64319 | |||
| 23c7cb955a | |||
| 3be1f78a14 | |||
| d919fa07fc | |||
| d8fd7b0a7d | |||
| 907f9ed03f |
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"useWorkspaces": true,
|
"useWorkspaces": true,
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"packages": [
|
"packages": [
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"build": "lerna run build --scope=\"@ccms/!(plugins)\"",
|
"build": "lerna run build --scope=\"@ccms/!(plugins)\"",
|
||||||
"build:plugins": "lerna run build --scope=\"@ccms/plugins\"",
|
"build:plugins": "lerna run build --scope=\"@ccms/plugins\"",
|
||||||
"ug": "yarn upgrade-interactive --latest",
|
"ug": "yarn upgrade-interactive --latest",
|
||||||
"np": "lerna exec \"npm publish --access=public --registry https://registry.npmjs.org\" --scope=\"@ccms/!(client|plugins)\"",
|
"np": "./script/push.sh",
|
||||||
"lsp": "npm login --registry=https://registry.npmjs.org --scope=@ccms",
|
"lsp": "npm login --registry=https://registry.npmjs.org --scope=@ccms",
|
||||||
"lp": "lerna publish --registry https://registry.npmjs.org"
|
"lp": "lerna publish --registry https://registry.npmjs.org"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/amqp",
|
"name": "@ccms/amqp",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript amqp package",
|
"description": "MiaoScript amqp package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,17 +19,17 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"@javatypes/amqp-client": "^0.0.3",
|
"@javatypes/amqp-client": "^0.0.3",
|
||||||
"@javatypes/spring-amqp": "^0.0.3",
|
"@javatypes/spring-amqp": "^0.0.3",
|
||||||
"@javatypes/spring-rabbit": "^0.0.3",
|
"@javatypes/spring-rabbit": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/api",
|
"name": "@ccms/api",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript api package",
|
"description": "MiaoScript api package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,9 +19,9 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0",
|
"@ccms/container": "^0.16.0",
|
||||||
"@ccms/polyfill": "^0.14.1",
|
"@ccms/polyfill": "^0.16.0",
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
"source-map-builder": "^0.0.7"
|
"source-map-builder": "^0.0.7"
|
||||||
},
|
},
|
||||||
@@ -29,6 +29,6 @@
|
|||||||
"@types/base64-js": "^1.3.0",
|
"@types/base64-js": "^1.3.0",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import * as base64 from 'base64-js'
|
|||||||
const Arrays = Java.type('java.util.Arrays')
|
const Arrays = Java.type('java.util.Arrays')
|
||||||
const Level = Java.type('java.util.logging.Level')
|
const Level = Java.type('java.util.logging.Level')
|
||||||
const Paths = Java.type('java.nio.file.Paths')
|
const Paths = Java.type('java.nio.file.Paths')
|
||||||
const ignoreLogPrefix = ['java.', 'javax.', 'sun.', 'net.minecraft.', 'org.bukkit.', 'jdk.nashorn.', 'io.netty.', 'org.spongepowered.', 'org.apache', 'org.springframework']
|
const ignoreLogPrefix = ['java.', 'javax.', 'sun.', 'net.minecraft.', 'org.bukkit.', 'jdk.nashorn.', 'org.openjdk.nashorn', 'io.netty.', 'org.spongepowered.', 'org.apache', 'org.springframework']
|
||||||
|
|
||||||
enum LogLevel {
|
enum LogLevel {
|
||||||
ALL,
|
ALL,
|
||||||
@@ -156,7 +156,7 @@ export class MiaoScriptConsole implements Console {
|
|||||||
let className = trace.className
|
let className = trace.className
|
||||||
var fileName = trace.fileName as string
|
var fileName = trace.fileName as string
|
||||||
var lineNumber = trace.lineNumber
|
var lineNumber = trace.lineNumber
|
||||||
if (className.startsWith('jdk.nashorn.internal.scripts')) {
|
if (className.startsWith('jdk.nashorn.internal.scripts') || className.startsWith('org.openjdk.nashorn.internal.scripts')) {
|
||||||
className = className.substr(className.lastIndexOf('$') + 1)
|
className = className.substr(className.lastIndexOf('$') + 1)
|
||||||
var { fileName, lineNumber } = this.readSourceMap(fileName, lineNumber)
|
var { fileName, lineNumber } = this.readSourceMap(fileName, lineNumber)
|
||||||
if (fileName.startsWith(root)) { fileName = fileName.split(root)[1] }
|
if (fileName.startsWith(root)) { fileName = fileName.split(root)[1] }
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/bukkit",
|
"name": "@ccms/bukkit",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript bukkit package",
|
"description": "MiaoScript bukkit package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
"@javatypes/spigot-api": "^0.0.3",
|
"@javatypes/spigot-api": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ let downgrade = false
|
|||||||
* 获取NMS版本
|
* 获取NMS版本
|
||||||
*/
|
*/
|
||||||
let nmsVersion = undefined
|
let nmsVersion = undefined
|
||||||
|
let nmsSubVersion = undefined
|
||||||
/**
|
/**
|
||||||
* 获取NMS类
|
* 获取NMS类
|
||||||
*/
|
*/
|
||||||
@@ -49,15 +50,23 @@ function remapFieldName(clazz: any, origin: string, test: string) {
|
|||||||
function init() {
|
function init() {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
nmsVersion = org.bukkit.Bukkit.server.class.name.split('.')[3]
|
nmsVersion = org.bukkit.Bukkit.server.class.name.split('.')[3]
|
||||||
|
nmsSubVersion = nmsVersion.split("_")[1]
|
||||||
try {
|
try {
|
||||||
RemapUtils = Java.type('catserver.server.remapper.RemapUtils')
|
RemapUtils = Java.type('catserver.server.remapper.RemapUtils')
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
}
|
}
|
||||||
let nmsChatSerializerClass = nmsCls(nmsVersion.split("_")[1] > 7 ? "IChatBaseComponent$ChatSerializer" : "ChatSerializer")
|
let nmsChatSerializerClass = undefined
|
||||||
|
if (nmsSubVersion < 8) {
|
||||||
|
nmsChatSerializerClass = nmsCls("ChatSerializer")
|
||||||
|
} else if (nmsSubVersion < 17) {
|
||||||
|
nmsChatSerializerClass = nmsCls("IChatBaseComponent$ChatSerializer")
|
||||||
|
} else {
|
||||||
|
nmsChatSerializerClass = base.getClass('net.minecraft.network.chat.IChatBaseComponent$ChatSerializer')
|
||||||
|
}
|
||||||
let nmsChatSerializerMethod = remapMethod(nmsChatSerializerClass, 'a', 'func_150699_a', base.getClass('java.lang.String'))
|
let nmsChatSerializerMethod = remapMethod(nmsChatSerializerClass, 'a', 'func_150699_a', base.getClass('java.lang.String'))
|
||||||
nmsChatSerializerMethodName = nmsChatSerializerMethod.getName()
|
nmsChatSerializerMethodName = nmsChatSerializerMethod.getName()
|
||||||
ChatSerializer = Java.type(nmsChatSerializerClass.getName())
|
ChatSerializer = Java.type(nmsChatSerializerClass.getName())
|
||||||
let packetTypeClass = nmsCls("PacketPlayOutChat")
|
let packetTypeClass = nmsSubVersion < 17 ? nmsCls("PacketPlayOutChat") : base.getClass('net.minecraft.network.protocol.game.PacketPlayOutChat')
|
||||||
PacketPlayOutChat = Java.type(packetTypeClass.getName())
|
PacketPlayOutChat = Java.type(packetTypeClass.getName())
|
||||||
let packetTypeConstructor: { parameterTypes: any[] }
|
let packetTypeConstructor: { parameterTypes: any[] }
|
||||||
let constructors = packetTypeClass.constructors
|
let constructors = packetTypeClass.constructors
|
||||||
@@ -75,9 +84,14 @@ function init() {
|
|||||||
if (nmsChatMessageTypeClass.isEnum()) {
|
if (nmsChatMessageTypeClass.isEnum()) {
|
||||||
chatMessageTypes = nmsChatMessageTypeClass.getEnumConstants()
|
chatMessageTypes = nmsChatMessageTypeClass.getEnumConstants()
|
||||||
}
|
}
|
||||||
let playerConnectionField = remapFieldName(nmsCls('EntityPlayer'), 'playerConnection', 'field_71135_a')
|
let playerConnectionField = undefined
|
||||||
|
if (nmsSubVersion < 17) {
|
||||||
|
playerConnectionField = remapFieldName(nmsCls('EntityPlayer'), 'playerConnection', 'field_71135_a')
|
||||||
|
} else {
|
||||||
|
playerConnectionField = base.getClass('net.minecraft.server.level.EntityPlayer').getField('b')
|
||||||
|
}
|
||||||
playerConnectionFieldName = playerConnectionField.getName()
|
playerConnectionFieldName = playerConnectionField.getName()
|
||||||
sendPacketMethodName = remapMethod(playerConnectionField.getType(), 'sendPacket', 'func_179290_a', nmsCls('Packet')).getName()
|
sendPacketMethodName = remapMethod(playerConnectionField.getType(), 'sendPacket', 'func_179290_a', nmsSubVersion < 17 ? nmsCls('Packet') : base.getClass('net.minecraft.network.protocol.Packet')).getName()
|
||||||
}
|
}
|
||||||
|
|
||||||
function json(sender: { name: string }, json: string) {
|
function json(sender: { name: string }, json: string) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/bungee",
|
"name": "@ccms/bungee",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript bungee package",
|
"description": "MiaoScript bungee package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
"@javatypes/bungee-api": "^0.0.3",
|
"@javatypes/bungee-api": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "@ccms/client",
|
"name": "@ccms/client",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript client package",
|
"description": "MiaoScript client package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"minecraft-protocol": "^1.24.1"
|
"minecraft-protocol": "^1.25.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^14.14.37",
|
"@types/node": "^16.3.1",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/common",
|
"name": "@ccms/common",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript api package",
|
"description": "MiaoScript api package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,11 +19,11 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"@javatypes/jdk": "^0.0.3",
|
"@javatypes/jdk": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"gitHead": "562e2d00175c9d3a99c8b672aa07e6d92706a027"
|
"gitHead": "562e2d00175c9d3a99c8b672aa07e6d92706a027"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/compile",
|
"name": "@ccms/compile",
|
||||||
"version": "0.14.0",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript compile package",
|
"description": "MiaoScript compile package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -21,6 +21,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/container",
|
"name": "@ccms/container",
|
||||||
"version": "0.14.0",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript container package",
|
"description": "MiaoScript container package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,13 +19,13 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"inversify": "^5.0.5",
|
"inversify": "^5.1.1",
|
||||||
"inversify-binding-decorators": "^4.0.0"
|
"inversify-binding-decorators": "^4.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/core",
|
"name": "@ccms/core",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript api package",
|
"description": "MiaoScript api package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -21,11 +21,11 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
},
|
},
|
||||||
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
let containerStartTime = Date.now()
|
let containerStartTime = Date.now()
|
||||||
console.i18n("ms.core.ioc.initialize", { scope: global.scope })
|
console.i18n("ms.core.ioc.initialize", { scope: global.scope })
|
||||||
import { plugin, server, task, constants } from '@ccms/api'
|
import { plugin, server, task, constants } from '@ccms/api'
|
||||||
import { DefaultContainer as container, inject, provideSingleton, ContainerInstance, buildProviderModule, Autowired } from '@ccms/container'
|
import { DefaultContainer as container, provideSingleton, ContainerInstance, buildProviderModule, Autowired } from '@ccms/container'
|
||||||
console.i18n("ms.core.ioc.completed", { scope: global.scope, time: (Date.now() - containerStartTime) / 1000 })
|
console.i18n("ms.core.ioc.completed", { scope: global.scope, time: (Date.now() - containerStartTime) / 1000 })
|
||||||
import http from '@ccms/common/dist/http'
|
import http from '@ccms/common/dist/http'
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/database",
|
"name": "@ccms/database",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript database package",
|
"description": "MiaoScript database package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,10 +22,10 @@
|
|||||||
"@javatypes/spring-jdbc": "^0.0.3",
|
"@javatypes/spring-jdbc": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/i18n",
|
"name": "@ccms/i18n",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript i18n package",
|
"description": "MiaoScript i18n package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,14 +19,14 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"@types/js-yaml": "^4.0.0",
|
"@types/js-yaml": "^4.0.2",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"js-yaml": "^4.0.0"
|
"js-yaml": "^4.1.0"
|
||||||
},
|
},
|
||||||
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/keyvalue",
|
"name": "@ccms/keyvalue",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript keyvalue package",
|
"description": "MiaoScript keyvalue package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,18 +19,18 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"@javatypes/amqp-client": "^0.0.3",
|
"@javatypes/amqp-client": "^0.0.3",
|
||||||
"@javatypes/spring-amqp": "^0.0.3",
|
"@javatypes/spring-amqp": "^0.0.3",
|
||||||
"@javatypes/spring-rabbit": "^0.0.3",
|
"@javatypes/spring-rabbit": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"gitHead": "2589633069d24f646ac09261b1b2304c21d4ea75"
|
"gitHead": "2589633069d24f646ac09261b1b2304c21d4ea75"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/nashorn",
|
"name": "@ccms/nashorn",
|
||||||
"version": "0.14.0",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript api package",
|
"description": "MiaoScript api package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,6 +22,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/nodejs",
|
"name": "@ccms/nodejs",
|
||||||
"version": "0.14.0",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript nodejs package",
|
"description": "MiaoScript nodejs package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,10 +19,11 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"tslib": "^2.3.0",
|
||||||
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/nukkit",
|
"name": "@ccms/nukkit",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript nukkit package",
|
"description": "MiaoScript nukkit package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
"@javatypes/nukkit-api": "^0.0.3",
|
"@javatypes/nukkit-api": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/plugin",
|
"name": "@ccms/plugin",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript api package",
|
"description": "MiaoScript api package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,16 +19,17 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/js-yaml": "^4.0.0",
|
"@types/js-yaml": "^4.0.2",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0",
|
"@ccms/container": "^0.16.0",
|
||||||
"@ccms/i18n": "^0.14.1",
|
"@ccms/i18n": "^0.16.0",
|
||||||
"js-yaml": "^4.0.0"
|
"js-yaml": "^4.1.0",
|
||||||
|
"yaml": "^1.10.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ export class PluginCommandManager {
|
|||||||
let subcommand = args[0] || 'help'
|
let subcommand = args[0] || 'help'
|
||||||
let cmdKey = 'cmd' + subcommand
|
let cmdKey = 'cmd' + subcommand
|
||||||
if (!pluginInstance[cmdKey]) {
|
if (!pluginInstance[cmdKey]) {
|
||||||
console.sender(sender, '§4未知的子命令: §c' + subcommand)
|
pluginInstance.logger.sender(sender, '§4未知的子命令: §c' + subcommand)
|
||||||
pluginInstance['cmdhelp'] && console.sender(sender, `§6请执行 §b/${command} §ahelp §6查看帮助!`)
|
pluginInstance['cmdhelp'] && pluginInstance.logger.sender(sender, `§6请执行 §b/${command} §ahelp §6查看帮助!`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
args.shift()
|
args.shift()
|
||||||
|
|||||||
@@ -85,25 +85,27 @@ export class PluginConfigManager {
|
|||||||
try {
|
try {
|
||||||
metadata.file = fs.concat(fs.file(plugin.description.loadMetadata.file).parent, plugin.description.name, metadata.filename)
|
metadata.file = fs.concat(fs.file(plugin.description.loadMetadata.file).parent, plugin.description.name, metadata.filename)
|
||||||
let configLoader = this.getConfigLoader(metadata.format)
|
let configLoader = this.getConfigLoader(metadata.format)
|
||||||
let value = plugin[metadata.variable]
|
let defaultValue = metadata.default ?? plugin[metadata.variable]
|
||||||
|
let configValue = defaultValue
|
||||||
if (!fs.exists(metadata.file)) {
|
if (!fs.exists(metadata.file)) {
|
||||||
base.save(metadata.file, configLoader.dump(value))
|
base.save(metadata.file, configLoader.dump(defaultValue))
|
||||||
console.i18n("ms.plugin.manager.config.save.default", { plugin: plugin.description.name, name: metadata.name, format: metadata.format })
|
console.i18n("ms.plugin.manager.config.save.default", { plugin: plugin.description.name, name: metadata.name, format: metadata.format })
|
||||||
} else {
|
} else {
|
||||||
value = configLoader.load(base.read(metadata.file))
|
configValue = configLoader.load(base.read(metadata.file)) || {}
|
||||||
console.debug(`[${plugin.description.name}] Load Config ${metadata.variable} from file ${metadata.file} =>\n${JSON.stringify(value, undefined, 4)}`)
|
if (defaultValue) {
|
||||||
if (metadata.default) {
|
|
||||||
let needSave = false
|
let needSave = false
|
||||||
for (const key of Object.keys(metadata.default)) {
|
for (const key of Object.keys(defaultValue)) {
|
||||||
if (value[key] == undefined) {
|
// 当配置文件不存在当前属性时才进行赋值
|
||||||
value[key] = metadata.default[key]
|
if (!Object.prototype.hasOwnProperty.call(configValue, key)) {
|
||||||
|
configValue[key] = defaultValue[key]
|
||||||
needSave = true
|
needSave = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
needSave && base.save(metadata.file, configLoader.dump(value))
|
needSave && base.save(metadata.file, configLoader.dump(configValue))
|
||||||
}
|
}
|
||||||
|
console.debug(`[${plugin.description.name}] Load Config ${metadata.variable} from file ${metadata.file} =>\n${JSON.stringify(configValue, undefined, 4)}`)
|
||||||
}
|
}
|
||||||
this.defienConfigProp(plugin, metadata, value)
|
this.defienConfigProp(plugin, metadata, configValue)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.i18n("ms.plugin.manager.config.load.error", { plugin: plugin.description.name, name: metadata.name, format: metadata.format, error })
|
console.i18n("ms.plugin.manager.config.load.error", { plugin: plugin.description.name, name: metadata.name, format: metadata.format, error })
|
||||||
console.ex(error)
|
console.ex(error)
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
|||||||
|
|
||||||
private instanceMap: Map<string, plugin.Plugin>
|
private instanceMap: Map<string, plugin.Plugin>
|
||||||
private metadataMap: Map<string, plugin.PluginMetadata>
|
private metadataMap: Map<string, plugin.PluginMetadata>
|
||||||
|
/**
|
||||||
|
* 延时加载插件
|
||||||
|
*/
|
||||||
|
private lazyMetadataMap: Map<string, plugin.PluginMetadata>
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.sacnnerMap = new Map()
|
this.sacnnerMap = new Map()
|
||||||
@@ -48,6 +52,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
|||||||
|
|
||||||
this.instanceMap = new Map()
|
this.instanceMap = new Map()
|
||||||
this.metadataMap = new Map()
|
this.metadataMap = new Map()
|
||||||
|
this.lazyMetadataMap = new Map()
|
||||||
|
|
||||||
// ignore unused
|
// ignore unused
|
||||||
this.taskManager
|
this.taskManager
|
||||||
@@ -239,14 +244,14 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private buildPlugins() {
|
private buildPlugins() {
|
||||||
this.metadataMap.forEach((metadata) => {
|
this.metadataMap.forEach((metadata, key) => {
|
||||||
try {
|
if (metadata?.depends?.length) {
|
||||||
|
this.lazyMetadataMap.set(key, metadata)
|
||||||
|
} else {
|
||||||
this.buildPlugin(metadata)
|
this.buildPlugin(metadata)
|
||||||
} catch (error) {
|
|
||||||
console.console(`§4无法加载插件 §b${metadata.name} §4构建插件失败!`)
|
|
||||||
console.ex(error)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
this.lazyMetadataMap.forEach((metadata, key) => this.buildPlugin(metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
private checkDepends(depends: string | string[]) {
|
private checkDepends(depends: string | string[]) {
|
||||||
@@ -262,16 +267,21 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
|||||||
return loseDepends
|
return loseDepends
|
||||||
}
|
}
|
||||||
private buildPlugin(metadata: plugin.PluginMetadata) {
|
private buildPlugin(metadata: plugin.PluginMetadata) {
|
||||||
if (this.instanceMap.has(metadata.name)) { throw new Error(`Plugin ${metadata.name} is already load from ${metadata.source}...`) }
|
try {
|
||||||
if (!this.loaderMap.has(metadata.type)) { throw new Error(`§4无法加载插件 §b${metadata.name} §4请检查 §c${metadata.type} §4加载器是否正常启用!`) }
|
if (this.instanceMap.has(metadata.name)) { throw new Error(`Plugin ${metadata.name} is already load from ${metadata.source}...`) }
|
||||||
if (!this.serverChecker.check(metadata.servers)) { throw new Error(`§6插件 §b${metadata.name} §c服务器类型不兼容(${metadata.servers.join(',')}) §6忽略加载...`) }
|
if (!this.loaderMap.has(metadata.type)) { throw new Error(`§4无法加载插件 §b${metadata.name} §4请检查 §c${metadata.type} §4加载器是否正常启用!`) }
|
||||||
let loseDepends = this.checkDepends(metadata.depends) || []
|
if (!this.serverChecker.check(metadata.servers)) { throw new Error(`§6插件 §b${metadata.name} §c服务器类型不兼容(${metadata.servers.join(',')}) §6忽略加载...`) }
|
||||||
if (loseDepends.length) { throw new Error(`§4无法加载插件 §b${metadata.name} §4请检查依赖 §3[${loseDepends.join(',')}] §4是否安装完整!`) }
|
let loseDepends = this.checkDepends(metadata.depends) || []
|
||||||
let loseNativeDepends = this.checkNativeDepends(metadata.nativeDepends) || []
|
if (loseDepends.length) { throw new Error(`§4无法加载插件 §b${metadata.name} §4请检查脚本依赖 §3[${loseDepends.join(',')}] §4是否安装完整!`) }
|
||||||
if (loseNativeDepends.length) { throw new Error(`§4无法加载插件 §b${metadata.name} §4请检查插件依赖 §3[${loseNativeDepends.join(',')}] §4是否安装完整!`) }
|
let loseNativeDepends = this.checkNativeDepends(metadata.nativeDepends) || []
|
||||||
let pluginInstance = this.loaderMap.get(metadata.type).build(metadata)
|
if (loseNativeDepends.length) { throw new Error(`§4无法加载插件 §b${metadata.name} §4请检查插件依赖 §3[${loseNativeDepends.join(',')}] §4是否安装完整!`) }
|
||||||
if (!pluginInstance) { throw new Error(`§4加载器 §c${metadata.type} §4加载插件 §c${metadata.name} §4失败!`) }
|
let pluginInstance = this.loaderMap.get(metadata.type).build(metadata)
|
||||||
this.instanceMap.set(metadata.name, pluginInstance)
|
if (!pluginInstance) { throw new Error(`§4加载器 §c${metadata.type} §4加载插件 §c${metadata.name} §4失败!`) }
|
||||||
return pluginInstance
|
this.instanceMap.set(metadata.name, pluginInstance)
|
||||||
|
return pluginInstance
|
||||||
|
} catch (error) {
|
||||||
|
console.console(`§4无法加载插件 §b${metadata.name} §4构建插件失败!`)
|
||||||
|
console.ex(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
76
packages/plugins/docs/MiaoLobby.md
Normal file
76
packages/plugins/docs/MiaoLobby.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# MiaoLobby
|
||||||
|
|
||||||
|
## 插件简介
|
||||||
|
|
||||||
|
- 用户进入服务器/用户登录后 自动选择大厅进行传送 防止堆积在登录服
|
||||||
|
- 支持配置 是否登录后自动分配 或 玩家手动执行随机分配
|
||||||
|
- 支持通过 ActionBar 展示传送状态
|
||||||
|
|
||||||
|
### 插件截图
|
||||||
|
|
||||||
|
- 
|
||||||
|
- 
|
||||||
|
|
||||||
|
### 插件配置
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
#配置文件版本 请勿修改
|
||||||
|
Version: 1.5
|
||||||
|
|
||||||
|
#服务器列表
|
||||||
|
Servers:
|
||||||
|
- lobby1
|
||||||
|
- lobby2
|
||||||
|
#传送超时时间(单位: Tick)
|
||||||
|
WaitTime: 35
|
||||||
|
#自带传送(如果开启 则Login自动传送失效)
|
||||||
|
AutoTP: false
|
||||||
|
#登录自动传送(暂时支持AuthMe)
|
||||||
|
LoginAutoTP: true
|
||||||
|
#传送延时(单位: 秒)
|
||||||
|
AutoTPDelay: 10
|
||||||
|
#尝试完毕后是否继续重试
|
||||||
|
ReTry: true
|
||||||
|
#传送提示
|
||||||
|
Message: '&a请稍候 正在传送至服务器 %s ...'
|
||||||
|
TimeOut: '&c传送超时 正在切换到服务器 %s ...'
|
||||||
|
TPDelay: '&a登陆成功 正在为您匹配服务器 剩余 %s 秒...'
|
||||||
|
Unavailable: '&4已尝试所有可用服务器 传送失败!'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 插件命令
|
||||||
|
|
||||||
|
```
|
||||||
|
插件注册命令:
|
||||||
|
- MiaoLobby
|
||||||
|
别名: ml
|
||||||
|
描述: MiaoLobby - Minecraft 服务器插件父项目
|
||||||
|
权限: MiaoLobby.reload
|
||||||
|
用法: 使用/MiaoLobby help 查看帮助!
|
||||||
|
```
|
||||||
|
|
||||||
|
### 插件权限
|
||||||
|
|
||||||
|
```
|
||||||
|
插件注册权限:
|
||||||
|
- MiaoLobby.default - MiaoLobby 默认权限!
|
||||||
|
- MiaoLobby.admin - MiaoLobby 管理员权限!
|
||||||
|
- MiaoLobby.reload - 重新载入插件!
|
||||||
|
```
|
||||||
|
|
||||||
|
### 插件下载
|
||||||
|
|
||||||
|
[attach]1802025[/attach]
|
||||||
|
|
||||||
|
### Miao系列插件
|
||||||
|
|
||||||
|
- [[经济]MiaoReward —— 喵式奖励 让玩家看广告为服务器提供收入吧[1.7.10+全版本]](https://www.mcbbs.net/thread-1121423-1-1.html)
|
||||||
|
- [[编程]MiaoBlockly —— 喵式积木 用简单的积木来写插件吧[1.12.2+全版本]](https://www.mcbbs.net/thread-1129411-1-1.html)
|
||||||
|
- [[编程]MiaoConsole —— 喵式终端 通过MC端口直接控制服务器 调试插件[1.12.2+全版本]](https://www.mcbbs.net/thread-1129227-1-1.html)
|
||||||
|
- [[管理]MiaoBind —— 喵式绑定 兼容SoulBound的绑定插件 支持自定义关键词[1.7+全版本]](https://www.mcbbs.net/thread-922072-1-1.html)
|
||||||
|
- [[信息]MiaoBoard —— 喵式记分板 自定义动态记分板[1.7+全版本]](https://www.mcbbs.net/thread-631482-1-1.html)
|
||||||
|
- [[聊天]MiaoChat —— 喵式聊天 多功能自定义聊天格式 新增支持跨服[1.7.10+全版本]](https://www.mcbbs.net/thread-631240-1-1.html)
|
||||||
|
- [[菜单]MiaoMenu —— 喵式菜单 强大的自定义菜单 支持多种自定义操作[1.7+全版本]](https://www.mcbbs.net/thread-860047-1-1.html)
|
||||||
|
- [[管理]YUM —— 全能的服务器插件管理工具 全自动安装插件 更新插件[1.7.2+全版本]](https://www.mcbbs.net/thread-701333-1-1.html)
|
||||||
|
|
||||||
|
#### 本插件所用所有代码均为原创,不存在借用/抄袭等行为
|
||||||
22
packages/plugins/docs/MiaoNashorn.md
Normal file
22
packages/plugins/docs/MiaoNashorn.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[综合|前置]MiaoNashorn —— 喵式犀牛引擎 用于 Java14+ 自动安装脚本引擎[全版本]
|
||||||
|
# MiaoNashorn
|
||||||
|
|
||||||
|
## 插件介绍
|
||||||
|
|
||||||
|
> 在Java14+环境下缺少Nashorn 本插件用于自动下载并且加载Nashorn依赖
|
||||||
|
> 自动从云端下载依赖 插件仅 8kb 大小
|
||||||
|
|
||||||
|
## 可用于下列插件 在 Java14+ 环境运行
|
||||||
|
|
||||||
|
- PlaceholderAPI 的 Javascript 扩展
|
||||||
|
- MiaoMenu
|
||||||
|
- MiaoScript
|
||||||
|
- TrMenu
|
||||||
|
- AttributePlus
|
||||||
|
- 等其他任何需要 Nashorn 引擎的插件
|
||||||
|
|
||||||
|
## 下载地址
|
||||||
|
|
||||||
|
[attach]1834431[/attach]
|
||||||
|
|
||||||
|
#### 本插件所用所有代码均为原创,不存在借用/抄袭等行为
|
||||||
@@ -1,14 +1,57 @@
|
|||||||
# MiaoPay
|
# MiaoPay
|
||||||
|
|
||||||
## 安装方式
|
## 安装方式
|
||||||
先按照帖子
|
|
||||||
|
先按照帖子
|
||||||
|
|
||||||
### 网关
|
### 网关
|
||||||
|
|
||||||
- https://pay.yumc.pw/api
|
- https://pay.yumc.pw/api
|
||||||
|
|
||||||
|
### 请求规范
|
||||||
|
|
||||||
|
- 除业务参数外 每个请求必须包含下列系统参数
|
||||||
|
- 系统级参数
|
||||||
|
- 应用 ID `appid`
|
||||||
|
- 时间戳 `timestamp` 单位: 秒
|
||||||
|
- 随机字符串 `nonce` 32 位以内的随机字符串
|
||||||
|
|
||||||
|
#### 签名生成
|
||||||
|
|
||||||
|
- 对参数按照字典升序排列
|
||||||
|
- 拼接成查询字符串后追加 key=secret
|
||||||
|
- 获得字符串的 MD5 值 并且转换成大写
|
||||||
|
|
||||||
|
```php
|
||||||
|
ksort($data);
|
||||||
|
$signStr = urldecode(http_build_query($data)).'&key='.\getAppSecret();
|
||||||
|
return strtoupper(md5($signStr));
|
||||||
|
```
|
||||||
|
|
||||||
### 相关接口
|
### 相关接口
|
||||||
|
|
||||||
#### 创建订单
|
#### 创建订单
|
||||||
|
|
||||||
- METHOD: /create
|
- METHOD: /create
|
||||||
- PARAM:
|
- PARAM:
|
||||||
-
|
- 订单标题 `subject` 必填
|
||||||
|
- 订单金额 `amount` 必填 单位: 元
|
||||||
|
- 用户名 `username` 选填
|
||||||
|
- 用户唯一 ID `unionId` 选填
|
||||||
|
- 外部订单 ID `outOrderId` 选填 用于三方系统
|
||||||
|
- 通知地址 `notifyUrl` 选填 用于三方系统回调
|
||||||
|
- RETURN:
|
||||||
|
- 订单ID `order_id`
|
||||||
|
- 订单金额 `amount`
|
||||||
|
- 订单支付地址 `url`
|
||||||
|
|
||||||
|
#### 查询订单
|
||||||
|
|
||||||
|
- METHOD: /query
|
||||||
|
- PARAM:
|
||||||
|
- 订单ID `subject` 必填
|
||||||
|
- 订单金额 `amount` 必填 单位: 元
|
||||||
|
- 用户名 `username` 选填
|
||||||
|
- 用户唯一 ID `uuid` 选填
|
||||||
|
- RETURN:
|
||||||
|
- 订单数据
|
||||||
|
|||||||
37
packages/plugins/docs/MiaoRGBSupport.md
Normal file
37
packages/plugins/docs/MiaoRGBSupport.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
[综合|信息]MiaoRGBSupport —— 喵式RGB 支持任意插件的RGB展示[1.16+]
|
||||||
|
|
||||||
|
# MiaoRGBSupport
|
||||||
|
|
||||||
|
## 插件简介
|
||||||
|
- 支持1.16+彩色字体展示
|
||||||
|
- 兼容原版聊天以及任意聊天插件
|
||||||
|
- 兼容任意记分板插件
|
||||||
|
- 仅需安装插件配置权限即可生效
|
||||||
|
|
||||||
|
## 插件权限
|
||||||
|
- `MiaoRGBSupport.color` 默认玩家没权限 需要手动添加
|
||||||
|
|
||||||
|
## 安装方式
|
||||||
|
- 本插件基于 MiaoScript 开发
|
||||||
|
- 请先安装 MiaoScript [坛内地址](https://www.mcbbs.net/thread-774401-1-1.html)
|
||||||
|
- 然后安装 ProtocolLib 自己解决
|
||||||
|
- 执行 `/mspm install MiaoChatRGBSupport`
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
- 颜色格式 `#FFFFFF` 标准 HTML 的色彩格式
|
||||||
|
|
||||||
|
### 聊天插件配置
|
||||||
|
- 例如 配置 `MiaoChat` 的 `format.yml`
|
||||||
|
- 
|
||||||
|
- 配置完成后 重载插件
|
||||||
|
|
||||||
|
### 聊天时使用
|
||||||
|
- 聊天时 直接输入颜色代码即可
|
||||||
|
- 
|
||||||
|
|
||||||
|
## 星球特供版本
|
||||||
|
- 
|
||||||
|
- 此版本为知识星球特供
|
||||||
|
- 支持 聊天和记分板
|
||||||
|
- 支持 彩虹字
|
||||||
|
- 详情加群 650545561
|
||||||
114
packages/plugins/docs/MiaoRebate.md
Normal file
114
packages/plugins/docs/MiaoRebate.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# MiaoRebate
|
||||||
|
|
||||||
|
## 插件简介
|
||||||
|
|
||||||
|
- 还在为服务器收入不足而倒闭烦恼嘛
|
||||||
|
- 还在为肝帝不氪金而烦恼嘛
|
||||||
|
- 快来接入 喵式返利
|
||||||
|
- 饿了么美团战略合作 玩家点外卖 腐竹拿返利 增加服务器收入
|
||||||
|
|
||||||
|
### 先来一张 1 块钱吃一餐的图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 再来一张红包兑换的图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 限时活动
|
||||||
|
|
||||||
|
> 即日起 至 7 月 15 日 额外奖励活动
|
||||||
|
> 每满 50 人关注公众号 额外奖励 50 元 上不封顶 (当月取消关注不算)
|
||||||
|
> 请绑定后加 QQ 群 1055983539 参加活动
|
||||||
|
|
||||||
|
## 插件展示
|
||||||
|
|
||||||
|
> 多图预警 折叠了
|
||||||
|
|
||||||
|
`[spoiler]`
|
||||||
|
|
||||||
|
- 命令帮助
|
||||||
|
- 扫码绑定
|
||||||
|
- 个人信息
|
||||||
|
- 兑换列表
|
||||||
|
|
||||||
|
`[/spoiler]`
|
||||||
|
|
||||||
|
## 插件命令
|
||||||
|
|
||||||
|
```
|
||||||
|
>mre help
|
||||||
|
[外卖系统]====== [外卖系统] 帮助菜单 ======
|
||||||
|
[外卖系统]/mre bind 绑定账号
|
||||||
|
[外卖系统]/mre draw <兑换数量> 兑换点券
|
||||||
|
[外卖系统]由于您是管理员 以为您展示额外命令
|
||||||
|
[外卖系统]/mrd bind server 绑定服务器
|
||||||
|
```
|
||||||
|
|
||||||
|
## 接下来就是赚钱的操作
|
||||||
|
|
||||||
|
### 服务器准备工作
|
||||||
|
|
||||||
|
- 本插件依赖于 `MiaoReward` 请前往 [站内帖子](https://www.mcbbs.net/thread-1121423-1-1.html) 完成安装
|
||||||
|
- 执行 `/mspm install MiaoRebate` 安装 MiaoRebate 脚本插件
|
||||||
|
- 完成安装
|
||||||
|
|
||||||
|
### 绑定服务器
|
||||||
|
|
||||||
|
- 执行 `/mre bind server`
|
||||||
|
- 使用绿色儿的那个 APP 扫码 完成绑定
|
||||||
|
|
||||||
|
### 玩家绑定账号
|
||||||
|
|
||||||
|
- 执行 `/mre bind`
|
||||||
|
- 使用绿色儿的那个 APP 扫码 完成绑定
|
||||||
|
|
||||||
|
## 使用说明
|
||||||
|
|
||||||
|
- 玩家可以通过下列方式获取圈币
|
||||||
|
- 进入公众号 领取红包
|
||||||
|
- 小程序直接点餐或到饿了么/美团 APP 点餐
|
||||||
|
- 点餐后 发送订单号 兑换奖励
|
||||||
|
- 返利额度约为实付金额的 `1%-3%` 左右
|
||||||
|
- 获得的圈币 在服务器使用 `/mre draw 兑换金额`
|
||||||
|
- 腐竹获得圈币后 在公众号兑换成红包即可
|
||||||
|
|
||||||
|
## PAPI 兼容
|
||||||
|
|
||||||
|
- 目前暂不支持 PAPI 变量 后续会支持
|
||||||
|
|
||||||
|
## 配置文件
|
||||||
|
|
||||||
|
```yml
|
||||||
|
# 提示前缀
|
||||||
|
prefix: §6[§b外卖系统§6]§r
|
||||||
|
# 用于检查货币的变量
|
||||||
|
check: "%playerpoints_points%"
|
||||||
|
# 用于充值货币的命令
|
||||||
|
command: points give %player_name% %amount%
|
||||||
|
# 兑换比例 圈币 对应多少 货币
|
||||||
|
ratio: 1
|
||||||
|
# 货币名称
|
||||||
|
coinName: 点券
|
||||||
|
# 进服提示
|
||||||
|
joinTip: true
|
||||||
|
# 绑定数据(请勿手动修改 绑定后会自动填写数据)
|
||||||
|
owner:
|
||||||
|
userid:
|
||||||
|
ccid:
|
||||||
|
openid:
|
||||||
|
```
|
||||||
|
|
||||||
|
## 插件源码
|
||||||
|
|
||||||
|
- [MiaoScript 包管理中心](https://git.yumc.pw/circlecloud/ms/src/branch/master/packages/plugins/src/MiaoRebate.ts)
|
||||||
|
|
||||||
|
## 更新日志
|
||||||
|
|
||||||
|
- 暂无
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
- 绑定服务器(已完成)
|
||||||
|
- 绑定玩家(已完成)
|
||||||
|
- 兑换圈币(已完成)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "@ccms/plugins",
|
"name": "@ccms/plugins",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript plugins package",
|
"description": "MiaoScript plugins package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -26,16 +26,16 @@
|
|||||||
"@javatypes/spring-data-redis": "^0.0.3",
|
"@javatypes/spring-data-redis": "^0.0.3",
|
||||||
"@javatypes/spring-web": "^0.0.3",
|
"@javatypes/spring-web": "^0.0.3",
|
||||||
"@javatypes/tomcat": "^0.0.3",
|
"@javatypes/tomcat": "^0.0.3",
|
||||||
"@types/crypto-js": "^4.0.1",
|
"@types/crypto-js": "^4.0.2",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/standalone": "^7.13.12",
|
"@babel/standalone": "^7.14.7",
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0",
|
"@ccms/container": "^0.16.0",
|
||||||
"@ccms/plugin": "^0.14.1",
|
"@ccms/plugin": "^0.16.0",
|
||||||
"crypto-js": "^4.0.0"
|
"crypto-js": "^4.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class MiaoMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@plugin({ version: '1.0.1', author: 'MiaoWoo', source: __filename })
|
@plugin({ version: '1.1.0', author: 'MiaoWoo', nativeDepends: ['PlaceholderAPI'], source: __filename })
|
||||||
export class MiaoChat extends interfaces.Plugin {
|
export class MiaoChat extends interfaces.Plugin {
|
||||||
@Autowired()
|
@Autowired()
|
||||||
private Server: server.Server
|
private Server: server.Server
|
||||||
|
|||||||
109
packages/plugins/src/MiaoChatRGBSupport.ts
Normal file
109
packages/plugins/src/MiaoChatRGBSupport.ts
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
import { task, server, constants } from "@ccms/api"
|
||||||
|
import { Autowired, JSClass } from "@ccms/container"
|
||||||
|
import { interfaces, JSPlugin } from "@ccms/plugin"
|
||||||
|
|
||||||
|
let createPacketAdapterFunction = eval(`
|
||||||
|
function(cls, plugin, type, onPacketSending){
|
||||||
|
return new cls(plugin, type) {
|
||||||
|
onPacketSending: onPacketSending
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
const ChatColor = Java.type('net.md_5.bungee.api.ChatColor')
|
||||||
|
const Pattern = Java.type('java.util.regex.Pattern')
|
||||||
|
|
||||||
|
@JSPlugin({ prefix: 'MCRS', version: '1.0.0', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], nativeDepends: ['ProtocolLib'], source: __filename })
|
||||||
|
export class MiaoChatRGBSupport extends interfaces.Plugin {
|
||||||
|
private supportRGB: boolean = false
|
||||||
|
// 用于匹配 '#FFFFFF' 颜色格式
|
||||||
|
private RGBCOLOR_PATTERN = Pattern.compile("(#[a-fA-F0-9]{6}?)([^#?]*)");
|
||||||
|
|
||||||
|
@JSClass('com.comphenix.protocol.events.PacketAdapter')
|
||||||
|
private PacketAdapter: any
|
||||||
|
@JSClass('com.comphenix.protocol.PacketType')
|
||||||
|
private PacketType: any
|
||||||
|
@JSClass('com.comphenix.protocol.ProtocolLibrary')
|
||||||
|
private ProtocolLibrary: any
|
||||||
|
|
||||||
|
private adapter: any
|
||||||
|
|
||||||
|
load() {
|
||||||
|
try {
|
||||||
|
ChatColor.of('#FFFFFF').toString()
|
||||||
|
this.supportRGB = true
|
||||||
|
this.logger.console('§a检测到兼容RGB的服务端 已启动相关支持...')
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.console('§c当前服务端不支持RGB色彩 Error: ' + error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
if (this.supportRGB) {
|
||||||
|
this.initPacketAdapter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
if (this.supportRGB) {
|
||||||
|
this.ProtocolLibrary.getProtocolManager().removePacketListener(this.adapter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
createPacketAdapter(onPacketSending: (event) => void) {
|
||||||
|
return createPacketAdapterFunction(this.PacketAdapter, base.getInstance(), [this.PacketType.Play.Server.CHAT], onPacketSending)
|
||||||
|
}
|
||||||
|
|
||||||
|
colorJson(jsonObj) {
|
||||||
|
if (jsonObj.extra && jsonObj.extra.length) {
|
||||||
|
for (const extra of jsonObj.extra) {
|
||||||
|
this.colorJson(extra)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let text: string = jsonObj.text
|
||||||
|
var matcher = this.RGBCOLOR_PATTERN.matcher(text)
|
||||||
|
let colors = []
|
||||||
|
let texts = []
|
||||||
|
let lastStart = 0
|
||||||
|
while (matcher.find()) {
|
||||||
|
if (lastStart == 0) {
|
||||||
|
texts.push(text.substr(lastStart, matcher.start()))
|
||||||
|
lastStart = matcher.end()
|
||||||
|
}
|
||||||
|
colors.push(matcher.group(1))
|
||||||
|
texts.push(matcher.group(2))
|
||||||
|
}
|
||||||
|
if (colors.length) {
|
||||||
|
jsonObj.text = ''
|
||||||
|
let extras = []
|
||||||
|
let firstText = texts.shift()
|
||||||
|
if (firstText) { extras.push({ text: firstText }) }
|
||||||
|
texts.forEach((value, index) => {
|
||||||
|
extras.push({
|
||||||
|
text: value,
|
||||||
|
color: colors[index]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
if (jsonObj.extra) {
|
||||||
|
jsonObj.extra = extras.concat(jsonObj.extra)
|
||||||
|
} else {
|
||||||
|
jsonObj.extra = extras
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return jsonObj
|
||||||
|
}
|
||||||
|
|
||||||
|
initPacketAdapter() {
|
||||||
|
this.adapter = this.createPacketAdapter((event) => {
|
||||||
|
try {
|
||||||
|
if (!event.getPlayer().hasPermission('MiaoChatRGBSupport.color')) { return }
|
||||||
|
let wcc = event.getPacket().getChatComponents().read(0)
|
||||||
|
if (wcc == null) { return }
|
||||||
|
wcc.setJson(JSON.stringify(this.colorJson(JSON.parse(wcc.getJson()))))
|
||||||
|
event.getPacket().getChatComponents().writeSafely(0, wcc)
|
||||||
|
} catch (error) {
|
||||||
|
console.ex(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.ProtocolLibrary.getProtocolManager().addPacketListener(this.adapter)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -69,7 +69,7 @@ export class MiaoExplorer extends interfaces.Plugin {
|
|||||||
|
|
||||||
private readDir(dir) {
|
private readDir(dir) {
|
||||||
let children = Java.from(dir.listFiles(new FileFilter({
|
let children = Java.from(dir.listFiles(new FileFilter({
|
||||||
accept: file => file.getName().endsWith('.yml') || file.isDirectory()
|
accept: file => file.getName().endsWith('.yml') || file.getName().endsWith('.js') || file.isDirectory()
|
||||||
}))).sort().map(file => {
|
}))).sort().map(file => {
|
||||||
if (file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
let children = this.readDir(file)
|
let children = this.readDir(file)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/// <reference types="@javatypes/bukkit-api" />
|
/// <reference types="@javatypes/bukkit-api" />
|
||||||
/// <reference types="@javatypes/sponge-api" />
|
/// <reference types="@javatypes/sponge-api" />
|
||||||
|
|
||||||
import { plugin, server, task } from '@ccms/api'
|
import { constants, plugin, server, task } from '@ccms/api'
|
||||||
import { Autowired, JSClass } from '@ccms/container'
|
import { Autowired, JSClass } from '@ccms/container'
|
||||||
import { Cmd, Config, interfaces, JSPlugin, Listener, PluginConfig, Tab } from '@ccms/plugin'
|
import { Cmd, Config, interfaces, JSPlugin, Listener, PluginConfig, Tab } from '@ccms/plugin'
|
||||||
|
|
||||||
@@ -17,7 +17,12 @@ interface PlayerPointsAPI {
|
|||||||
give(name: string, amount: number)
|
give(name: string, amount: number)
|
||||||
take(name: string, amount: number)
|
take(name: string, amount: number)
|
||||||
}
|
}
|
||||||
|
interface App {
|
||||||
|
appid: string
|
||||||
|
appname: string
|
||||||
|
ratio: number
|
||||||
|
coin_name: string
|
||||||
|
}
|
||||||
interface Order {
|
interface Order {
|
||||||
order_id: string
|
order_id: string
|
||||||
amount: number
|
amount: number
|
||||||
@@ -73,7 +78,7 @@ const defaultConfig = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JSPlugin({ version: '1.3.5', author: 'MiaoWoo', source: __filename, depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI'] })
|
@JSPlugin({ version: '1.5.0', author: 'MiaoWoo', source: __filename, servers: [constants.ServerType.Bukkit], depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI', 'ProtocolLib'] })
|
||||||
export class MiaoPay extends interfaces.Plugin {
|
export class MiaoPay extends interfaces.Plugin {
|
||||||
@Autowired()
|
@Autowired()
|
||||||
private server: server.Server
|
private server: server.Server
|
||||||
@@ -87,28 +92,32 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
|
|
||||||
private apiGateWay = "https://pay.yumc.pw"
|
private apiGateWay = "https://pay.yumc.pw"
|
||||||
private MiaoReward: MiaoReward
|
private MiaoReward: MiaoReward
|
||||||
|
private appInfo: App
|
||||||
|
|
||||||
private cacheMap = new Map<string, Order>();
|
private cacheMap = new Map<string, Order>();
|
||||||
private cacheSyncMap = new Map<string, Sync>();
|
private cacheSyncMap = new Map<string, Sync>();
|
||||||
|
|
||||||
|
private checkSet = new Set<string>();
|
||||||
|
|
||||||
@Config()
|
@Config()
|
||||||
private config: PluginConfig & typeof defaultConfig = defaultConfig
|
private config: PluginConfig & typeof defaultConfig = defaultConfig
|
||||||
|
|
||||||
load() {
|
load() {
|
||||||
let needSave = false
|
this.MiaoReward = this.pluginManager.getPlugin('MiaoReward') as MiaoReward
|
||||||
for (const key of Object.keys(defaultConfig)) {
|
|
||||||
if (!this.config[key]) {
|
|
||||||
this.config[key] = defaultConfig[key]
|
|
||||||
needSave = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
needSave && this.config.save()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
this.MiaoReward = this.pluginManager.getPlugin('MiaoReward') as MiaoReward
|
|
||||||
if (!this.MiaoReward) { return this.logger.error('当前脚本插件需要 MiaoReward 作为前置脚本插件!') }
|
if (!this.MiaoReward) { return this.logger.error('当前脚本插件需要 MiaoReward 作为前置脚本插件!') }
|
||||||
if (!this.config.id || !this.config.secret) { return this.logger.console('§4尚未配置商户信息 将无法正常收款!') }
|
if (!this.config.id || !this.config.secret) { return this.logger.console('§4尚未配置商户信息 将无法正常收款!') }
|
||||||
|
let info = this.httpPost('/apps', { id: this.config.id })
|
||||||
|
if (info.code == 200) {
|
||||||
|
this.appInfo = info.data
|
||||||
|
this.config.ratio = this.appInfo.ratio
|
||||||
|
this.config.coinName = this.appInfo.coin_name
|
||||||
|
} else {
|
||||||
|
this.logger.console('§4初始化支付系统失败 请检查配置是否正确!')
|
||||||
|
this.logger.console('§c服务器返回异常: §4' + info.msg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
@@ -123,7 +132,9 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
|
|
||||||
cmdpay(sender: org.bukkit.entity.Player, amount: number = 0) {
|
cmdpay(sender: org.bukkit.entity.Player, amount: number = 0) {
|
||||||
if (!sender.getItemInHand) { return this.logger.sender(sender, '§4控制台无法执行此命令!') }
|
if (!sender.getItemInHand) { return this.logger.sender(sender, '§4控制台无法执行此命令!') }
|
||||||
if (!this.MiaoReward.serverInfo) { return this.logger.sender(sender, '§4当前服务器尚未配置 请联系管理员先配置MiaoReward!') }
|
if (!this.appInfo) {
|
||||||
|
return this.logger.sender(sender, '§4当前服务器尚未配置 请联系管理员配置MiaoPay!')
|
||||||
|
}
|
||||||
if (!this.config.id || !this.config.secret) { return this.logger.sender(sender, '§c当前服务器尚未配置 请联系管理员配置支付密钥!') }
|
if (!this.config.id || !this.config.secret) { return this.logger.sender(sender, '§c当前服务器尚未配置 请联系管理员配置支付密钥!') }
|
||||||
if (this.cacheMap.has(sender.getName())) {
|
if (this.cacheMap.has(sender.getName())) {
|
||||||
this.logger.sender(sender, '§c您有一笔订单尚未完成 请完成支付或等待订单超时!')
|
this.logger.sender(sender, '§c您有一笔订单尚未完成 请完成支付或等待订单超时!')
|
||||||
@@ -136,7 +147,7 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (amount < 1) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得小于 1 ${this.config.coinName}!`) }
|
if (amount < 1) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得小于 1 ${this.config.coinName}!`) }
|
||||||
if (amount / this.config.ratio > 1000) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得大于 ${this.config.ratio * 1000} ${this.config.coinName}!`) }
|
if (amount / this.config.ratio > 5000) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得大于 ${this.config.ratio * 5000} ${this.config.coinName}!`) }
|
||||||
if (amount != Math.round(amount)) { return this.logger.sender(sender, `§c充值异常 §4充值金额必须为整数!`) }
|
if (amount != Math.round(amount)) { return this.logger.sender(sender, `§c充值异常 §4充值金额必须为整数!`) }
|
||||||
try {
|
try {
|
||||||
this.getPlayerAmount(sender)
|
this.getPlayerAmount(sender)
|
||||||
@@ -204,17 +215,25 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmdcheck(sender: org.bukkit.entity.Player, force = 1) {
|
cmdcheck(sender: org.bukkit.entity.Player, force = 1) {
|
||||||
|
if (this.checkSet.has(sender.getName())) {
|
||||||
|
return this.logger.sender(sender, '§c检查任务执行中 请稍候...')
|
||||||
|
}
|
||||||
|
this.checkSet.add(sender.getName())
|
||||||
this.logger.sender(sender, `§3正在检查需要补单充值的订单 请稍候...`)
|
this.logger.sender(sender, `§3正在检查需要补单充值的订单 请稍候...`)
|
||||||
this.taskManager.create(() => {
|
this.taskManager.create(() => {
|
||||||
let result = this.queryUnconverted(sender.getName(), force)
|
try {
|
||||||
if (result.code != 200) { return this.logger.sender(sender, `§c订单查询失败: ${result.msg}`) }
|
let result = this.queryUnconverted(sender.getName(), force)
|
||||||
let unconverteds = result.data
|
if (result.code != 200) { return this.logger.sender(sender, `§c订单查询失败: ${result.msg}`) }
|
||||||
if (!unconverteds.length) { return this.logger.sender(sender, `§c未发现需要进行补单充值的订单!`) }
|
let unconverteds = result.data
|
||||||
this.logger.sender(sender, `§3发现 §a${unconverteds.length}笔 §3未充值订单 §c正在充值 请稍候...`)
|
if (!unconverteds.length) { return this.logger.sender(sender, `§c未发现需要进行补单充值的订单!`) }
|
||||||
for (const unconverted of unconverteds) {
|
this.logger.sender(sender, `§3发现 §a${unconverteds.length}笔 §3未充值订单 §c正在充值 请稍候...`)
|
||||||
this.logger.sender(sender, `§3正在处理订单 §a${unconverted.order_id} §3请稍候...`)
|
for (const unconverted of unconverteds) {
|
||||||
this.recharge(sender, unconverted)
|
this.logger.sender(sender, `§3正在处理订单 §a${unconverted.order_id} §3请稍候...`)
|
||||||
Thread.sleep(300)
|
this.recharge(sender, unconverted)
|
||||||
|
Thread.sleep(300)
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
this.checkSet.delete(sender.getName())
|
||||||
}
|
}
|
||||||
}).async().submit()
|
}).async().submit()
|
||||||
}
|
}
|
||||||
@@ -287,6 +306,7 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private rewardOrder(sender, order_id, point) {
|
private rewardOrder(sender, order_id, point) {
|
||||||
|
if (!this.config.reward) { return }
|
||||||
this.taskManager.callSyncMethod(() => {
|
this.taskManager.callSyncMethod(() => {
|
||||||
try {
|
try {
|
||||||
if (this.config.reward['*']) {
|
if (this.config.reward['*']) {
|
||||||
@@ -355,11 +375,11 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private createOrder(sender: org.bukkit.entity.Player, amount: number): Order {
|
private createOrder(sender: org.bukkit.entity.Player, amount: number): Order {
|
||||||
let serverName = this.MiaoReward.serverInfo.name
|
let serverName = this.appInfo?.appname
|
||||||
if (this.config.name) { serverName = `${serverName}(${this.config.name})` }
|
if (this.config.name) { serverName = `${serverName}(${this.config.name})` }
|
||||||
let result = this.httpPost('/create', {
|
let result = this.httpPost('/create', {
|
||||||
subject: `${serverName} 充值 ${amount} ${this.config.coinName}`,
|
subject: `${serverName} 充值 ${amount} ${this.config.coinName}`,
|
||||||
amount: amount / this.config.ratio,
|
amount: amount / this.appInfo.ratio,
|
||||||
username: sender.getName(),
|
username: sender.getName(),
|
||||||
unionId: sender.getUniqueId().toString()
|
unionId: sender.getUniqueId().toString()
|
||||||
})
|
})
|
||||||
@@ -381,6 +401,7 @@ export class MiaoPay extends interfaces.Plugin {
|
|||||||
let startTime = Date.now()
|
let startTime = Date.now()
|
||||||
data.appid = this.config.id
|
data.appid = this.config.id
|
||||||
data.timestamp = Math.round(Date.now() / 1000)
|
data.timestamp = Math.round(Date.now() / 1000)
|
||||||
|
data.nonce = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/x/g, () => (Math.random() * 16 | 0).toString(16))
|
||||||
data.sign = this.sign(data)
|
data.sign = this.sign(data)
|
||||||
let url = `${this.apiGateWay}/api${method}`
|
let url = `${this.apiGateWay}/api${method}`
|
||||||
let result = http.post(url, data)
|
let result = http.post(url, data)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { task, server, constants } from "@ccms/api"
|
import { task, server, constants } from "@ccms/api"
|
||||||
import { Autowired, JSClass } from "@ccms/container"
|
import { Autowired, JSClass } from "@ccms/container"
|
||||||
import { plugin, interfaces } from "@ccms/plugin"
|
import { plugin, interfaces, Cmd } from "@ccms/plugin"
|
||||||
|
|
||||||
let createPacketAdapterFunction = eval(`
|
let createPacketAdapterFunction = eval(`
|
||||||
function(cls, plugin, type, onPacketSending){
|
function(cls, plugin, type, onPacketSending){
|
||||||
@@ -10,6 +10,13 @@ function(cls, plugin, type, onPacketSending){
|
|||||||
}
|
}
|
||||||
`)
|
`)
|
||||||
|
|
||||||
|
interface PlaceholderAPI {
|
||||||
|
registerPlaceholderHook: (key: string, onPlaceholderRequest: (player, s) => string) => void
|
||||||
|
unregisterPlaceholderHook: (key: string) => void
|
||||||
|
setPlaceholders: (player: any, str: string) => string
|
||||||
|
}
|
||||||
|
const Pattern = Java.type('java.util.regex.Pattern')
|
||||||
|
|
||||||
@plugin({ prefix: 'MPTL', version: '1.0.0', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], source: __filename })
|
@plugin({ prefix: 'MPTL', version: '1.0.0', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], source: __filename })
|
||||||
export class MiaoProtocol extends interfaces.Plugin {
|
export class MiaoProtocol extends interfaces.Plugin {
|
||||||
@Autowired()
|
@Autowired()
|
||||||
@@ -24,9 +31,24 @@ export class MiaoProtocol extends interfaces.Plugin {
|
|||||||
@JSClass('com.comphenix.protocol.ProtocolLibrary')
|
@JSClass('com.comphenix.protocol.ProtocolLibrary')
|
||||||
private ProtocolLibrary
|
private ProtocolLibrary
|
||||||
|
|
||||||
|
@JSClass('com.comphenix.protocol.wrappers.nbt.NbtFactory')
|
||||||
|
private NbtFactory
|
||||||
|
|
||||||
|
@JSClass('me.clip.placeholderapi.PlaceholderAPI')
|
||||||
|
private PlaceholderAPI: PlaceholderAPI
|
||||||
|
|
||||||
private pipeline: any
|
private pipeline: any
|
||||||
private adapter: any
|
private adapter: any
|
||||||
|
|
||||||
|
@Cmd({ autoMain: true })
|
||||||
|
mptl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdnbt(sender: org.bukkit.entity.Player) {
|
||||||
|
let nbt = this.NbtFactory.fromItemOptional(sender.getItemInHand())
|
||||||
|
console.log(nbt)
|
||||||
|
}
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
let count = 0
|
let count = 0
|
||||||
let wait = this.taskManager.create(() => {
|
let wait = this.taskManager.create(() => {
|
||||||
@@ -46,20 +68,49 @@ export class MiaoProtocol extends interfaces.Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createPacketAdapter(onPacketSending: (event) => void) {
|
createPacketAdapter(onPacketSending: (event) => void) {
|
||||||
return createPacketAdapterFunction(this.PacketAdapter, base.getInstance(), [this.PacketType.Play.Server.MAP], onPacketSending)
|
return createPacketAdapterFunction(this.PacketAdapter, base.getInstance(), [this.PacketType.Play.Server.CHAT], onPacketSending)
|
||||||
}
|
}
|
||||||
|
|
||||||
initPacketAdapter() {
|
initPacketAdapter() {
|
||||||
this.adapter = this.createPacketAdapter((event) => {
|
this.adapter = this.createPacketAdapter((event) => {
|
||||||
let integers = event.getPacket().getIntegers().getValues()
|
try {
|
||||||
// console.log(`ProtocolLib onPacketSending filter Map
|
// let wcc = event.getPacket().getChatComponents().read(0)
|
||||||
// Player: ${event.getPlayer()}
|
// if (wcc == null) { return }
|
||||||
// MapId: ${integers.get(0)}
|
// let json = wcc.getJson()
|
||||||
// Short: ${event.getPacket().getShorts().read(0)}
|
// console.log(json)
|
||||||
// Bytes: ${event.getPacket().getByteArrays().read(0).length}
|
// let jsonObj = JSON.parse(json)
|
||||||
// `)
|
// let result = JSON.stringify(this.colorJson(jsonObj))
|
||||||
//Size: ${integers.get(3)}x${integers.get(4)}
|
// console.log(result)
|
||||||
// org.bukkit.map.MapPalette.imageToBytes()
|
// wcc.setJson(result)
|
||||||
|
// event.getPacket().getChatComponents().writeSafely(0, wcc)
|
||||||
|
// let packet = event.getPacket()
|
||||||
|
// let modify = packet.getEntityModifier(event)
|
||||||
|
// console.log(modify.getValues().get(0).getType().getName())
|
||||||
|
// let modify = event.getPacket().getNbtModifier()
|
||||||
|
// let nbt = modify.read(0)
|
||||||
|
// let lines = ["Text1", "Text2", "Text3", "Text4"]
|
||||||
|
// console.log("Before Replace", event.getPlayer().getName(), nbt)
|
||||||
|
// lines.forEach((s: string) => {
|
||||||
|
// let origin = nbt.getString(s)
|
||||||
|
// let replaced = this.PlaceholderAPI.setPlaceholders(event.getPlayer(), origin)
|
||||||
|
// nbt.put(s, replaced)
|
||||||
|
// console.log(event.getPlayer(), origin, replaced)
|
||||||
|
// })
|
||||||
|
// // Arrays.asList("Text1", "Text2", "Text3", "Text4").forEach(s -> nbt.put(s, replace(event.getPlayer(), nbt.getString(s))))
|
||||||
|
// console.log("After Replace", event.getPlayer().getName(), nbt)
|
||||||
|
// modify.write(0, nbt)
|
||||||
|
// let integers = event.getPacket().getIntegers().getValues()
|
||||||
|
// console.log(`ProtocolLib onPacketSending filter Map
|
||||||
|
// Player: ${event.getPlayer()}
|
||||||
|
// MapId: ${integers.get(0)}
|
||||||
|
// Short: ${event.getPacket().getShorts().read(0)}
|
||||||
|
// Bytes: ${event.getPacket().getByteArrays().read(0).length}
|
||||||
|
// `)
|
||||||
|
//Size: ${integers.get(3)}x${integers.get(4)}
|
||||||
|
// org.bukkit.map.MapPalette.imageToBytes()
|
||||||
|
} catch (error) {
|
||||||
|
console.ex(error)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
this.ProtocolLibrary.getProtocolManager().addPacketListener(this.adapter)
|
this.ProtocolLibrary.getProtocolManager().addPacketListener(this.adapter)
|
||||||
}
|
}
|
||||||
|
|||||||
157
packages/plugins/src/MiaoRGBSupport.ts
Normal file
157
packages/plugins/src/MiaoRGBSupport.ts
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
import { constants } from "@ccms/api"
|
||||||
|
import { JSClass } from "@ccms/container"
|
||||||
|
import { interfaces, JSPlugin } from "@ccms/plugin"
|
||||||
|
|
||||||
|
let createPacketAdapterFunction = eval(`
|
||||||
|
function(cls, plugin, type, onPacketSending){
|
||||||
|
return new cls(plugin, type) {
|
||||||
|
onPacketSending: onPacketSending
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
const Color = Java.type('java.awt.Color')
|
||||||
|
const Pattern = Java.type('java.util.regex.Pattern')
|
||||||
|
const ChatColor = Java.type('net.md_5.bungee.api.ChatColor')
|
||||||
|
|
||||||
|
@JSPlugin({ prefix: 'MRS', version: '1.0.0', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], nativeDepends: ['ProtocolLib'], source: __filename })
|
||||||
|
export class MiaoRGBSupport extends interfaces.Plugin {
|
||||||
|
private supportRGB: boolean = false
|
||||||
|
// 用于匹配 '#FFFFFF' 颜色格式
|
||||||
|
private RGBCOLOR_PATTERN = Pattern.compile("(#[a-fA-F0-9]{6}?)([^#?]*)")
|
||||||
|
// 用于匹配彩虹格式
|
||||||
|
private RAINBOW_PATTERN = Pattern.compile("#RAINBOW([0-9]{1,3})([^#?]*)")
|
||||||
|
|
||||||
|
@JSClass('com.comphenix.protocol.events.PacketAdapter')
|
||||||
|
private PacketAdapter: any
|
||||||
|
@JSClass('com.comphenix.protocol.PacketType')
|
||||||
|
private PacketType: any
|
||||||
|
@JSClass('com.comphenix.protocol.ProtocolLibrary')
|
||||||
|
private ProtocolLibrary: any
|
||||||
|
|
||||||
|
private adapter: any
|
||||||
|
|
||||||
|
load() {
|
||||||
|
try {
|
||||||
|
ChatColor.of('#FFFFFF').toString()
|
||||||
|
this.supportRGB = true
|
||||||
|
this.logger.console('§a检测到兼容RGB的服务端 已启动相关支持...')
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.console('§c当前服务端不支持RGB色彩 Error: ' + error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
if (this.supportRGB) {
|
||||||
|
this.initPacketAdapter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
if (this.supportRGB) {
|
||||||
|
this.ProtocolLibrary.getProtocolManager().removePacketListener(this.adapter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
createPacketAdapter(onPacketSending: (event) => void) {
|
||||||
|
return createPacketAdapterFunction(this.PacketAdapter, base.getInstance(), [
|
||||||
|
this.PacketType.Play.Server.CHAT,
|
||||||
|
this.PacketType.Play.Server.SCOREBOARD_OBJECTIVE,
|
||||||
|
this.PacketType.Play.Server.SCOREBOARD_SCORE,
|
||||||
|
this.PacketType.Play.Server.SCOREBOARD_TEAM
|
||||||
|
], onPacketSending)
|
||||||
|
}
|
||||||
|
|
||||||
|
colorJson(jsonObj) {
|
||||||
|
return this.processJson(jsonObj, this.RGBCOLOR_PATTERN, (extras, colors) => {
|
||||||
|
return (value, index) => {
|
||||||
|
extras.push({
|
||||||
|
text: value,
|
||||||
|
color: colors[index]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
rainbowJson(jsonObj) {
|
||||||
|
return this.processJson(jsonObj, this.RAINBOW_PATTERN, (extras, colors) => {
|
||||||
|
return (value: string, index) => {
|
||||||
|
let textArr = value.split("")
|
||||||
|
let rainbowColors = this.createRainbow(textArr.length, colors[index])
|
||||||
|
textArr.forEach((value, index) => {
|
||||||
|
extras.push({
|
||||||
|
text: value,
|
||||||
|
color: rainbowColors[index]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private processJson(jsonObj, PATTERN, process: (extras, colors) => (value, index) => void) {
|
||||||
|
let text: string = jsonObj.text
|
||||||
|
if (jsonObj.extra && jsonObj.extra.length) {
|
||||||
|
for (const extra of jsonObj.extra) {
|
||||||
|
this.processJson(extra, PATTERN, process)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!text) { return jsonObj }
|
||||||
|
var matcher = PATTERN.matcher(text)
|
||||||
|
let colors = []
|
||||||
|
let texts = []
|
||||||
|
let lastStart = 0
|
||||||
|
while (matcher.find()) {
|
||||||
|
if (lastStart == 0) {
|
||||||
|
texts.push(text.substr(lastStart, matcher.start()))
|
||||||
|
lastStart = matcher.end()
|
||||||
|
}
|
||||||
|
colors.push(matcher.group(1))
|
||||||
|
texts.push(matcher.group(2))
|
||||||
|
}
|
||||||
|
if (colors.length) {
|
||||||
|
jsonObj.text = ''
|
||||||
|
let extras = []
|
||||||
|
let firstText = texts.shift()
|
||||||
|
if (firstText) { extras.push({ text: firstText }) }
|
||||||
|
texts.forEach(process(extras, colors))
|
||||||
|
if (jsonObj.extra) {
|
||||||
|
jsonObj.extra = extras.concat(jsonObj.extra)
|
||||||
|
} else {
|
||||||
|
jsonObj.extra = extras
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return jsonObj
|
||||||
|
}
|
||||||
|
|
||||||
|
private createRainbow(step, saturation) {
|
||||||
|
var colors = []
|
||||||
|
var colorStep = (1.00 / step)
|
||||||
|
for (var i = 0; i < step; i++) {
|
||||||
|
colors.push("#" + java.lang.String.format("%08x", Color.getHSBColor((colorStep * i), saturation, saturation).getRGB()).substring(2))
|
||||||
|
}
|
||||||
|
return colors
|
||||||
|
}
|
||||||
|
|
||||||
|
initPacketAdapter() {
|
||||||
|
this.adapter = this.createPacketAdapter((event) => {
|
||||||
|
try {
|
||||||
|
if (!event.getPlayer().hasPermission('MiaoRGBSupport.color')) { return }
|
||||||
|
let ccs = event.getPacket().getChatComponents()
|
||||||
|
let size = ccs.size()
|
||||||
|
for (let i = 0; i < size; i++) {
|
||||||
|
let wcc = ccs.read(i)
|
||||||
|
if (wcc == null) { continue }
|
||||||
|
let json = JSON.parse(wcc.getJson())
|
||||||
|
json = this.colorJson(json)
|
||||||
|
if (event.getPlayer().hasPermission('MiaoRGBSupport.rainbow')) {
|
||||||
|
json = this.rainbowJson(json)
|
||||||
|
}
|
||||||
|
wcc.setJson(JSON.stringify(json))
|
||||||
|
ccs.write(i, wcc)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.ex(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.ProtocolLibrary.getProtocolManager().addPacketListener(this.adapter)
|
||||||
|
}
|
||||||
|
}
|
||||||
253
packages/plugins/src/MiaoRebate.ts
Normal file
253
packages/plugins/src/MiaoRebate.ts
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
/// <reference types="@javatypes/bungee-api" />
|
||||||
|
/// <reference types="@javatypes/bukkit-api" />
|
||||||
|
/// <reference types="@javatypes/sponge-api" />
|
||||||
|
|
||||||
|
import { plugin, server, task } from '@ccms/api'
|
||||||
|
import { Autowired, JSClass } from '@ccms/container'
|
||||||
|
import { Cmd, Config, interfaces, JSPlugin, Listener, PluginConfig, Tab } from '@ccms/plugin'
|
||||||
|
|
||||||
|
import type { MiaoReward } from './MiaoReward'
|
||||||
|
import http from '@ccms/common/dist/http'
|
||||||
|
|
||||||
|
interface Sync {
|
||||||
|
scaned: boolean
|
||||||
|
start?: number
|
||||||
|
left?: number
|
||||||
|
cancelled?: boolean
|
||||||
|
paying?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PlaceholderAPI {
|
||||||
|
registerPlaceholderHook: (key: string, onPlaceholderRequest: (player, s) => string) => void
|
||||||
|
unregisterPlaceholderHook: (key: string) => void
|
||||||
|
setPlaceholders: (player: any, str: string) => string
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultConfig = {
|
||||||
|
prefix: '§6[§b外卖系统§6]§r',
|
||||||
|
check: '%playerpoints_points%',
|
||||||
|
command: 'points give %player_name% %amount%',
|
||||||
|
ratio: 1,
|
||||||
|
coinName: '点券',
|
||||||
|
joinTip: true,
|
||||||
|
owner: {
|
||||||
|
userid: '',
|
||||||
|
ccid: '',
|
||||||
|
openid: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@JSPlugin({ version: '1.0.1', author: 'MiaoWoo', source: __filename, depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI'] })
|
||||||
|
export class MiaoRebate extends interfaces.Plugin {
|
||||||
|
@Autowired()
|
||||||
|
private server: server.Server
|
||||||
|
@Autowired()
|
||||||
|
private taskManager: task.TaskManager
|
||||||
|
@Autowired()
|
||||||
|
private pluginManager: plugin.PluginManager
|
||||||
|
|
||||||
|
@JSClass('me.clip.placeholderapi.PlaceholderAPI')
|
||||||
|
private PlaceholderAPI: PlaceholderAPI
|
||||||
|
|
||||||
|
private apiGateWay = "https://rebate.yumc.pw"
|
||||||
|
private MiaoReward: MiaoReward
|
||||||
|
|
||||||
|
@Config({ default: defaultConfig })
|
||||||
|
private config: PluginConfig & typeof defaultConfig = defaultConfig
|
||||||
|
|
||||||
|
load() {
|
||||||
|
this.logger.prefix = this.config.prefix
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
this.MiaoReward = this.pluginManager.getPlugin('MiaoReward') as MiaoReward
|
||||||
|
if (!this.MiaoReward) { return this.logger.error(`当前脚本插件需要 MiaoReward 作为前置脚本插件!`) }
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Cmd({ autoMain: true })
|
||||||
|
mre() { }
|
||||||
|
|
||||||
|
cmdbind(sender: org.bukkit.entity.Player, server: boolean) {
|
||||||
|
if (!sender.getItemInHand) { return this.logger.sender(sender, `§c手持物品检测异常 请检查是否在客户端执行命令!`) }
|
||||||
|
if (server) { return this.bindServer(sender) }
|
||||||
|
if (!sender.getItemInHand) { return this.logger.sender(sender, `§c手持物品检测异常 请检查是否在客户端执行命令!`) }
|
||||||
|
if (!this.config.owner.openid || !this.config.owner.userid) { return this.logger.sender(sender, `§4当前服务器尚未绑定管理员账号 请联系管理员完成绑定!`) }
|
||||||
|
this.MiaoReward.sendTitle(sender, `§a获取二维码中`, `§6请稍候...`)
|
||||||
|
let scan = this.qrCreate(sender, `绑定成功 请返回游戏查看!`, {
|
||||||
|
v: 1,
|
||||||
|
type: "invite",
|
||||||
|
user: this.config.owner.openid,
|
||||||
|
userid: this.config.owner.userid,
|
||||||
|
})
|
||||||
|
this.createScanTask(sender, scan.url, `微信扫码绑定账号`, `微信扫码 点击关注 绑定账号`, (sender) => {
|
||||||
|
this.MiaoReward.sendTitle(sender, `§a绑定成功!`, `§6已绑定用户: §b${this.qrGet(scan.token).user.username}`)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
cmddraw(sender: org.bukkit.entity.Player, amount: number) {
|
||||||
|
if (!sender.getItemInHand) { return this.logger.sender(sender, `§c手持物品检测异常 请检查是否在客户端执行命令!`) }
|
||||||
|
if (!this.config.owner.openid || !this.config.owner.userid) { return this.logger.sender(sender, `§4当前服务器尚未绑定管理员账号 请联系管理员完成绑定!`) }
|
||||||
|
amount = Number(amount)
|
||||||
|
if (!Number.isInteger(amount)) {
|
||||||
|
return this.logger.sender(sender, `§4兑换金额必须是数字!`)
|
||||||
|
}
|
||||||
|
if (amount < 1) {
|
||||||
|
return this.logger.sender(sender, `§4兑换金额必须大于1!`)
|
||||||
|
}
|
||||||
|
this.MiaoReward.sendTitle(sender, `§a获取二维码中`, `§6请稍候...`)
|
||||||
|
let scan = this.qrCreate(sender, ``, {
|
||||||
|
v: 1,
|
||||||
|
type: "draw",
|
||||||
|
ccid: this.config.owner.ccid,
|
||||||
|
userid: this.config.owner.userid,
|
||||||
|
amount
|
||||||
|
})
|
||||||
|
this.createScanTask(sender, scan.url, `微信扫码兑换奖励`, `微信扫码兑换奖励`, (sender) => {
|
||||||
|
let result = this.qrGet(scan.token)
|
||||||
|
this.MiaoReward.sendTitle(sender, `§a扫码成功`, `§a兑换奖励中 §b具体结果请查看公众号消息...`)
|
||||||
|
if (!(result = result.result)) {
|
||||||
|
return this.sendError(sender, amount, `§4服务器返回数据异常!`)
|
||||||
|
}
|
||||||
|
if (!result.success) {
|
||||||
|
return this.sendError(sender, amount, `§c` + result.message)
|
||||||
|
}
|
||||||
|
this.logger.sender(sender, `§a` + result.message)
|
||||||
|
this.taskManager.callSyncMethod(() => {
|
||||||
|
let point = this.safeMultiply(amount, this.config.ratio)
|
||||||
|
let command = this.config.command.replace(`%player_name%`, sender.getName()).replace(`%amount%`, `${point}`)
|
||||||
|
if (!this.server.dispatchConsoleCommand(command)) {
|
||||||
|
return this.sendError(sender, amount, `§4充值命令执行异常!`)
|
||||||
|
}
|
||||||
|
let nowPoint = this.getPlayerAmount(sender)
|
||||||
|
this.logger.sender(sender, [
|
||||||
|
`§6充值 §a${point} §6${this.config.coinName} §a成功 §6当前账户余额: §3${nowPoint} §6${this.config.coinName}`,
|
||||||
|
`§c如出现未到账的情况 请联系管理员!`
|
||||||
|
])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
this.MiaoReward.clearTitle(sender)
|
||||||
|
}
|
||||||
|
private safeMultiply(a: number, b: number) {
|
||||||
|
return parseFloat((a * b).toFixed(0))
|
||||||
|
}
|
||||||
|
sendError(sender: org.bukkit.entity.Player, amount: number, error: string) {
|
||||||
|
return this.logger.sender(sender, [
|
||||||
|
`§c========== ${this.config.prefix}§4兑换异常 §c==========`,
|
||||||
|
`§6兑换圈币: §3${amount}`,
|
||||||
|
`§6异常原因: §4${error}`,
|
||||||
|
`§6异常账号: §b${sender.getName()}`,
|
||||||
|
`§6异常时间: §a${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`,
|
||||||
|
`§c如果已扣除圈币但${this.config.coinName}未到账 请截图发给腐竹!`,
|
||||||
|
`§c========== ${this.config.prefix}§4兑换异常 §c==========`,
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
private getPlayerAmount(sender: any): number {
|
||||||
|
let result = this.PlaceholderAPI.setPlaceholders(sender, this.config.check)
|
||||||
|
let amount = parseFloat(result)
|
||||||
|
if (isNaN(amount)) {
|
||||||
|
throw new Error(`§c读取玩家 §3${this.config.coinName} §c异常 §6请检查 §3check §6配置是否正确!
|
||||||
|
§6数据解析链路: §3${this.config.check} §6=> §3${result} §6=> §3${amount}`)
|
||||||
|
}
|
||||||
|
return amount
|
||||||
|
}
|
||||||
|
private bindServer(sender: org.bukkit.entity.Player) {
|
||||||
|
if (!sender.isOp()) { return this.logger.sender(sender, `§4您没有配置服务器的权限!`) }
|
||||||
|
if (this.config.owner.openid || this.config.owner.userid) {
|
||||||
|
this.logger.sender(sender, `§c更换管理员账号 历史绑定数据将不会迁移!`)
|
||||||
|
}
|
||||||
|
let scan = this.qrCreate(sender, `绑定成功 请返回游戏查看!`)
|
||||||
|
this.createScanTask(sender, scan.url, `微信扫码绑定账号`, `微信扫码 点击关注 绑定账号`, (sender) => {
|
||||||
|
let result = this.qrGet(scan.token)
|
||||||
|
let user = result.user
|
||||||
|
this.config.owner.userid = user.id
|
||||||
|
this.config.owner.ccid = user.ccid
|
||||||
|
this.config.owner.openid = result.openid
|
||||||
|
this.config.save()
|
||||||
|
this.MiaoReward.sendTitle(sender, `§a绑定成功!`, `§6已绑定用户: §b${user.username}`)
|
||||||
|
})
|
||||||
|
this.MiaoReward.clearTitle(sender)
|
||||||
|
}
|
||||||
|
|
||||||
|
private createScanTask(sender: org.bukkit.entity.Player, qrcode: string, name: string, tip: string, task: (sender: org.bukkit.entity.Player) => void) {
|
||||||
|
let sync: any = { scaned: false, start: Math.round(Date.now() / 1000) }
|
||||||
|
this.MiaoReward.setItemAndTp(sender, qrcode, sync, name, tip)
|
||||||
|
this.taskManager.create(() => {
|
||||||
|
try {
|
||||||
|
task(sender)
|
||||||
|
} catch (error) {
|
||||||
|
if (!sync.cancelled) {
|
||||||
|
this.logger.sender(sender, `§c` + error)
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
sync.scaned = true
|
||||||
|
sender.updateInventory()
|
||||||
|
}
|
||||||
|
}).async().submit()
|
||||||
|
this.MiaoReward.clearTitle(sender)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Listener()
|
||||||
|
private PlayerJoinEvent(event: org.bukkit.event.player.PlayerJoinEvent) {
|
||||||
|
if (this.config.joinTip) {
|
||||||
|
this.taskManager.create(() => {
|
||||||
|
this.logger.sender(event.getPlayer(), [
|
||||||
|
`§b本服已和§a饿了么§6美团§c达成战略合作!`,
|
||||||
|
`§3/mre bind §a扫码§e免费赠送§a外卖红包!`
|
||||||
|
])
|
||||||
|
}).later(30).submit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Tab()
|
||||||
|
tabmre(sender: any, _command: any, args: string | any[]) {
|
||||||
|
if (args.length === 2 && args[0] === "bind" && sender.isOp()) return [`server`]
|
||||||
|
}
|
||||||
|
|
||||||
|
private qrCreate(sender: org.bukkit.entity.Player, message: string, data: any = {}) {
|
||||||
|
let create = this.httpPost(`/qr/create/type/login/message/${encodeURIComponent(message)}`, data)
|
||||||
|
if (create.code != 200) {
|
||||||
|
return this.logger.sender(sender, `§c获取链接异常: ` + create.msg)
|
||||||
|
}
|
||||||
|
return create.data
|
||||||
|
}
|
||||||
|
|
||||||
|
private qrGet(token: string) {
|
||||||
|
let get = this.httpPost('/qr/get', { token })
|
||||||
|
if (get.code != 200) {
|
||||||
|
throw new Error(get.msg)
|
||||||
|
}
|
||||||
|
return get.data
|
||||||
|
}
|
||||||
|
|
||||||
|
private httpPost(method: string, data: any = {}) {
|
||||||
|
let startTime = Date.now()
|
||||||
|
let url = `${this.apiGateWay}${method}`
|
||||||
|
let result = http.post(url, data)
|
||||||
|
console.debug(`
|
||||||
|
====== HTTP POST ======
|
||||||
|
REQUEST URL : ${url}
|
||||||
|
REQUEST DATA: ${JSON.stringify(data)}
|
||||||
|
RESPONSE : ${JSON.stringify(result)}
|
||||||
|
CAST TIME : ${Date.now() - startTime}`)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
private cmdhelp(sender: any) {
|
||||||
|
let help = [
|
||||||
|
`§6====== ${this.config.prefix} §a帮助菜单 §6======`,
|
||||||
|
`§6/mre bind §a绑定账号`,
|
||||||
|
`§6/mre draw §e<兑换数量> §a兑换${this.config.coinName}`
|
||||||
|
]
|
||||||
|
if (sender.isOp()) {
|
||||||
|
help = help.concat([
|
||||||
|
`§c由于您是管理员 以为您展示额外命令`,
|
||||||
|
`§6/mre bind server §a绑定服务器`,
|
||||||
|
])
|
||||||
|
}
|
||||||
|
this.logger.sender(sender, help)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -46,12 +46,14 @@ let langMap = {
|
|||||||
'cloud.update.finish': '§6成功从 §aMiaoScriptPackageCenter §6获取到 §a{length} §6个插件!',
|
'cloud.update.finish': '§6成功从 §aMiaoScriptPackageCenter §6获取到 §a{length} §6个插件!',
|
||||||
'cloud.not.exists': '§6当前 §aMiaoScriptPackageCenter §c不存在 §a{name} §c插件!',
|
'cloud.not.exists': '§6当前 §aMiaoScriptPackageCenter §c不存在 §a{name} §c插件!',
|
||||||
'cloud.update.exists': '§6插件 §b{name} §6版本 §3{old_version} §a发现更新 §3{new_version} §r{changelog}§6!',
|
'cloud.update.exists': '§6插件 §b{name} §6版本 §3{old_version} §a发现更新 §3{new_version} §r{changelog}§6!',
|
||||||
|
'cloud.update.tip': `§6发现存在 §b{count}个 §6需要更新的插件 请使用 §aupdate §6或 §cupgrade §6命令更新!`,
|
||||||
'download.start': '§6开始下载插件: §b{name} §6版本 §3{version}',
|
'download.start': '§6开始下载插件: §b{name} §6版本 §3{version}',
|
||||||
'download.url': '§6插件下载地址: §b{url}',
|
'download.url': '§6插件下载地址: §b{url}',
|
||||||
'download.finish': '§6插件 §b{name} §6版本 §3{version} §a下载完毕 开始加载 ...',
|
'download.finish': '§6插件 §b{name} §6版本 §3{version} §a下载完毕 开始加载 ...',
|
||||||
'install.already': '§6插件 §b{name} §6版本 §3{version} §c已安装在服务器 §3更新请用 update 命令!',
|
'install.already': '§6插件 §b{name} §6版本 §3{version} §c已安装在服务器 §3更新请用 update 命令!',
|
||||||
'install.finish': '§6插件 §b{name} §6版本 §3{version} §a安装成功!',
|
'install.finish': '§6插件 §b{name} §6版本 §3{version} §a安装成功!',
|
||||||
'update.finish': '§6插件 §b{name} §6版本 §3{version} §a更新成功!',
|
'update.finish': '§6插件 §b{name} §6版本 §3{version} §a更新完成!',
|
||||||
|
'update.tip': '§6插件 §b{name} §a更新完成 §6请使用 §areload §6命令重载生效!',
|
||||||
'upgrade.confirm': '§6您正在尝试更新 §bMiaoScript §c核心 §6请执行 §b/mpm §aupgrade §cconfirm §6确认执行!',
|
'upgrade.confirm': '§6您正在尝试更新 §bMiaoScript §c核心 §6请执行 §b/mpm §aupgrade §cconfirm §6确认执行!',
|
||||||
'upgrade.start': '§6开始§a更新 §bMiaoScript §6核心 §c正在清理 node_modules 请稍候...',
|
'upgrade.start': '§6开始§a更新 §bMiaoScript §6核心 §c正在清理 node_modules 请稍候...',
|
||||||
'upgrade.failed': '§6尝试热更新 §bMiaoScript §c核心 §4失败! §6请重启服务器完成更新...',
|
'upgrade.failed': '§6尝试热更新 §bMiaoScript §c核心 §4失败! §6请重启服务器完成更新...',
|
||||||
@@ -107,7 +109,7 @@ class SpongeFakeSender extends FakeSender {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JSPlugin({ prefix: 'PM', version: '1.4.0', author: 'MiaoWoo', source: __filename })
|
@JSPlugin({ prefix: 'PM', version: '1.5.1', author: 'MiaoWoo', source: __filename })
|
||||||
export class MiaoScriptPackageManager extends interfaces.Plugin {
|
export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||||
@Autowired()
|
@Autowired()
|
||||||
private pluginManager: pluginApi.PluginManager
|
private pluginManager: pluginApi.PluginManager
|
||||||
@@ -134,7 +136,6 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||||||
public serverName: string
|
public serverName: string
|
||||||
private translate: Translate
|
private translate: Translate
|
||||||
private channelOff: { off: () => void }
|
private channelOff: { off: () => void }
|
||||||
private subCommandCache = []
|
|
||||||
|
|
||||||
load() {
|
load() {
|
||||||
this.translate = new Translate({
|
this.translate = new Translate({
|
||||||
@@ -142,7 +143,6 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||||||
fallbackMap
|
fallbackMap
|
||||||
})
|
})
|
||||||
this.updateRepo(this.server.getConsoleSender())
|
this.updateRepo(this.server.getConsoleSender())
|
||||||
this.subCommandCache = Object.keys(this).filter(c => c.startsWith('cmd') && typeof this[c] == "function")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@enable({ servers: [constants.ServerType.Bukkit, constants.ServerType.Sponge] })
|
@enable({ servers: [constants.ServerType.Bukkit, constants.ServerType.Sponge] })
|
||||||
@@ -468,7 +468,7 @@ return eval(${JSON.stringify(code)});`)
|
|||||||
return tfunc.apply(_this, params)
|
return tfunc.apply(_this, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmddeploy(sender: any, name: any) {
|
cmddeploy(sender: string, name: string, changelog: string) {
|
||||||
if (!process.env.AccessToken) { return this.i18n(sender, 'deploy.token.not.exists') }
|
if (!process.env.AccessToken) { return this.i18n(sender, 'deploy.token.not.exists') }
|
||||||
this.taskManager.create(() => {
|
this.taskManager.create(() => {
|
||||||
if (this.checkPlugin(sender, name)) {
|
if (this.checkPlugin(sender, name)) {
|
||||||
@@ -477,7 +477,8 @@ return eval(${JSON.stringify(code)});`)
|
|||||||
name,
|
name,
|
||||||
author: plugin.description.author,
|
author: plugin.description.author,
|
||||||
version: plugin.description.version,
|
version: plugin.description.version,
|
||||||
source: base.read((plugin.description.source || plugin.description.loadMetadata.file).toString())
|
source: base.read((plugin.description.source || plugin.description.loadMetadata.file).toString()),
|
||||||
|
changelog: changelog.replace('&', '§')
|
||||||
})
|
})
|
||||||
this.i18n(sender, result.code == 200 ? 'deploy.success' : 'deploy.fail', { name, version: plugin.description.version, msg: result.msg })
|
this.i18n(sender, result.code == 200 ? 'deploy.success' : 'deploy.fail', { name, version: plugin.description.version, msg: result.msg })
|
||||||
}
|
}
|
||||||
@@ -488,7 +489,11 @@ return eval(${JSON.stringify(code)});`)
|
|||||||
if (this.checkCloudPlugin(sender, name)) {
|
if (this.checkCloudPlugin(sender, name)) {
|
||||||
this.download(sender, name, true, () => {
|
this.download(sender, name, true, () => {
|
||||||
this.i18n(sender, 'update.finish', { name, version: this.packageCache[name].version })
|
this.i18n(sender, 'update.finish', { name, version: this.packageCache[name].version })
|
||||||
callback?.()
|
if (callback) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
this.i18n(sender, 'update.tip', { name, version: this.packageCache[name].version })
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -530,6 +535,7 @@ return eval(${JSON.stringify(code)});`)
|
|||||||
this.i18n(sender, 'cloud.update.finish', { length: this.packageNameCache.length })
|
this.i18n(sender, 'cloud.update.finish', { length: this.packageNameCache.length })
|
||||||
this.pluginManager.getPlugins().forEach(p => {
|
this.pluginManager.getPlugins().forEach(p => {
|
||||||
let cloudPlugin = this.packageCache[p.description.name]
|
let cloudPlugin = this.packageCache[p.description.name]
|
||||||
|
let updateCount = 0
|
||||||
//§6插件名称: §b{name}\n§6版本: §a{version}\n§6作者: §3{author}\§6更新时间: §9{updated_at}
|
//§6插件名称: §b{name}\n§6版本: §a{version}\n§6作者: §3{author}\§6更新时间: §9{updated_at}
|
||||||
if (cloudPlugin && cloudPlugin.version != p.description.version) {
|
if (cloudPlugin && cloudPlugin.version != p.description.version) {
|
||||||
this.i18n(sender, 'cloud.update.exists', {
|
this.i18n(sender, 'cloud.update.exists', {
|
||||||
@@ -538,6 +544,10 @@ return eval(${JSON.stringify(code)});`)
|
|||||||
old_version: p.description.version,
|
old_version: p.description.version,
|
||||||
changelog: cloudPlugin.changelog || ''
|
changelog: cloudPlugin.changelog || ''
|
||||||
})
|
})
|
||||||
|
updateCount++
|
||||||
|
}
|
||||||
|
if (updateCount) {
|
||||||
|
this.i18n(sender, 'cloud.update.tip', { count: updateCount })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}).async().submit()
|
}).async().submit()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/polyfill",
|
"name": "@ccms/polyfill",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript polyfill package",
|
"description": "MiaoScript polyfill package",
|
||||||
"author": "MiaoWoo <admin@yumc.pw>",
|
"author": "MiaoWoo <admin@yumc.pw>",
|
||||||
"homepage": "https://github.com/circlecloud/ms.git",
|
"homepage": "https://github.com/circlecloud/ms.git",
|
||||||
@@ -14,14 +14,14 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/i18n": "^0.14.1",
|
"@ccms/i18n": "^0.16.0",
|
||||||
"@ccms/nodejs": "^0.14.0",
|
"@ccms/nodejs": "^0.16.0",
|
||||||
"core-js": "^3.9.1"
|
"core-js": "^3.15.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import i18n from '@ccms/i18n'
|
|||||||
let polyfillStartTime = new Date().getTime()
|
let polyfillStartTime = new Date().getTime()
|
||||||
i18n.initialize()
|
i18n.initialize()
|
||||||
console.i18n("ms.polyfill.initialize")
|
console.i18n("ms.polyfill.initialize")
|
||||||
|
import './openjdk-nashorn-shim'
|
||||||
import './es5-ext'
|
import './es5-ext'
|
||||||
import './node-shim'
|
import './node-shim'
|
||||||
import 'core-js'
|
import 'core-js'
|
||||||
|
|||||||
7
packages/polyfill/src/openjdk-nashorn-shim.ts
Normal file
7
packages/polyfill/src/openjdk-nashorn-shim.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
// fix OpenJDK Nahsorn setPrototypeOf Bug
|
||||||
|
try {
|
||||||
|
Java.type('org.openjdk.nashorn.api.scripting.NashornScriptEngine')
|
||||||
|
Object.setPrototypeOf = ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b })
|
||||||
|
} catch (error) {
|
||||||
|
}
|
||||||
|
export { }
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
import '@ccms/nashorn'
|
import '@ccms/nashorn'
|
||||||
|
|
||||||
const URL = Java.type("java.net.URL")
|
const URL = Java.type("java.net.URL")
|
||||||
const Files = Java.type("java.nio.file.Files")
|
|
||||||
const StandardCopyOption = Java.type("java.nio.file.StandardCopyOption")
|
|
||||||
const JavaString = Java.type("java.lang.String")
|
const JavaString = Java.type("java.lang.String")
|
||||||
const SecureRandom = Java.type("java.security.SecureRandom")
|
const SecureRandom = Java.type("java.security.SecureRandom")
|
||||||
const SSLContext = Java.type("javax.net.ssl.SSLContext")
|
const SSLContext = Java.type("javax.net.ssl.SSLContext")
|
||||||
@@ -13,8 +11,12 @@ const X509TrustManager = Java.type("javax.net.ssl.X509TrustManager")
|
|||||||
const SocketTimeoutException = Java.type('java.net.SocketTimeoutException')
|
const SocketTimeoutException = Java.type('java.net.SocketTimeoutException')
|
||||||
|
|
||||||
const Callable = Java.type('java.util.concurrent.Callable')
|
const Callable = Java.type('java.util.concurrent.Callable')
|
||||||
|
const TimeUnit = Java.type('java.util.concurrent.TimeUnit')
|
||||||
const Executors = Java.type('java.util.concurrent.Executors')
|
const Executors = Java.type('java.util.concurrent.Executors')
|
||||||
|
|
||||||
|
const ByteArrayOutputStream = Java.type("java.io.ByteArrayOutputStream")
|
||||||
|
const ByteArray = Java.type("byte[]")
|
||||||
|
|
||||||
const UTF_8 = "UTF-8"
|
const UTF_8 = "UTF-8"
|
||||||
|
|
||||||
const TrustAnyHostnameVerifier = new HostnameVerifier({ verify: () => true })
|
const TrustAnyHostnameVerifier = new HostnameVerifier({ verify: () => true })
|
||||||
@@ -72,7 +74,7 @@ type HttpHeader = { [key: string]: string }
|
|||||||
const executor = Executors.newCachedThreadPool()
|
const executor = Executors.newCachedThreadPool()
|
||||||
|
|
||||||
export class XMLHttpRequest {
|
export class XMLHttpRequest {
|
||||||
private _timeout: number
|
private _timeout: number = 5000;
|
||||||
private _responseType: ResponseType = 'text';
|
private _responseType: ResponseType = 'text';
|
||||||
private _withCredentials: boolean
|
private _withCredentials: boolean
|
||||||
|
|
||||||
@@ -170,6 +172,7 @@ export class XMLHttpRequest {
|
|||||||
this._connection.setConnectTimeout(this._timeout)
|
this._connection.setConnectTimeout(this._timeout)
|
||||||
this._connection.setReadTimeout(this._timeout)
|
this._connection.setReadTimeout(this._timeout)
|
||||||
|
|
||||||
|
this.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
|
||||||
this.setReadyState(ReadyState.OPENED)
|
this.setReadyState(ReadyState.OPENED)
|
||||||
}
|
}
|
||||||
send(body?: string | object): Future<string> {
|
send(body?: string | object): Future<string> {
|
||||||
@@ -178,7 +181,7 @@ export class XMLHttpRequest {
|
|||||||
}
|
}
|
||||||
if (this._readyState !== ReadyState.OPENED) { throw new Error(`Error Status ${this._readyState}!`) }
|
if (this._readyState !== ReadyState.OPENED) { throw new Error(`Error Status ${this._readyState}!`) }
|
||||||
let future = executor.submit(new Callable({ call: () => this._send(body) }))
|
let future = executor.submit(new Callable({ call: () => this._send(body) }))
|
||||||
if (!this._async) { future.get() }
|
if (!this._async) { future.get(this._timeout, TimeUnit.MILLISECONDS) }
|
||||||
return future
|
return future
|
||||||
}
|
}
|
||||||
get() {
|
get() {
|
||||||
@@ -248,8 +251,16 @@ export class XMLHttpRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readOutput(input: any) {
|
private readOutput(input: any) {
|
||||||
var tempFile = Files.createTempFile('xhr', '.response')
|
let output = new ByteArrayOutputStream()
|
||||||
Files.copy(input, tempFile, StandardCopyOption['REPLACE_EXISTING']); tempFile.toFile().deleteOnExit()
|
let buffer = new ByteArray(1024)
|
||||||
return new JavaString(Files.readAllBytes(tempFile), 'UTF-8')
|
try {
|
||||||
|
let n: number
|
||||||
|
while ((n = input.read(buffer)) != -1) {
|
||||||
|
output.write(buffer, 0, n)
|
||||||
|
}
|
||||||
|
return output.toString(UTF_8)
|
||||||
|
} finally {
|
||||||
|
output.close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/protocol",
|
"name": "@ccms/protocol",
|
||||||
"version": "0.14.0",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript protocol package",
|
"description": "MiaoScript protocol package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,6 +22,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/sponge",
|
"name": "@ccms/sponge",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript api package",
|
"description": "MiaoScript api package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
"@javatypes/sponge-api": "^0.0.3",
|
"@javatypes/sponge-api": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/spring",
|
"name": "@ccms/spring",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript spring package",
|
"description": "MiaoScript spring package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -21,12 +21,12 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/common": "^0.14.1",
|
"@ccms/common": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0",
|
"@ccms/container": "^0.16.0",
|
||||||
"@ccms/database": "^0.14.1"
|
"@ccms/database": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/web",
|
"name": "@ccms/web",
|
||||||
"version": "0.14.1",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript web package",
|
"description": "MiaoScript web package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -26,10 +26,10 @@
|
|||||||
"@javatypes/tomcat": "^0.0.3",
|
"@javatypes/tomcat": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ccms/api": "^0.14.1",
|
"@ccms/api": "^0.16.0",
|
||||||
"@ccms/container": "^0.14.0"
|
"@ccms/container": "^0.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ccms/websocket",
|
"name": "@ccms/websocket",
|
||||||
"version": "0.14.0",
|
"version": "0.16.0",
|
||||||
"description": "MiaoScript websocket package",
|
"description": "MiaoScript websocket package",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"miaoscript",
|
"miaoscript",
|
||||||
@@ -19,10 +19,10 @@
|
|||||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ccms/nashorn": "^0.14.0",
|
"@ccms/nashorn": "^0.16.0",
|
||||||
"@javatypes/tomcat-websocket-api": "^0.0.3",
|
"@javatypes/tomcat-websocket-api": "^0.0.3",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class NettyWebSocketServer extends EventEmitter {
|
|||||||
let cid = ctx?.channel().id() + ''
|
let cid = ctx?.channel().id() + ''
|
||||||
if (this.clients.has(cid)) {
|
if (this.clients.has(cid)) {
|
||||||
this.emit(ServerEvent.message, this.clients.get(cid), msg.text())
|
this.emit(ServerEvent.message, this.clients.get(cid), msg.text())
|
||||||
} else {
|
} else if (global.debug) {
|
||||||
console.error(`unknow client ${ctx} reciver message ${msg.text()}`)
|
console.error(`unknow client ${ctx} reciver message ${msg.text()}`)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -41,7 +41,7 @@ class NettyWebSocketServer extends EventEmitter {
|
|||||||
let cid = ctx?.channel().id() + ''
|
let cid = ctx?.channel().id() + ''
|
||||||
if (this.clients.has(cid)) {
|
if (this.clients.has(cid)) {
|
||||||
this.emit(ServerEvent.disconnect, this.clients.get(cid), cause)
|
this.emit(ServerEvent.disconnect, this.clients.get(cid), cause)
|
||||||
} else {
|
} else if (global.debug) {
|
||||||
console.error(`unknow client ${ctx} disconnect cause ${cause}`)
|
console.error(`unknow client ${ctx} disconnect cause ${cause}`)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -49,7 +49,7 @@ class NettyWebSocketServer extends EventEmitter {
|
|||||||
let cid = ctx?.channel().id() + ''
|
let cid = ctx?.channel().id() + ''
|
||||||
if (this.clients.has(cid)) {
|
if (this.clients.has(cid)) {
|
||||||
this.emit(ServerEvent.error, this.clients.get(cid), cause)
|
this.emit(ServerEvent.error, this.clients.get(cid), cause)
|
||||||
} else {
|
} else if (global.debug) {
|
||||||
console.error(`unknow client ${ctx} cause error ${cause}`)
|
console.error(`unknow client ${ctx} cause error ${cause}`)
|
||||||
console.ex(cause)
|
console.ex(cause)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,13 +42,11 @@ export class WebSocketHandler extends WebSocketHandlerAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
channelInactive(ctx: any) {
|
channelInactive(ctx: any) {
|
||||||
console.debug('WebSocketHandler channelInactive ' + ctx)
|
|
||||||
this.options.event.emit(ServerEvent.disconnect, ctx, 'netty channelInactive')
|
this.options.event.emit(ServerEvent.disconnect, ctx, 'netty channelInactive')
|
||||||
super.channelInactive(ctx)
|
super.channelInactive(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
channelUnregistered(ctx: any) {
|
channelUnregistered(ctx: any) {
|
||||||
console.debug('WebSocketHandler channelUnregistered ' + ctx)
|
|
||||||
this.options.event.emit(ServerEvent.disconnect, ctx, 'netty channelUnregistered')
|
this.options.event.emit(ServerEvent.disconnect, ctx, 'netty channelUnregistered')
|
||||||
super.channelUnregistered(ctx)
|
super.channelUnregistered(ctx)
|
||||||
}
|
}
|
||||||
|
|||||||
6
script/push.sh
Executable file
6
script/push.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
for package in `ls packages`; do
|
||||||
|
echo $package
|
||||||
|
pushd packages/$package
|
||||||
|
npm publish --access=public --registry https://registry.npmjs.org
|
||||||
|
popd
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user