Commit 23f48fd8 authored by Vladislav's avatar Vladislav
Browse files

[FUTURE]

Revert ServerLaunchWrapper.java
Fix remapping Bukkit plugins. Add reflection support.
Refactoring CraftCustomEntity.java CraftCustomProjectile.java
Add BukkitInjector. Inject Forge Blocks, Item in Bukkit Materials, Biomes and EntityType
Add AtomServer.java for class helper(Future)
Fix SPacketPlayerListItem enum Action
parent 54841192
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ dependencies {
    compile 'com.googlecode.json-simple:json-simple:1.1.1'
    compile 'commons-lang:commons-lang:2.6' // Is needed for plugin compatibility
    compile 'org.scala-lang.modules:scala-parser-combinators_2.11:1.0.1'
    compile 'org.scala-lang:scala-compiler:2.11.1'
    compile 'net.md-5:bungeecord-chat:1.12-SNAPSHOT'
    compile 'org.xerial:sqlite-jdbc:3.25.2'
    compile 'mysql:mysql-connector-java:5.1.47'
+1 −1
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ public class SPacketPlayerListItem implements Packet<INetHandlerPlayClient> {
        UPDATE_GAME_MODE,
        UPDATE_LATENCY,
        UPDATE_DISPLAY_NAME,
        REMOVE_PLAYER;
        REMOVE_PLAYER
    }

    public class AddPlayerData {
+10 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.atom.AtomServerWatchDog;
import org.atom.BukkitInjector;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.Main;
@@ -290,6 +291,15 @@ public abstract class MinecraftServer implements ICommandSender, Runnable, IThre
            } else {
                ISaveHandler idatamanager = new AnvilSaveHandler(server.getWorldContainer(), name, true, this.dataFixer);
                WorldInfo worlddata = idatamanager.loadWorldInfo();
                if (!BukkitInjector.initializedBukkit) {
                    BukkitInjector.injectBlockBukkitMaterials();
                    BukkitInjector.injectItemBukkitMaterials();
                    BukkitInjector.injectBiomes();
                    BukkitInjector.injectEntityType();
                    //BukkitInjector.registerEnchantments(); // TODO BukkitInjector register Enchantments()
                    //BukkitInjector.registerPotions(); // TODO BukkitInjector register Potions()
                    BukkitInjector.initializedBukkit = true;
                }
                if (worlddata == null) {
                    worlddata = new WorldInfo(worldsettings, name);
                }
+2 −21
Original line number Diff line number Diff line
@@ -19,16 +19,7 @@

package net.minecraftforge.fml.relauncher;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLClassLoader;
import java.util.HashMap;

import net.minecraft.launchwrapper.Launch;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.atom.remapper.AtomLauncherClassLoader;
import sun.misc.Unsafe;

public class ServerLaunchWrapper {

@@ -60,22 +51,12 @@ public class ServerLaunchWrapper {
        }

        try {
            Method main = launchwrapper.getMethod("main", String[].class);
            String[] allArgs = new String[args.length + 2];
            allArgs[0] = "--tweakClass";
            allArgs[1] = "net.minecraftforge.fml.common.launcher.FMLServerTweaker";
            System.arraycopy(args, 0, allArgs, 2, args.length);
            Field theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe");
            theUnsafeField.setAccessible(true);
            Unsafe unsafe = (Unsafe) theUnsafeField.get(null);
            Launch launch = (Launch) unsafe.allocateInstance(Launch.class);
            final URLClassLoader ucl = (URLClassLoader) getClass().getClassLoader();
            Launch.classLoader = new AtomLauncherClassLoader(ucl.getURLs());
            Launch.blackboard = new HashMap<>();
            Thread.currentThread().setContextClassLoader(Launch.classLoader);
            Method launchMethod = launchwrapper.getDeclaredMethod("launch", String[].class);
            launchMethod.setAccessible(true);
            launchMethod.invoke(launch, (Object) allArgs);

            main.invoke(null, (Object) allArgs);
        } catch (Exception e) {
            System.err.printf("A problem occurred running the Server launcher.");
            e.printStackTrace(System.err);
+105 −0
Original line number Diff line number Diff line
package org.atom;

import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import joptsimple.NonOptionArgumentSpec;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class AtomGradleStart {
    public static void main(String[] args) throws Throwable {
        (new AtomGradleStart()).launch(args);
    }

    protected static Logger LOGGER = LogManager.getLogger("GradleStart");

    Map<String, String> argMap = Maps.newHashMap();
    List<String> extras = Lists.newArrayList();

    static final File SRG_SRG_MCP = new File(AtomGradleStart.class.getClassLoader().getResource("mappings/" + AtomServer.getNativeVersion() + "/srg2mcp.srg").getFile());

    protected void launch(String[] args) throws Throwable {
        System.setProperty("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", SRG_SRG_MCP.getCanonicalPath());
        parseArgs(args);
        System.setProperty("fml.ignoreInvalidMinecraftCertificates", "true");
        args = getArgs();
        argMap = null;
        extras = null;

        System.gc();
        Class.forName("net.minecraft.launchwrapper.Launch").getDeclaredMethod("main", String[].class).invoke(null, new Object[]{args});
    }

    private String[] getArgs() {
        ArrayList<String> list = new ArrayList<String>(22);

        for (Map.Entry<String, String> e : argMap.entrySet()) {
            String val = e.getValue();
            if (!Strings.isNullOrEmpty(val)) {
                list.add("--" + e.getKey());
                list.add(val);
            }
        }

        if (!Strings.isNullOrEmpty("net.minecraftforge.fml.common.launcher.FMLServerTweaker")) {
            list.add("--tweakClass");
            list.add("net.minecraftforge.fml.common.launcher.FMLServerTweaker");
        }

        if (extras != null) {
            list.addAll(extras);
        }

        String[] out = list.toArray(new String[list.size()]);

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int x = 0; x < out.length; x++) {
            b.append(out[x]);
            if ("--accessToken".equalsIgnoreCase(out[x])) {
                b.append("{REDACTED}");
                x++;
            }

            if (x < out.length - 1) {
                b.append(", ");
            }
        }
        b.append(']');
        AtomGradleStart.LOGGER.info("Running with arguments: " + b.toString());

        return out;
    }

    private void parseArgs(String[] args) {
        final OptionParser parser = new OptionParser();
        parser.allowsUnrecognizedOptions();

        for (String key : argMap.keySet()) {
            parser.accepts(key).withRequiredArg().ofType(String.class);
        }

        final NonOptionArgumentSpec<String> nonOption = parser.nonOptions();

        final OptionSet options = parser.parse(args);
        for (String key : argMap.keySet()) {
            if (options.hasArgument(key)) {
                String value = (String) options.valueOf(key);
                argMap.put(key, value);
                if (!"password".equalsIgnoreCase(key) && !"accessToken".equalsIgnoreCase(key))
                    LOGGER.info(key + ": " + value);
            }
        }

        extras = Lists.newArrayList(nonOption.values(options));
        LOGGER.info("Extra: " + extras);
    }
}
Loading