Migrate src outside since there is no need to separate api

This commit is contained in:
Sotr
2018-05-20 15:51:45 +08:00
parent 46cea03804
commit 0cabc044bd
7 changed files with 12 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
package io.akarin.server.mixin.core;
import java.io.PrintStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.craftbukkit.Main;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value = Main.class, remap = false)
public class Bootstrap {
private final static Logger logger = LogManager.getLogger("Akarin");
@Inject(method = "main([Ljava/lang/String;)V", at = @At("HEAD"))
private static void configureMixin(CallbackInfo info) {
;
}
/*
* Notify message
*/
@Redirect(method = "main", at = @At(
value = "INVOKE_STRING",
target = "Ljava/io/PrintStream;println(Ljava/lang/String;)V",
args = "ldc=*** Warning, you've not updated in a while! ***"
))
private static void notifyUpdate(PrintStream stream, String text) {
logger.warn("You've not updated in a while, the current version may outdated");
}
@Redirect(method = "main", at = @At(
value = "INVOKE_STRING",
target = "Ljava/io/PrintStream;println(Ljava/lang/String;)V",
args = "ldc=*** Please download a new build as per instructions from https://paperci.emc.gs/ ***"
))
private static void notifyWebsite(PrintStream stream, String text) {
logger.warn("Visit our website for latest information https://akarin.io/");
}
@Redirect(method = "main", at = @At(
value = "INVOKE_STRING",
target = "Ljava/io/PrintStream;println(Ljava/lang/String;)V",
args = "ldc=Loading libraries, please wait..."
))
private static void notifyLoading(PrintStream stream, String text) {
logger.info("Loading libraries, please wait..");
}
}

View File

@@ -0,0 +1,35 @@
package io.akarin.server.mixin.core;
import java.io.File;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import net.minecraft.server.EULA;
@Mixin(value = EULA.class, remap = false)
public class DummyEula {
/**
* Read then check the EULA file <i>formerly</i>
* @param file
* @return true
*/
@Overwrite
public boolean a(File file) {
return true;
}
/**
* Check whether the EULA has been accepted <i>formerly</i>
* @return true
*/
@Overwrite
public boolean a() {
return true;
}
/**
* Generate an EULA file <i>formerly</i>
*/
@Overwrite
public void b() {}
}

View File

@@ -0,0 +1,14 @@
package io.akarin.server.mixin.core;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import net.minecraft.server.MinecraftServer;
@Mixin(value = MinecraftServer.class, remap = false)
public class MixinMinecraftServer {
@Overwrite
public String getServerModName() {
return "Akarin";
}
}

View File

@@ -0,0 +1,88 @@
package io.akarin.server.mixin.core;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.CraftServer;
import org.spigotmc.RestartCommand;
import org.spigotmc.WatchdogThread;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.server.MinecraftServer;
@Mixin(value = WatchdogThread.class, remap = false)
public class Watchcat extends Thread {
@Shadow private static WatchdogThread instance;
@Shadow private @Final long timeoutTime;
@Shadow private @Final boolean restart;
@Shadow private volatile long lastTick;
@Shadow private volatile boolean stopping;
@Shadow private static void dumpThread(ThreadInfo thread, Logger log) {}
@Inject(method = "<init>(JZ)V", at = @At("RETURN"))
private void hook(CallbackInfo info) {
setName("Akarin Watchcat Thread");
}
@Override
@Overwrite
public void run() {
while (!stopping) {
//
if (lastTick != 0 && System.currentTimeMillis() > lastTick + timeoutTime && !Boolean.getBoolean("disable.watchdog")) { // Paper - Add property to disable
Logger log = Bukkit.getServer().getLogger();
log.log(Level.SEVERE, "Server has stopped responding!");
log.log(Level.SEVERE, "Please report this to https://github.com/Akarin-project/Akarin/issues");
log.log(Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports");
log.log(Level.SEVERE, "Akarin version: " + Bukkit.getServer().getVersion());
//
if (net.minecraft.server.World.haveWeSilencedAPhysicsCrash) {
log.log(Level.SEVERE, "------------------------------");
log.log(Level.SEVERE, "During the run of the server, a physics stackoverflow was supressed");
log.log(Level.SEVERE, "near " + net.minecraft.server.World.blockLocation);
}
// Paper start - Warn in watchdog if an excessive velocity was ever set
if (CraftServer.excessiveVelEx != null) {
log.log(Level.SEVERE, "------------------------------");
log.log(Level.SEVERE, "During the run of the server, a plugin set an excessive velocity on an entity");
log.log(Level.SEVERE, "This may be the cause of the issue, or it may be entirely unrelated");
log.log(Level.SEVERE, CraftServer.excessiveVelEx.getMessage());
for (StackTraceElement stack : CraftServer.excessiveVelEx.getStackTrace()) {
log.log(Level.SEVERE, "\t\t" + stack);
}
}
// Paper end
log.log(Level.SEVERE, "------------------------------");
log.log(Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Akarin!):");
dumpThread(ManagementFactory.getThreadMXBean().getThreadInfo(MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE), log);
log.log(Level.SEVERE, "------------------------------");
//
log.log(Level.SEVERE, "Entire Thread Dump:");
ThreadInfo[] threads = ManagementFactory.getThreadMXBean().dumpAllThreads(true, true);
for (ThreadInfo thread : threads) {
dumpThread(thread, log);
}
log.log(Level.SEVERE, "------------------------------");
if (restart) RestartCommand.restart();
break;
}
try {
sleep(9000); // Akarin
} catch (InterruptedException ex) {
interrupt();
}
}
}
}

View File

@@ -0,0 +1,12 @@
package io.akarin.server.mixin.core.network;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerConnection;
@Mixin(value = ServerConnection.class, remap = false)
public class NonblockingServerConnection {
}