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.Actor;
import com.sk89q.worldedit.extension.platform.Capability; import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extension.platform.MultiUserPlatform; import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
import com.sk89q.worldedit.extension.platform.Preference; 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.DataFixer;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.registry.Registries; import com.sk89q.worldedit.world.registry.Registries;
@ -58,7 +58,7 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
private final FabricWorldEdit mod; private final FabricWorldEdit mod;
private final MinecraftServer server; private final MinecraftServer server;
private final FabricDataFixer dataFixer; private final FabricDataFixer dataFixer;
private final @Nullable FabricWatchdog watchdog; private final @Nullable Watchdog watchdog;
private boolean hookingEvents = false; private boolean hookingEvents = false;
FabricPlatform(FabricWorldEdit mod, MinecraftServer server) { FabricPlatform(FabricWorldEdit mod, MinecraftServer server) {
@ -66,7 +66,7 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
this.server = server; this.server = server;
this.dataFixer = new FabricDataFixer(getDataVersion()); this.dataFixer = new FabricDataFixer(getDataVersion());
this.watchdog = server instanceof MinecraftDedicatedServer this.watchdog = server instanceof MinecraftDedicatedServer
? new FabricWatchdog((MinecraftDedicatedServer) server) : null; ? (Watchdog) server : null;
} }
boolean isHookingEvents() { boolean isHookingEvents() {
@ -105,7 +105,7 @@ class FabricPlatform extends AbstractPlatform implements MultiUserPlatform {
@Override @Override
@Nullable @Nullable
public FabricWatchdog getWatchdog() { public Watchdog getWatchdog() {
return watchdog; 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; package com.sk89q.worldedit.fabric.mixin;
import com.sk89q.worldedit.extension.platform.Watchdog;
import net.minecraft.server.MinecraftServer; 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.NonBlockingThreadExecutor;
import net.minecraft.util.snooper.SnooperListener; import net.minecraft.util.SystemUtil;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@Mixin(MinecraftServer.class) @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) { public MixinMinecraftServer(String name) {
super(name); super(name);
} }
@Shadow @Shadow
public long timeReference; private long timeReference;
@Override
public void tick() {
timeReference = SystemUtil.getMeasuringTimeMs();
}
} }