1
0
forked from Clones/Controlify

Server selection screen controller compat

This commit is contained in:
isXander
2023-09-26 23:04:30 +01:00
parent 3b14cae35f
commit 291975505d
4 changed files with 42 additions and 9 deletions

View File

@ -14,7 +14,7 @@ public class JoinMultiplayerScreenMixin implements ScreenProcessorProvider {
@Shadow protected ServerSelectionList serverSelectionList; @Shadow protected ServerSelectionList serverSelectionList;
@Unique private final JoinMultiplayerScreenProcessor controlify$processor @Unique private final JoinMultiplayerScreenProcessor controlify$processor
= new JoinMultiplayerScreenProcessor((JoinMultiplayerScreen) (Object) this, serverSelectionList); = new JoinMultiplayerScreenProcessor((JoinMultiplayerScreen) (Object) this, () -> serverSelectionList);
@Override @Override
public ScreenProcessor<?> screenProcessor() { public ScreenProcessor<?> screenProcessor() {

View File

@ -260,8 +260,16 @@ public class ScreenProcessor<T extends Screen> {
return tree; return tree;
} }
protected final Optional<AbstractWidget> getWidget(Component message) {
return screen.children().stream()
.filter(child -> child instanceof AbstractWidget)
.map(AbstractWidget.class::cast)
.filter(widget -> widget.getMessage().equals(message))
.findAny();
}
protected final Optional<AbstractWidget> getWidget(String translationKey) { protected final Optional<AbstractWidget> getWidget(String translationKey) {
var translatedName = Component.translatable(translationKey).getString(); String translatedName = Component.translatable(translationKey).getString();
return screen.children().stream() return screen.children().stream()
.filter(child -> child instanceof AbstractWidget) .filter(child -> child instanceof AbstractWidget)

View File

@ -1,25 +1,50 @@
package dev.isxander.controlify.screenop.compat.vanilla; package dev.isxander.controlify.screenop.compat.vanilla;
import dev.isxander.controlify.api.buttonguide.ButtonGuideApi;
import dev.isxander.controlify.api.buttonguide.ButtonGuidePredicate;
import dev.isxander.controlify.api.buttonguide.ButtonRenderPosition;
import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.Controller;
import dev.isxander.controlify.screenop.ScreenProcessor; import dev.isxander.controlify.screenop.ScreenProcessor;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.AbstractButton;
import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;
import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList; import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList;
import net.minecraft.network.chat.CommonComponents;
import java.util.function.Supplier;
public class JoinMultiplayerScreenProcessor extends ScreenProcessor<JoinMultiplayerScreen> { public class JoinMultiplayerScreenProcessor extends ScreenProcessor<JoinMultiplayerScreen> {
private final ServerSelectionList list; private final Supplier<ServerSelectionList> listSupplier;
public JoinMultiplayerScreenProcessor(JoinMultiplayerScreen screen, ServerSelectionList list) { public JoinMultiplayerScreenProcessor(JoinMultiplayerScreen screen, Supplier<ServerSelectionList> listSupplier) {
super(screen); super(screen);
this.list = list; this.listSupplier = listSupplier;
} }
@Override @Override
protected void handleButtons(Controller<?, ?> controller) { protected void handleButtons(Controller<?, ?> controller) {
if (screen.getFocused() instanceof Button && controller.bindings().GUI_BACK.justPressed()) { if (controller.bindings().GUI_BACK.justPressed()) {
screen.setFocused(list); this.getWidget(CommonComponents.GUI_BACK).ifPresent(back -> {
if (!back.isFocused()) {
ServerSelectionList list = listSupplier.get();
list.setSelected(null);
list.setFocused(null);
screen.setFocused(back);
} else {
((AbstractButton) back).onPress();
}
});
} }
super.handleButtons(controller); super.handleButtons(controller);
} }
@Override
public void onWidgetRebuild() {
this.getWidget(CommonComponents.GUI_BACK).ifPresent(button -> {
ButtonGuideApi.addGuideToButton((AbstractButton) button, controller -> controller.bindings().GUI_BACK, ButtonRenderPosition.TEXT, ButtonGuidePredicate.ALWAYS);
});
super.onWidgetRebuild();
}
} }

View File

@ -13,6 +13,6 @@ public class ServerSelectionListEntryComponentProcessor implements ComponentProc
return true; return true;
} }
return true; return false;
} }
} }