Skip to content

Commit

Permalink
fix result screen not showing up on some screens
Browse files Browse the repository at this point in the history
  • Loading branch information
MelanX committed Jul 16, 2023
1 parent f265a39 commit 5d198bc
Show file tree
Hide file tree
Showing 10 changed files with 67 additions and 69 deletions.
22 changes: 9 additions & 13 deletions src/main/java/de/melanx/skyguis/client/screen/BaseScreen.java
Expand Up @@ -2,6 +2,7 @@

import com.mojang.blaze3d.platform.InputConstants;
import de.melanx.skyguis.SkyGUIs;
import de.melanx.skyguis.client.screen.base.LoadingResultHandler;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
Expand Down Expand Up @@ -50,10 +51,12 @@ private void guiInitPre(ScreenEvent.Init.Pre event) {
}

private void guiInitPost(ScreenEvent.Init.Post event) {
boolean prevActive = this.loadingCircle != null && this.loadingCircle.isActive();
this.loadingCircle = this.createLoadingCircle();
if (this.loadingCircle != null) {
this.loadingCircle.setActive(prevActive);
if (this instanceof LoadingResultHandler loadingResultHandler) {
boolean prevActive = this.loadingCircle != null && this.loadingCircle.isActive();
this.loadingCircle = loadingResultHandler.createLoadingCircle(this);
if (this.loadingCircle != null) {
this.loadingCircle.setActive(prevActive);
}
}
}

Expand All @@ -76,18 +79,11 @@ public void render_(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, fl
super.render(guiGraphics, mouseX, mouseY, partialTick);
}

@Nullable
public LoadingCircle createLoadingCircle() {
return null;
}

@Nullable
public LoadingCircle getLoadingCircle() {
return this.loadingCircle;
}

public void onLoadingResult(LoadingResult result) {}

public void renderTitle(@Nonnull GuiGraphics guiGraphics) {
guiGraphics.drawString(this.font, this.title, this.centeredX(this.font.width(this.title.getVisualOrderText())), this.y(10), Color.DARK_GRAY.getRGB(), false);
}
Expand Down Expand Up @@ -142,11 +138,11 @@ public float y(float y) {

@Override
public void tick() {
if (this.loadingCircle != null && this.loadingCircle.isActive()) {
if (this instanceof LoadingResultHandler loadingResultHandler && this.loadingCircle != null && this.loadingCircle.isActive()) {
this.preventUserInput = true;
LoadingResult result = this.getResult();
if (result != null) {
this.onLoadingResult(result);
loadingResultHandler.onLoadingResult(result);
this.loadingCircle.setActive(false);
this.preventUserInput = false;
}
Expand Down
Expand Up @@ -7,7 +7,6 @@
import de.melanx.skyguis.SkyGUIs;
import de.melanx.skyguis.client.screen.base.LoadingResultHandler;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
import de.melanx.skyguis.util.TextHelper;
Expand Down Expand Up @@ -110,11 +109,6 @@ public void tick() {
super.tick();
}

@Override
public LoadingCircle createLoadingCircle() {
return new LoadingCircle(this.centeredX(32), this.centeredY(32), 32);
}

@Override
public void render_(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
super.render_(guiGraphics, mouseX, mouseY, partialTick);
Expand Down
@@ -1,11 +1,14 @@
package de.melanx.skyguis.client.screen.base;

import de.melanx.skyguis.client.screen.BaseScreen;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.util.LoadingResult;

public interface LoadingResultHandler {

LoadingCircle createLoadingCircle();
default LoadingCircle createLoadingCircle(BaseScreen screen) {
return new LoadingCircle(screen.centeredX(32), screen.centeredY(32), 32);
}

void onLoadingResult(LoadingResult result);
}
Expand Up @@ -9,7 +9,6 @@
import de.melanx.skyguis.client.screen.base.list.TeamListScreen;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.screen.notification.YouSureScreen;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.client.widget.sizable.SizableButton;
import de.melanx.skyguis.network.handler.AnswerInvitation;
import de.melanx.skyguis.util.ComponentBuilder;
Expand All @@ -21,7 +20,6 @@
import org.moddingx.libx.impl.config.gui.screen.widget.TextWidget;
import org.moddingx.libx.screen.Panel;

import javax.annotation.Nullable;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;
Expand All @@ -41,14 +39,11 @@ public static void open() {
Minecraft.getInstance().setScreen(new HandleInvitationsScreen());
}

@Nullable
@Override
public LoadingCircle createLoadingCircle() {
return new LoadingCircle(this.centeredX(32), this.centeredY(32), 32);
}

@Override
public void onLoadingResult(LoadingResult result) {
if (result.status() == LoadingResult.Status.SUCCESS) {
Minecraft.getInstance().setScreen(null);
}
Minecraft minecraft = Minecraft.getInstance();
minecraft.pushGuiLayer(new InformationScreen(result.reason(), TextHelper.stringLength(result.reason()) + 30, 100, minecraft::popGuiLayer));
}
Expand All @@ -60,15 +55,15 @@ protected void fillWidgets() {
this.renderArea.addRenderableWidget2(new JoinTeamWidget(this.values.get(i), this, 0, ENTRY_HEIGHT * i, 100, 12,
// pressing join button
team -> {
minecraft.pushGuiLayer(new YouSureScreen(ComponentBuilder.text("you_sure_join", team.getName()), () -> {
minecraft.pushGuiLayer(new YouSureScreen(this, ComponentBuilder.text("you_sure_join", team.getName()), () -> {
SkyGUIs.getNetwork().handleInvitationAnswer(team.getName(), AnswerInvitation.Type.ACCEPT);
minecraft.setScreen(null);
}
));
},
// pressing ignore button
team -> {
minecraft.pushGuiLayer(new YouSureScreen(ComponentBuilder.text("you_sure_ignore", team.getName()), () -> {
minecraft.pushGuiLayer(new YouSureScreen(this, ComponentBuilder.text("you_sure_ignore", team.getName()), () -> {
SkyGUIs.getNetwork().handleInvitationAnswer(team.getName(), AnswerInvitation.Type.IGNORE);
Minecraft.getInstance().setScreen(new HandleInvitationsScreen());
}));
Expand Down
Expand Up @@ -10,7 +10,6 @@
import de.melanx.skyguis.client.screen.base.list.PlayerListScreen;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.screen.notification.YouSureScreen;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.client.widget.sizable.SizeableCheckbox;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
Expand All @@ -24,7 +23,6 @@
import net.minecraft.network.chat.Component;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.awt.Color;
import java.util.Set;
import java.util.UUID;
Expand Down Expand Up @@ -52,7 +50,7 @@ public InvitablePlayersScreen(Team team, BaseScreen prev) {
protected void init() {
this.inviteButton = this.addRenderableWidget(Button.builder(INVITE, (button -> {
Set<UUID> inviteIds = this.getSelectedValues().stream().map(GameProfile::getId).collect(Collectors.toSet());
Minecraft.getInstance().pushGuiLayer(new YouSureScreen(ComponentBuilder.text("you_sure_invite", inviteIds.size()), () -> {
Minecraft.getInstance().pushGuiLayer(new YouSureScreen(this, ComponentBuilder.text("you_sure_invite", inviteIds.size()), () -> {
SkyGUIs.getNetwork().handleInvitePlayers(this.team.getName(), inviteIds);
Minecraft.getInstance().setScreen(new InvitablePlayersScreen(this.team, this.prev));
}, () -> Minecraft.getInstance().setScreen(this)));
Expand Down Expand Up @@ -80,12 +78,6 @@ public void onPress() {
this.updateButtons();
}

@Nullable
@Override
public LoadingCircle createLoadingCircle() {
return new LoadingCircle(this.centeredX(32), this.centeredY(32), 32);
}

@Override
public void onLoadingResult(LoadingResult result) {
Minecraft minecraft = Minecraft.getInstance();
Expand Down
Expand Up @@ -4,11 +4,15 @@
import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyguis.SkyGUIs;
import de.melanx.skyguis.client.screen.BaseScreen;
import de.melanx.skyguis.client.screen.base.LoadingResultHandler;
import de.melanx.skyguis.client.screen.base.list.PlayerListScreen;
import de.melanx.skyguis.client.screen.info.AllTeamsScreen;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.screen.notification.YouSureScreen;
import de.melanx.skyguis.client.widget.sizable.SizeableCheckbox;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
import de.melanx.skyguis.util.TextHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
Expand All @@ -21,13 +25,14 @@
import java.util.UUID;
import java.util.stream.Collectors;

public class TeamPlayersScreen extends PlayerListScreen {
public class TeamPlayersScreen extends PlayerListScreen implements LoadingResultHandler {

private final Team team;
private final BaseScreen prev;
private Button kickButton;
private Checkbox selectAll;
private int selectedAmount = 0;
private Runnable onSuccess;

public TeamPlayersScreen(Team team, BaseScreen prev) {
super(Component.literal(team.getName()), team.getPlayers(), 200, 230,
Expand All @@ -41,15 +46,17 @@ public TeamPlayersScreen(Team team, BaseScreen prev) {
protected void init() {
this.kickButton = this.addRenderableWidget(Button.builder(ComponentBuilder.text("kick"), (button -> {
Set<UUID> removalIds = this.getSelectedValues().stream().map(GameProfile::getId).collect(Collectors.toSet());
Minecraft.getInstance().pushGuiLayer(new YouSureScreen(ComponentBuilder.text("you_sure_kick"), () -> {
Minecraft.getInstance().pushGuiLayer(new YouSureScreen(this, ComponentBuilder.text("you_sure_kick"), () -> {
SkyGUIs.getNetwork().handleKickPlayers(this.team.getName(), removalIds);
//noinspection ConstantConditions
if (removalIds.contains(Minecraft.getInstance().player.getGameProfile().getId())) {
Minecraft.getInstance().setScreen(new AllTeamsScreen());
} else {
Minecraft.getInstance().setScreen(new TeamPlayersScreen(this.team, this.prev));
}
}, () -> Minecraft.getInstance().setScreen(this)));
this.onSuccess = () -> {
//noinspection DataFlowIssue
if (removalIds.contains(Minecraft.getInstance().player.getGameProfile().getId())) {
Minecraft.getInstance().setScreen(new AllTeamsScreen());
} else {
Minecraft.getInstance().setScreen(new TeamPlayersScreen(this.team, this.prev));
}
};
}));
}))
.bounds(this.x(10), this.y(200), 40, 20)
.build());
Expand Down Expand Up @@ -93,4 +100,15 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
this.updateButtons();
return ret;
}

@Override
public void onLoadingResult(LoadingResult result) {
switch (result.status()) {
case SUCCESS -> this.onSuccess.run();
case FAIL -> {
Minecraft minecraft = Minecraft.getInstance();
minecraft.pushGuiLayer(new InformationScreen(result.reason(), TextHelper.stringLength(result.reason()) + 30, 100, minecraft::popGuiLayer));
}
}
}
}
Expand Up @@ -10,7 +10,6 @@
import de.melanx.skyguis.client.screen.edit.TeamPlayersScreen;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.widget.BlinkingEditBox;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.network.handler.EditSpawns;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
Expand Down Expand Up @@ -134,12 +133,6 @@ protected void init() {
}
}

@Nullable
@Override
public LoadingCircle createLoadingCircle() {
return new LoadingCircle(this.centeredX(32), this.centeredY(32), 32);
}

@Override
public void onLoadingResult(LoadingResult result) {
Minecraft minecraft = Minecraft.getInstance();
Expand Down
Expand Up @@ -4,8 +4,8 @@
import de.melanx.skyblockbuilder.data.SkyblockSavedData;
import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyguis.client.screen.BaseScreen;
import de.melanx.skyguis.client.screen.base.LoadingResultHandler;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
import de.melanx.skyguis.util.TextHelper;
Expand All @@ -19,9 +19,8 @@
import net.minecraft.network.chat.MutableComponent;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class TeamInfoScreen extends BaseScreen {
public class TeamInfoScreen extends BaseScreen implements LoadingResultHandler {

private static final MutableComponent CONFIG_SELF_MANAGEMENT = Component.translatable("skyblockbuilder.command.disabled.join_request").withStyle(ChatFormatting.RED);
private static final MutableComponent TEAM_JOIN_REQUESTS = Component.translatable("skyblockbuilder.command.disabled.team_join_request").withStyle(ChatFormatting.RED);
Expand Down Expand Up @@ -83,12 +82,6 @@ public void render_(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, fl
this.renderTitle(guiGraphics);
}

@Nullable
@Override
public LoadingCircle createLoadingCircle() {
return new LoadingCircle(this.centeredX(32), this.centeredY(32), 32);
}

@Override
public void onLoadingResult(LoadingResult result) {
Minecraft minecraft = Minecraft.getInstance();
Expand Down
Expand Up @@ -2,6 +2,7 @@

import de.melanx.skyguis.client.screen.BaseScreen;
import de.melanx.skyguis.client.screen.base.NotificationScreen;
import de.melanx.skyguis.client.widget.LoadingCircle;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.TextHelper;
import net.minecraft.ChatFormatting;
Expand All @@ -12,21 +13,33 @@ public class YouSureScreen extends NotificationScreen {

private static final Component CONFIRM = ComponentBuilder.button("confirm");
private static final Component ABORT = ComponentBuilder.button("abort");
private final BaseScreen parent;

public YouSureScreen(Component title, BaseScreen.OnConfirm onConfirm) {
this(title.copy().withStyle(ChatFormatting.RED), onConfirm, BaseScreen.DEFAULT_ABORT);
public YouSureScreen(BaseScreen parent, Component title, BaseScreen.OnConfirm onConfirm) {
this(parent, title.copy().withStyle(ChatFormatting.RED), onConfirm, BaseScreen.DEFAULT_ABORT);
}

public YouSureScreen(Component title, BaseScreen.OnConfirm onConfirm, BaseScreen.OnAbort onAbort) {
public YouSureScreen(BaseScreen parent, Component title, BaseScreen.OnConfirm onConfirm, BaseScreen.OnAbort onAbort) {
super(title, TextHelper.stringLength(title) + 30, 80, onConfirm, onAbort);
this.parent = parent;
}

@Override
protected void init() {
this.addRenderableWidget(Button.builder(CONFIRM, (button -> this.onConfirm.onConfirm()))
this.addRenderableWidget(Button.builder(CONFIRM, (button -> {
this.onConfirm.onConfirm();
LoadingCircle loadingCircle = this.parent.getLoadingCircle();
if (loadingCircle != null) {
loadingCircle.setActive(true);
}
this.parent.onClose();
}))
.bounds(this.centeredX(50) - 30, this.y(45), 50, 20)
.build());
this.addRenderableWidget(Button.builder(ABORT, (button -> this.onAbort.onAbort()))
this.addRenderableWidget(Button.builder(ABORT, (button -> {
this.onAbort.onAbort();
this.onClose();
}))
.bounds(this.centeredX(50) + 30, this.y(45), 50, 20)
.build());
}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/skyguis/lang/en_us.json
Expand Up @@ -36,6 +36,7 @@
"screen.skyguis.text.you_sure_join": "Do you really want to join \"%s\"?",
"screen.skyguis.text.you_sure_ignore": "Do you really want to ignore invitation by \"%s\"?",
"screen.skyguis.text.empty_templates": "No templates available",
"screen.skyguis.text.missing_permissions": "You do not have permissions to perform this action",

"screen.skyguis.button.create": "Create",
"screen.skyguis.button.confirm": "Confirm",
Expand Down

0 comments on commit 5d198bc

Please sign in to comment.