9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 12:29:15 +00:00

移动方法

This commit is contained in:
XiaoMoMi
2025-07-08 19:43:12 +08:00
parent 5a081c32b5
commit 43e8187a08
10 changed files with 136 additions and 25 deletions

View File

@@ -2318,7 +2318,17 @@ public class PacketConsumers {
Object packetListener = FastNMS.INSTANCE.method$Connection$getPacketListener(user.connection());
if (!CoreReflections.clazz$ServerConfigurationPacketListenerImpl.isInstance(packetListener)) return;
// 根据要求需要运行在主线程上
CraftEngine.instance().scheduler().executeSync(() -> ResourcePackUtils.handleResourcePackResponse(packetListener, packet, action));
CraftEngine.instance().scheduler().executeSync(() -> {
try {
NetworkReflections.methodHandle$ServerCommonPacketListener$handleResourcePackResponse.invokeExact(packetListener, packet);
if (action != NetworkReflections.instance$ServerboundResourcePackPacket$Action$ACCEPTED
&& action != NetworkReflections.instance$ServerboundResourcePackPacket$Action$DOWNLOADED) {
CoreReflections.methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask.invokeExact(packetListener, CoreReflections.instance$ServerResourcePackConfigurationTask$TYPE);
}
} catch (Throwable e) {
CraftEngine.instance().logger().warn("Failed to handle ServerboundResourcePackPacket for " + user.name(), e);
}
});
}
} catch (Throwable e) {
CraftEngine.instance().logger().warn("Failed to handle ServerboundResourcePackPacket", e);
@@ -2401,7 +2411,12 @@ public class PacketConsumers {
user.setShouldProcessFinishConfiguration(false); // 防止loop
event.setCancelled(true);
ResourcePackUtils.finishCurrentTask(packetListener, CoreReflections.instance$JoinWorldTask$TYPE);
try {
CoreReflections.methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask.invokeExact(packetListener, CoreReflections.instance$JoinWorldTask$TYPE);
} catch (Throwable e) {
CraftEngine.instance().logger().warn("Failed to finish current task for " + user.name(), e);
}
if (VersionHelper.isOrAbove1_20_5()) {
// 1.20.5+开始会检查是否结束需要重新设置回去不然不会发keepAlive包
CoreReflections.methodHandle$ServerCommonPacketListenerImpl$closedSetter.invokeExact(packetListener, false);
@@ -2422,9 +2437,7 @@ public class PacketConsumers {
return;
}
for (ResourcePackDownloadData data : dataList) {
configurationTasks.add(FastNMS.INSTANCE.constructor$ServerResourcePackConfigurationTask(
ResourcePackUtils.createServerResourcePackInfo(data.uuid(), data.url(), data.sha1()))
);
configurationTasks.add(FastNMS.INSTANCE.constructor$ServerResourcePackConfigurationTask(ResourcePackUtils.createServerResourcePackInfo(data.uuid(), data.url(), data.sha1())));
user.addResourcePackUUID(data.uuid());
}
FastNMS.INSTANCE.method$ServerConfigurationPacketListenerImpl$returnToWorld(packetListener);

View File

@@ -20,24 +20,4 @@ public final class ResourcePackUtils {
public static Object createServerResourcePackInfo(UUID uuid, String url, String hash) {
return FastNMS.INSTANCE.constructor$ServerResourcePackInfo(uuid, url, hash, Config.kickOnDeclined(), ComponentUtils.adventureToMinecraft(Config.resourcePackPrompt()));
}
public static void finishCurrentTask(Object packetListener, Object type) {
try {
CoreReflections.methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask.invokeExact(packetListener, type);
} catch (Throwable e) {
CraftEngine.instance().logger().warn("Failed to finish current task", e);
}
}
public static void handleResourcePackResponse(Object packetListener, Object packet, Object action) {
try {
NetworkReflections.methodHandle$ServerCommonPacketListener$handleResourcePackResponse.invokeExact(packetListener, packet);
if (action != NetworkReflections.instance$ServerboundResourcePackPacket$Action$ACCEPTED
&& action != NetworkReflections.instance$ServerboundResourcePackPacket$Action$DOWNLOADED) {
ResourcePackUtils.finishCurrentTask(packetListener, CoreReflections.instance$ServerResourcePackConfigurationTask$TYPE);
}
} catch (Throwable e) {
CraftEngine.instance().logger().warn("Failed to handle ServerboundResourcePackPacket", e);
}
}
}