aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/gui/GUIProvider.java
blob: 6fec4aa52af9aaf75100784d55bb6a69125b4a72 (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
package gregtech.api.gui;

import java.util.Objects;

import javax.annotation.Nonnull;

import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;

public abstract class GUIProvider<T extends GUIHost> {

    @Nonnull
    protected final T host;

    public GUIProvider(@Nonnull T host) {
        this.host = host;
    }

    @Nonnull
    public ModularWindow openGUI(@Nonnull UIBuildContext uiContext) {
        Builder builder = Objects.requireNonNull(ModularWindow.builder(host.getWidth(), host.getHeight()));
        if (shouldBindPlayerInventory()) {
            builder.bindPlayerInventory(uiContext.getPlayer());
        }
        attachSynchHandlers(builder, uiContext);
        addWidgets(builder, uiContext);
        return Objects.requireNonNull(builder.build());
    }

    protected abstract void attachSynchHandlers(@Nonnull Builder builder, @Nonnull UIBuildContext uiContext);

    protected abstract void addWidgets(@Nonnull Builder builder, @Nonnull UIBuildContext uiContext);

    protected boolean shouldBindPlayerInventory() {
        return true;
    }
}