diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch
index d3d9f2b1..bf0c3711 100644
--- a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch
+++ b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch
@@ -1,10 +1,9 @@
--- ../src-base/minecraft/net/minecraft/server/MinecraftServer.java
+++ ../src-work/minecraft/net/minecraft/server/MinecraftServer.java
-@@ -1,7 +1,11 @@
+@@ -1,7 +1,10 @@
package net.minecraft.server;
+import co.aikar.timings.MinecraftTimings;
-+import co.aikar.timings.Timing;
+import co.aikar.timings.TimingsManager;
+import com.destroystokyo.paper.utils.CachedSizeConcurrentLinkedQueue;
import com.google.common.collect.Lists;
@@ -13,7 +12,7 @@
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListenableFutureTask;
-@@ -15,97 +19,119 @@
+@@ -15,27 +18,20 @@
import io.netty.handler.codec.base64.Base64;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
@@ -44,25 +43,8 @@
+import joptsimple.OptionSet;
import net.minecraft.advancements.AdvancementManager;
import net.minecraft.advancements.FunctionManager;
-+import net.minecraft.block.Block;
-+import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase;
- import net.minecraft.command.ICommandManager;
- import net.minecraft.command.ICommandSender;
- import net.minecraft.command.ServerCommandManager;
- import net.minecraft.crash.CrashReport;
- import net.minecraft.crash.ICrashReportDetail;
-+import net.minecraft.enchantment.Enchantment;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.init.Bootstrap;
-+import net.minecraft.item.Item;
- import net.minecraft.network.NetworkSystem;
- import net.minecraft.network.ServerStatusResponse;
- import net.minecraft.network.play.server.SPacketTimeUpdate;
-+import net.minecraft.potion.Potion;
- import net.minecraft.profiler.ISnooperInfo;
+@@ -55,57 +51,62 @@
import net.minecraft.profiler.Profiler;
import net.minecraft.profiler.Snooper;
import net.minecraft.server.dedicated.DedicatedServer;
@@ -74,7 +56,6 @@
-import net.minecraft.util.ITickable;
-import net.minecraft.util.ReportedException;
-import net.minecraft.util.Util;
-+import net.minecraft.tileentity.BannerPattern;
+import net.minecraft.util.*;
import net.minecraft.util.datafix.DataFixer;
import net.minecraft.util.datafix.DataFixesManager;
@@ -100,42 +81,24 @@
import net.minecraft.world.storage.ISaveHandler;
import net.minecraft.world.storage.WorldInfo;
+import net.minecraftforge.common.DimensionManager;
-+import net.minecraftforge.common.util.EnumHelper;
+import net.minecraftforge.fml.common.FMLCommonHandler;
-+import net.minecraftforge.fml.common.registry.EntityRegistry;
+import net.minecraftforge.fml.common.registry.ForgeRegistries;
-+import net.minecraftforge.fml.relauncher.ReflectionHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
-+import net.minecraftforge.registries.GameData;
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.bukkit.Bukkit;
-+import org.bukkit.Material;
-+import org.bukkit.Sound;
-+import org.bukkit.World.Environment;
-+import org.bukkit.block.banner.PatternType;
+import org.bukkit.craftbukkit.v1_12_R1.CraftServer;
+import org.bukkit.craftbukkit.v1_12_R1.Main;
+import org.bukkit.craftbukkit.v1_12_R1.chunkio.ChunkIOExecutor;
-+import org.bukkit.craftbukkit.v1_12_R1.enchantments.CraftEnchantment;
-+import org.bukkit.craftbukkit.v1_12_R1.potion.CraftPotionEffectType;
+import org.bukkit.craftbukkit.v1_12_R1.scoreboard.CraftScoreboardManager;
+import org.bukkit.craftbukkit.v1_12_R1.util.ServerShutdownThread;
-+import org.bukkit.entity.EntityType;
-+import org.bukkit.potion.PotionEffectType;
-+import org.lwjgl.Sys;
+import org.magmafoundation.magma.Magma;
-+import org.magmafoundation.magma.Metrics;
-+import org.magmafoundation.magma.Metrics.SimplePie;
-+import org.magmafoundation.magma.api.ServerAPI;
+import org.magmafoundation.magma.configuration.MagmaConfig;
-+import org.magmafoundation.magma.configuration.value.values.BooleanValue;
-+import org.magmafoundation.magma.entity.CraftCustomEntity;
+import org.magmafoundation.magma.forge.ForgeInject;
++import org.magmafoundation.magma.metrics.Metrics;
+import org.magmafoundation.magma.patcher.PatcherManager;
-+import org.spigotmc.CustomTimingsHandler;
+import org.spigotmc.SlackActivityAccountant;
-public abstract class MinecraftServer implements ICommandSender, Runnable, IThreadListener, ISnooperInfo
@@ -168,7 +131,7 @@
private PlayerList field_71318_t;
private boolean field_71317_u = true;
private boolean field_71316_v;
-@@ -123,11 +149,11 @@
+@@ -123,11 +124,11 @@
private int field_71280_D;
private int field_143008_E;
public final long[] field_71311_j = new long[100];
@@ -182,7 +145,7 @@
private String field_71287_L;
private boolean field_71288_M;
private boolean field_71289_N;
-@@ -143,164 +169,233 @@
+@@ -143,164 +144,233 @@
private final GameProfileRepository field_152365_W;
private final PlayerProfileCache field_152366_X;
private long field_147142_T;
@@ -510,7 +473,7 @@
int i = 16;
int j = 4;
int k = 192;
-@@ -308,45 +403,43 @@
+@@ -308,45 +378,43 @@
int i1 = 0;
this.func_71192_d("menu.generatingTerrain");
int j1 = 0;
@@ -580,7 +543,7 @@
}
}
-@@ -364,264 +457,340 @@
+@@ -364,264 +432,340 @@
public abstract boolean func_183002_r();
@@ -1034,7 +997,7 @@
this.field_71295_T = false;
this.field_71304_b.field_76327_a = true;
this.field_71304_b.func_76317_a();
-@@ -630,23 +799,23 @@
+@@ -630,23 +774,23 @@
this.field_71304_b.func_76320_a("root");
this.func_71190_q();
@@ -1065,7 +1028,7 @@
{
this.field_71304_b.func_76320_a("save");
this.field_71318_t.func_72389_g();
-@@ -655,187 +824,231 @@
+@@ -655,187 +799,231 @@
}
this.field_71304_b.func_76320_a("tallying");
@@ -1396,7 +1359,7 @@
}
});
}
-@@ -843,145 +1056,115 @@
+@@ -843,145 +1031,115 @@
return p_71230_1_;
}
@@ -1586,7 +1549,7 @@
worldserver1.func_72912_H().func_176144_a(p_147139_1_);
worldserver1.func_72891_a(this.func_71193_K(), this.field_71324_y);
}
-@@ -989,80 +1172,75 @@
+@@ -989,80 +1147,75 @@
}
}
@@ -1696,7 +1659,7 @@
++l;
}
}
-@@ -1071,228 +1249,193 @@
+@@ -1071,228 +1224,193 @@
p_70000_1_.func_152768_a("worlds", Integer.valueOf(l));
}
@@ -1979,7 +1942,7 @@
return entity;
}
}
-@@ -1301,301 +1444,254 @@
+@@ -1301,301 +1419,254 @@
return null;
}
diff --git a/src/main/java/org/magmafoundation/magma/Metrics.java b/src/main/java/org/magmafoundation/magma/metrics/Metrics.java
similarity index 91%
rename from src/main/java/org/magmafoundation/magma/Metrics.java
rename to src/main/java/org/magmafoundation/magma/metrics/Metrics.java
index efd864f4..0521a3d6 100644
--- a/src/main/java/org/magmafoundation/magma/Metrics.java
+++ b/src/main/java/org/magmafoundation/magma/metrics/Metrics.java
@@ -16,8 +16,18 @@
* along with this program. If not, see .
*/
-package org.magmafoundation.magma;
+package org.magmafoundation.magma.metrics;
+import net.minecraft.server.MinecraftServer;
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.plugin.Plugin;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.magmafoundation.magma.Magma;
+import org.magmafoundation.magma.api.ServerAPI;
+
+import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -25,13 +35,6 @@
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.zip.GZIPOutputStream;
-import javax.net.ssl.HttpsURLConnection;
-import net.minecraft.server.MinecraftServer;
-import org.bukkit.Bukkit;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.magmafoundation.magma.api.ServerAPI;
/**
* bStats collects some data for plugin authors.
@@ -55,7 +58,7 @@ public class Metrics {
private static String serverUUID;
// A list with all custom charts
private final List charts = new ArrayList<>();
- private final String pluginName = "Magma";
+ private final String pluginName = "Magma Maintained";
private final String pluginVersion = Magma.getVersion();
// Is bStats enabled on this server?
private boolean enabled;
@@ -82,10 +85,10 @@ public Metrics() {
// Inform the server owners about bStats
config.options().header(
- "bStats collects some data for plugin authors like how many servers are using their plugins.\n" +
- "To honor their work, you should not disable it.\n" +
- "This has nearly no effect on the server performance!\n" +
- "Check out https://bStats.org/ to learn more :)"
+ "bStats collects some data for plugin authors like how many servers are using their plugins.\n" +
+ "To honor their work, you should not disable it.\n" +
+ "This has nearly no effect on the server performance!\n" +
+ "Check out https://bStats.org/ to learn more :)"
).copyDefaults(true);
try {
config.save(configFile);
@@ -100,16 +103,39 @@ public Metrics() {
logSentData = config.getBoolean("logSentData", false);
logResponseStatusText = config.getBoolean("logResponseStatusText", false);
- addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
+ addCustomChart(new SimplePie("minecraft_version", () -> {
String version = Bukkit.getVersion();
version = version.substring(version.indexOf("MC: ") + 4, version.length() - 1);
return version;
}));
- addCustomChart(new Metrics.SimplePie("number_of_mods", () -> String.valueOf(ServerAPI.getModSize()))); // Report how many mods are running // MAGMA TODO: Add Server API
- addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size()));
- addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online": "offline"));
- addCustomChart(new Metrics.SimplePie("server_version", Magma::getVersion));
- addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
+ addCustomChart(new DrilldownPie("mods_vs_plugins", () -> {
+ Map> map = new HashMap<>();
+
+ Map modslist = new HashMap<>();
+ String[] mods = ServerAPI.getModList().replace("[", "").replace("]", "").split(", ");
+ for (String x : mods) {
+ if (x.equals("minecraft") || x.equals("forge")) {
+ continue;
+ }
+ modslist.put(x, 1);
+ }
+
+ Map pluginlist = new HashMap<>();
+ for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
+ if (plugin.isEnabled()) {
+ pluginlist.put(plugin.getDescription().getName(), 1);
+ }
+ }
+
+ map.put("mods", modslist);
+ map.put("plugins", pluginlist);
+
+ return map;
+ }));
+ addCustomChart(new SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size()));
+ addCustomChart(new SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online": "offline"));
+ addCustomChart(new SimplePie("server_version", Magma::getVersion));
+ addCustomChart(new DrilldownPie("java_version", () -> {
Map> map = new HashMap<>();
Map entry = new HashMap<>();
entry.put(System.getProperty("java.version"), 1);