nosingleplayer 1.1.3: fix connexion + bouton Quitter SurviePote
- TitleScreenMixin : TransferState null sur startConnecting -> connexion normale, corrige "This server does not accept transfers". - PauseScreenMixin (nouveau) : renomme le bouton de deconnexion du menu Echap en "Quitter SurviePote" et redirige vers l'ecran d'accueil (TitleScreen) au lieu de la liste des serveurs. - build.gradle : tache runClient (dev sans loom) reutilisant ~/.surviepote/common. - Jar 1.1.3 copie dans l'atlas + distribution.json regenere.
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
package fr.surviepote.nosingleplayer.mixin;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.screens.PauseScreen;
|
||||
import net.minecraft.client.gui.screens.TitleScreen;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.network.chat.CommonComponents;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
@Mixin(PauseScreen.class)
|
||||
public abstract class PauseScreenMixin {
|
||||
|
||||
@Unique
|
||||
private static final Component SURVIEPOTE_QUIT = Component.literal("Quitter SurviePote");
|
||||
|
||||
// Quitte le monde comme le bouton vanilla, mais renvoie vers l'écran d'accueil
|
||||
// (au lieu de la liste des serveurs pour un serveur distant).
|
||||
@Unique
|
||||
private static void surviepote$quitToTitle(Button button) {
|
||||
button.active = false;
|
||||
Minecraft minecraft = Minecraft.getInstance();
|
||||
// Conserve la gestion vanilla du brouillon de signalement, puis redirige.
|
||||
minecraft.getReportingContext().draftReportHandled(minecraft, minecraft.gui.screen(), () -> {
|
||||
minecraft.disconnectFromWorld(ClientLevel.DEFAULT_QUIT_MESSAGE);
|
||||
minecraft.setScreenAndShow(new TitleScreen());
|
||||
}, true);
|
||||
}
|
||||
|
||||
@Redirect(method = "createPauseMenu",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/gui/components/Button;builder(Lnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/components/Button$OnPress;)Lnet/minecraft/client/gui/components/Button$Builder;"))
|
||||
private static Button.Builder surviepote$relabelDisconnect(Component message, Button.OnPress onPress) {
|
||||
// createPauseMenu ne crée que deux boutons via Button.builder : "Retour au jeu"
|
||||
// et "Déconnexion". On ne remplace que ce dernier.
|
||||
if (message.getString().equals(CommonComponents.GUI_DISCONNECT.getString())) {
|
||||
return Button.builder(SURVIEPOTE_QUIT, PauseScreenMixin::surviepote$quitToTitle);
|
||||
}
|
||||
return Button.builder(message, onPress);
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -2,7 +2,6 @@ package fr.surviepote.nosingleplayer.mixin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
@@ -13,7 +12,6 @@ import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import net.minecraft.client.gui.screens.ConnectScreen;
|
||||
import net.minecraft.client.gui.screens.TitleScreen;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.client.multiplayer.TransferState;
|
||||
import net.minecraft.client.multiplayer.resolver.ServerAddress;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import fr.surviepote.nosingleplayer.NoSingleplayer;
|
||||
@@ -86,8 +84,9 @@ public abstract class TitleScreenMixin {
|
||||
|
||||
Button join = Button.builder(Component.literal("Rejoindre SurviePote"), pressed -> {
|
||||
ServerData data = new ServerData("SurviePote", SERVER_HOST, ServerData.Type.OTHER);
|
||||
ConnectScreen.startConnecting(self, minecraft, ServerAddress.parseString(SERVER_HOST), data, false,
|
||||
new TransferState(Map.of(), Map.of(), false));
|
||||
// TransferState null = connexion normale. En passer un déclenche une connexion
|
||||
// de type "transfert", que le serveur refuse ("This server does not accept transfers").
|
||||
ConnectScreen.startConnecting(self, minecraft, ServerAddress.parseString(SERVER_HOST), data, false, null);
|
||||
}).bounds(joinX, joinY, 200, 20).build();
|
||||
((ScreenAccessor) self).surviepote$getRenderables().add(join);
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"TitleScreenRenderMixin",
|
||||
"TitleScreenTextMixin",
|
||||
"RealmsNotificationsMixin",
|
||||
"PauseScreenMixin",
|
||||
"ScreenAccessor"
|
||||
],
|
||||
"injectors": {
|
||||
|
||||
Reference in New Issue
Block a user