Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.

Commit 9150cef

Browse files
committed
fix&feat: 添加更多Lua类型与Java类型转换方法,添加网络请求方法
1 parent aeb79c6 commit 9150cef

File tree

17 files changed

+948
-106
lines changed

17 files changed

+948
-106
lines changed

build.gradle

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
plugins {
22
id 'java'
3+
id "de.jjohannes.extra-java-module-info" version "0.1"
34
}
45

56
group 'tk.smileyik'
6-
version '1.7.1'
7+
version '1.7.2'
78
archivesBaseName = 'LuaInMinecraftBukkit'
89

910
repositories {
@@ -20,14 +21,26 @@ repositories {
2021
}
2122

2223
dependencies {
23-
implementation 'mysql:mysql-connector-java:8.0.28'
2424
implementation 'org.luaj:luaj-jse:3.0.1'
2525
implementation 'org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT'
2626
implementation 'org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT'
2727
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
2828
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
2929
}
3030

31+
extraJavaModuleInfo {
32+
// This does not have to be a complete description (e.g. here 'org.apache.commons.collections' does not export anything here).
33+
// It only needs to be good enough to work in the context of this application we are building.
34+
module('luaj-jse-3.0.1.jar','org.luaj','3.0.1') {
35+
exports "org.luaj.vm2"
36+
exports "org.luaj.vm2.lib.jse"
37+
}
38+
automaticModule("commons-lang-2.6.jar", "org.apache.commons.lang")
39+
automaticModule("bungeecord-chat-1.16-R0.3.jar", "bungeecord-chat")
40+
automaticModule("guava-21.0.jar", "guava")
41+
automaticModule("gson-2.8.0.jar", "gson")
42+
}
43+
3144
test {
3245
useJUnitPlatform()
3346
}
@@ -48,4 +61,9 @@ task copyTask(type: Copy) {
4861
dependsOn(deleteOldBuilds)
4962
from "${buildDir}/libs/${archivesBaseName}-${version}.jar"
5063
into "${projectDir}/server/plugins/"
64+
}
65+
66+
compileJava {
67+
options.compilerArgs << "--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED"
68+
options.compilerArgs << "--add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED"
5169
}

docs/LuaHelper.md

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
2+
### getClass
3+
+ **Description**: 通过全类名去获取java类类型.
4+
+ **Return Type**: **Class<?>**
5+
+ **Return Desc**: 如果类存在则返回对应的类
6+
+ **Usage**: `getClass(name:String)`
7+
8+
|Name|Type|Description|
9+
|-|-|-|
10+
|name|**String**|全类名|
11+
### toIntArray
12+
+ **Description**: 将Lua中只含整形的表转换为java中的整形数组.
13+
+ **Return Type**: **int[]**
14+
+ **Return Desc**: 转换成Java中的整形数组.
15+
+ **Usage**: `toIntArray(table:LuaObject)`
16+
17+
|Name|Type|Description|
18+
|-|-|-|
19+
|table|**LuaObject**|只含整形的表(数组).|
20+
### toIntArray
21+
+ **Description**: 将Lua中只含整形的表转换为java中的整形数组.
22+
+ **Return Type**: **int[]**
23+
+ **Return Desc**: 转换成Java中的整形数组.
24+
+ **Usage**: `toIntArray(table:LuaTable)`
25+
26+
|Name|Type|Description|
27+
|-|-|-|
28+
|table|**LuaTable**|只含整形的表(数组).|
29+
### toDoubleArray
30+
+ **Description**: 将Lua中只含浮点数的表转换为java中的double类型数组.
31+
+ **Return Type**: **double[]**
32+
+ **Return Desc**: 转换成Java中的double类型数组.
33+
+ **Usage**: `toDoubleArray(table:LuaObject)`
34+
35+
|Name|Type|Description|
36+
|-|-|-|
37+
|table|**LuaObject**|只含小数的表(数组).|
38+
### toDoubleArray
39+
+ **Description**: 将Lua中只含浮点数的表转换为java中的double类型数组.
40+
+ **Return Type**: **double[]**
41+
+ **Return Desc**: 转换成Java中的double类型数组.
42+
+ **Usage**: `toDoubleArray(table:LuaTable)`
43+
44+
|Name|Type|Description|
45+
|-|-|-|
46+
|table|**LuaTable**|只含小数的表(数组).|
47+
### toFloatArray
48+
+ **Description**: 将Lua中只含浮点数的表转换为java中的float类型数组.
49+
+ **Return Type**: **float[]**
50+
+ **Return Desc**: 转换成Java中的float类型数组.
51+
+ **Usage**: `toFloatArray(table:LuaObject)`
52+
53+
|Name|Type|Description|
54+
|-|-|-|
55+
|table|**LuaObject**|只含小数的表(数组).|
56+
### toFloatArray
57+
+ **Description**: 将Lua中只含浮点数的表转换为java中的float类型数组.
58+
+ **Return Type**: **float[]**
59+
+ **Return Desc**: 转换成Java中的float类型数组.
60+
+ **Usage**: `toFloatArray(table:LuaTable)`
61+
62+
|Name|Type|Description|
63+
|-|-|-|
64+
|table|**LuaTable**|只含小数的表(数组).|
65+
### toStringArray
66+
+ **Description**: 将Lua中只含字符串的表转换为java中的String类型数组.
67+
+ **Return Type**: **String[]**
68+
+ **Return Desc**: 转换成Java中的String类型数组.
69+
+ **Usage**: `toStringArray(table:LuaObject)`
70+
71+
|Name|Type|Description|
72+
|-|-|-|
73+
|table|**LuaObject**|只含字符串的表(数组).|
74+
### toStringArray
75+
+ **Description**: 将Lua中只含字符串的表转换为java中的String类型数组.
76+
+ **Return Type**: **String[]**
77+
+ **Return Desc**: 转换成Java中的String类型数组.
78+
+ **Usage**: `toStringArray(table:LuaTable)`
79+
80+
|Name|Type|Description|
81+
|-|-|-|
82+
|table|**LuaTable**|只含字符串的表(数组).|
83+
### toArray
84+
+ **Description**: 将Lua中只含指定类型的表转换为java中的指定类型数组.
85+
+ **Return Type**: **T[]**
86+
+ **Return Desc**: 转换成Java中的指定类型数组.
87+
+ **Usage**: `toArray(t:T, table:LuaObject)`
88+
89+
|Name|Type|Description|
90+
|-|-|-|
91+
|t|**T**|需要转换成的Java类型实例.|
92+
|table|**LuaObject**|只含指定类型的表(数组).|
93+
### toArray
94+
+ **Description**: 将Lua中只含指定类型的表转换为java中的指定类型数组.
95+
+ **Return Type**: **T[]**
96+
+ **Return Desc**: 转换成Java中的指定类型数组.
97+
+ **Usage**: `toArray(t:T, table:LuaTable)`
98+
99+
|Name|Type|Description|
100+
|-|-|-|
101+
|t|**T**|需要转换成的Java类型实例.|
102+
|table|**LuaTable**|只含指定类型的表(数组).|
103+
### toObjectArray
104+
+ **Description**: 将Lua中的表(数组)转换为java中的Object类型数组.
105+
+ **Return Type**: **Object[]**
106+
+ **Return Desc**: @return
107+
+ **Usage**: `toObjectArray(table:LuaObject)`
108+
109+
|Name|Type|Description|
110+
|-|-|-|
111+
|table|**LuaObject**|表(数组)|
112+
### toObjectArray
113+
+ **Description**: 将Lua中的表(数组)转换为java中的Object类型数组.
114+
+ **Return Type**: **Object[]**
115+
+ **Return Desc**: @return
116+
+ **Usage**: `toObjectArray(table:LuaTable)`
117+
118+
|Name|Type|Description|
119+
|-|-|-|
120+
|table|**LuaTable**|表(数组)|
121+
### toStringStringMap
122+
+ **Description**: 将Lua中的只包含字符串的数组(下标为数字且未显式指定数字下标的Table)(如{"a", "b"}而非{2 = "b"})转换为Java中的Map类型.
123+
+ **Return Type**: **String>**
124+
+ **Return Desc**: Map<String, String>类型HashMap.
125+
+ **Usage**: `toStringStringMap(table:LuaObject)`
126+
127+
|Name|Type|Description|
128+
|-|-|-|
129+
|table|**LuaObject**|Lua中的表|
130+
### toStringStringMap
131+
+ **Description**: 将Lua中的只包含字符串的数组(下标为数字且未显式指定数字下标的Table)(如{"a", "b"}而非{2 = "b"})转换为Java中的Map类型.
132+
+ **Return Type**: **String>**
133+
+ **Return Desc**: Map<String, String>类型HashMap.
134+
+ **Usage**: `toStringStringMap(table:LuaTable)`
135+
136+
|Name|Type|Description|
137+
|-|-|-|
138+
|table|**LuaTable**|Lua中的表|
139+
### toObjectObjectMap
140+
+ **Description**: 将Lua中的数组(下标为数字且未显式指定数字下标的Table)(如{"a", "b"}而非{2 = "b"})转换为Java中的Map类型.
141+
+ **Return Type**: **Object>**
142+
+ **Return Desc**: Map<Object, Object>类型HashMap.
143+
+ **Usage**: `toObjectObjectMap(table:LuaObject)`
144+
145+
|Name|Type|Description|
146+
|-|-|-|
147+
|table|**LuaObject**|Lua中的表|
148+
### toObjectObjectMap
149+
+ **Description**: 将Lua中的数组(下标为数字且未显式指定数字下标的Table)(如{"a", "b"}而非{2 = "b"})转换为Java中的Map类型.
150+
+ **Return Type**: **Object>**
151+
+ **Return Desc**: Map<Object, Object>类型HashMap.
152+
+ **Usage**: `toObjectObjectMap(table:LuaTable)`
153+
154+
|Name|Type|Description|
155+
|-|-|-|
156+
|table|**LuaTable**|Lua中的表|

docs/LuaPluginHelper.md

Lines changed: 100 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,136 @@
11

2-
### luaBukkit.helper:isLoadPlugin
2+
### isLoadPlugin
33
+ **Description**: 指定脚本插件是否加载.
44
+ **Return Type**: **boolean**
55
+ **Return Desc**: 如果已经加载则返回true.
6-
+ **Usage**: `luaBukkit.helper:isLoadPlugin(id:String)`
6+
+ **Usage**: `isLoadPlugin(id:String)`
77

88
|Name|Type|Description|
99
|-|-|-|
1010
|id|**String**|脚本插件id|
11-
### luaBukkit.helper:newLuaRunnable
11+
### newLuaRunnable
1212
+ **Description**: 以指定id对应的函数为run方法主体创建一个Runnable子类实例
1313
+ **Return Type**: **LuaRunnable**
1414
+ **Return Desc**: LuaRunnable实例
15-
+ **Usage**: `luaBukkit.helper:newLuaRunnable(id:String)`
15+
+ **Usage**: `newLuaRunnable(id:String)`
1616

1717
|Name|Type|Description|
1818
|-|-|-|
1919
|id|**String**|函数路径|
20-
### luaBukkit.helper:newLuaRunnable
20+
### newLuaRunnable
2121
+ **Description**: 以指定id对应的函数为run方法主体创建一个Runnable子类实例
2222
+ **Return Type**: **LuaRunnable**
2323
+ **Return Desc**: LuaRunnable实例
24-
+ **Usage**: `luaBukkit.helper:newLuaRunnable(id:String, obj:Object)`
24+
+ **Usage**: `newLuaRunnable(id:String, obj:Object)`
2525

2626
|Name|Type|Description|
2727
|-|-|-|
2828
|id|**String**|函数路径|
2929
|obj|**Object**|带入的参数.|
30-
### luaBukkit.helper:getPlugin
30+
### getPlugin
3131
+ **Description**: 获取本插件实例对象.
3232
+ **Return Type**: **Plugin**
3333
+ **Return Desc**: 本插件的实例对象.
34-
+ **Usage**: `luaBukkit.helper:getPlugin()`
34+
+ **Usage**: `getPlugin()`
3535

3636
|Name|Type|Description|
3737
|-|-|-|
3838

39-
### luaBukkit.helper:getClass
40-
+ **Description**: 通过全类名去获取java类类型.
41-
+ **Return Type**: **Class<?>**
42-
+ **Return Desc**: 如果类存在则返回对应的类
43-
+ **Usage**: `luaBukkit.helper:getClass(name:String)`
44-
45-
|Name|Type|Description|
46-
|-|-|-|
47-
|name|**String**|全类名|
48-
### luaBukkit.helper:isNativeMode
39+
### isNativeMode
4940
+ **Description**: 插件是否在Native模式下运行.
5041
+ **Return Type**: **boolean**
5142
+ **Return Desc**: 如果是在Native模式下运行则返回true.
52-
+ **Usage**: `luaBukkit.helper:isNativeMode()`
43+
+ **Usage**: `isNativeMode()`
44+
45+
|Name|Type|Description|
46+
|-|-|-|
47+
48+
### httpAction
49+
+ **Description**: 以插件身份发送一个HTTP请求.
50+
+ **Return Type**: **void**
51+
+ **Return Desc**:
52+
+ **Usage**: `httpAction(plugin:LuaPlugin, urlString:String, body:byte[], preOperation:Object, callback:Object, errorCallback:Object)`
53+
54+
|Name|Type|Description|
55+
|-|-|-|
56+
|plugin|**LuaPlugin**|Lua插件实例.|
57+
|urlString|**String**|链接字符串|
58+
|body|**byte[]**|请求体,如果传入null则代表不需要请求体.|
59+
|preOperation|**Object**|前置操作Lua函数闭包,将会传入一个HttpURLConnection实例给闭包.|
60+
|callback|**Object**|一个Lua函数闭包,会将ResponseCode以及HTTP请求的文本结果作为字符串传递给闭包.|
61+
|errorCallback|**Object**|一个Lua函数闭包,其只在运行过程中出现错误时调用,会将Exception实例传给闭包.|
62+
### httpAction
63+
+ **Description**: 以插件身份发送一个HTTP请求.
64+
+ **Return Type**: **void**
65+
+ **Return Desc**:
66+
+ **Usage**: `httpAction(plugin:LuaPlugin, urlString:String, method:String, body:byte[], connectTimeout:int, readTimeout:int, instanceFollowRedirects:boolean, Map<String:, header:String>, useCaches:boolean, callback:Object, errorCallback:Object)`
67+
68+
|Name|Type|Description|
69+
|-|-|-|
70+
|plugin|**LuaPlugin**|Lua插件实例.|
71+
|urlString|**String**|链接字符串|
72+
|method|**String**|请求方法|
73+
|body|**byte[]**|请求体,如果传入null则代表不需要请求体.|
74+
|connectTimeout|**int**|连接等待时间(毫秒).|
75+
|readTimeout|**int**|读取等待时间(毫秒).|
76+
|instanceFollowRedirects|**boolean**|是否跟随重定向.|
77+
|Map<String|****|null|
78+
|header|**String>**|需要添加的请求头,为null则代表不需要添加.|
79+
|useCaches|**boolean**|是否使用缓存.|
80+
|callback|**Object**|一个Lua函数闭包,会将ResponseCode以及HTTP请求的文本结果作为字符串传递给闭包.|
81+
|errorCallback|**Object**|一个Lua函数闭包,其只在运行过程中出现错误时调用,会将Exception实例传给闭包.|
82+
### httpAction
83+
+ **Description**: 以插件身份发送一个HTTP请求.
84+
+ **Return Type**: **void**
85+
+ **Return Desc**:
86+
+ **Usage**: `httpAction(plugin:LuaPlugin, urlString:String, method:String, body:String, bodyEncode:String, connectTimeout:int, readTimeout:int, instanceFollowRedirects:boolean, Map<String:, header:String>, useCaches:boolean, callback:Object, errorCallback:Object)`
87+
88+
|Name|Type|Description|
89+
|-|-|-|
90+
|plugin|**LuaPlugin**|Lua插件实例.|
91+
|urlString|**String**|链接字符串|
92+
|method|**String**|请求方法|
93+
|body|**String**|字符串请求体,如果传入null则代表不需要请求体.|
94+
|bodyEncode|**String**|字符串请求体编码格式.|
95+
|connectTimeout|**int**|连接等待时间(毫秒).|
96+
|readTimeout|**int**|读取等待时间(毫秒).|
97+
|instanceFollowRedirects|**boolean**|是否跟随重定向.|
98+
|Map<String|****|null|
99+
|header|**String>**|需要添加的请求头,为null则代表不需要添加.|
100+
|useCaches|**boolean**|是否使用缓存.|
101+
|callback|**Object**|一个Lua函数闭包,会将ResponseCode以及HTTP请求的文本结果作为字符串传递给闭包.|
102+
|errorCallback|**Object**|一个Lua函数闭包,其只在运行过程中出现错误时调用,会将Exception实例传给闭包.|
103+
### httpGet
104+
+ **Description**: 以插件身份发送一个HTTP的GET请求.
105+
+ **Return Type**: **void**
106+
+ **Return Desc**:
107+
+ **Usage**: `httpGet(plugin:LuaPlugin, urlString:String, connectTimeout:int, readTimeout:int, instanceFollowRedirects:boolean, Map<String:, header:String>, useCaches:boolean, callback:Object, errorCallback:Object)`
108+
109+
|Name|Type|Description|
110+
|-|-|-|
111+
|plugin|**LuaPlugin**|Lua插件实例.|
112+
|urlString|**String**|链接字符串|
113+
|connectTimeout|**int**|连接等待时间(毫秒).|
114+
|readTimeout|**int**|读取等待时间(毫秒).|
115+
|instanceFollowRedirects|**boolean**|是否跟随重定向.|
116+
|Map<String|****|null|
117+
|header|**String>**|需要添加的请求头,为null则代表不需要添加.|
118+
|useCaches|**boolean**|是否使用缓存.|
119+
|callback|**Object**|一个Lua函数闭包,会将ResponseCode以及HTTP请求的文本结果作为字符串传递给闭包.|
120+
|errorCallback|**Object**|一个Lua函数闭包,其只在运行过程中出现错误时调用,会将Exception实例传给闭包.|
121+
### httpGet
122+
+ **Description**: 以插件身份发送一个HTTP的GET请求.
123+
+ **Return Type**: **void**
124+
+ **Return Desc**:
125+
+ **Usage**: `httpGet(plugin:LuaPlugin, urlString:String, connectTimeout:int, readTimeout:int, instanceFollowRedirects:boolean, useCaches:boolean, callback:Object, errorCallback:Object)`
53126

54127
|Name|Type|Description|
55128
|-|-|-|
129+
|plugin|**LuaPlugin**|Lua插件实例.|
130+
|urlString|**String**|链接字符串|
131+
|connectTimeout|**int**|连接等待时间(毫秒).|
132+
|readTimeout|**int**|读取等待时间(毫秒).|
133+
|instanceFollowRedirects|**boolean**|是否跟随重定向.|
134+
|useCaches|**boolean**|是否使用缓存.|
135+
|callback|**Object**|一个Lua函数闭包,会将ResponseCode以及HTTP请求的文本结果作为字符串传递给闭包.|
136+
|errorCallback|**Object**|一个Lua函数闭包,其只在运行过程中出现错误时调用,会将Exception实例传给闭包.|

src/main/java/module-info.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module LuaInMinecraftBukkit.main {
2+
requires java.base;
3+
requires org.luaj;
4+
requires org.bukkit;
5+
requires java.logging;
6+
requires java.net.http;
7+
8+
opens org.keplerproject.luajava to java.base;
9+
}

src/main/java/org/keplerproject/luajava/LuaJavaAPI.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public static int objectIndex(int luaState, Object obj, String methodName)
126126
ret = method.invoke(obj, objs);
127127
}
128128
} catch (Exception e) {
129+
e.printStackTrace();
129130
throw new LuaException(e);
130131
}
131132

@@ -605,6 +606,7 @@ private static Method getMethod(LuaState L, Class<?> clazz,
605606
m.getParameterCount() != size) {
606607
continue;
607608
}
609+
608610
boolean okMethod = true;
609611
Class<?>[] parameters = m.getParameterTypes();
610612
for (int i = 0; i < size; ++i) {

0 commit comments

Comments
 (0)