Initial watchdog setup. Bukkit needs adapters, everything needs testing.

This commit is contained in:
Kenzie Togami
2019-09-04 20:55:47 -07:00
parent a515ed0a30
commit 8af68fc884
15 changed files with 293 additions and 1 deletions

View File

@ -26,12 +26,14 @@ import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
import com.sk89q.worldedit.extension.platform.Preference;
import com.sk89q.worldedit.fabric.mixin.MixinMinecraftServer;
import com.sk89q.worldedit.world.DataFixer;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.registry.Registries;
import net.minecraft.SharedConstants;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.PlayerManager;
import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Identifier;
@ -55,12 +57,15 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
private final FabricWorldEdit mod;
private final MinecraftServer server;
private final FabricDataFixer dataFixer;
private final @Nullable FabricWatchdog watchdog;
private boolean hookingEvents = false;
FabricPlatform(FabricWorldEdit mod, MinecraftServer server) {
this.mod = mod;
this.server = server;
this.dataFixer = new FabricDataFixer(getDataVersion());
this.watchdog = server instanceof DedicatedServer
? new FabricWatchdog((MixinMinecraftServer) (Object) server) : null;
}
boolean isHookingEvents() {
@ -97,6 +102,12 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
return -1;
}
@Override
@Nullable
public FabricWatchdog getWatchdog() {
return watchdog;
}
@Override
public List<? extends World> getWorlds() {
Iterable<ServerWorld> worlds = server.getWorlds();

View File

@ -0,0 +1,19 @@
package com.sk89q.worldedit.fabric;
import com.sk89q.worldedit.extension.platform.Watchdog;
import com.sk89q.worldedit.fabric.mixin.MixinMinecraftServer;
import net.minecraft.util.SystemUtil;
class FabricWatchdog implements Watchdog {
private final MixinMinecraftServer server;
FabricWatchdog(MixinMinecraftServer server) {
this.server = server;
}
@Override
public void tick() {
server.timeReference = SystemUtil.getMeasuringTimeMs();
}
}

View File

@ -0,0 +1,20 @@
package com.sk89q.worldedit.fabric.mixin;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerTask;
import net.minecraft.server.command.CommandOutput;
import net.minecraft.util.NonBlockingThreadExecutor;
import net.minecraft.util.snooper.SnooperListener;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(MinecraftServer.class)
public abstract class MixinMinecraftServer extends NonBlockingThreadExecutor<ServerTask> implements SnooperListener, CommandOutput, AutoCloseable, Runnable {
public MixinMinecraftServer(String string_1) {
super(string_1);
}
@Shadow
public long timeReference;
}

View File

@ -3,7 +3,8 @@
"package": "com.sk89q.worldedit.fabric.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
"MixinServerPlayerEntity"
"MixinServerPlayerEntity",
"MixinMinecraftServer"
],
"server": [
],