Working Neoforge support

Yay!
This commit is contained in:
Martin Prokoph
2024-07-18 14:28:30 +02:00
parent 0d2bd6e4cb
commit da467619cb
11 changed files with 233 additions and 56 deletions

View File

@@ -21,10 +21,12 @@ import eu.midnightdust.midnightcontrols.client.controller.Controller;
import eu.midnightdust.midnightcontrols.client.controller.InputManager;
import eu.midnightdust.midnightcontrols.client.gui.MidnightControlsHud;
import eu.midnightdust.midnightcontrols.client.gui.RingScreen;
import eu.midnightdust.midnightcontrols.client.gui.TouchscreenOverlay;
import eu.midnightdust.midnightcontrols.client.mixin.KeyBindingIDAccessor;
import eu.midnightdust.midnightcontrols.client.ring.ButtonBindingRingAction;
import eu.midnightdust.midnightcontrols.client.ring.MidnightRing;
import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil;
import net.minecraft.client.gui.screen.Screen;
import org.thinkingstudio.obsidianui.hud.HudManager;
import eu.midnightdust.midnightcontrols.client.touch.TouchInput;
import eu.midnightdust.midnightcontrols.client.util.RainbowColor;
@@ -166,6 +168,7 @@ public class MidnightControlsClient extends MidnightControls {
public static void onTick(@NotNull MinecraftClient client) {
initKeybindings();
input.tick(client);
reacharound.tick(client);
if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput))
input.tickController(client);
@@ -183,6 +186,19 @@ public class MidnightControlsClient extends MidnightControls {
RainbowColor.tick();
TouchInput.tick();
}
/**
* Called when opening a screen.
*/
public static void onScreenOpen(Screen screen) {
if (screen == null && MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN) {
screen = new TouchscreenOverlay();
screen.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight());
client.skipGameRender = false;
client.currentScreen = screen;
} else if (screen != null) {
MidnightControlsClient.input.onScreenOpen(client, client.getWindow().getWidth(), client.getWindow().getHeight());
}
}
/**
* Called when leaving a server.

View File

@@ -10,6 +10,7 @@
package eu.midnightdust.midnightcontrols.client;
import com.google.common.collect.ImmutableSet;
import eu.midnightdust.lib.util.PlatformFunctions;
import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage;
import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.util.Pair;
@@ -35,7 +36,6 @@ import org.thinkingstudio.obsidianui.widget.SpruceElement;
import org.thinkingstudio.obsidianui.widget.SpruceLabelWidget;
import org.thinkingstudio.obsidianui.widget.container.SpruceParentWidget;
import eu.midnightdust.midnightcontrols.client.enums.ButtonState;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.ParentElement;
@@ -376,7 +376,7 @@ public class MidnightInput {
return;
}
}
else if (FabricLoader.getInstance().isModLoaded("libgui")) LibGuiCompat.handlePress(client.currentScreen);
else if (PlatformFunctions.isModLoaded("libgui")) LibGuiCompat.handlePress(client.currentScreen);
}
}
}
@@ -697,7 +697,7 @@ public class MidnightInput {
var childFocused = widget.getFocused();
if (childFocused != null)
return this.handleAButton(screen, childFocused);
} else if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib") && YACLCompat.handleAButton(screen, focused)) {
} else if (PlatformFunctions.isModLoaded("yet-another-config-lib") && YACLCompat.handleAButton(screen, focused)) {
return true;
}
else pressKeyboardKey(screen, GLFW_KEY_ENTER);
@@ -716,7 +716,7 @@ public class MidnightInput {
this.actionGuiCooldown = 5;
return false;
}
if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib") && YACLCompat.handleLeftRight(screen, right)) {
if (PlatformFunctions.isModLoaded("yet-another-config-lib") && YACLCompat.handleLeftRight(screen, right)) {
this.actionGuiCooldown = 5;
return false;
}

View File

@@ -4,6 +4,7 @@ import dev.architectury.injectables.annotations.ExpectPlatform;
import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
import net.minecraft.client.gui.widget.PressableWidget;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import org.jetbrains.annotations.NotNull;
@@ -15,9 +16,24 @@ public class ItemGroupUtil {
public static List<ItemGroup> getVisibleGroups(CreativeInventoryScreen screen) {
throw new AssertionError();
}
@ExpectPlatform
public static boolean cyclePage(boolean next, CreativeInventoryScreen screen) {
throw new AssertionError();
try {
return screen.children().stream().filter(element -> element instanceof PressableWidget)
.map(element -> (PressableWidget) element)
.filter(element -> element.getMessage() != null && element.getMessage().getContent() != null)
.anyMatch(element -> {
if (next && element.getMessage().getString().equals(">")) {
element.onPress();
return true;
} else if (element.getMessage().getString().equals("<")) {
element.onPress();
return true;
}
return false;
});
} catch (Exception ignored) {}
return false;
}
public static @NotNull ItemGroup cycleTab(boolean next, MinecraftClient client) {