Skip to content

Commit b181002

Browse files
committed
[Sponge] 更新API版本到8
1 parent ddceacc commit b181002

File tree

67 files changed

+529
-474
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+529
-474
lines changed

MiraiMC-Sponge/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<dependency>
3535
<groupId>org.spongepowered</groupId>
3636
<artifactId>spongeapi</artifactId>
37-
<version>7.2.0</version>
37+
<version>8.0.0</version>
3838
<type>jar</type>
3939
<scope>provided</scope>
4040
</dependency>

MiraiMC-Sponge/src/main/java/me/dreamvoid/miraimc/sponge/MiraiAutoLogin.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import me.dreamvoid.miraimc.internal.Utils;
66
import me.dreamvoid.miraimc.sponge.utils.AutoLoginObject;
77
import net.mamoe.mirai.utils.BotConfiguration;
8-
import org.spongepowered.api.scheduler.Task;
98
import org.yaml.snakeyaml.DumperOptions;
109
import org.yaml.snakeyaml.Yaml;
1110
import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor;
@@ -103,7 +102,7 @@ public void doStartUpAutoLogin() {
103102
logger.warning("登录机器人时出现异常,原因: " + e);
104103
}
105104
};
106-
Task.builder().async().name("MiraiMC Autologin Task").execute(thread).submit(plugin);
105+
plugin.runTaskAsync(thread);
107106
}
108107

109108
@Override

MiraiMC-Sponge/src/main/java/me/dreamvoid/miraimc/sponge/MiraiEvent.java

+61-61
Large diffs are not rendered by default.

MiraiMC-Sponge/src/main/java/me/dreamvoid/miraimc/sponge/MiraiHttpAPIResolver.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import me.dreamvoid.miraimc.internal.config.PluginConfig;
66
import me.dreamvoid.miraimc.sponge.event.message.passive.*;
77
import org.spongepowered.api.Sponge;
8-
import org.spongepowered.api.event.cause.Cause;
9-
import org.spongepowered.api.event.cause.EventContext;
10-
import org.spongepowered.api.event.cause.EventContextKeys;
11-
import org.spongepowered.api.plugin.PluginContainer;
8+
import org.spongepowered.api.event.Cause;
9+
import org.spongepowered.api.event.EventContext;
10+
import org.spongepowered.api.event.EventContextKeys;
11+
import org.spongepowered.plugin.PluginContainer;
1212

1313
import static me.dreamvoid.miraimc.httpapi.MiraiHttpAPI.Bots;
1414

