diff --git a/patches/net/minecraft/network/NetworkSystem.java.patch b/patches/net/minecraft/network/NetworkSystem.java.patch index e799ed3..3d8fad4 100644 --- a/patches/net/minecraft/network/NetworkSystem.java.patch +++ b/patches/net/minecraft/network/NetworkSystem.java.patch @@ -1,6 +1,18 @@ --- ../src-base/minecraft/net/minecraft/network/NetworkSystem.java +++ ../src-work/minecraft/net/minecraft/network/NetworkSystem.java -@@ -139,6 +139,14 @@ +@@ -129,7 +129,10 @@ + while (iterator.hasNext()) + { + ChannelFuture channelfuture = (ChannelFuture)iterator.next(); +- channelfuture.channel().close().syncUninterruptibly(); ++ ChannelFuture close=channelfuture.channel().close(); ++// if(channelfuture.channel().isOpen()){ ++// close.syncUninterruptibly(); ++// } + } + } + +@@ -139,6 +142,14 @@ synchronized (this.networkManagers) { diff --git a/patches/net/minecraft/server/MinecraftServer.java.patch b/patches/net/minecraft/server/MinecraftServer.java.patch index 6d03079..de0c3ba 100644 --- a/patches/net/minecraft/server/MinecraftServer.java.patch +++ b/patches/net/minecraft/server/MinecraftServer.java.patch @@ -1,25 +1,75 @@ --- ../src-base/minecraft/net/minecraft/server/MinecraftServer.java +++ ../src-work/minecraft/net/minecraft/server/MinecraftServer.java -@@ -16,6 +16,7 @@ - import io.netty.buffer.ByteBufOutputStream; - import io.netty.buffer.Unpooled; - import io.netty.handler.codec.base64.Base64; -+ +@@ -1,21 +1,5 @@ + package net.minecraft.server; + +-import com.google.common.base.Charsets; +-import com.mojang.authlib.GameProfile; +-import com.mojang.authlib.GameProfileRepository; +-import com.mojang.authlib.minecraft.MinecraftSessionService; +-import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +- +-import cpw.mods.fml.common.FMLCommonHandler; +-import cpw.mods.fml.common.Loader; +-import cpw.mods.fml.common.LoaderState; +-import cpw.mods.fml.common.StartupQuery; +-import cpw.mods.fml.relauncher.Side; +-import cpw.mods.fml.relauncher.SideOnly; +-import io.netty.buffer.ByteBuf; +-import io.netty.buffer.ByteBufOutputStream; +-import io.netty.buffer.Unpooled; +-import io.netty.handler.codec.base64.Base64; import java.awt.GraphicsEnvironment; import java.awt.image.BufferedImage; import java.io.File; -@@ -33,7 +34,10 @@ +@@ -33,10 +17,45 @@ import java.util.Random; import java.util.UUID; import java.util.concurrent.Callable; -+import java.util.logging.Level; + import javax.imageio.ImageIO; +-import net.minecraft.command.CommandBase; + - import net.minecraft.command.CommandBase; ++import org.apache.commons.lang3.Validate; ++import org.apache.logging.log4j.LogManager; ++import org.apache.logging.log4j.Logger; ++import org.bukkit.World.Environment; ++import org.bukkit.configuration.ConfigurationSection; ++import org.bukkit.configuration.file.YamlConfiguration; ++import org.bukkit.craftbukkit.SpigotTimings; // Spigot ++import org.bukkit.craftbukkit.block.CraftBlock; ++// Cauldron end ++import org.bukkit.craftbukkit.util.Waitable; ++import org.bukkit.event.server.RemoteServerCommandEvent; ++import org.bukkit.event.world.WorldSaveEvent; ++ ++import com.google.common.base.Charsets; ++import com.mojang.authlib.GameProfile; ++import com.mojang.authlib.GameProfileRepository; ++import com.mojang.authlib.minecraft.MinecraftSessionService; ++import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; ++ ++import cpw.mods.fml.common.FMLCommonHandler; ++import cpw.mods.fml.common.Loader; ++import cpw.mods.fml.common.LoaderState; ++import cpw.mods.fml.common.StartupQuery; ++import cpw.mods.fml.relauncher.Side; ++import cpw.mods.fml.relauncher.SideOnly; ++import io.netty.buffer.ByteBuf; ++import io.netty.buffer.ByteBufOutputStream; ++import io.netty.buffer.Unpooled; ++import io.netty.handler.codec.base64.Base64; ++import jline.console.ConsoleReader; ++import joptsimple.OptionParser; ++import joptsimple.OptionSet; ++import kcauldron.KCauldronConfig; import net.minecraft.command.ICommandManager; import net.minecraft.command.ICommandSender; -@@ -50,6 +54,7 @@ ++import net.minecraft.command.ServerCommand; + import net.minecraft.command.ServerCommandManager; + import net.minecraft.crash.CrashReport; + import net.minecraft.entity.player.EntityPlayer; +@@ -50,9 +69,11 @@ import net.minecraft.profiler.PlayerUsageSnooper; import net.minecraft.profiler.Profiler; import net.minecraft.server.dedicated.DedicatedServer; @@ -27,57 +77,37 @@ import net.minecraft.server.gui.IUpdatePlayerListBox; import net.minecraft.server.management.PlayerProfileCache; import net.minecraft.server.management.ServerConfigurationManager; -@@ -72,6 +77,7 @@ - import net.minecraft.world.storage.ISaveFormat; - import net.minecraft.world.storage.ISaveHandler; - import net.minecraft.world.storage.WorldInfo; -+ - import org.apache.commons.lang3.Validate; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -@@ -80,18 +86,55 @@ - import net.minecraftforge.common.MinecraftForge; - import net.minecraftforge.event.world.WorldEvent; - -+ -+// CraftBukkit start -+import java.io.IOException; -+ -+import jline.console.ConsoleReader; -+import joptsimple.OptionSet; -+import net.minecraft.world.chunk.storage.AnvilSaveHandler; -+ -+import org.bukkit.World.Environment; -+import org.bukkit.craftbukkit.SpigotTimings; // Spigot -+import org.bukkit.craftbukkit.util.Waitable; -+import org.bukkit.event.server.RemoteServerCommandEvent; -+import org.bukkit.event.world.WorldSaveEvent; -+ -+// CraftBukkit end -+// Cauldron start -+import java.util.Map; -+import java.lang.reflect.Constructor; -+ -+import joptsimple.OptionParser; -+import kcauldron.KCauldronConfig; -+import cpw.mods.fml.common.asm.transformers.SideTransformer; -+import net.minecraft.command.ServerCommand; +import net.minecraft.tileentity.TileEntity; + import net.minecraft.util.ChatComponentText; + import net.minecraft.util.ChunkCoordinates; + import net.minecraft.util.IChatComponent; +@@ -63,19 +84,20 @@ + import net.minecraft.world.MinecraftException; + import net.minecraft.world.World; + import net.minecraft.world.WorldManager; +import net.minecraft.world.WorldProvider; + import net.minecraft.world.WorldServer; + import net.minecraft.world.WorldServerMulti; + import net.minecraft.world.WorldSettings; + import net.minecraft.world.WorldType; + import net.minecraft.world.chunk.storage.AnvilSaveConverter; ++import net.minecraft.world.chunk.storage.AnvilSaveHandler; + import net.minecraft.world.demo.DemoWorldServer; + import net.minecraft.world.storage.ISaveFormat; +-import net.minecraft.world.storage.ISaveHandler; + import net.minecraft.world.storage.WorldInfo; +-import org.apache.commons.lang3.Validate; +-import org.apache.logging.log4j.LogManager; +-import org.apache.logging.log4j.Logger; +- +import net.minecraftforge.cauldron.CauldronUtils; +import net.minecraftforge.cauldron.configuration.CauldronConfig; +import net.minecraftforge.cauldron.configuration.EntityConfig; +import net.minecraftforge.cauldron.configuration.TileEntityConfig; -+import net.minecraftforge.common.util.EnumHelper; -+ -+import org.bukkit.configuration.ConfigurationSection; -+import org.bukkit.configuration.file.YamlConfiguration; -+import org.bukkit.craftbukkit.CraftServer; -+import org.bukkit.craftbukkit.block.CraftBlock; -+// Cauldron end -+ - public abstract class MinecraftServer implements ICommandSender, Runnable, IPlayerUsage - { + import net.minecraftforge.common.DimensionManager; + import net.minecraftforge.common.MinecraftForge; + import net.minecraftforge.event.world.WorldEvent; +@@ -85,13 +107,13 @@ private static final Logger logger = LogManager.getLogger(); public static final File field_152367_a = new File("usercache.json"); private static MinecraftServer mcServer; @@ -94,7 +124,7 @@ private final ServerStatusResponse field_147147_p = new ServerStatusResponse(); private final Random field_147146_q = new Random(); @SideOnly(Side.SERVER) -@@ -135,8 +178,41 @@ +@@ -135,8 +157,42 @@ private long field_147142_T = 0L; private final GameProfileRepository field_152365_W; private final PlayerProfileCache field_152366_X; @@ -124,6 +154,7 @@ + public static YamlConfiguration commandsConfiguration; + public static File configFile; + public static File commandFile; ++ public static File serverConfigDir=new File("."); + public static double currentTps = 0; + public static boolean useJline = true; + public static boolean useConsole = true; @@ -136,7 +167,7 @@ public MinecraftServer(File p_i45281_1_, Proxy p_i45281_2_) { this.field_152366_X = new PlayerProfileCache(this, field_152367_a); -@@ -149,10 +225,72 @@ +@@ -149,10 +205,72 @@ this.field_152364_T = new YggdrasilAuthenticationService(p_i45281_2_, UUID.randomUUID().toString()); this.field_147143_S = this.field_152364_T.createMinecraftSessionService(); this.field_152365_W = this.field_152364_T.createProfileRepository(); @@ -151,7 +182,7 @@ - protected abstract boolean startServer() throws IOException; + public MinecraftServer(OptionSet options, Proxy proxy) // CraftBukkit - signature file -> OptionSet + { -+ this.field_152366_X = new PlayerProfileCache(this, field_152367_a); ++ this.field_152366_X = new PlayerProfileCache(this, new File(MinecraftServer.serverConfigDir,field_152367_a.getName())); + mcServer = this; + this.serverProxy = proxy; + // this.anvilFile = p_i45281_1_; // CraftBukkit @@ -210,7 +241,7 @@ protected void convertMapIfNeeded(String p_71237_1_) { if (this.getActiveAnvilConverter().isOldMapFormat(p_71237_1_)) -@@ -172,6 +310,7 @@ +@@ -172,6 +290,7 @@ MinecraftServer.logger.info("Converting... " + p_73718_1_ + "%"); } } @@ -218,7 +249,7 @@ @SideOnly(Side.CLIENT) public void resetProgressAndMessage(String p_73721_1_) {} @SideOnly(Side.CLIENT) -@@ -195,10 +334,17 @@ +@@ -195,10 +314,17 @@ protected void loadAllWorlds(String p_71247_1_, String p_71247_2_, long p_71247_3_, WorldType p_71247_5_, String p_71247_6_) { @@ -238,7 +269,7 @@ WorldSettings worldsettings; if (worldinfo == null) -@@ -215,11 +361,79 @@ +@@ -215,11 +341,79 @@ { worldsettings.enableBonusChest(); } @@ -321,7 +352,7 @@ world.addWorldAccess(new WorldManager(this, world)); if (!this.isSinglePlayer()) -@@ -227,12 +441,14 @@ +@@ -227,12 +421,14 @@ world.getWorldInfo().setGameType(this.getGameType()); } @@ -339,7 +370,7 @@ } protected void initialWorldChunkLoad() -@@ -244,9 +460,12 @@ +@@ -244,9 +440,12 @@ int i = 0; this.setUserMessage("menu.generatingTerrain"); byte b0 = 0; @@ -352,7 +383,7 @@ long j = getSystemTimeMillis(); for (int k = -192; k <= 192 && this.isServerRunning(); k += 16) -@@ -265,7 +484,8 @@ +@@ -265,7 +464,8 @@ worldserver.theChunkProviderServer.loadChunk(chunkcoordinates.posX + k >> 4, chunkcoordinates.posZ + l >> 4); } } @@ -362,7 +393,7 @@ this.clearCurrentTask(); } -@@ -292,19 +512,17 @@ +@@ -292,19 +492,17 @@ { this.currentTask = null; this.percentDone = 0; @@ -387,7 +418,7 @@ if (worldserver != null) { -@@ -313,25 +531,41 @@ +@@ -313,25 +511,41 @@ logger.info("Saving chunks for level \'" + worldserver.getWorldInfo().getWorldName() + "\'/" + worldserver.provider.getDimensionName()); } @@ -434,7 +465,7 @@ if (this.func_147137_ag() != null) { this.func_147137_ag().terminateEndpoints(); -@@ -347,7 +581,14 @@ +@@ -347,7 +561,14 @@ if (this.worldServers != null) { logger.info("Saving worlds"); @@ -450,7 +481,7 @@ for (int i = 0; i < this.worldServers.length; ++i) { -@@ -380,6 +621,13 @@ +@@ -380,6 +601,13 @@ this.serverRunning = false; } @@ -464,7 +495,7 @@ public void run() { try -@@ -392,45 +640,41 @@ +@@ -392,45 +620,41 @@ this.field_147147_p.func_151315_a(new ChatComponentText(this.motd)); this.field_147147_p.func_151321_a(new ServerStatusResponse.MinecraftProtocolVersionIdentifier("1.7.10", 5)); this.func_147138_a(this.field_147147_p); @@ -531,7 +562,7 @@ FMLCommonHandler.instance().handleServerStopping(); FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions } -@@ -448,6 +692,14 @@ +@@ -448,6 +672,14 @@ catch (Throwable throwable1) { logger.error("Encountered an unexpected exception", throwable1); @@ -546,7 +577,7 @@ CrashReport crashreport = null; if (throwable1 instanceof ReportedException) -@@ -477,6 +729,7 @@ +@@ -477,6 +709,7 @@ { try { @@ -554,7 +585,7 @@ this.stopServer(); this.serverStopped = true; } -@@ -486,6 +739,16 @@ +@@ -486,6 +719,16 @@ } finally { @@ -571,7 +602,7 @@ FMLCommonHandler.instance().handleServerStopped(); this.serverStopped = true; this.systemExitNow(); -@@ -532,8 +795,11 @@ +@@ -532,8 +775,11 @@ public void tick() { @@ -583,7 +614,7 @@ ++this.tickCounter; if (this.startProfiling) -@@ -562,12 +828,21 @@ +@@ -562,12 +808,21 @@ this.field_147147_p.func_151318_b().func_151330_a(agameprofile); } @@ -607,7 +638,7 @@ } this.theProfiler.startSection("tallying"); -@@ -575,25 +850,57 @@ +@@ -575,25 +830,57 @@ this.theProfiler.endSection(); this.theProfiler.startSection("snooper"); @@ -667,7 +698,7 @@ int i; Integer[] ids = DimensionManager.getIDs(this.tickCounter % 200 == 0); -@@ -602,19 +909,21 @@ +@@ -602,19 +889,21 @@ int id = ids[x]; long j = System.nanoTime(); @@ -692,7 +723,7 @@ this.theProfiler.startSection("tick"); FMLCommonHandler.instance().onPreWorldTick(worldserver); -@@ -622,22 +931,46 @@ +@@ -622,22 +911,46 @@ try { @@ -741,7 +772,7 @@ worldserver.addWorldInfoToCrashReport(crashreport); throw new ReportedException(crashreport); } -@@ -645,10 +978,13 @@ +@@ -645,10 +958,13 @@ FMLCommonHandler.instance().onPostWorldTick(worldserver); this.theProfiler.endSection(); this.theProfiler.startSection("tracker"); @@ -756,7 +787,7 @@ worldTickTimes.get(id)[this.tickCounter % 100] = System.nanoTime() - j; } -@@ -656,15 +992,21 @@ +@@ -656,15 +972,21 @@ this.theProfiler.endStartSection("dim_unloading"); DimensionManager.unloadWorlds(worldTickTimes); this.theProfiler.endStartSection("connection"); @@ -778,7 +809,7 @@ this.theProfiler.endSection(); } -@@ -699,6 +1041,13 @@ +@@ -699,6 +1021,13 @@ public WorldServer worldServerForDimension(int p_71218_1_) { @@ -792,7 +823,7 @@ WorldServer ret = DimensionManager.getWorld(p_71218_1_); if (ret == null) { -@@ -784,13 +1133,14 @@ +@@ -784,13 +1113,14 @@ public List getPossibleCompletions(ICommandSender p_71248_1_, String p_71248_2_) { @@ -811,7 +842,7 @@ if (list != null) { -@@ -798,40 +1148,25 @@ +@@ -798,40 +1128,25 @@ while (iterator.hasNext()) { @@ -860,7 +891,7 @@ } public static MinecraftServer getServer() -@@ -1034,7 +1369,7 @@ +@@ -1034,7 +1349,7 @@ public boolean isServerInOnlineMode() { @@ -869,7 +900,7 @@ } public void setOnlineMode(boolean p_71229_1_) -@@ -1124,7 +1459,7 @@ +@@ -1124,7 +1439,7 @@ public NetworkSystem func_147137_ag() { @@ -878,7 +909,7 @@ } @SideOnly(Side.CLIENT) -@@ -1259,8 +1594,11 @@ +@@ -1259,8 +1574,11 @@ { Bootstrap.func_151354_b(); @@ -890,7 +921,7 @@ boolean flag = true; String s = null; String s1 = "."; -@@ -1356,16 +1694,34 @@ +@@ -1356,16 +1674,34 @@ { dedicatedserver.setGuiEnabled(); } @@ -931,7 +962,7 @@ } catch (Exception exception) { -@@ -1400,15 +1756,70 @@ +@@ -1400,15 +1736,70 @@ @SideOnly(Side.SERVER) public String getPlugins() { @@ -1007,7 +1038,7 @@ } @SideOnly(Side.SERVER) -@@ -1455,9 +1866,213 @@ +@@ -1455,9 +1846,220 @@ return this.serverStopped; } @@ -1016,6 +1047,12 @@ + { + acceptsAll(Arrays.asList("?", "help"), "Show the help"); + ++ acceptsAll(Arrays.asList("SCD", "ServerConfigDir"), "server config dir") ++ .withRequiredArg() ++ .ofType(File.class) ++ .defaultsTo(new File(".")) ++ .describedAs("server config dir"); ++ + acceptsAll(Arrays.asList("c", "config"), "Properties file to use") + .withRequiredArg() + .ofType(File.class) @@ -1148,6 +1185,7 @@ + useConsole = false; + } + // Cauldron start - initialize config ++ serverConfigDir = (File) options.valueOf("ServerConfigDir"); + configFile = (File) options.valueOf("bukkit-settings"); + commandFile = (File)options.valueOf("commands-settings"); + configuration = YamlConfiguration.loadConfiguration(configFile); diff --git a/patches/net/minecraftforge/common/UsernameCache.java.patch b/patches/net/minecraftforge/common/UsernameCache.java.patch new file mode 100644 index 0000000..b377c41 --- /dev/null +++ b/patches/net/minecraftforge/common/UsernameCache.java.patch @@ -0,0 +1,19 @@ +--- ../src-base/minecraft/net/minecraftforge/common/UsernameCache.java ++++ ../src-work/minecraft/net/minecraftforge/common/UsernameCache.java +@@ -24,6 +24,7 @@ + import com.google.gson.JsonSyntaxException; + + import cpw.mods.fml.relauncher.FMLInjectionData; ++import net.minecraft.server.MinecraftServer; + + /** + * Caches player's last known usernames +@@ -39,7 +40,7 @@ + + private static final Charset charset = Charsets.UTF_8; + +- private static final File saveFile = new File( /* The minecraft dir */(File) FMLInjectionData.data()[6], "usernamecache.json"); ++ private static final File saveFile = new File( MinecraftServer.serverConfigDir, "usernamecache.json"); + private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + private static final Logger log = LogManager.getLogger(UsernameCache.class); diff --git a/src/main/java/net/minecraftforge/cauldron/configuration/ConfigBase.java b/src/main/java/net/minecraftforge/cauldron/configuration/ConfigBase.java index da55291..bb5912a 100644 --- a/src/main/java/net/minecraftforge/cauldron/configuration/ConfigBase.java +++ b/src/main/java/net/minecraftforge/cauldron/configuration/ConfigBase.java @@ -2,28 +2,15 @@ package net.minecraftforge.cauldron.configuration; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.logging.Level; -import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.WorldServer; -import net.minecraftforge.cauldron.CauldronHooks; -import net.minecraftforge.cauldron.TileEntityCache; -import net.minecraftforge.cauldron.command.CauldronCommand; -import net.minecraftforge.common.DimensionManager; - -import org.apache.commons.lang.BooleanUtils; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.configuration.file.YamlConfiguration; -import com.google.common.base.Throwables; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.WorldServer; public abstract class ConfigBase { @@ -41,7 +28,7 @@ public abstract class ConfigBase public ConfigBase(String fileName, String commandName) { - this.configFile = new File(fileName); + this.configFile=new File(MinecraftServer.serverConfigDir,fileName); this.config = YamlConfiguration.loadConfiguration(configFile); this.commandName = commandName; this.commands = new HashMap(); diff --git a/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java b/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java index 60a6221..9e751d7 100644 --- a/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java +++ b/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java @@ -8,6 +8,8 @@ import org.bukkit.help.HelpTopic; import com.google.common.base.Charsets; +import net.minecraft.server.MinecraftServer; + import java.io.File; import java.io.IOException; import java.io.InputStreamReader; @@ -27,7 +29,7 @@ public class HelpYamlReader { public HelpYamlReader(Server server) { this.server = server; - File helpYamlFile = new File("help.yml"); + File helpYamlFile = new File(MinecraftServer.serverConfigDir,"help.yml"); YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(getClass().getClassLoader().getResourceAsStream("configurations/help.yml"), Charsets.UTF_8)); try { diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java index b721cc4..69dde75 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java +++ b/src/main/java/org/spigotmc/SpigotConfig.java @@ -1,29 +1,30 @@ package org.spigotmc; -import com.google.common.base.Throwables; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; -import gnu.trove.map.hash.TObjectIntHashMap; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; -import org.bukkit.command.SimpleCommandMap; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; +import com.google.common.base.Throwables; + +import gnu.trove.map.hash.TObjectIntHashMap; +import net.minecraft.server.MinecraftServer; + public class SpigotConfig { - private static final File CONFIG_FILE = new File( "spigot.yml" ); + private static final File CONFIG_FILE = new File(MinecraftServer.serverConfigDir, "spigot.yml" ); private static final String HEADER = "This is the main configuration file for Spigot.\n" + "As you can see, there's tons to configure. Some options may impact gameplay, so use\n" + "with caution, and make sure you know what each option does before configuring.\n"