Compare commits

..

5 Commits

Author SHA1 Message Date
Motschen
308b41094f MidnightControls 1.7.2 - Port to 1.19.3, various new options
- Update to 1.19.3 (Tabbing through creative tabs behaves the same as before, that was hard)
- Add an option to move the chat input field to the top of the screen for better input on devices using an on-screen keyboard
- Add an option to make the left joystick behave like a mouse in every screen
- Add a button to more easily access the Advanced Config
2022-12-09 20:02:59 +01:00
Martin Prokoph
bf7209083a Merge pull request #140 from eric122804/patch-1
Create zh_tw
2022-12-09 13:19:55 +00:00
eric122804
aa75a58a4d Create zh_tw 2022-12-07 20:30:51 +08:00
Motschen
1f675622f0 Use MidnightLib 22w43a version from Modrinth 2022-10-27 20:51:17 +02:00
Motschen
2d902bbf3c Port to 22w43a 2022-10-27 20:25:26 +02:00
19 changed files with 290 additions and 73 deletions

View File

@@ -1,5 +1,5 @@
plugins { plugins {
id 'fabric-loom' version '0.12-SNAPSHOT' id 'fabric-loom' version '1.0-SNAPSHOT'
id 'java-library' id 'java-library'
id 'maven-publish' id 'maven-publish'
id 'com.github.johnrengelman.shadow' version '7.0.0' id 'com.github.johnrengelman.shadow' version '7.0.0'
@@ -32,7 +32,7 @@ boolean isMCVersionNonRelease() {
} }
String getMCVersionString() { String getMCVersionString() {
if (isMCVersionNonRelease()) { if (isMCVersionNonRelease() || project.minecraft_version == "1.19.3") {
return project.minecraft_version return project.minecraft_version
} }
def version = project.minecraft_version.split('\\.') def version = project.minecraft_version.split('\\.')
@@ -102,7 +102,7 @@ dependencies {
} }
include 'org.aperlambda:lambdajcommon:1.8.1' include 'org.aperlambda:lambdajcommon:1.8.1'
modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" modCompileOnlyApi "com.terraformersmc:modmenu:${project.modmenu_version}"
// Compatibility mods // Compatibility mods
@@ -110,15 +110,15 @@ dependencies {
// modImplementation("maven.modrinth:ok-zoomer:${project.ok_zoomer_version}") // modImplementation("maven.modrinth:ok-zoomer:${project.ok_zoomer_version}")
// modImplementation "io.github.ennuil:LibZoomer:${project.libzoomer_version}" // modImplementation "io.github.ennuil:LibZoomer:${project.libzoomer_version}"
modImplementation "io.github.cottonmc:LibGui:${project.libgui_version}" modCompileOnlyApi "io.github.cottonmc:LibGui:${project.libgui_version}"
modImplementation "org.quiltmc:quilt-json5:1.0.0" modCompileOnlyApi "org.quiltmc:quilt-json5:1.0.0"
modCompileOnly "maven.modrinth:sodium:${project.sodium_version}" modCompileOnly "maven.modrinth:sodium:${project.sodium_version}"
modImplementation("maven.modrinth:emi:${project.emi_version}") modImplementation "maven.modrinth:emi:${project.emi_version}"
modImplementation "maven.modrinth:emotecraft:${project.emotecraft_version}" modCompileOnlyApi "maven.modrinth:emotecraft:${project.emotecraft_version}"
modImplementation "io.github.kosmx:bendy-lib:${project.bendylib_version}" modCompileOnlyApi "io.github.kosmx:bendy-lib:${project.bendylib_version}"
modImplementation "dev.isxander:yet-another-config-lib:${project.yacl_version}" modCompileOnlyApi "dev.isxander:yet-another-config-lib:${project.yacl_version}"
modImplementation "maven.modrinth:inventory-tabs-updated:${project.inventorytabs_version}" modCompileOnlyApi "maven.modrinth:inventory-tabs-updated:${project.inventorytabs_version}"
modImplementation "maven.modrinth:bedrockify:${project.bedrockify_version}" modCompileOnlyApi "maven.modrinth:bedrockify:${project.bedrockify_version}"
// Required for Inventory Tabs // Required for Inventory Tabs
modApi("me.shedaniel.cloth:cloth-config-fabric:${project.clothconfig_version}") { modApi("me.shedaniel.cloth:cloth-config-fabric:${project.clothconfig_version}") {
exclude(group: "net.fabricmc.fabric-api") exclude(group: "net.fabricmc.fabric-api")

View File

@@ -3,26 +3,26 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/use # check these on https://fabricmc.net/use
minecraft_version=1.19.2 minecraft_version=1.19.3
yarn_mappings=1.19.2+build.9 yarn_mappings=1.19.3+build.2
loader_version=0.14.9 loader_version=0.14.11
# Mod Properties # Mod Properties
mod_version = 1.7.1 mod_version = 1.7.2
maven_group = eu.midnightdust maven_group = eu.midnightdust
archives_base_name = midnightcontrols archives_base_name = midnightcontrols
modrinth_id=bXX9h73M modrinth_id=bXX9h73M
# Dependencies # Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_version=0.60.0+1.19.2 fabric_version=0.68.1+1.19.3
sodium_version=mc1.19.2-0.4.4 sodium_version=mc1.19.2-0.4.4
spruceui_version=4.0.0+1.19 spruceui_version=4.1.0+1.19.3
midnightlib_version=0.6.1 midnightlib_version=1.1.0-fabric
modmenu_version=4.0.6 modmenu_version=5.0.1
emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric
bendylib_version=2.0.+ bendylib_version=2.0.+
emi_version=0.4.0+1.19 emi_version=0.5.0+1.19.3
libgui_version=6.0.0+1.19 libgui_version=6.0.0+1.19
inventorytabs_version=inventorytabs-0.9.beta-1.19.x inventorytabs_version=inventorytabs-0.9.beta-1.19.x
clothconfig_version=7.0.72 clothconfig_version=7.0.72

View File

@@ -41,6 +41,7 @@ public class MidnightControlsConfig extends MidnightConfig {
// HUD // HUD
@Entry(name = "midnightcontrols.menu.hud_enable") public static boolean hudEnable = true; @Entry(name = "midnightcontrols.menu.hud_enable") public static boolean hudEnable = true;
@Entry(name = "midnightcontrols.menu.hud_side") public static HudSide hudSide = HudSide.LEFT; @Entry(name = "midnightcontrols.menu.hud_side") public static HudSide hudSide = HudSide.LEFT;
@Entry(name = "midnightcontrols.menu.move_chat") public static boolean moveChat = false;
// Gameplay // Gameplay
@Entry(name = "midnightcontrols.menu.analog_movement") public static boolean analogMovement = true; @Entry(name = "midnightcontrols.menu.analog_movement") public static boolean analogMovement = true;
@Entry(name = "midnightcontrols.menu.double_tap_to_sprint") public static boolean doubleTapToSprint = true; @Entry(name = "midnightcontrols.menu.double_tap_to_sprint") public static boolean doubleTapToSprint = true;
@@ -61,6 +62,7 @@ public class MidnightControlsConfig extends MidnightConfig {
@Entry(name = "midnightcontrols.menu.rotation_speed") public static double rotationSpeed = 40.0; //used for x-axis, name kept for compatability @Entry(name = "midnightcontrols.menu.rotation_speed") public static double rotationSpeed = 40.0; //used for x-axis, name kept for compatability
@Entry(name = "midnightcontrols.menu.y_axis_rotation_speed") public static double yAxisRotationSpeed = rotationSpeed; @Entry(name = "midnightcontrols.menu.y_axis_rotation_speed") public static double yAxisRotationSpeed = rotationSpeed;
@Entry(name = "midnightcontrols.menu.mouse_speed") public static double mouseSpeed = 25.0; @Entry(name = "midnightcontrols.menu.mouse_speed") public static double mouseSpeed = 25.0;
@Entry(name = "midnightcontrols.menu.joystick_as_mouse") public static boolean joystickAsMouse = false;
@Entry(name = "midnightcontrols.menu.unfocused_input") public static boolean unfocusedInput = false; @Entry(name = "midnightcontrols.menu.unfocused_input") public static boolean unfocusedInput = false;
@Entry(name = "midnightcontrols.menu.virtual_mouse") public static boolean virtualMouse = false; @Entry(name = "midnightcontrols.menu.virtual_mouse") public static boolean virtualMouse = false;
@Entry(name = "midnightcontrols.menu.virtual_mouse.skin") public static VirtualMouseSkin virtualMouseSkin = VirtualMouseSkin.DEFAULT_LIGHT; @Entry(name = "midnightcontrols.menu.virtual_mouse.skin") public static VirtualMouseSkin virtualMouseSkin = VirtualMouseSkin.DEFAULT_LIGHT;
@@ -350,7 +352,7 @@ public class MidnightControlsConfig extends MidnightConfig {
else if (controller.contains("xbox") || controller.contains("afterglow")) return ControllerType.XBOX; else if (controller.contains("xbox") || controller.contains("afterglow")) return ControllerType.XBOX;
else if (controller.contains("steam deck")) return ControllerType.STEAM_DECK; else if (controller.contains("steam deck")) return ControllerType.STEAM_DECK;
else if (controller.contains("steam")) return ControllerType.STEAM_CONTROLLER; else if (controller.contains("steam")) return ControllerType.STEAM_CONTROLLER;
else if (controller.contains("dualsense")) return ControllerType.DUALSENSE; else if (controller.contains("dualsense") || controller.contains("ps5")) return ControllerType.DUALSENSE;
else if (controller.contains("dualshock") || controller.contains("ps4") || controller.contains("sony")) return ControllerType.DUALSHOCK; else if (controller.contains("dualshock") || controller.contains("ps4") || controller.contains("sony")) return ControllerType.DUALSHOCK;
else if (controller.contains("switch") || controller.contains("joy-con") || controller.contains("wii") || controller.contains("nintendo")) return ControllerType.SWITCH; else if (controller.contains("switch") || controller.contains("joy-con") || controller.contains("wii") || controller.contains("nintendo")) return ControllerType.SWITCH;
else if (controller.contains("ouya")) return ControllerType.OUYA; else if (controller.contains("ouya")) return ControllerType.OUYA;

View File

@@ -858,7 +858,7 @@ public class MidnightInput {
} }
public static boolean isScreenInteractive(@NotNull Screen screen) { public static boolean isScreenInteractive(@NotNull Screen screen) {
return !(screen instanceof HandledScreen || MidnightControlsConfig.mouseScreens.stream().anyMatch(a -> screen.getClass().toString().contains(a)) return !(screen instanceof HandledScreen || MidnightControlsConfig.joystickAsMouse || MidnightControlsConfig.mouseScreens.stream().anyMatch(a -> screen.getClass().toString().contains(a))
|| (screen instanceof SpruceScreen && ((SpruceScreen) screen).requiresCursor()) || (screen instanceof SpruceScreen && ((SpruceScreen) screen).requiresCursor())
|| MidnightControlsCompat.requireMouseOnScreen(screen)); || MidnightControlsCompat.requireMouseOnScreen(screen));
} }

View File

@@ -1,6 +1,6 @@
package eu.midnightdust.midnightcontrols.client.compat; package eu.midnightdust.midnightcontrols.client.compat;
import dev.emi.emi.EmiConfig; import dev.emi.emi.config.EmiConfig;
import dev.emi.emi.screen.EmiScreen; import dev.emi.emi.screen.EmiScreen;
import dev.emi.emi.screen.EmiScreenManager; import dev.emi.emi.screen.EmiScreenManager;
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
@@ -14,9 +14,9 @@ import org.lwjgl.glfw.GLFW;
public class EMICompat implements CompatHandler { public class EMICompat implements CompatHandler {
public static boolean handleTabs(boolean direction) { public static boolean handleTabs(boolean direction) {
if (isEMIEnabled() && MidnightControlsClient.get().input.actionGuiCooldown == 0 && EmiScreenManager.searchLeft != null && EmiScreenManager.searchRight != null) { if (isEMIEnabled() && MidnightControlsClient.get().input.actionGuiCooldown == 0 && EmiScreenManager.getSearchPanel() != null && EmiScreenManager.getSearchPanel().pageLeft != null && EmiScreenManager.getSearchPanel().pageRight != null) {
if (direction) EmiScreenManager.searchRight.onPress(); if (direction) EmiScreenManager.getSearchPanel().pageRight.onPress();
else EmiScreenManager.searchLeft.onPress(); else EmiScreenManager.getSearchPanel().pageLeft.onPress();
MidnightControlsClient.get().input.actionGuiCooldown = 5; MidnightControlsClient.get().input.actionGuiCooldown = 5;
return true; return true;
} }

View File

@@ -22,18 +22,20 @@ import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAcce
import eu.midnightdust.midnightcontrols.client.mixin.RecipeBookWidgetAccessor; import eu.midnightdust.midnightcontrols.client.mixin.RecipeBookWidgetAccessor;
import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor; import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor;
import eu.midnightdust.midnightcontrols.client.util.MouseAccessor; import eu.midnightdust.midnightcontrols.client.util.MouseAccessor;
import net.fabricmc.fabric.impl.client.itemgroup.CreativeGuiExtensions;
import net.fabricmc.fabric.impl.client.itemgroup.FabricCreativeGuiComponents;
import net.fabricmc.fabric.impl.itemgroup.FabricItemGroup;
import net.fabricmc.fabric.impl.itemgroup.ItemGroupHelper;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.hud.SpectatorHud;
import net.minecraft.client.gui.hud.spectator.SpectatorMenu;
import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen; import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
import net.minecraft.client.gui.screen.ingame.*; import net.minecraft.client.gui.screen.ingame.*;
import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
import net.minecraft.client.gui.widget.PressableWidget; import net.minecraft.client.gui.widget.PressableWidget;
import net.minecraft.client.input.Input;
import net.minecraft.client.util.ScreenshotRecorder; import net.minecraft.client.util.ScreenshotRecorder;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType; import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@@ -42,9 +44,9 @@ import org.jetbrains.annotations.NotNull;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import java.util.Comparator; import java.util.Comparator;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors;
import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_2; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_2;
@@ -56,9 +58,17 @@ import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_2;
* @version 1.7.0 * @version 1.7.0
* @since 1.1.0 * @since 1.1.0
*/ */
@SuppressWarnings("UnstableApiUsage")
public class InputHandlers { public class InputHandlers {
private InputHandlers() { private InputHandlers() {
} }
private static List<ItemGroup> getVisibleGroups(CreativeInventoryScreen screen) {
return ItemGroupHelper.sortedGroups.stream()
.filter(itemGroup -> {
if (FabricCreativeGuiComponents.COMMON_GROUPS.contains(itemGroup)) return true;
return ((CreativeGuiExtensions)screen).fabric_currentPage() == ((FabricItemGroup)itemGroup).getPage() && itemGroup.shouldDisplay() && (!itemGroup.equals(ItemGroups.OPERATOR) || ItemGroups.operatorEnabled);
}).toList();
}
public static PressAction handleHotbar(boolean next) { public static PressAction handleHotbar(boolean next) {
return (client, button, value, action) -> { return (client, button, value, action) -> {
@@ -85,13 +95,31 @@ public class InputHandlers {
} else if (client.currentScreen instanceof RingScreen) { } else if (client.currentScreen instanceof RingScreen) {
MidnightControlsClient.get().ring.cyclePage(next); MidnightControlsClient.get().ring.cyclePage(next);
} else if (client.currentScreen instanceof CreativeInventoryScreenAccessor inventory) { } else if (client.currentScreen instanceof CreativeInventoryScreenAccessor inventory) {
int currentTab = CreativeInventoryScreenAccessor.getSelectedTab(); ItemGroup currentTab = CreativeInventoryScreenAccessor.getSelectedTab();
int nextTab = currentTab + (next ? 1 : -1); int currentColumn = currentTab.getColumn();
if (nextTab < 0) ItemGroup.Row currentRow = currentTab.getRow();
nextTab = ItemGroup.GROUPS.length - 1; ItemGroup newTab = null;
else if (nextTab >= ItemGroup.GROUPS.length) List<ItemGroup> visibleTabs = getVisibleGroups((CreativeInventoryScreen) client.currentScreen);
nextTab = 0; for (ItemGroup tab : visibleTabs) {
inventory.midnightcontrols$setSelectedTab(ItemGroup.GROUPS[nextTab]); if (tab.getRow().equals(currentRow) && ((newTab == null && ((next && tab.getColumn() > currentColumn) ||
(!next && tab.getColumn() < currentColumn))) || (newTab != null && ((next && tab.getColumn() > currentColumn && tab.getColumn() < newTab.getColumn()) ||
(!next && tab.getColumn() < currentColumn && tab.getColumn() > newTab.getColumn())))))
newTab = tab;
}
if (newTab == null)
for (ItemGroup tab : visibleTabs) {
if ((tab.getRow().compareTo(currentRow)) != 0 && ((next && newTab == null || next && newTab.getColumn() > tab.getColumn()) || (!next && newTab == null) || (!next && newTab.getColumn() < tab.getColumn())))
newTab = tab;
}
if (newTab == null) {
for (ItemGroup tab : visibleTabs) {
if ((next && tab.getRow() == ItemGroup.Row.TOP && tab.getColumn() == 0) ||
!next && tab.getRow() == ItemGroup.Row.BOTTOM && (newTab == null || tab.getColumn() > newTab.getColumn()))
newTab = tab;
}
}
if (newTab == null || newTab.equals(currentTab)) newTab = ItemGroups.getDefaultTab();
inventory.midnightcontrols$setSelectedTab(newTab);
return true; return true;
} else if (client.currentScreen instanceof InventoryScreen || client.currentScreen instanceof CraftingScreen || client.currentScreen instanceof AbstractFurnaceScreen<?>) { } else if (client.currentScreen instanceof InventoryScreen || client.currentScreen instanceof CraftingScreen || client.currentScreen instanceof AbstractFurnaceScreen<?>) {
RecipeBookWidget recipeBook; RecipeBookWidget recipeBook;

View File

@@ -38,7 +38,7 @@ import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.math.Matrix4f; import org.joml.Matrix4f;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import java.awt.*; import java.awt.*;
@@ -57,8 +57,10 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
private final SpruceOption rotationSpeedOption; private final SpruceOption rotationSpeedOption;
private final SpruceOption yAxisRotationSpeedOption; private final SpruceOption yAxisRotationSpeedOption;
private final SpruceOption mouseSpeedOption; private final SpruceOption mouseSpeedOption;
private final SpruceOption joystickAsMouseOption;
private final SpruceOption virtualMouseOption; private final SpruceOption virtualMouseOption;
private final SpruceOption resetOption; private final SpruceOption resetOption;
private final SpruceOption advancedConfigOption;
// Gameplay options // Gameplay options
private final SpruceOption analogMovementOption; private final SpruceOption analogMovementOption;
private final SpruceOption doubleTapToSprintOption; private final SpruceOption doubleTapToSprintOption;
@@ -75,6 +77,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
private final SpruceOption virtualMouseSkinOption; private final SpruceOption virtualMouseSkinOption;
private final SpruceOption hudEnableOption; private final SpruceOption hudEnableOption;
private final SpruceOption hudSideOption; private final SpruceOption hudSideOption;
private final SpruceOption moveChatOption;
// Controller options // Controller options
private final SpruceOption controllerOption = private final SpruceOption controllerOption =
new SpruceCyclingOption("midnightcontrols.menu.controller", new SpruceCyclingOption("midnightcontrols.menu.controller",
@@ -184,12 +187,16 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
this.mouseSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.mouse_speed", 0.0, 150.0, .5f, this.mouseSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.mouse_speed", 0.0, 150.0, .5f,
() -> MidnightControlsConfig.mouseSpeed, () -> MidnightControlsConfig.mouseSpeed,
value -> MidnightControlsConfig.mouseSpeed = value, option -> option.getDisplayText(Text.literal(String.valueOf(option.get()))), value -> MidnightControlsConfig.mouseSpeed = value, option -> option.getDisplayText(Text.literal(String.valueOf(option.get()))),
Text.translatable("midnightcontrols.tooltip.mouse_speed")); Text.translatable("midnightcontrols.tooltip.joystick_as_mouse"));
this.joystickAsMouseOption = new SpruceToggleBooleanOption("midnightcontrols.menu.joystick_as_mouse",
() -> MidnightControlsConfig.joystickAsMouse, value -> MidnightControlsConfig.joystickAsMouse = value,
Text.translatable("midnightcontrols.tooltip.joystick_as_mouse"));
this.resetOption = SpruceSimpleActionOption.reset(btn -> { this.resetOption = SpruceSimpleActionOption.reset(btn -> {
MidnightControlsConfig.reset(); MidnightControlsConfig.reset();
var client = MinecraftClient.getInstance(); var client = MinecraftClient.getInstance();
this.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); this.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight());
}); });
this.advancedConfigOption = SpruceSimpleActionOption.of("midnightcontrols.midnightconfig.title", button -> client.setScreen(MidnightControlsConfig.getScreen(this, "midnightcontrols")));
// Gameplay options // Gameplay options
this.analogMovementOption = new SpruceToggleBooleanOption("midnightcontrols.menu.analog_movement", this.analogMovementOption = new SpruceToggleBooleanOption("midnightcontrols.menu.analog_movement",
() -> MidnightControlsConfig.analogMovement, value -> MidnightControlsConfig.analogMovement = value, () -> MidnightControlsConfig.analogMovement, value -> MidnightControlsConfig.analogMovement = value,
@@ -232,6 +239,8 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
amount -> MidnightControlsConfig.hudSide = MidnightControlsConfig.hudSide.next(), amount -> MidnightControlsConfig.hudSide = MidnightControlsConfig.hudSide.next(),
option -> option.getDisplayText(MidnightControlsConfig.hudSide.getTranslatedText()), option -> option.getDisplayText(MidnightControlsConfig.hudSide.getTranslatedText()),
Text.translatable("midnightcontrols.tooltip.hud_side")); Text.translatable("midnightcontrols.tooltip.hud_side"));
this.moveChatOption = new SpruceToggleBooleanOption("midnightcontrols.menu.move_chat", () -> MidnightControlsConfig.moveChat,
value -> MidnightControlsConfig.moveChat = value, Text.translatable("midnightcontrols.tooltip.move_chat"));
// Controller options // Controller options
this.toggleControllerProfileOption = new SpruceToggleBooleanOption("midnightcontrols.menu.separate_controller_profile", () -> MidnightControlsConfig.controllerBindingProfiles.containsKey(MidnightControlsConfig.getController().getGuid()), value -> { this.toggleControllerProfileOption = new SpruceToggleBooleanOption("midnightcontrols.menu.separate_controller_profile", () -> MidnightControlsConfig.controllerBindingProfiles.containsKey(MidnightControlsConfig.getController().getGuid()), value -> {
if (value) { if (value) {
@@ -290,8 +299,8 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
this.buildTabs(); this.buildTabs();
this.addDrawableChild(this.resetOption.createWidget(Position.of(this.width / 2 - 155, this.height - 29), 150)); this.addDrawableChild(this.resetOption.createWidget(Position.of(this.width / 2 - 155, this.height - 29), 150));
this.addDrawableChild(new ButtonWidget(this.width / 2 - 155 + 160, this.height - 29, 150, 20, SpruceTexts.GUI_DONE, this.addDrawableChild(ButtonWidget.builder(SpruceTexts.GUI_DONE, btn -> this.client.setScreen(this.parent))
btn -> this.client.setScreen(this.parent))); .dimensions(this.width / 2 - 155 + 160, this.height - 29, 150, 20).build());
} }
public void buildTabs() { public void buildTabs() {
@@ -329,6 +338,8 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
list.addSingleOptionEntry(this.yAxisRotationSpeedOption); list.addSingleOptionEntry(this.yAxisRotationSpeedOption);
list.addSingleOptionEntry(this.mouseSpeedOption); list.addSingleOptionEntry(this.mouseSpeedOption);
list.addSingleOptionEntry(this.virtualMouseOption); list.addSingleOptionEntry(this.virtualMouseOption);
list.addSingleOptionEntry(this.joystickAsMouseOption);
list.addSingleOptionEntry(this.advancedConfigOption);
return list; return list;
} }
@@ -356,6 +367,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
list.addSingleOptionEntry(new SpruceSeparatorOption("midnightcontrols.menu.title.hud", true, null)); list.addSingleOptionEntry(new SpruceSeparatorOption("midnightcontrols.menu.title.hud", true, null));
list.addSingleOptionEntry(this.hudEnableOption); list.addSingleOptionEntry(this.hudEnableOption);
list.addSingleOptionEntry(this.hudSideOption); list.addSingleOptionEntry(this.hudSideOption);
list.addSingleOptionEntry(this.moveChatOption);
return list; return list;
} }
@@ -437,13 +449,13 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.disableTexture(); RenderSystem.disableTexture();
RenderSystem.defaultBlendFunc(); RenderSystem.defaultBlendFunc();
RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.setShader(GameRenderer::getPositionColorProgram);
bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t).next(); bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t).next();
bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t).next(); bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t).next();
bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t).next(); bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t).next();
bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t).next(); bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t).next();
BufferRenderer.drawWithShader(bufferBuilder.end()); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
RenderSystem.enableTexture(); RenderSystem.enableTexture();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
matrixStack.pop(); matrixStack.pop();

View File

@@ -10,7 +10,6 @@
package eu.midnightdust.midnightcontrols.client.gui; package eu.midnightdust.midnightcontrols.client.gui;
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
import eu.midnightdust.midnightcontrols.client.ring.MidnightRing;
import eu.midnightdust.midnightcontrols.client.ring.RingButtonMode; import eu.midnightdust.midnightcontrols.client.ring.RingButtonMode;
import eu.midnightdust.midnightcontrols.client.ring.RingPage; import eu.midnightdust.midnightcontrols.client.ring.RingPage;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
@@ -37,8 +36,8 @@ public class RingScreen extends Screen {
protected void init() { protected void init() {
super.init(); super.init();
if (mod.ring.getMaxPages() > 1) { if (mod.ring.getMaxPages() > 1) {
this.addDrawableChild(new ButtonWidget(5, 5, 20, 20, Text.of(""), button -> this.mod.ring.cyclePage(false))); this.addDrawableChild(ButtonWidget.builder(Text.of(""), button -> this.mod.ring.cyclePage(false)).dimensions(5, 5, 20, 20).build());
this.addDrawableChild(new ButtonWidget(width - 25, 5, 20, 20, Text.of(""), button -> this.mod.ring.cyclePage(true))); this.addDrawableChild(ButtonWidget.builder(Text.of(""), button -> this.mod.ring.cyclePage(true)).dimensions(width - 25, 5, 20, 20).build());
} }
} }

View File

@@ -0,0 +1,35 @@
package eu.midnightdust.midnightcontrols.client.mixin;
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ChatScreen.class)
public abstract class ChatScreenMixin extends Screen {
@Shadow protected TextFieldWidget chatField;
protected ChatScreenMixin(Text title) {
super(title);
}
@Inject(at = @At("TAIL"), method = "init")
private void midnightcontrols$moveInputField(CallbackInfo ci) {
if (MidnightControlsConfig.moveChat) chatField.setY(4);
}
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TextFieldWidget;setTextFieldFocused(Z)V", shift = At.Shift.AFTER))
private void midnightcontrols$moveInputFieldBackground(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (MidnightControlsConfig.moveChat) matrices.translate(0f, -this.height + 16, 0f);
}
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TextFieldWidget;render(Lnet/minecraft/client/util/math/MatrixStack;IIF)V", shift = At.Shift.BEFORE))
private void midnightcontrols$dontMoveOtherStuff(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (MidnightControlsConfig.moveChat) matrices.translate(0f, this.height - 16, 0f);
}
}

View File

@@ -38,8 +38,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity { public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity {
private boolean midnightcontrols$driftingPrevented = false; private boolean midnightcontrols$driftingPrevented = false;
public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile, @Nullable PlayerPublicKey publicKey) { public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) {
super(world, profile, publicKey); super(world, profile);
} }
@Shadow @Shadow

View File

@@ -11,16 +11,13 @@ package eu.midnightdust.midnightcontrols.client.mixin;
import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget; import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget;
import eu.midnightdust.midnightcontrols.client.gui.MidnightControlsSettingsScreen; import eu.midnightdust.midnightcontrols.client.gui.MidnightControlsSettingsScreen;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.option.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen;
import net.minecraft.client.gui.screen.option.GameOptionsScreen; import net.minecraft.client.gui.screen.option.GameOptionsScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.option.GameOptions; import net.minecraft.client.option.GameOptions;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -30,27 +27,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
*/ */
@Mixin(ControlsOptionsScreen.class) @Mixin(ControlsOptionsScreen.class)
public abstract class ControlsOptionsScreenMixin extends GameOptionsScreen { public abstract class ControlsOptionsScreenMixin extends GameOptionsScreen {
@Unique private final boolean showAlternativeButton = FabricLoader.getInstance().isModLoaded("crawl");
public ControlsOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text text) { public ControlsOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text text) {
super(parent, gameOptions, text); super(parent, gameOptions, text);
} }
@Inject(method = "init", at = @At(value = "INVOKE", ordinal = 1, shift = At.Shift.AFTER, target = "Lnet/minecraft/client/gui/screen/option/ControlsOptionsScreen;addDrawableChild(Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element;")) @Inject(method = "init", at = @At(value = "INVOKE", ordinal = 1, shift = At.Shift.AFTER, target = "Lnet/minecraft/client/gui/screen/option/ControlsOptionsScreen;addDrawableChild(Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element;"))
private void addAlternativeControllerButton(CallbackInfo ci) {
if (showAlternativeButton) {
this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 + 158, this.height / 6 - 12, 20, 20,0,0,20, new Identifier("midnightcontrols", "textures/gui/midnightcontrols_button.png"), 32, 64, (button) -> {
this.client.setScreen(new MidnightControlsSettingsScreen(this, false));
}, Text.translatable("midnightcontrols.menu.title.controller")));
}
}
@Inject(method = "init", at = @At(value = "INVOKE", ordinal = 4, shift = At.Shift.AFTER, target = "Lnet/minecraft/client/gui/screen/option/ControlsOptionsScreen;addDrawableChild(Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element;"))
private void addControllerButton(CallbackInfo ci) { private void addControllerButton(CallbackInfo ci) {
if (!showAlternativeButton) { this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 + 158, this.height / 6 - 12, 20, 20,0,0,20, new Identifier("midnightcontrols", "textures/gui/midnightcontrols_button.png"), 32, 64, (button) -> {
int i = this.width / 2 - 155; this.client.setScreen(new MidnightControlsSettingsScreen(this, false));
int j = i + 160; }, Text.translatable("midnightcontrols.menu.title.controller")));
int k = this.height / 6 - 12 + 48;
this.addDrawableChild(new ButtonWidget(j, k, 150, 20, Text.translatable("midnightcontrols.menu.title.controller").append("..."), (button) -> {
this.client.setScreen(new MidnightControlsSettingsScreen(this, false));
}));
}
} }
} }

View File

@@ -11,6 +11,7 @@ package eu.midnightdust.midnightcontrols.client.mixin;
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.Slot;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -29,8 +30,8 @@ public interface CreativeInventoryScreenAccessor {
* @return the selected tab index * @return the selected tab index
*/ */
@Accessor("selectedTab") @Accessor("selectedTab")
static int getSelectedTab() { static ItemGroup getSelectedTab() {
return 0; return ItemGroups.getDefaultTab();
} }
/** /**

View File

@@ -22,8 +22,8 @@ import net.minecraft.item.ItemPlacementContext;
import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.hit.HitResult; import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShape;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;

View File

@@ -140,6 +140,7 @@
"midnightcontrols.menu.hud_side": "HUD Side", "midnightcontrols.menu.hud_side": "HUD Side",
"midnightcontrols.menu.invert_right_x_axis": "Invert Right X", "midnightcontrols.menu.invert_right_x_axis": "Invert Right X",
"midnightcontrols.menu.invert_right_y_axis": "Invert Right Y", "midnightcontrols.menu.invert_right_y_axis": "Invert Right Y",
"midnightcontrols.menu.joystick_as_mouse": "Always use left stick as mouse",
"midnightcontrols.menu.keyboard_controls": "Keyboard Controls...", "midnightcontrols.menu.keyboard_controls": "Keyboard Controls...",
"midnightcontrols.menu.left_dead_zone": "Left Stick Dead Zone", "midnightcontrols.menu.left_dead_zone": "Left Stick Dead Zone",
"midnightcontrols.menu.mappings.open_input_str": "Open Mappings File Editor", "midnightcontrols.menu.mappings.open_input_str": "Open Mappings File Editor",
@@ -148,6 +149,7 @@
"midnightcontrols.menu.max_right_x_value": "Right X Axis Max Value", "midnightcontrols.menu.max_right_x_value": "Right X Axis Max Value",
"midnightcontrols.menu.max_right_y_value": "Right Y Axis Max Value", "midnightcontrols.menu.max_right_y_value": "Right Y Axis Max Value",
"midnightcontrols.menu.mouse_speed": "Mouse Speed", "midnightcontrols.menu.mouse_speed": "Mouse Speed",
"midnightcontrols.menu.move_chat": "Move chat input box to top",
"midnightcontrols.menu.reacharound.horizontal": "Front Block Placing", "midnightcontrols.menu.reacharound.horizontal": "Front Block Placing",
"midnightcontrols.menu.reacharound.vertical": "Vertical Reacharound", "midnightcontrols.menu.reacharound.vertical": "Vertical Reacharound",
"midnightcontrols.menu.reload_controller_mappings": "Reload Controller Mappings", "midnightcontrols.menu.reload_controller_mappings": "Reload Controller Mappings",
@@ -181,12 +183,14 @@
"midnightcontrols.tooltip.fly_drifting_vertical": "While flying, enables Vanilla vertical drifting/intertia.", "midnightcontrols.tooltip.fly_drifting_vertical": "While flying, enables Vanilla vertical drifting/intertia.",
"midnightcontrols.tooltip.hud_enable": "Toggles the on-screen controller button indicator.", "midnightcontrols.tooltip.hud_enable": "Toggles the on-screen controller button indicator.",
"midnightcontrols.tooltip.hud_side": "The position of the HUD.", "midnightcontrols.tooltip.hud_side": "The position of the HUD.",
"midnightcontrols.tooltip.joystick_as_mouse": "Make the joystick behave like a mouse in every menu.",
"midnightcontrols.tooltip.left_dead_zone": "The dead zone for the controller's left analog stick.", "midnightcontrols.tooltip.left_dead_zone": "The dead zone for the controller's left analog stick.",
"midnightcontrols.tooltip.max_left_x_value": "Changes what the mod considers the highest value for the left X axis. Useful if your axis does not use the full range and seems slow.", "midnightcontrols.tooltip.max_left_x_value": "Changes what the mod considers the highest value for the left X axis. Useful if your axis does not use the full range and seems slow.",
"midnightcontrols.tooltip.max_left_y_value": "Changes what the mod considers the highest value for the left Y axis. Useful if your axis does not use the full range and seems slow.", "midnightcontrols.tooltip.max_left_y_value": "Changes what the mod considers the highest value for the left Y axis. Useful if your axis does not use the full range and seems slow.",
"midnightcontrols.tooltip.max_right_x_value": "Changes what the mod considers the highest value for the right X axis. Useful if your axis does not use the full range and seems slow.", "midnightcontrols.tooltip.max_right_x_value": "Changes what the mod considers the highest value for the right X axis. Useful if your axis does not use the full range and seems slow.",
"midnightcontrols.tooltip.max_right_y_value": "Changes what the mod considers the highest value for the right Y axis. Useful if your axis does not use the full range and seems slow.", "midnightcontrols.tooltip.max_right_y_value": "Changes what the mod considers the highest value for the right Y axis. Useful if your axis does not use the full range and seems slow.",
"midnightcontrols.tooltip.mouse_speed": "The controller's emulated mouse speed.", "midnightcontrols.tooltip.mouse_speed": "The controller's emulated mouse speed.",
"midnightcontrols.tooltip.move_chat": "Moves the chat input field to the top, for better input on devices with on-screen keyboards.",
"midnightcontrols.tooltip.reacharound.horizontal": "Enables front block placing, §cmight be considered cheating on some servers§r.", "midnightcontrols.tooltip.reacharound.horizontal": "Enables front block placing, §cmight be considered cheating on some servers§r.",
"midnightcontrols.tooltip.reacharound.vertical": "Enables vertical reacharound, §cmight be considered cheating on some servers§r.", "midnightcontrols.tooltip.reacharound.vertical": "Enables vertical reacharound, §cmight be considered cheating on some servers§r.",
"midnightcontrols.tooltip.reload_controller_mappings": "Reloads the controller mappings file.", "midnightcontrols.tooltip.reload_controller_mappings": "Reloads the controller mappings file.",

View File

@@ -0,0 +1,152 @@
{
"key.midnightcontrols.look_down": "視角下移",
"key.midnightcontrols.look_left": "視角左移",
"key.midnightcontrols.look_right": "視角右移",
"key.midnightcontrols.look_up": "視角上移",
"key.midnightcontrols.ring": "顯示額外按鍵菜單",
"midnightcontrols.action.attack": "攻擊",
"midnightcontrols.action.back": "向後移動",
"midnightcontrols.action.chat": "打開聊天欄",
"midnightcontrols.action.drop_item": "丟棄所選物品",
"midnightcontrols.action.exit": "退出",
"midnightcontrols.action.forward": "向前移動",
"midnightcontrols.action.hit": "挖掘",
"midnightcontrols.action.hotbar_left": "向左循環選擇快捷欄",
"midnightcontrols.action.hotbar_right": "向右循環選擇快捷欄",
"midnightcontrols.action.inventory": "物品欄",
"midnightcontrols.action.jump": "跳躍",
"midnightcontrols.action.left": "向左移動",
"midnightcontrols.action.pause_game": "暫停遊戲",
"midnightcontrols.action.pick_block": "選取方塊",
"midnightcontrols.action.pickup": "拿取一個/拿取一半",
"midnightcontrols.action.pickup_all": "拿取一組/拿取全部",
"midnightcontrols.action.place": "放置方塊",
"midnightcontrols.action.player_list": "玩家列表",
"midnightcontrols.action.quick_move": "快速移動物品",
"midnightcontrols.action.right": "向右移動",
"midnightcontrols.action.screenshot": "截圖",
"midnightcontrols.action.sneak": "潛行",
"midnightcontrols.action.sprint": "疾跑",
"midnightcontrols.action.swap_hands": "與副手交換",
"midnightcontrols.action.toggle_perspective": "切換視角",
"midnightcontrols.action.toggle_smooth_camera": "切換電影視角",
"midnightcontrols.action.use": "使用物品/放置方塊",
"midnightcontrols.action.zoom": "視野縮放",
"midnightcontrols.action.zoom_in": "縮放時將視野推近",
"midnightcontrols.action.zoom_out": "縮放時將視野拉遠",
"midnightcontrols.action.zoom_reset": "縮放時重置縮放距離",
"midnightcontrols.button.a": "A",
"midnightcontrols.button.b": "B",
"midnightcontrols.button.x": "X",
"midnightcontrols.button.y": "Y",
"midnightcontrols.button.left_bumper": "LB 鍵",
"midnightcontrols.button.right_bumper": "RB 鍵",
"midnightcontrols.button.back": "選擇鍵",
"midnightcontrols.button.start": "開始鍵",
"midnightcontrols.button.guide": "功能鍵",
"midnightcontrols.button.left_thumb": "左搖桿(按壓)",
"midnightcontrols.button.right_thumb": "右搖桿(按壓)",
"midnightcontrols.button.dpad_up": "十字鍵上",
"midnightcontrols.button.dpad_right": "十字鍵右",
"midnightcontrols.button.dpad_down": "十字鍵下",
"midnightcontrols.button.dpad_left": "十字鍵左",
"midnightcontrols.axis.left_x+": "左搖桿右X軸正向",
"midnightcontrols.axis.left_y+": "左搖桿上Y軸正向",
"midnightcontrols.axis.right_x+": "右搖桿右X軸正向",
"midnightcontrols.axis.right_y+": "右搖桿上Y軸正向",
"midnightcontrols.axis.left_trigger": "左扳機鍵",
"midnightcontrols.axis.right_trigger": "右扳機鍵",
"midnightcontrols.axis.left_x-": "左搖桿左X軸負向",
"midnightcontrols.axis.left_y-": "左搖桿下Y軸負向",
"midnightcontrols.axis.right_x-": "右搖桿左X軸負向",
"midnightcontrols.axis.right_y-": "右搖桿下Y軸負向",
"midnightcontrols.button.unknown": "未知(%d",
"midnightcontrols.controller.connected": "手把 %d 已連接。",
"midnightcontrols.controller.disconnected": "手把 %d 已斷開。",
"midnightcontrols.controller.mappings.1": "請使用 %s 配置手把按鍵映射",
"midnightcontrols.controller.mappings.3": "並將按鍵映射文件放入此路徑:`%s.minecraft/config/gamecontrollerdb.txt%s`。",
"midnightcontrols.controller.mappings.error": "發生錯誤,無法讀取按鍵映射文件。",
"midnightcontrols.controller.mappings.error.write": "發生錯誤,無法保存按鍵映射文件。",
"midnightcontrols.controller.mappings.updated": "按鍵映射已更新!",
"midnightcontrols.controller_type.default": "默認",
"midnightcontrols.controller_type.dualshock": "DualShock",
"midnightcontrols.controller_type.switch": "Switch",
"midnightcontrols.controller_type.xbox": "Xbox",
"midnightcontrols.controller_type.steam": "Steam",
"midnightcontrols.controller_type.ouya": "OUYA",
"midnightcontrols.controls_mode.default": "鍵鼠",
"midnightcontrols.controls_mode.controller": "手把",
"midnightcontrols.controls_mode.touchscreen": "觸摸屏",
"midnightcontrols.hud_side.left": "左側",
"midnightcontrols.hud_side.right": "右側",
"midnightcontrols.menu.analog_movement": "識別搖桿輸入的精確值",
"midnightcontrols.menu.auto_switch_mode": "自動切換模式",
"midnightcontrols.menu.controller": "手把",
"midnightcontrols.menu.controller2": "額外手把",
"midnightcontrols.menu.controller_type": "手把類型",
"midnightcontrols.menu.controls_mode": "模式",
"midnightcontrols.menu.fast_block_placing": "方塊快速放置",
"midnightcontrols.menu.fly_drifting": "水平方向飛行慣性",
"midnightcontrols.menu.fly_drifting_vertical": "垂直方向飛行慣性",
"midnightcontrols.menu.hud_enable": "啟用HUD",
"midnightcontrols.menu.hud_side": "HUD位置",
"midnightcontrols.menu.invert_right_x_axis": "反轉右搖桿X軸",
"midnightcontrols.menu.invert_right_y_axis": "反轉右搖桿Y軸",
"midnightcontrols.menu.keyboard_controls": "鍵盤控制…",
"midnightcontrols.menu.left_dead_zone": "左搖桿死區",
"midnightcontrols.menu.mappings.open_input_str": "編輯按鍵映射文件",
"midnightcontrols.menu.max_left_x_value": "左搖桿X軸最大值識別範圍",
"midnightcontrols.menu.max_left_y_value": "左搖桿Y軸最大值識別範圍",
"midnightcontrols.menu.max_right_x_value": "右搖桿X軸最大值識別範圍",
"midnightcontrols.menu.max_right_y_value": "右搖桿Y軸最大值識別範圍",
"midnightcontrols.menu.mouse_speed": "鼠標移動速度",
"midnightcontrols.menu.reacharound.horizontal": "水平方向方塊放置輔助",
"midnightcontrols.menu.reacharound.vertical": "垂直方向方塊放置輔助",
"midnightcontrols.menu.reload_controller_mappings": "重新加載手把按鍵映射",
"midnightcontrols.menu.right_dead_zone": "右搖桿死區",
"midnightcontrols.menu.rotation_speed": "鏡頭旋轉速度 (X)",
"midnightcontrols.menu.y_axis_rotation_speed": "鏡頭旋轉速度 (Y)",
"midnightcontrols.menu.separator.controller": "手把",
"midnightcontrols.menu.separator.general": "通用",
"midnightcontrols.menu.title": "midnightcontrols — 設置",
"midnightcontrols.menu.title.controller": "手把選項",
"midnightcontrols.menu.title.controller_controls": "手把控制",
"midnightcontrols.menu.title.gameplay": "遊戲內容選項",
"midnightcontrols.menu.title.general": "通用選項",
"midnightcontrols.menu.title.hud": "HUD選項",
"midnightcontrols.menu.title.mappings.string": "編輯按鍵映射文件",
"midnightcontrols.menu.title.visual": "界面選項",
"midnightcontrols.menu.unfocused_input": "非活動狀態輸入",
"midnightcontrols.menu.virtual_mouse": "虛擬鼠標",
"midnightcontrols.menu.virtual_mouse.skin": "虛擬鼠標指針樣式",
"midnightcontrols.narrator.unbound": "取消綁定 %s",
"midnightcontrols.not_bound": "未綁定",
"midnightcontrols.tooltip.analog_movement": "若遊戲機制允許,則可根據推動搖桿的力度與幅度決定移動的速度。",
"midnightcontrols.tooltip.auto_switch_mode": "如果已有手把連接,則自動切換為手把操作模式。",
"midnightcontrols.tooltip.controller2": "使用額外的手把,比如將一左一右的兩個 Joy-Con 合為一個功能完全的手把。",
"midnightcontrols.tooltip.controller_type": "選擇手把類型,以顯示對應的按鍵圖標。",
"midnightcontrols.tooltip.controls_mode": "操作模式",
"midnightcontrols.tooltip.fast_block_placing": "在創造模式中處於飛行狀態時,可以根據你飛行的速度快速放置方塊。\n§c在部分服務器可能會被認定為作弊。",
"midnightcontrols.tooltip.fly_drifting": "處於飛行狀態時,啟用原版的水平方向飛行慣性(緩停滑行)。",
"midnightcontrols.tooltip.fly_drifting_vertical": "處於飛行狀態時,啟用原版的垂直方向飛行慣性(緩停滑行)。",
"midnightcontrols.tooltip.hud_enable": "顯示手把按鍵操作提示。",
"midnightcontrols.tooltip.hud_side": "HUD的位置位於畫面的哪一側。",
"midnightcontrols.tooltip.left_dead_zone": "左搖桿配置的死區。\n死區決定搖桿要偏離中心位置多遠才能讓搖桿的輸入有效。",
"midnightcontrols.tooltip.max_left_x_value": "更改左搖桿X軸最大值的識別範圍。\n若感覺即便推滿搖桿也未達到最大的輸入值導致在識別搖桿輸入的精確值的情況下左右移動較為緩慢等問題本項可能會有所幫助。",
"midnightcontrols.tooltip.max_left_y_value": "更改左搖桿Y軸最大值的識別範圍。\n若感覺即便推滿搖桿也未達到最大的輸入值導致在識別搖桿輸入的精確值的情況下前後移動較為緩慢等問題本項可能會有所幫助。",
"midnightcontrols.tooltip.max_right_x_value": "更改右搖桿X軸最大值的識別範圍。\n若感覺即便推滿搖桿也未達到最大的輸入值導致鏡頭左右旋轉較為緩慢等問題本項可能會有所幫助。",
"midnightcontrols.tooltip.max_right_y_value": "更改右搖桿Y軸最大值的識別範圍。\n若感覺即便推滿搖桿也未達到最大的輸入值導致鏡頭上下旋轉較為緩慢等問題本項可能會有所幫助。",
"midnightcontrols.tooltip.mouse_speed": "手把模擬的鼠標的移動速度。",
"midnightcontrols.tooltip.reacharound.horizontal": "啟用水平方向方塊放置輔助,可在腳下方塊的前方放置方塊。\n§c在部分服務器可能會被認定為作弊。",
"midnightcontrols.tooltip.reacharound.vertical": "啟用垂直方向方塊放置輔助,可在腳下方塊的下方放置方塊。\n§c在部分服務器可能會被認定為作弊。",
"midnightcontrols.tooltip.reload_controller_mappings": "重新加載手把的按鍵映射文件。",
"midnightcontrols.tooltip.right_dead_zone": "右搖桿配置的死區。\n死區決定搖桿要偏離中心位置多遠才能讓搖桿的輸入有效。",
"midnightcontrols.tooltip.rotation_speed": "手把操作模式下的鏡頭旋轉速度。(X)",
"midnightcontrols.tooltip.y_axis_rotation_speed": "手把操作模式下的鏡頭旋轉速度。(Y)",
"midnightcontrols.tooltip.unfocused_input": "即使遊戲窗口處於非活動狀態,也允許手把進行按鍵輸入。",
"midnightcontrols.tooltip.virtual_mouse": "啟用虛擬鼠標,在分屏的情況下很有用。",
"midnightcontrols.virtual_mouse.skin.default_light": "默認樣式(白色)",
"midnightcontrols.virtual_mouse.skin.default_dark": "默認樣式(黑色)",
"midnightcontrols.virtual_mouse.skin.second_light": "額外樣式(白色)",
"midnightcontrols.virtual_mouse.skin.second_dark": "額外樣式(黑色)"
}

View File

@@ -15,6 +15,7 @@
"KeyBindingMixin", "KeyBindingMixin",
"MinecraftClientMixin", "MinecraftClientMixin",
"MouseMixin", "MouseMixin",
"ChatScreenMixin",
"RecipeBookWidgetAccessor", "RecipeBookWidgetAccessor",
"WorldRendererMixin", "WorldRendererMixin",
"KeyBindingRegistryImplAccessor", "KeyBindingRegistryImplAccessor",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -1,6 +1,6 @@
{ {
"pack": { "pack": {
"pack_format": 9, "pack_format": 12,
"description": "Makes controller tooltips use similar icons to Bedrock Edition" "description": "Makes controller tooltips use similar icons to Bedrock Edition"
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"pack": { "pack": {
"pack_format": 9, "pack_format": 12,
"description": "Makes controller icons look similar to Legacy Console Edit." "description": "Makes controller icons look similar to Legacy Console Edit."
} }
} }