@@ -37,19 +37,19 @@ public void run() {
3737
// 准备广播事件
3838
switch (type) {
3939
case "FriendMessage":
40-
Sponge.getEventManager().post(new MiraiFriendMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
40+
Sponge.eventManager().post(new MiraiFriendMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
4141
break;
4242
case "GroupMessage":
43-
Sponge.getEventManager().post(new MiraiGroupMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
43+
Sponge.eventManager().post(new MiraiGroupMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
4444
break;
4545
case "TempMessage":
46-
Sponge.getEventManager().post(new MiraiGroupTempMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
46+
Sponge.eventManager().post(new MiraiGroupTempMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
4747
break;
4848
case "StrangerMessage":
49-
Sponge.getEventManager().post(new MiraiStrangerMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
49+
Sponge.eventManager().post(new MiraiStrangerMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
5050
break;
5151
case "OtherClientMessage":
52-
Sponge.getEventManager().post(new MiraiOtherClientMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
52+
Sponge.eventManager().post(new MiraiOtherClientMessageEvent(account, data, Cause.of(eventContext, pluginContainer)));
5353
break;
5454
}
5555
}

MiraiMC-Sponge/src/main/java/me/dreamvoid/miraimc/sponge/SpongePlugin.java

+84-96
Original file line numberDiff line numberDiff line change
@@ -7,59 +7,53 @@
77
import me.dreamvoid.miraimc.Platform;
88
import me.dreamvoid.miraimc.commands.MiraiCommand;
99
import me.dreamvoid.miraimc.commands.MiraiMcCommand;
10-
import me.dreamvoid.miraimc.commands.MiraiVerifyCommand;
1110
import me.dreamvoid.miraimc.internal.Utils;
1211
import me.dreamvoid.miraimc.internal.config.PluginConfig;
1312
import me.dreamvoid.miraimc.internal.loader.LibraryLoader;
1413
import me.dreamvoid.miraimc.sponge.utils.Metrics;
1514
import me.dreamvoid.miraimc.sponge.utils.SpecialUtils;
15+
import net.kyori.adventure.text.Component;
1616
import org.slf4j.Logger;
1717
import org.slf4j.LoggerFactory;
18+
import org.spongepowered.api.Server;
1819
import org.spongepowered.api.Sponge;
20+
import org.spongepowered.api.command.Command;
1921
import org.spongepowered.api.command.CommandResult;
20-
import org.spongepowered.api.command.args.ArgumentParseException;
21-
import org.spongepowered.api.command.args.GenericArguments;
22-
import org.spongepowered.api.command.spec.CommandSpec;
22+
import org.spongepowered.api.command.parameter.Parameter;
2323
import org.spongepowered.api.config.ConfigDir;
24-
import org.spongepowered.api.entity.living.player.User;
24+
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
2525
import org.spongepowered.api.event.Listener;
26-
import org.spongepowered.api.event.game.state.GameInitializationEvent;
27-
import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
28-
import org.spongepowered.api.event.game.state.GameStartingServerEvent;
29-
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
30-
import org.spongepowered.api.plugin.Plugin;
31-
import org.spongepowered.api.plugin.PluginContainer;
32-
import org.spongepowered.api.scheduler.SpongeExecutorService;
26+
import org.spongepowered.api.event.lifecycle.*;
3327
import org.spongepowered.api.scheduler.Task;
34-
import org.spongepowered.api.text.Text;
28+
import org.spongepowered.api.util.Ticks;
3529
import org.spongepowered.api.util.metric.MetricsConfigManager;
30+
import org.spongepowered.plugin.PluginContainer;
31+
import org.spongepowered.plugin.builtin.jvm.Plugin;
3632

3733
import java.io.File;
34+
import java.io.IOException;
3835
import java.net.URLClassLoader;
36+
import java.util.Collections;
3937
import java.util.HashMap;
4038
import java.util.List;
41-
import java.util.Random;
4239
import java.util.UUID;
43-
import java.util.concurrent.TimeUnit;
44-
45-
@Plugin(id = "miraimc",
46-
name = "MiraiMC",
47-
description = "MiraiBot for Minecraft server",
48-
version = "1.9-pre1",
49-
url = "https://github.com/DreamVoid/MiraiMC",
50-
authors = {"DreamVoid"}
51-
)
40+
41+
@Plugin(value = "miraimc")
5242
public class SpongePlugin implements Platform {
5343
private final LifeCycle lifeCycle;
5444
private PluginConfig platformConfig;
5545
@SuppressWarnings("SpongeLogging")
5646
private java.util.logging.Logger SpongeLogger;
5747
private final LibraryLoader loader;
48+
private final Metrics.Factory metricsFactory;
5849

59-
public SpongePlugin(){
50+
@Inject
51+
public SpongePlugin(Metrics.Factory factory){
6052
lifeCycle = new LifeCycle(this);
6153
lifeCycle.startUp(new SpongeLogger("MiraiMC", LoggerFactory.getLogger("MiraiMC")));
6254
loader = new LibraryLoader((URLClassLoader) getClass().getClassLoader());
55+
56+
metricsFactory = factory;
6357
}
6458

6559
@Inject
@@ -79,10 +73,10 @@ public SpongePlugin(){
7973
private MiraiAutoLogin MiraiAutoLogin;
8074

8175
/**
82-
* 触发 GamePreInitializationEvent 时,插件准备进行初始化,这时默认的 Logger 已经准备好被调用,同时你也可以开始引用配置文件中的内容
76+
* StartingEngineEvent 将在指定的 Engine 启动时触发。此时该引擎的任何内容都尚未初始化,世界将不存在,并且引擎范围的注册表此时尚未准备好
8377
*/
8478
@Listener
85-
public void onLoad(GamePreInitializationEvent e) {
79+
public void onLoad(StartingEngineEvent<Server> e) {
8680
SpongeLogger = new SpongeLogger("MiraiMC", this.getLogger());
8781

8882
try {
@@ -97,25 +91,25 @@ public void onLoad(GamePreInitializationEvent e) {
9791
}
9892

9993
/**
100-
* 触发 GameInitializationEvent 时,插件应该完成他所需功能的所有应该完成的准备工作,你应该在这个事件发生时注册监听事件
94+
* StartedEngineEvent 将在指定的 Engine 完成初始化时触发。具体来说,这意味着注册表已被填充,对于服务器引擎来说,世界已被创建
10195
*/
10296
@Listener
103-
public void onEnable(GameInitializationEvent e) {
97+
public void onEnable(StartedEngineEvent<Server> e) {
10498
try {
10599
lifeCycle.postLoad();
106100

107101
// 监听事件
108102
if (PluginConfig.General.LogEvents) {
109103
getLogger().info("Registering events.");
110-
Sponge.getEventManager().registerListeners(this, new Events());
104+
Sponge.eventManager().registerListeners(this.pluginContainer, new Events());
111105
}
112106

113107
// bStats统计
114108
if (PluginConfig.General.AllowBStats) {
115-
if (this.metricsConfigManager.getCollectionState(this.pluginContainer).asBoolean()) {
109+
if (this.metricsConfigManager.collectionState(this.pluginContainer).asBoolean()) {
116110
getLogger().info("Initializing bStats metrics.");
117111
int pluginId = 12847;
118-
new Metrics(this.pluginContainer, getLogger(), getDataFolder().toPath(), pluginId);
112+
metricsFactory.make(pluginId);
119113
} else {
120114
getLogger().warn("你在配置文件中启用了bStats,但是MetricsConfigManager告知MiraiMC不允许收集信息,因此bStats已关闭");
121115
getLogger().warn("要启用bStats,请执行命令 /sponge metrics miraimc enable");
@@ -126,12 +120,7 @@ public void onEnable(GameInitializationEvent e) {
126120
// HTTP API
127121
if (PluginConfig.General.EnableHttpApi) {
128122
getLogger().info("Initializing HttpAPI async task.");
129-
Sponge.getScheduler().createTaskBuilder()
130-
.async()
131-
.execute(new MiraiHttpAPIResolver(this))
132-
.intervalTicks(PluginConfig.HttpApi.MessageFetch.Interval)
133-
.name("MiraiMC-HttpApi")
134-
.submit(this);
123+
runTaskTimerAsync(new MiraiHttpAPIResolver(this), PluginConfig.HttpApi.MessageFetch.Interval);
135124
}
136125
} catch (Exception ex){
137126
Utils.resolveException(ex, SpongeLogger, "加载 MiraiMC 阶段 2 时出现异常!");
@@ -142,62 +131,60 @@ public void onEnable(GameInitializationEvent e) {
142131
* 触发 GameStartingServerEvent 时,服务器初始化和世界载入都已经完成,你应该在这时注册插件命令。
143132
*/
144133
@Listener
145-
public void onServerLoaded(GameStartingServerEvent e) {
134+
public void onRegisterCommand(RegisterCommandEvent<Command.Parameterized> e) {
146135
getLogger().info("Registering commands.");
147136

148-
CommandSpec mirai = CommandSpec.builder()
149-
.description(Text.of("MiraiMC Bot Command."))
137+
final Parameter.Key<String> argsKey = Parameter.key("args", String.class);
138+
139+
e.register(this.pluginContainer, Command.builder()
140+
.shortDescription(Component.text("MiraiMC Bot Command."))
150141
.permission("miraimc.command.mirai")
151-
.executor((src, arg) -> {
152-
if(arg.<String>getOne("args").isPresent()){
153-
String argo = arg.<String>getOne("args").get();
154-
String[] args = argo.split("\\s+");
155-
new MiraiCommand().onCommand(SpecialUtils.getSender(src), args);
156-
return CommandResult.builder().successCount(1).build();
157-
} else throw new ArgumentParseException(Text.of("isPresent() returned false!"),"MiraiMC",0);
142+
.executor(context1 -> {
143+
String[] args1 = context1.requireOne(argsKey).split(" ");
144+
new MiraiCommand().onCommand(SpecialUtils.getSender(context1), args1);
145+
return CommandResult.success();
158146
})
159-
.arguments(GenericArguments.remainingJoinedStrings((Text.of("args"))))
160-
.build();
161-
CommandSpec miraimc = CommandSpec.builder()
162-
.description(Text.of("MiraiMC Plugin Command."))
147+
.build(), "mirai");
148+
e.register(this.pluginContainer, Command.builder()
149+
.shortDescription(Component.text("MiraiMC Plugin Command."))
163150
.permission("miraimc.command.miraimc")
164-
.executor((src, arg) -> {
165-
if(arg.<String>getOne("args").isPresent()){
166-
String argo = arg.<String>getOne("args").get();
167-
String[] args = argo.split("\\s+");
168-
new MiraiMcCommand().onCommand(SpecialUtils.getSender(src), args);
169-
return CommandResult.builder().successCount(1).build();
170-
} else throw new ArgumentParseException(Text.of("isPresent() returned false!"),"MiraiMC",0);
151+
.executor(context1 -> {
152+
String[] args1 = context1.requireOne(argsKey).split(" ");
153+
new MiraiMcCommand().onCommand(SpecialUtils.getSender(context1), args1);
154+
return CommandResult.success();
171155
})
172-
.arguments(GenericArguments.remainingJoinedStrings((Text.of("args"))))
173-
.build();
174-
CommandSpec miraiverify = CommandSpec.builder()
175-
.description(Text.of("MiraiMC LoginVerify Command."))
156+
.build(), "miraimc");
157+
e.register(this.pluginContainer, Command.builder()
158+
.shortDescription(Component.text("MiraiMC LoginVerify Command."))
176159
.permission("miraimc.command.miraiverify")
177-
.executor((src, arg) -> {
178-
if(arg.<String>getOne("args").isPresent()){
179-
String argo = arg.<String>getOne("args").get();
180-
String[] args = argo.split("\\s+");
181-
new MiraiVerifyCommand().onCommand(SpecialUtils.getSender(src), args);
182-
return CommandResult.builder().successCount(1).build();
183-
} else throw new ArgumentParseException(Text.of("isPresent() returned false!"),"MiraiMC",0);
160+
.executor(context -> {
161+
String[] args = context.requireOne(argsKey).split(" ");
162+
new MiraiMcCommand().onCommand(SpecialUtils.getSender(context), args);
163+
return CommandResult.success();
184164
})
185-
.arguments(GenericArguments.remainingJoinedStrings((Text.of("args"))))
186-
.build();
187-
188-
Sponge.getCommandManager().register(this, mirai, "mirai");
189-
Sponge.getCommandManager().register(this, miraimc, "miraimc");
190-
Sponge.getCommandManager().register(this, miraiverify, "miraiverify");
165+
.build(), "miraiverify");
191166
}
192167

193168
/**
194-
* 触发 GameStoppingServerEvent 时,服务器会进入最后一个 Tick,紧接着就会开始保存世界
169+
* 当引擎被告知关闭并且即将关闭它负责的所有内容时,StoppingEngineEvent 将触发。如果游戏异常终止,可能不会触发
195170
*/
196171
@Listener
197-
public void onServerStopping(GameStoppingServerEvent event){
172+
public void onServerStopping(StoppingEngineEvent<Server> event){
198173
lifeCycle.unload();
199174
}
200175

176+
/**
177+
* RefreshGameEvent 可以响应于用户请求刷新所有配置而被激发。插件应该侦听此事件并重新加载其配置作为响应。
178+
*/
179+
@Listener
180+
public void onRefresh(RefreshGameEvent event){
181+
try {
182+
platformConfig.loadConfig();
183+
} catch (IOException e) {
184+
Utils.resolveException(e, SpongeLogger, "重新加载配置时出现异常!");
185+
}
186+
}
187+
201188
public Logger getLogger() {
202189
return logger;
203190
}
@@ -212,59 +199,60 @@ public PluginContainer getPluginContainer() {
212199

213200
@Override
214201
public String getPlayerName(UUID uuid) {
215-
return Sponge.getServer().getPlayer(uuid).map(User::getName).orElse(null);
202+
return Sponge.server().player(uuid).map(ServerPlayer::name).orElse(null);
216203
}
217204

218205
@Override
219206
public UUID getPlayerUUID(String name) {
220-
return Sponge.getServer().getPlayer(name).map(User::getUniqueId).orElse(null);
207+
return Sponge.server().player(name).map(ServerPlayer::uniqueId).orElse(null);
221208
}
222209

223210
@Override
224211
public void runTaskAsync(Runnable task) {
225-
try(SpongeExecutorService service = Sponge.getScheduler().createAsyncExecutor(this)){
226-
service.execute(task);
227-
}
212+
Sponge.asyncScheduler().submit(Task.builder()
213+
.plugin(this.pluginContainer)
214+
.execute(task)
215+
.build());
228216
}
229217

230218
@Override
231219
public void runTaskLaterAsync(Runnable task, long delay) {
232-
try(SpongeExecutorService service = Sponge.getScheduler().createAsyncExecutor(this)){
233-
service.schedule(task, delay * 50, TimeUnit.MILLISECONDS);
234-
}
220+
Sponge.asyncScheduler().submit(Task.builder()
221+
.plugin(this.pluginContainer)
222+
.delay(Ticks.of(delay))
223+
.execute(task)
224+
.build());
235225
}
236226

237227
private final HashMap<Integer, Task> tasks = new HashMap<>();
238228

239229
@Override
240230
public int runTaskTimerAsync(Runnable task, long period) {
241-
Task task1 = Sponge.getScheduler().createTaskBuilder().async().execute(task).intervalTicks(period).submit(this);
242-
int taskId; // 谁让sponge的任务id是uuid呢
243-
do {
244-
taskId = new Random().nextInt();
245-
} while(tasks.containsKey(taskId));
246-
tasks.put(taskId, task1);
247-
return taskId;
231+
return Sponge.asyncScheduler().submit(Task.builder()
232+
.plugin(this.pluginContainer)
233+
.interval(Ticks.of(period))
234+
.execute(task)
235+
.build()).hashCode();
248236
}
249237

250238
@Override
251239
public void cancelTask(int taskId) {
252-
tasks.get(taskId).cancel();
240+
tasks.get(taskId);
253241
}
254242

255243
@Override
256244
public String getPluginName() {
257-
return getPluginContainer().getName();
245+
return "MiraiMC";
258246
}
259247

260248
@Override
261249
public String getPluginVersion() {
262-
return getPluginContainer().getVersion().orElse("reserved");
250+
return getPluginContainer().metadata().version().getQualifier();
263251
}
264252

265253
@Override
266254
public List<String> getAuthors() {
267-
return getPluginContainer().getAuthors();
255+
return Collections.singletonList("DreamVoid");
268256
}
269257

270258
@Override

0 commit comments

Comments
 (0)