Untitled

 avatar
unknown
java
a year ago
1.6 kB
9
Indexable
package com.trexmine.guiapi;

import com.trexmine.guiapi.gui.GuiManager;
import com.trexmine.guiapi.packets.GuiPacketPlayInWindowClick;
import com.trexmine.guiapi.packets.GuiPacketPlayOutSetSlot;
import com.trexmine.guiapi.packets.GuiPacketPlayOutWindowItems;
import lombok.Getter;
import lombok.SneakyThrows;
import net.minecraft.server.v1_8_R3.EnumProtocol;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.lang.reflect.Field;
import java.util.Map;

@Getter
public final class GuiAPI {

    private static final Logger LOGGER = LogManager.getLogger(GuiAPI.class);

    private static GuiAPI INSTANCE;
    private final GuiManager guiManager = new GuiManager();

    private static final Field enumProtocol_registry;

    static {
        try {
            enumProtocol_registry = EnumProtocol.class.getDeclaredField("h");
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }
        enumProtocol_registry.setAccessible(true);
    }

    public static GuiAPI getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GuiAPI();
            INSTANCE.registerPackets();
        }
        return INSTANCE;
    }

    @SneakyThrows
    @SuppressWarnings({"unchecked", "rawtypes"})
    private void registerPackets() {
        Map map = (Map) enumProtocol_registry.get(null);

        map.put(GuiPacketPlayOutSetSlot.class, EnumProtocol.PLAY);
        map.put(GuiPacketPlayOutWindowItems.class, EnumProtocol.PLAY);
        map.put(GuiPacketPlayInWindowClick.class, EnumProtocol.PLAY);

        LOGGER.info("Registered GUI packets");
    }
}
Editor is loading...
Leave a Comment