Skip to content

Commit

Permalink
Merge pull request #21 from mineblock11/indicators
Browse files Browse the repository at this point in the history
  • Loading branch information
IMB11 authored Jun 27, 2023
2 parents 6415e01 + 1008f31 commit 87d95b3
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
*
* Copyright (C) 2023 Calum (mineblock11), enjarai
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*/

package com.mineblock11.skinshuffle.client.gui;

import com.mineblock11.skinshuffle.client.config.SkinShuffleConfig;
import com.mineblock11.skinshuffle.networking.ClientSkinHandling;
import com.mineblock11.skinshuffle.util.NetworkingUtil;
import com.mineblock11.skinshuffle.util.ToastHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.ConfirmScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;

public class GeneratedScreens {
public static Screen getConfigScreen(Screen parent) {
return SkinShuffleConfig.getInstance().generateScreen(parent);
}

public static Screen getReconnectScreen(Screen target) {
MinecraftClient client = MinecraftClient.getInstance();
return new ConfirmScreen((boolean result) -> {
if(result) {
NetworkingUtil.handleReconnect(client);
} else {
if (!ClientSkinHandling.isInstalledOnServer()) {
ToastHelper.showRefusedReconnectToast();
ClientSkinHandling.setReconnectRequired(true);
}

client.setScreen(target);
}
}, Text.translatable("skinshuffle.reconnect.title",
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.c_region") : I18n.translate("skinshuffle.reconnect.c_reconnect")).formatted(Formatting.RED, Formatting.BOLD),
Text.translatable("skinshuffle.reconnect.message",
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.rejoin") : I18n.translate("skinshuffle.reconnect.reconnect_to"),
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.world") : client.isConnectedToRealms() ? I18n.translate("skinshuffle.reconnect.realm") : I18n.translate("skinshuffle.reconnect.server"),
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.rejoin") : I18n.translate("skinshuffle.reconnect.reconnect")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ protected void init() {
this.close();
}));

this.addDrawableChild(new SpruceIconButtonWidget(Position.of(2, 2), 20, 20, Text.empty(), (btn) -> this.client.setScreenAndRender(SkinShuffleConfigScreen.get(this))) {
this.addDrawableChild(new SpruceIconButtonWidget(Position.of(2, 2), 20, 20, Text.empty(), (btn) -> this.client.setScreenAndRender(GeneratedScreens.getConfigScreen(this))) {
@Override
protected int renderIcon(DrawContext graphics, int mouseX, int mouseY, float delta) {
graphics.drawTexture(SkinShuffle.id("textures/gui/config-button-icon.png"), this.getX() + this.getWidth() / 2 - (14 / 2), this.getY() + this.getHeight() / 2 - (14 / 2), 14, 14, 0, 0, 15, 15, 15, 15);
Expand All @@ -137,22 +137,7 @@ protected int renderIcon(DrawContext graphics, int mouseX, int mouseY, float del
SkinPresetManager.setChosenPreset(presetWidget.getPreset(), this.hasEditedPreset);

if(this.client.world != null && !ClientSkinHandling.isInstalledOnServer()) {
this.client.setScreen(new ConfirmScreen((boolean result) -> {
if(result) {
NetworkingUtil.handleReconnect(client);
} else {
if (!ClientSkinHandling.isInstalledOnServer()) {
ToastHelper.showRefusedReconnectToast();
}

client.setScreen(this.parent);
}
}, Text.translatable("skinshuffle.reconnect.title",
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.c_region") : I18n.translate("skinshuffle.reconnect.c_reconnect")).formatted(Formatting.RED, Formatting.BOLD),
Text.translatable("skinshuffle.reconnect.message",
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.rejoin") : I18n.translate("skinshuffle.reconnect.reconnect_to"),
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.world") : client.isConnectedToRealms() ? I18n.translate("skinshuffle.reconnect.realm") : I18n.translate("skinshuffle.reconnect.server"),
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.rejoin") : I18n.translate("skinshuffle.reconnect.reconnect"))));
this.client.setScreen(GeneratedScreens.getReconnectScreen(this.parent));
} else {
this.close();
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,30 +20,40 @@

package com.mineblock11.skinshuffle.client.gui.widgets;

import com.mineblock11.skinshuffle.SkinShuffle;
import com.mineblock11.skinshuffle.client.config.SkinPresetManager;
import com.mineblock11.skinshuffle.client.config.SkinShuffleConfig;
import com.mineblock11.skinshuffle.client.gui.GeneratedScreens;
import com.mineblock11.skinshuffle.client.gui.SkinCarouselScreen;
import com.mineblock11.skinshuffle.client.gui.cursed.DummyClientPlayerEntity;
import com.mineblock11.skinshuffle.client.gui.cursed.GuiEntityRenderer;
import com.mineblock11.skinshuffle.client.preset.SkinPreset;
import com.mineblock11.skinshuffle.mixin.accessor.GameMenuScreenAccessor;
import com.mineblock11.skinshuffle.networking.ClientSkinHandling;
import com.terraformersmc.modmenu.config.ModMenuConfig;
import dev.lambdaurora.spruceui.Position;
import dev.lambdaurora.spruceui.Tooltip;
import dev.lambdaurora.spruceui.widget.SpruceButtonWidget;
import dev.lambdaurora.spruceui.widget.SpruceTexturedButtonWidget;
import dev.lambdaurora.spruceui.widget.container.SpruceContainerWidget;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.GameMenuScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.GlfwUtil;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;

import java.util.UUID;
import java.util.function.Consumer;

public class OpenCarouselWidget extends SpruceContainerWidget {
private final Screen parent;
private final MutableText warningTooltip;
private SpruceTexturedButtonWidget warningIcon;
private SkinPreset selectedPreset;
private DummyClientPlayerEntity entity;
private double currentTime = 0;
Expand All @@ -55,10 +65,29 @@ private OpenCarouselWidget(Position position, int width, int height, Screen scre

currentTime = GlfwUtil.getTime();

this.addChild(new SpruceButtonWidget(Position.of(0, 0), width, 20, Text.translatable("skinshuffle.button"), button -> {
this.addChild(new SpruceButtonWidget(Position.of(0, 0), width - 18, 20, Text.translatable("skinshuffle.button"), button -> {
this.client.setScreen(new SkinCarouselScreen(parent));
}));

this.warningTooltip = Text.literal(I18n.translate("skinshuffle.reconnect.warning",
client.isInSingleplayer() ? I18n.translate("skinshuffle.reconnect.rejoin") : I18n.translate("skinshuffle.reconnect.reconnect"))).formatted(Formatting.RED, Formatting.BOLD);

if(screen instanceof GameMenuScreen) {
this.warningIcon = new SpruceTexturedButtonWidget(Position.of(width - 16, 2), 16, 16, Text.empty(), true, btn -> {
this.client.setScreen(GeneratedScreens.getReconnectScreen(screen));
}, 0, 0, 16, SkinShuffle.id("textures/gui/warning-icon.png"), 16, 32) {
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (!this.isActive() || !this.isVisible() || !this.isMouseHovered())
return false;

return this.onMouseClick(mouseX, mouseY, button);
}
};

this.addChild(warningIcon);
}

setSelectedPreset(SkinPresetManager.getChosenPreset());
}

Expand All @@ -81,7 +110,7 @@ public static void safelyCreateWidget(Screen screen, Consumer<OpenCarouselWidget
}
}

widgetConsumer.accept(new OpenCarouselWidget(Position.of(x, y), 72, screen.height / 4, screen));
widgetConsumer.accept(new OpenCarouselWidget(Position.of(x, y), 72 + 20, screen.height / 4, screen));
}

public void disposed() {
Expand Down Expand Up @@ -122,6 +151,13 @@ protected void renderWidget(DrawContext graphics, int mouseX, int mouseY, float
);
}

if(this.warningIcon != null) {
this.warningIcon.setVisible(ClientSkinHandling.isReconnectRequired());
if(this.warningIcon.isMouseHovered())
Tooltip.create(mouseX, mouseY, this.warningTooltip, this.width).render(graphics);
}


super.renderWidget(graphics, mouseX, mouseY, delta);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
package com.mineblock11.skinshuffle.compat;

import com.mineblock11.skinshuffle.client.gui.SkinCarouselScreen;
import com.mineblock11.skinshuffle.client.gui.SkinShuffleConfigScreen;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import net.minecraft.client.gui.screen.Screen;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@
public class ClientSkinHandling {
private static boolean handshakeTakenPlace = false;

private static boolean reconnectRequired = false;

public static boolean isReconnectRequired() {
return reconnectRequired;
}

public static void setReconnectRequired(boolean reconnectRequired) {
ClientSkinHandling.reconnectRequired = reconnectRequired;
}

public static boolean isInstalledOnServer() {
return handshakeTakenPlace;
}
Expand All @@ -55,6 +65,7 @@ public static void init() {

ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> {
handshakeTakenPlace = false;
setReconnectRequired(false);
});

ClientPlayNetworking.registerGlobalReceiver(SkinShuffle.id("handshake"), (client1, handler1, buf, responseSender) -> {
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/skinshuffle/lang/en_us.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
skinshuffle:
reconnect:
warning: "You must %s to allow other players, including yourself, to see your skin."
reconnecting: Reconnecting...
rejoining: Rejoining...
rejoin: rejoin
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 87d95b3

Please sign in to comment.