aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/core/gui/beta/GUIIDRegistry.java
blob: fbb34ee5b73d86b4124e77b0916e93efaeeb4c18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package gtPlusPlus.core.gui.beta;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import gtPlusPlus.core.interfaces.IGuiManagerMiscUtils;

public class GUIIDRegistry {

    private static final Map<Class<? extends IGuiManagerMiscUtils>, MUGuild> classMap = new HashMap<>();
    private static final Map<Integer, MUGuild> idMap = new HashMap<>();
    private static int nextId = 0;

    private static void registerGuiHandlers(final GUITypes MU_GuiType,
        final List<Class<? extends IGuiManagerMiscUtils>> guiHandlerClasses) {
        for (final Class<? extends IGuiManagerMiscUtils> tileGuiHandlerClass : guiHandlerClasses) {
            final MUGuild guiId = new MUGuild(nextId++, MU_GuiType, tileGuiHandlerClass);
            classMap.put(tileGuiHandlerClass, guiId);
            idMap.put(guiId.getId(), guiId);
        }
    }

    public static MUGuild getGuiIdForGuiHandler(final IGuiManagerMiscUtils guiHandler) {
        final Class<? extends IGuiManagerMiscUtils> guiHandlerClass = guiHandler.getClass();
        MUGuild guiId = classMap.get(guiHandlerClass);
        if (guiId == null) {
            for (final Map.Entry<Class<? extends IGuiManagerMiscUtils>, MUGuild> classGuiIdEntry : classMap
                .entrySet()) {
                if (classGuiIdEntry.getKey()
                    .isAssignableFrom(guiHandlerClass)) {
                    guiId = classGuiIdEntry.getValue();
                    break;
                }
            }
        }
        if (guiId == null) {
            throw new IllegalStateException("No gui ID for gui handler: " + guiHandler);
        }
        return guiId;
    }

    public static MUGuild getGuiId(final int id) {
        return idMap.get(id);
    }
}