Properly use mixins to implement Watchdog

This commit is contained in:
Kenzie Togami 2019-09-30 14:56:33 -07:00
parent da0ef12239
commit a273e27eda
No known key found for this signature in database
GPG Key ID: 5D200B325E157A81
4 changed files with 15 additions and 49 deletions

View File

@ -26,7 +26,7 @@
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.extension.platform.Watchdog;
import com.sk89q.worldedit.world.DataFixer;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.registry.Registries;
@ -58,7 +58,7 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
private final FabricWorldEdit mod;
private final MinecraftServer server;
private final FabricDataFixer dataFixer;
private final @Nullable FabricWatchdog watchdog;
private final @Nullable Watchdog watchdog;
private boolean hookingEvents = false;
FabricPlatform(FabricWorldEdit mod, MinecraftServer server) {
@ -66,7 +66,7 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
this.server = server;
this.dataFixer = new FabricDataFixer(getDataVersion());
this.watchdog = server instanceof MinecraftDedicatedServer
? new FabricWatchdog((MinecraftDedicatedServer) server) : null;
? (Watchdog) server : null;
}
boolean isHookingEvents() {
@ -105,7 +105,7 @@ public int schedule(long delay, long period, Runnable task) {
@Override
@Nullable
public FabricWatchdog getWatchdog() {
public Watchdog getWatchdog() {
return watchdog;
}

View File

@ -1,39 +0,0 @@
/*
* WorldEdit, a Minecraft world manipulation toolkit
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldEdit team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldedit.fabric;
import com.sk89q.worldedit.extension.platform.Watchdog;
import com.sk89q.worldedit.fabric.mixin.MixinMinecraftServer;
import net.minecraft.server.dedicated.MinecraftDedicatedServer;
import net.minecraft.util.SystemUtil;
class FabricWatchdog implements Watchdog {
private final MinecraftDedicatedServer server;
FabricWatchdog(MinecraftDedicatedServer server) {
this.server = server;
}
@Override
public void tick() {
((MixinMinecraftServer) (Object) server).timeReference = SystemUtil.getMeasuringTimeMs();
}
}

View File

@ -19,21 +19,26 @@
package com.sk89q.worldedit.fabric.mixin;
import com.sk89q.worldedit.extension.platform.Watchdog;
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 net.minecraft.util.SystemUtil;
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 abstract class MixinMinecraftServer extends NonBlockingThreadExecutor implements Watchdog {
public MixinMinecraftServer(String name) {
super(name);
}
@Shadow
public long timeReference;
private long timeReference;
@Override
public void tick() {
timeReference = SystemUtil.getMeasuringTimeMs();
}
}

View File

@ -11,4 +11,4 @@
"injectors": {
"defaultRequire": 1
}
}
}