mirror of
https://github.com/TeamMidnightDust/MidnightControls.git
synced 2025-12-13 15:25:08 +01:00
Compare commits
18 Commits
v1.10.0-al
...
architectu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf60595c12 | ||
|
|
b96547dafb | ||
|
|
ab869f4f76 | ||
|
|
84df412162 | ||
|
|
afb80fd89c | ||
|
|
b835a6c4ca | ||
|
|
3eec0dda4a | ||
|
|
a23e8b8975 | ||
|
|
1aa449b5bd | ||
|
|
35ab81f696 | ||
|
|
e08547a641 | ||
|
|
c93cc729f4 | ||
|
|
1595fffc2c | ||
|
|
953df7a8c4 | ||
|
|
a3b8d7cbb5 | ||
|
|
929639c081 | ||
|
|
abcfd4c98c | ||
|
|
24d169b4c2 |
25
.github/workflows/build.yml
vendored
Normal file
25
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: Build with Gradle
|
||||||
|
|
||||||
|
on: [ push, pull_request ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Validate Gradle Wrapper
|
||||||
|
uses: gradle/actions/wrapper-validation@v3
|
||||||
|
- name: Set up JDK 21
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: 21
|
||||||
|
check-latest: true
|
||||||
|
- name: Build with Gradle
|
||||||
|
run: ./gradlew build
|
||||||
|
- name: Upload artifacts to GitHub
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: MidnightControls-Artifacts
|
||||||
|
path: /build/libs/
|
||||||
23
.github/workflows/gradlebuild.yml
vendored
23
.github/workflows/gradlebuild.yml
vendored
@@ -1,23 +0,0 @@
|
|||||||
name: Gradle Build
|
|
||||||
|
|
||||||
on: [ push, pull_request ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up JDK 16
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 16
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Build with Gradle
|
|
||||||
run: ./gradlew build
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: Artifacts
|
|
||||||
path: ./build/libs/
|
|
||||||
23
.github/workflows/modrinth_update.yml
vendored
23
.github/workflows/modrinth_update.yml
vendored
@@ -1,23 +0,0 @@
|
|||||||
name: Gradle Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- published
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up JDK 16
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 16
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Build with Gradle
|
|
||||||
env:
|
|
||||||
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
|
|
||||||
run: ./gradlew publishModrinth
|
|
||||||
40
.github/workflows/gradlepublish.yml → .github/workflows/publish.yml
vendored
Executable file → Normal file
40
.github/workflows/gradlepublish.yml → .github/workflows/publish.yml
vendored
Executable file → Normal file
@@ -1,30 +1,24 @@
|
|||||||
name: Gradle Package
|
name: Publish to Modrinth
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
release:
|
||||||
tags:
|
types:
|
||||||
- '*'
|
- published
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
publish:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- name: Checkout Repository
|
||||||
- name: Set up JDK 16
|
uses: actions/checkout@v4
|
||||||
uses: actions/setup-java@v1
|
- name: Validate Gradle Wrapper
|
||||||
|
uses: gradle/actions/wrapper-validation@v3
|
||||||
|
- name: Set up JDK 21
|
||||||
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
java-version: 16
|
distribution: 'temurin'
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
java-version: 21
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
check-latest: true
|
||||||
|
|
||||||
- name: Build with Gradle
|
|
||||||
run: ./gradlew build
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: Artifacts
|
|
||||||
path: ./build/libs/
|
|
||||||
|
|
||||||
# The USERNAME and PASSWORD need to correspond to the credentials environment variables used in
|
# The USERNAME and PASSWORD need to correspond to the credentials environment variables used in
|
||||||
# the publishing section of your build.gradle
|
# the publishing section of your build.gradle
|
||||||
- name: Publish to GitHub Packages and other Mavens
|
- name: Publish to GitHub Packages and other Mavens
|
||||||
@@ -38,3 +32,7 @@ jobs:
|
|||||||
midnightcontrols_MAVEN: ${{ secrets.MAVEN_URL }}
|
midnightcontrols_MAVEN: ${{ secrets.MAVEN_URL }}
|
||||||
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
|
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
|
||||||
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
||||||
|
- name: Publish to Modrinth
|
||||||
|
env:
|
||||||
|
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
|
||||||
|
run: ./gradlew publishModrinth
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
[](https://github.com/TeamMidnightDust/MidnightControls/releases)
|
[](https://github.com/TeamMidnightDust/MidnightControls/releases)
|
||||||

|

|
||||||
[![Mod loader: Quilt/Fabric]][Quilt]
|
[![Mod loader: Quilt/Fabric]][Quilt]
|
||||||
[](https://www.oracle.com/java/technologies/downloads/#java17)
|
[](https://www.oracle.com/java/technologies/downloads/#java21)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
|
||||||
A Fabric Minecraft mod which adds better controls, reach-around and controller support.
|
A Fabric Minecraft mod which adds better controls, reach-around and controller support.
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ repositories {
|
|||||||
maven {
|
maven {
|
||||||
url = "https://api.modrinth.com/maven"
|
url = "https://api.modrinth.com/maven"
|
||||||
}
|
}
|
||||||
|
flatDir {
|
||||||
|
dirs("localMaven")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
@@ -22,6 +25,9 @@ subprojects {
|
|||||||
url = "https://api.modrinth.com/maven"
|
url = "https://api.modrinth.com/maven"
|
||||||
}
|
}
|
||||||
maven { url 'https://jitpack.io' }
|
maven { url 'https://jitpack.io' }
|
||||||
|
flatDir {
|
||||||
|
dirs("../localMaven")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ dependencies {
|
|||||||
// Compatibility mods
|
// Compatibility mods
|
||||||
modCompileOnlyApi "io.github.cottonmc:LibGui:${project.libgui_version}"
|
modCompileOnlyApi "io.github.cottonmc:LibGui:${project.libgui_version}"
|
||||||
modCompileOnlyApi "org.quiltmc:quilt-json5:1.0.0"
|
modCompileOnlyApi "org.quiltmc:quilt-json5:1.0.0"
|
||||||
modCompileOnly "maven.modrinth:sodium:${project.sodium_version}"
|
modImplementation "maven.modrinth:sodium:${project.sodium_version}-fabric"
|
||||||
modCompileOnlyApi "maven.modrinth:emi:${project.emi_version}"
|
modCompileOnlyApi "maven.modrinth:emi:${project.emi_version}"
|
||||||
modCompileOnlyApi "maven.modrinth:emotecraft:${project.emotecraft_version}"
|
modCompileOnlyApi "maven.modrinth:emotecraft:${project.emotecraft_version}"
|
||||||
modCompileOnlyApi "io.github.kosmx:bendy-lib:${project.bendylib_version}"
|
modCompileOnlyApi "io.github.kosmx:bendy-lib:${project.bendylib_version}"
|
||||||
|
|||||||
@@ -88,8 +88,10 @@ public class MidnightControlsClient extends MidnightControls {
|
|||||||
timer.scheduleAtFixedRate(new TimerTask() {
|
timer.scheduleAtFixedRate(new TimerTask() {
|
||||||
public void run() { // TODO: Add a try/catch here after the alpha testing period
|
public void run() { // TODO: Add a try/catch here after the alpha testing period
|
||||||
if (lateInitDone && client.isRunning()) {
|
if (lateInitDone && client.isRunning()) {
|
||||||
input.tickJoysticks();
|
if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) {
|
||||||
input.updateCamera();
|
input.tickCameraStick();
|
||||||
|
input.updateCamera();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, delay, period);
|
}, delay, period);
|
||||||
@@ -145,11 +147,11 @@ public class MidnightControlsClient extends MidnightControls {
|
|||||||
if (!keyBinding.getTranslationKey().contains(MidnightControlsConstants.NAMESPACE)) {
|
if (!keyBinding.getTranslationKey().contains(MidnightControlsConstants.NAMESPACE)) {
|
||||||
AtomicReference<ButtonCategory> category = new AtomicReference<>();
|
AtomicReference<ButtonCategory> category = new AtomicReference<>();
|
||||||
InputManager.streamCategories().forEach(buttonCategory -> {
|
InputManager.streamCategories().forEach(buttonCategory -> {
|
||||||
if (buttonCategory.getIdentifier().equals(Identifier.ofVanilla(keyBinding.getCategory())))
|
if (buttonCategory.getIdentifier().equals(validVanillaId(keyBinding.getCategory())))
|
||||||
category.set(buttonCategory);
|
category.set(buttonCategory);
|
||||||
});
|
});
|
||||||
if (category.get() == null) {
|
if (category.get() == null) {
|
||||||
category.set(new ButtonCategory(Identifier.ofVanilla(keyBinding.getCategory())));
|
category.set(new ButtonCategory(validVanillaId(keyBinding.getCategory())));
|
||||||
InputManager.registerCategory(category.get());
|
InputManager.registerCategory(category.get());
|
||||||
}
|
}
|
||||||
ButtonBinding buttonBinding = new ButtonBinding.Builder(keyBinding.getTranslationKey()).category(category.get()).linkKeybind(keyBinding).register();
|
ButtonBinding buttonBinding = new ButtonBinding.Builder(keyBinding.getTranslationKey()).category(category.get()).linkKeybind(keyBinding).register();
|
||||||
@@ -163,6 +165,14 @@ public class MidnightControlsClient extends MidnightControls {
|
|||||||
InputManager.loadButtonBindings();
|
InputManager.loadButtonBindings();
|
||||||
lateInitDone = true;
|
lateInitDone = true;
|
||||||
}
|
}
|
||||||
|
private static Identifier validVanillaId(String path) {
|
||||||
|
for(int i = 0; i < path.length(); ++i) {
|
||||||
|
if (!Identifier.isPathCharacterValid(path.charAt(i))) {
|
||||||
|
path = path.replace(path.charAt(i), '_');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Identifier.ofVanilla(path);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called every Minecraft tick.
|
* This method is called every Minecraft tick.
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public class MidnightControlsConfig extends MidnightConfig {
|
|||||||
@Entry(category = VISUAL, name = "Reacharound Outline Alpha", isSlider = true, min = 0, max = 255) public static int reacharoundOutlineColorAlpha = 102;
|
@Entry(category = VISUAL, name = "Reacharound Outline Alpha", isSlider = true, min = 0, max = 255) public static int reacharoundOutlineColorAlpha = 102;
|
||||||
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.right_dead_zone", isSlider = true, min = 0.05, max = 1) public static double rightDeadZone = 0.25;
|
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.right_dead_zone", isSlider = true, min = 0.05, max = 1) public static double rightDeadZone = 0.25;
|
||||||
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.left_dead_zone", isSlider = true, min = 0.05, max = 1) public static double leftDeadZone = 0.25;
|
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.left_dead_zone", isSlider = true, min = 0.05, max = 1) public static double leftDeadZone = 0.25;
|
||||||
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.trigger_dead_zone", isSlider = true, min = 0.05, max = 1) public static double triggerDeadZone = 0.1;
|
@Entry(category = CONTROLLER, name = "Trigger Dead-Zone", isSlider = true, min = 0.05, max = 1) public static double triggerDeadZone = 0.1;
|
||||||
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.invert_right_y_axis") public static boolean invertRightYAxis = false;
|
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.invert_right_y_axis") public static boolean invertRightYAxis = false;
|
||||||
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.invert_right_x_axis") public static boolean invertRightXAxis = false;
|
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.invert_right_x_axis") public static boolean invertRightXAxis = false;
|
||||||
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.rotation_speed", isSlider = true, min = 0, max = 100, precision = 10) public static double rotationSpeed = 35.0; //used for x-axis, name kept for compatibility
|
@Entry(category = CONTROLLER, name = "midnightcontrols.menu.rotation_speed", isSlider = true, min = 0, max = 100, precision = 10) public static double rotationSpeed = 35.0; //used for x-axis, name kept for compatibility
|
||||||
@@ -112,11 +112,10 @@ public class MidnightControlsConfig extends MidnightConfig {
|
|||||||
@Entry @Hidden public static Map<String, String> BINDING = new HashMap<>();
|
@Entry @Hidden public static Map<String, String> BINDING = new HashMap<>();
|
||||||
|
|
||||||
private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?");
|
private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?");
|
||||||
@Deprecated @Hidden @Entry public static double[] maxAnalogValues = new double[]{1, 1, 1, 1};
|
@Entry(category = CONTROLLER, name = "Max analog value: Left X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueLeftX = 1;
|
||||||
@Entry(category = CONTROLLER, name = "Max analog value: Left X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueLeftX = maxAnalogValues[0];
|
@Entry(category = CONTROLLER, name = "Max analog value: Left Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueLeftY = 1;
|
||||||
@Entry(category = CONTROLLER, name = "Max analog value: Left Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueLeftY = maxAnalogValues[1];
|
@Entry(category = CONTROLLER, name = "Max analog value: Right X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightX = 1;
|
||||||
@Entry(category = CONTROLLER, name = "Max analog value: Right X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightX = maxAnalogValues[2];
|
@Entry(category = CONTROLLER, name = "Max analog value: Right Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightY = 1;
|
||||||
@Entry(category = CONTROLLER, name = "Max analog value: Right Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightY = maxAnalogValues[3];
|
|
||||||
@Entry(category = CONTROLLER, name = "Trigger button fix") public static boolean triggerFix = true;
|
@Entry(category = CONTROLLER, name = "Trigger button fix") public static boolean triggerFix = true;
|
||||||
@Entry(category = CONTROLLER, name = "Excluded Controllers (Name Regex)") public static List<String> excludedControllers = Lists.newArrayList(".*(Keyboard)$", ".*(Touchpad)$", ".*(Pen)$", ".*(Finger)$");
|
@Entry(category = CONTROLLER, name = "Excluded Controllers (Name Regex)") public static List<String> excludedControllers = Lists.newArrayList(".*(Keyboard)$", ".*(Touchpad)$", ".*(Pen)$", ".*(Finger)$");
|
||||||
@Entry(category = MISC, name = "Excluded Keybindings") public static List<String> excludedKeybindings = Lists.newArrayList("key.forward", "key.left", "key.back", "key.right", "key.jump", "key.sneak", "key.sprint", "key.inventory",
|
@Entry(category = MISC, name = "Excluded Keybindings") public static List<String> excludedKeybindings = Lists.newArrayList("key.forward", "key.left", "key.back", "key.right", "key.jump", "key.sneak", "key.sprint", "key.inventory",
|
||||||
|
|||||||
@@ -144,12 +144,14 @@ public class MidnightInput {
|
|||||||
var state = controller.getState();
|
var state = controller.getState();
|
||||||
this.fetchButtonInput(state, false);
|
this.fetchButtonInput(state, false);
|
||||||
this.fetchTriggerInput(state, false);
|
this.fetchTriggerInput(state, false);
|
||||||
|
this.fetchJoystickInput(state, false, false);
|
||||||
}
|
}
|
||||||
MidnightControlsConfig.getSecondController().filter(Controller::isConnected)
|
MidnightControlsConfig.getSecondController().filter(Controller::isConnected)
|
||||||
.ifPresent(joycon -> {
|
.ifPresent(joycon -> {
|
||||||
var state = joycon.getState();
|
var state = joycon.getState();
|
||||||
this.fetchButtonInput(state, true);
|
this.fetchButtonInput(state, true);
|
||||||
this.fetchTriggerInput(state, true);
|
this.fetchTriggerInput(state, true);
|
||||||
|
this.fetchJoystickInput(state, true, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
boolean allowInput = this.controlsInput == null || this.controlsInput.focusedBinding == null;
|
boolean allowInput = this.controlsInput == null || this.controlsInput.focusedBinding == null;
|
||||||
@@ -177,18 +179,16 @@ public class MidnightInput {
|
|||||||
this.inventoryInteractionCooldown--;
|
this.inventoryInteractionCooldown--;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* This method is called 1000 times a second for smooth joystick input
|
* This method is called 1000 times a second for smooth camera input
|
||||||
*/
|
*/
|
||||||
public void tickJoysticks() {
|
public void tickCameraStick() {
|
||||||
var controller = MidnightControlsConfig.getController();
|
var controller = MidnightControlsConfig.getController();
|
||||||
|
|
||||||
if (controller.isConnected()) {
|
if (controller.isConnected()) {
|
||||||
this.fetchJoystickInput(controller.getState(), false);
|
this.fetchJoystickInput(controller.getState(), false, true);
|
||||||
}
|
}
|
||||||
MidnightControlsConfig.getSecondController().filter(Controller::isConnected)
|
MidnightControlsConfig.getSecondController().filter(Controller::isConnected)
|
||||||
.ifPresent(joycon -> {
|
.ifPresent(joycon -> this.fetchJoystickInput(joycon.getState(), true, true));
|
||||||
this.fetchJoystickInput(joycon.getState(), true);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -278,7 +278,7 @@ public class MidnightInput {
|
|||||||
}
|
}
|
||||||
final MathUtil.PolarUtil polarUtil = new MathUtil.PolarUtil();
|
final MathUtil.PolarUtil polarUtil = new MathUtil.PolarUtil();
|
||||||
|
|
||||||
private void fetchJoystickInput(@NotNull GLFWGamepadState gamepadState, boolean leftJoycon) {
|
private void fetchJoystickInput(@NotNull GLFWGamepadState gamepadState, boolean leftJoycon, boolean cameraTick) {
|
||||||
var buffer = gamepadState.axes();
|
var buffer = gamepadState.axes();
|
||||||
|
|
||||||
polarUtil.calculate(buffer.get(GLFW_GAMEPAD_AXIS_LEFT_X), buffer.get(GLFW_GAMEPAD_AXIS_LEFT_Y), 1, MidnightControlsConfig.leftDeadZone);
|
polarUtil.calculate(buffer.get(GLFW_GAMEPAD_AXIS_LEFT_X), buffer.get(GLFW_GAMEPAD_AXIS_LEFT_Y), 1, MidnightControlsConfig.leftDeadZone);
|
||||||
@@ -291,7 +291,7 @@ public class MidnightInput {
|
|||||||
boolean isRadialMenu = client.currentScreen instanceof RingScreen || (PlatformFunctions.isModLoaded("emotecraft") && EmotecraftCompat.isEmotecraftScreen(client.currentScreen));
|
boolean isRadialMenu = client.currentScreen instanceof RingScreen || (PlatformFunctions.isModLoaded("emotecraft") && EmotecraftCompat.isEmotecraftScreen(client.currentScreen));
|
||||||
|
|
||||||
if (!isRadialMenu) {
|
if (!isRadialMenu) {
|
||||||
for (int i = 0; i < GLFW_GAMEPAD_AXIS_LEFT_TRIGGER; i++) {
|
for (int i = cameraTick ? GLFW_GAMEPAD_AXIS_RIGHT_X : 0; i < (cameraTick ? GLFW_GAMEPAD_AXIS_LEFT_TRIGGER : GLFW_GAMEPAD_AXIS_RIGHT_X); i++) {
|
||||||
int axis = leftJoycon ? ButtonBinding.controller2Button(i) : i;
|
int axis = leftJoycon ? ButtonBinding.controller2Button(i) : i;
|
||||||
float value = buffer.get(i);
|
float value = buffer.get(i);
|
||||||
|
|
||||||
@@ -503,21 +503,22 @@ public class MidnightInput {
|
|||||||
axisValue /= (float) (1.0 - storage.deadZone);
|
axisValue /= (float) (1.0 - storage.deadZone);
|
||||||
axisValue *= (float) storage.deadZone;
|
axisValue *= (float) storage.deadZone;
|
||||||
}
|
}
|
||||||
|
|
||||||
axisValue = (float) Math.min(axisValue / MidnightControlsConfig.getAxisMaxValue(storage.axis), 1);
|
axisValue = (float) Math.min(axisValue / MidnightControlsConfig.getAxisMaxValue(storage.axis), 1);
|
||||||
if (AxisStorage.isLeftAxis(storage.axis)) MidnightControlsCompat.handleMovement(storage, axisValue);
|
if (AxisStorage.isLeftAxis(storage.axis)) MidnightControlsCompat.handleMovement(storage, axisValue);
|
||||||
InputManager.BUTTON_VALUES.put(ButtonBinding.axisAsButton(storage.axis, true), storage.polarity == AxisStorage.Polarity.PLUS ? axisValue : 0.f);
|
InputManager.BUTTON_VALUES.put(storage.getButtonId(true), storage.polarity == AxisStorage.Polarity.PLUS ? axisValue : 0.f);
|
||||||
InputManager.BUTTON_VALUES.put(ButtonBinding.axisAsButton(storage.axis, false), storage.polarity == AxisStorage.Polarity.MINUS ? axisValue : 0.f);
|
InputManager.BUTTON_VALUES.put(storage.getButtonId(false), storage.polarity == AxisStorage.Polarity.MINUS ? axisValue : 0.f);
|
||||||
|
storage.absValue = axisValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean handleScreenScrolling(Screen screen, AxisStorage storage) {
|
private boolean handleScreenScrolling(Screen screen, AxisStorage storage) {
|
||||||
|
if (screen == null) return false;
|
||||||
// @TODO allow rebinding to left stick
|
// @TODO allow rebinding to left stick
|
||||||
int preferredAxis = true ? GLFW_GAMEPAD_AXIS_RIGHT_Y : GLFW_GAMEPAD_AXIS_LEFT_Y;
|
int preferredAxis = true ? GLFW_GAMEPAD_AXIS_RIGHT_Y : GLFW_GAMEPAD_AXIS_LEFT_Y;
|
||||||
|
|
||||||
if (this.controlsInput != null && this.controlsInput.focusedBinding != null) {
|
if (this.controlsInput != null && this.controlsInput.focusedBinding != null) {
|
||||||
if (storage.buttonState != ButtonState.NONE && !this.controlsInput.currentButtons.contains(ButtonBinding.axisAsButton(storage.axis, storage.buttonState == ButtonState.PRESS))) {
|
if (storage.buttonState != ButtonState.NONE && !this.controlsInput.currentButtons.contains(storage.getButtonId(storage.buttonState == ButtonState.PRESS))) {
|
||||||
|
|
||||||
this.controlsInput.currentButtons.add(ButtonBinding.axisAsButton(storage.axis, storage.buttonState == ButtonState.PRESS));
|
this.controlsInput.currentButtons.add(storage.getButtonId(storage.buttonState == ButtonState.PRESS));
|
||||||
|
|
||||||
int[] buttons = new int[this.controlsInput.currentButtons.size()];
|
int[] buttons = new int[this.controlsInput.currentButtons.size()];
|
||||||
for (int i = 0; i < this.controlsInput.currentButtons.size(); i++)
|
for (int i = 0; i < this.controlsInput.currentButtons.size(); i++)
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class MidnightReacharound {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static float getPlayerRange(@NotNull MinecraftClient client) {
|
public static float getPlayerRange(@NotNull MinecraftClient client) {
|
||||||
return client.player != null ? Double.valueOf(client.player.getAttributeValue(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE)).floatValue() : 0.f;
|
return client.player != null ? Double.valueOf(client.player.getAttributeValue(EntityAttributes.BLOCK_INTERACTION_RANGE)).floatValue() : 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.cli
|
|||||||
* @since 1.1.0
|
* @since 1.1.0
|
||||||
*/
|
*/
|
||||||
public class MidnightControlsCompat {
|
public class MidnightControlsCompat {
|
||||||
private static final List<CompatHandler> HANDLERS = new ArrayList<>();
|
@Deprecated // INTERNAL -> PLEASE USE streamCompatHandlers() INSTEAD
|
||||||
|
public static final List<CompatHandler> HANDLERS = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes compatibility with other mods if needed.
|
* Initializes compatibility with other mods if needed.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.compat;
|
package eu.midnightdust.midnightcontrols.client.compat;
|
||||||
|
|
||||||
import eu.midnightdust.midnightcontrols.client.compat.mixin.sodium.SodiumOptionsGUIAccessor;
|
import eu.midnightdust.midnightcontrols.client.compat.mixin.sodium.SodiumOptionsGUIAccessor;
|
||||||
import me.jellysquid.mods.sodium.client.gui.SodiumOptionsGUI;
|
import net.caffeinemc.mods.sodium.client.gui.SodiumOptionsGUI;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
|
||||||
public class SodiumCompat implements CompatHandler {
|
public class SodiumCompat implements CompatHandler {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.compat.mixin.sodium;
|
package eu.midnightdust.midnightcontrols.client.compat.mixin.sodium;
|
||||||
|
|
||||||
import me.jellysquid.mods.sodium.client.gui.SodiumOptionsGUI;
|
import net.caffeinemc.mods.sodium.client.gui.SodiumOptionsGUI;
|
||||||
import me.jellysquid.mods.sodium.client.gui.options.OptionPage;
|
import net.caffeinemc.mods.sodium.client.gui.options.OptionPage;
|
||||||
import me.jellysquid.mods.sodium.client.gui.options.control.ControlElement;
|
import net.caffeinemc.mods.sodium.client.gui.options.control.ControlElement;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
|||||||
@@ -60,10 +60,11 @@ public class InputHandlers {
|
|||||||
// When in-game
|
// When in-game
|
||||||
if (client.currentScreen == null && client.player != null) {
|
if (client.currentScreen == null && client.player != null) {
|
||||||
if (!client.player.isSpectator()) {
|
if (!client.player.isSpectator()) {
|
||||||
|
var inv = client.player.getInventory();
|
||||||
if (next)
|
if (next)
|
||||||
client.player.getInventory().scrollInHotbar(-1.0);
|
inv.setSelectedSlot(inv.selectedSlot < 8 ? inv.selectedSlot + 1 : inv.selectedSlot - 8);
|
||||||
else
|
else
|
||||||
client.player.getInventory().scrollInHotbar(1.0);
|
inv.setSelectedSlot(inv.selectedSlot > 0 ? inv.selectedSlot - 1 : inv.selectedSlot + 8);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (client.inGameHud.getSpectatorHud().isOpen()) {
|
if (client.inGameHud.getSpectatorHud().isOpen()) {
|
||||||
@@ -79,11 +80,9 @@ public class InputHandlers {
|
|||||||
} else if (client.currentScreen instanceof CreativeInventoryScreenAccessor inventory) {
|
} else if (client.currentScreen instanceof CreativeInventoryScreenAccessor inventory) {
|
||||||
inventory.midnightcontrols$setSelectedTab(ItemGroupUtil.cycleTab(next, client));
|
inventory.midnightcontrols$setSelectedTab(ItemGroupUtil.cycleTab(next, client));
|
||||||
return true;
|
return true;
|
||||||
} else if (client.currentScreen instanceof InventoryScreen || client.currentScreen instanceof CraftingScreen || client.currentScreen instanceof AbstractFurnaceScreen<?>) {
|
} else if (client.currentScreen instanceof RecipeBookScreen<?> recipeBookScreen) {
|
||||||
RecipeBookWidget recipeBook;
|
RecipeBookWidget<?> recipeBook = ((RecipeBookScreenAccessor) recipeBookScreen).getRecipeBook();
|
||||||
if (client.currentScreen instanceof InventoryScreen inventoryScreen) recipeBook = inventoryScreen.getRecipeBookWidget();
|
|
||||||
else if (client.currentScreen instanceof CraftingScreen craftingScreen) recipeBook = craftingScreen.getRecipeBookWidget();
|
|
||||||
else recipeBook = ((AbstractFurnaceScreen<?>)client.currentScreen).getRecipeBookWidget();
|
|
||||||
var recipeBookAccessor = (RecipeBookWidgetAccessor) recipeBook;
|
var recipeBookAccessor = (RecipeBookWidgetAccessor) recipeBook;
|
||||||
var tabs = recipeBookAccessor.getTabButtons();
|
var tabs = recipeBookAccessor.getTabButtons();
|
||||||
var currentTab = recipeBookAccessor.getCurrentTab();
|
var currentTab = recipeBookAccessor.getCurrentTab();
|
||||||
@@ -98,7 +97,7 @@ public class InputHandlers {
|
|||||||
currentTab.setToggled(false);
|
currentTab.setToggled(false);
|
||||||
recipeBookAccessor.setCurrentTab(currentTab = tabs.get(nextTab));
|
recipeBookAccessor.setCurrentTab(currentTab = tabs.get(nextTab));
|
||||||
currentTab.setToggled(true);
|
currentTab.setToggled(true);
|
||||||
recipeBookAccessor.midnightcontrols$refreshResults(true);
|
recipeBookScreen.refreshRecipeBook();
|
||||||
return true;
|
return true;
|
||||||
} else if (client.currentScreen instanceof AdvancementsScreenAccessor screen) {
|
} else if (client.currentScreen instanceof AdvancementsScreenAccessor screen) {
|
||||||
var tabs = screen.getTabs().values().stream().distinct().toList();
|
var tabs = screen.getTabs().values().stream().distinct().toList();
|
||||||
|
|||||||
@@ -48,10 +48,11 @@ public final class MovementHandler implements PressAction {
|
|||||||
public void applyMovement(@NotNull ClientPlayerEntity player) {
|
public void applyMovement(@NotNull ClientPlayerEntity player) {
|
||||||
if (!this.shouldOverrideMovement)
|
if (!this.shouldOverrideMovement)
|
||||||
return;
|
return;
|
||||||
player.input.pressingForward = this.pressingForward;
|
// TODO
|
||||||
player.input.pressingBack = this.pressingBack;
|
// player.input.playerInput.pressingForward = this.pressingForward;
|
||||||
player.input.pressingLeft = this.pressingLeft;
|
// player.input.pressingBack = this.pressingBack;
|
||||||
player.input.pressingRight = this.pressingRight;
|
// player.input.pressingLeft = this.pressingLeft;
|
||||||
|
// player.input.pressingRight = this.pressingRight;
|
||||||
|
|
||||||
polarUtil.calculate(this.movementSideways, this.movementForward, this.slowdownFactor);
|
polarUtil.calculate(this.movementSideways, this.movementForward, this.slowdownFactor);
|
||||||
player.input.movementForward = polarUtil.polarY;
|
player.input.movementForward = polarUtil.polarY;
|
||||||
@@ -81,7 +82,7 @@ public final class MovementHandler implements PressAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.slowdownFactor = client.player.shouldSlowDown() ? (MathHelper.clamp(
|
this.slowdownFactor = client.player.shouldSlowDown() ? (MathHelper.clamp(
|
||||||
0.3F + (float) client.player.getAttributeValue(EntityAttributes.PLAYER_SNEAKING_SPEED),
|
0.3F + (float) client.player.getAttributeValue(EntityAttributes.SNEAKING_SPEED),
|
||||||
0.0F,
|
0.0F,
|
||||||
1.0F
|
1.0F
|
||||||
)) : 1.f;
|
)) : 1.f;
|
||||||
|
|||||||
@@ -18,24 +18,23 @@ import eu.midnightdust.midnightcontrols.client.MidnightInput;
|
|||||||
import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat;
|
import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
||||||
import eu.midnightdust.midnightcontrols.client.enums.VirtualMouseSkin;
|
import eu.midnightdust.midnightcontrols.client.enums.VirtualMouseSkin;
|
||||||
|
import eu.midnightdust.midnightcontrols.client.mixin.DrawContextAccessor;
|
||||||
import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor;
|
import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.render.BufferBuilder;
|
import net.minecraft.client.render.*;
|
||||||
import net.minecraft.client.render.BufferRenderer;
|
|
||||||
import net.minecraft.client.render.GameRenderer;
|
|
||||||
import net.minecraft.client.render.Tessellator;
|
|
||||||
import net.minecraft.client.render.VertexFormat;
|
|
||||||
import net.minecraft.client.render.VertexFormats;
|
|
||||||
import net.minecraft.client.resource.language.I18n;
|
import net.minecraft.client.resource.language.I18n;
|
||||||
import net.minecraft.client.texture.Sprite;
|
import net.minecraft.client.texture.Sprite;
|
||||||
import net.minecraft.screen.slot.Slot;
|
import net.minecraft.screen.slot.Slot;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.ColorHelper;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.joml.Matrix4f;
|
import org.joml.Matrix4f;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
import static eu.midnightdust.midnightcontrols.MidnightControls.id;
|
import static eu.midnightdust.midnightcontrols.MidnightControls.id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -175,7 +174,7 @@ public class MidnightControlsRenderer {
|
|||||||
int assetSize = axis || (button >= 15 && button <= 18) ? AXIS_SIZE : BUTTON_SIZE;
|
int assetSize = axis || (button >= 15 && button <= 18) ? AXIS_SIZE : BUTTON_SIZE;
|
||||||
|
|
||||||
RenderSystem.setShaderColor(1.f, second ? 0.f : 1.f, 1.f, 1.f);
|
RenderSystem.setShaderColor(1.f, second ? 0.f : 1.f, 1.f, 1.f);
|
||||||
context.drawTexture(axis ? MidnightControlsClient.CONTROLLER_AXIS : button >= 15 && button <= 19 ? MidnightControlsClient.CONTROLLER_EXPANDED :MidnightControlsClient.CONTROLLER_BUTTONS
|
context.drawTexture(RenderLayer::getGuiTextured, axis ? MidnightControlsClient.CONTROLLER_AXIS : button >= 15 && button <= 19 ? MidnightControlsClient.CONTROLLER_EXPANDED :MidnightControlsClient.CONTROLLER_BUTTONS
|
||||||
, x + (ICON_SIZE / 2 - assetSize / 2), y + (ICON_SIZE / 2 - assetSize / 2),
|
, x + (ICON_SIZE / 2 - assetSize / 2), y + (ICON_SIZE / 2 - assetSize / 2),
|
||||||
(float) buttonOffset, (float) (controllerType * assetSize),
|
(float) buttonOffset, (float) (controllerType * assetSize),
|
||||||
assetSize, assetSize,
|
assetSize, assetSize,
|
||||||
@@ -216,7 +215,7 @@ public class MidnightControlsRenderer {
|
|||||||
if (MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.DEFAULT_DARK || MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.SECOND_DARK)
|
if (MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.DEFAULT_DARK || MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.SECOND_DARK)
|
||||||
spritePath = MidnightControlsClient.WAYLAND_CURSOR_TEXTURE_DARK;
|
spritePath = MidnightControlsClient.WAYLAND_CURSOR_TEXTURE_DARK;
|
||||||
Sprite sprite = client.getGuiAtlasManager().getSprite(spritePath);
|
Sprite sprite = client.getGuiAtlasManager().getSprite(spritePath);
|
||||||
drawUnalignedTexturedQuad(sprite.getAtlasId(), context, mouseX, mouseX + 8, mouseY, mouseY + 8, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
|
drawUnalignedTexturedQuad(RenderLayer::getGuiTextured, sprite.getAtlasId(), context, mouseX, mouseX + 8, mouseY, mouseY + 8, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
|
||||||
} catch (IllegalStateException ignored) {}
|
} catch (IllegalStateException ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,19 +259,20 @@ public class MidnightControlsRenderer {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Sprite sprite = client.getGuiAtlasManager().getSprite(id(MidnightControlsConfig.virtualMouseSkin.getSpritePath() + (hoverSlot ? "_slot" : "")));
|
Sprite sprite = client.getGuiAtlasManager().getSprite(id(MidnightControlsConfig.virtualMouseSkin.getSpritePath() + (hoverSlot ? "_slot" : "")));
|
||||||
drawUnalignedTexturedQuad(sprite.getAtlasId(), context, mouseX, mouseX + 16, mouseY, mouseY + 16, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
|
drawUnalignedTexturedQuad(RenderLayer::getGuiTextured, sprite.getAtlasId(), context, mouseX, mouseX + 16, mouseY, mouseY + 16, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
|
||||||
} catch (IllegalStateException ignored) {}
|
} catch (IllegalStateException ignored) {}
|
||||||
}
|
}
|
||||||
private static void drawUnalignedTexturedQuad(Identifier texture, DrawContext context, float x1, float x2, float y1, float y2, float z, float u1, float u2, float v1, float v2) {
|
private static void drawUnalignedTexturedQuad(Function<Identifier, RenderLayer> renderLayers, Identifier texture, DrawContext context, float x1, float x2, float y1, float y2, float z, float u1, float u2, float v1, float v2) {
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
RenderLayer renderLayer = renderLayers.apply(texture);
|
||||||
RenderSystem.setShader(GameRenderer::getPositionTexProgram);
|
//RenderSystem.setShaderTexture(0, texture);
|
||||||
Matrix4f matrix4f = context.getMatrices().peek().getPositionMatrix();
|
Matrix4f matrix4f = context.getMatrices().peek().getPositionMatrix();
|
||||||
BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE);
|
//BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE);
|
||||||
bufferBuilder.vertex(matrix4f, x1, y1, z).texture(u1, v1);
|
VertexConsumer vertexConsumer = ((DrawContextAccessor)context).getVertexConsumers().getBuffer(renderLayer);
|
||||||
bufferBuilder.vertex(matrix4f, x1, y2, z).texture(u1, v2);
|
vertexConsumer.vertex(matrix4f, x1, y1, z).texture(u1, v1).color(ColorHelper.getWhite(1.0f));
|
||||||
bufferBuilder.vertex(matrix4f, x2, y2, z).texture(u2, v2);
|
vertexConsumer.vertex(matrix4f, x1, y2, z).texture(u1, v2).color(ColorHelper.getWhite(1.0f));
|
||||||
bufferBuilder.vertex(matrix4f, x2, y1, z).texture(u2, v1);
|
vertexConsumer.vertex(matrix4f, x2, y2, z).texture(u2, v2).color(ColorHelper.getWhite(1.0f));
|
||||||
BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
|
vertexConsumer.vertex(matrix4f, x2, y1, z).texture(u2, v1).color(ColorHelper.getWhite(1.0f));
|
||||||
|
context.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
public record ButtonSize(int length, int height) {
|
public record ButtonSize(int length, int height) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import eu.midnightdust.midnightcontrols.MidnightControlsConstants;
|
|||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
||||||
import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil;
|
import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil;
|
||||||
import org.thinkingstudio.obsidianui.background.Background;
|
import org.thinkingstudio.obsidianui.background.Background;
|
||||||
|
import org.thinkingstudio.obsidianui.mixin.DrawContextAccessor;
|
||||||
import org.thinkingstudio.obsidianui.widget.SpruceWidget;
|
import org.thinkingstudio.obsidianui.widget.SpruceWidget;
|
||||||
import eu.midnightdust.lib.util.MidnightColorUtil;
|
import eu.midnightdust.lib.util.MidnightColorUtil;
|
||||||
import eu.midnightdust.midnightcontrols.MidnightControls;
|
import eu.midnightdust.midnightcontrols.MidnightControls;
|
||||||
@@ -501,27 +502,24 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void render(DrawContext context, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) {
|
public void render(DrawContext context, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) {
|
||||||
fill(context.getMatrices(), widget.getX(), widget.getY(), widget.getX() + widget.getWidth(), widget.getY() + widget.getHeight(), MidnightColorUtil.hex2Rgb("#000000"));
|
fill(context, widget.getX(), widget.getY(), widget.getX() + widget.getWidth(), widget.getY() + widget.getHeight(), Color.black);
|
||||||
}
|
}
|
||||||
private static void fill(MatrixStack matrixStack, int x2, int y2, int x1, int y1, Color color) {
|
private static void fill(DrawContext context, int x2, int y2, int x1, int y1, Color color) {
|
||||||
matrixStack.push();
|
RenderLayer renderLayer = RenderLayer.getGui();
|
||||||
|
VertexConsumer vertexConsumer = ((DrawContextAccessor)context).getVertexConsumers().getBuffer(renderLayer);
|
||||||
|
|
||||||
Matrix4f matrix = matrixStack.peek().getPositionMatrix();
|
|
||||||
float r = (float)(color.getRed()) / 255.0F;
|
float r = (float)(color.getRed()) / 255.0F;
|
||||||
float g = (float)(color.getGreen()) / 255.0F;
|
float g = (float)(color.getGreen()) / 255.0F;
|
||||||
float b = (float)(color.getBlue()) / 255.0F;
|
float b = (float)(color.getBlue()) / 255.0F;
|
||||||
float t = (float)(transparency) / 255.0F;
|
float t = (float)(transparency) / 255.0F;
|
||||||
BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
|
||||||
RenderSystem.enableBlend();
|
RenderSystem.enableBlend();
|
||||||
RenderSystem.defaultBlendFunc();
|
RenderSystem.defaultBlendFunc();
|
||||||
RenderSystem.setShader(GameRenderer::getPositionColorProgram);
|
vertexConsumer.vertex((float)x1, (float)y2, 0.0F).color(r, g, b, t);
|
||||||
bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t);
|
vertexConsumer.vertex((float)x2, (float)y2, 0.0F).color(r, g, b, t);
|
||||||
bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t);
|
vertexConsumer.vertex((float)x2, (float)y1, 0.0F).color(r, g, b, t);
|
||||||
bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t);
|
vertexConsumer.vertex((float)x1, (float)y1, 0.0F).color(r, g, b, t);
|
||||||
bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t);
|
|
||||||
BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
|
|
||||||
RenderSystem.disableBlend();
|
RenderSystem.disableBlend();
|
||||||
matrixStack.pop();
|
context.draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,11 +88,11 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity
|
|||||||
if (MidnightControlsConfig.verticalFlyDrifting || !MidnightControls.isExtrasLoaded)
|
if (MidnightControlsConfig.verticalFlyDrifting || !MidnightControls.isExtrasLoaded)
|
||||||
return;
|
return;
|
||||||
int moving = 0;
|
int moving = 0;
|
||||||
if (this.input.sneaking) {
|
if (this.input.playerInput.sneak()) {
|
||||||
--moving;
|
--moving;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.input.jumping) {
|
if (this.input.playerInput.jump()) {
|
||||||
++moving;
|
++moving;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2021 LambdAurora <aurora42lambda@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of midnightcontrols.
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license. For more information,
|
||||||
|
* see the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package eu.midnightdust.midnightcontrols.client.mixin;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.render.VertexConsumerProvider;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
@Mixin(DrawContext.class)
|
||||||
|
public interface DrawContextAccessor {
|
||||||
|
@Accessor("vertexConsumers")
|
||||||
|
VertexConsumerProvider.Immediate getVertexConsumers();
|
||||||
|
}
|
||||||
@@ -40,22 +40,22 @@ public abstract class GameOptionsScreenMixin extends Screen {
|
|||||||
super(title);
|
super(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "initTabNavigation", at = @At("TAIL"))
|
@Inject(method = "init", at = @At("TAIL"))
|
||||||
public void addMidnightButton(CallbackInfo ci) {
|
public void midnightcontrols$addMCButton(CallbackInfo ci) {
|
||||||
if (this.getClass().toString().equals(ControlsOptionsScreen.class.toString())) {
|
if (this.getClass().toString().equals(ControlsOptionsScreen.class.toString())) {
|
||||||
this.midnightcontrols$setupButton();
|
this.midnightcontrols$setButtonPos();
|
||||||
this.addDrawableChild(midnightcontrols$button);
|
this.addDrawableChild(midnightcontrols$button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Inject(method = "refreshWidgetPositions", at = @At("TAIL"))
|
||||||
public void resize(MinecraftClient client, int width, int height) {
|
public void midnightcontrols$onResize(CallbackInfo ci) {
|
||||||
super.resize(client, width, height);
|
this.midnightcontrols$setButtonPos();
|
||||||
this.midnightcontrols$setupButton();
|
|
||||||
}
|
}
|
||||||
@Unique
|
@Unique
|
||||||
public void midnightcontrols$setupButton() {
|
public void midnightcontrols$setButtonPos() {
|
||||||
assert body != null;
|
if (body != null) {
|
||||||
midnightcontrols$button.setPosition(body.getWidth() / 2 + 158, body.getY() + 4);
|
midnightcontrols$button.setPosition(body.getWidth() / 2 + 158, body.getY() + 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,12 +127,12 @@ public abstract class MinecraftClientMixin {
|
|||||||
int previousStackCount = stackInHand.getCount();
|
int previousStackCount = stackInHand.getCount();
|
||||||
var result = this.interactionManager.interactBlock(this.player, hand, hitResult);
|
var result = this.interactionManager.interactBlock(this.player, hand, hitResult);
|
||||||
if (result.isAccepted()) {
|
if (result.isAccepted()) {
|
||||||
if (result.shouldSwingHand()) {
|
//if (result.shouldSwingHand()) {
|
||||||
this.player.swingHand(hand);
|
this.player.swingHand(hand);
|
||||||
if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || this.interactionManager.hasCreativeInventory())) {
|
if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || this.interactionManager.hasCreativeInventory())) {
|
||||||
this.gameRenderer.firstPersonRenderer.resetEquipProgress(hand);
|
this.gameRenderer.firstPersonRenderer.resetEquipProgress(hand);
|
||||||
}
|
}
|
||||||
}
|
//}
|
||||||
|
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import net.minecraft.client.Mouse;
|
|||||||
import net.minecraft.client.util.GlfwUtil;
|
import net.minecraft.client.util.GlfwUtil;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.ThrowablePotionItem;
|
import net.minecraft.item.ThrowablePotionItem;
|
||||||
import net.minecraft.util.UseAction;
|
import net.minecraft.item.consume.UseAction;
|
||||||
import net.minecraft.util.math.Smoother;
|
import net.minecraft.util.math.Smoother;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2021 LambdAurora <aurora42lambda@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of midnightcontrols.
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license. For more information,
|
||||||
|
* see the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package eu.midnightdust.midnightcontrols.client.mixin;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.screen.ingame.RecipeBookScreen;
|
||||||
|
import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
@Mixin(RecipeBookScreen.class)
|
||||||
|
public interface RecipeBookScreenAccessor {
|
||||||
|
@Accessor("recipeBook")
|
||||||
|
RecipeBookWidget<?> getRecipeBook();
|
||||||
|
}
|
||||||
@@ -27,7 +27,4 @@ public interface RecipeBookWidgetAccessor {
|
|||||||
|
|
||||||
@Accessor("currentTab")
|
@Accessor("currentTab")
|
||||||
void setCurrentTab(RecipeGroupButtonWidget currentTab);
|
void setCurrentTab(RecipeGroupButtonWidget currentTab);
|
||||||
|
|
||||||
@Invoker("refreshResults")
|
|
||||||
void midnightcontrols$refreshResults(boolean resetCurrentPage);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,8 @@
|
|||||||
|
|
||||||
package eu.midnightdust.midnightcontrols.client.mixin;
|
package eu.midnightdust.midnightcontrols.client.mixin;
|
||||||
|
|
||||||
import com.llamalad7.mixinextras.sugar.Local;
|
|
||||||
import eu.midnightdust.lib.util.MidnightColorUtil;
|
import eu.midnightdust.lib.util.MidnightColorUtil;
|
||||||
import eu.midnightdust.midnightcontrols.ControlsMode;
|
import eu.midnightdust.midnightcontrols.ControlsMode;
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
||||||
import eu.midnightdust.midnightcontrols.client.touch.TouchInput;
|
import eu.midnightdust.midnightcontrols.client.touch.TouchInput;
|
||||||
import eu.midnightdust.midnightcontrols.client.enums.TouchMode;
|
import eu.midnightdust.midnightcontrols.client.enums.TouchMode;
|
||||||
@@ -28,8 +26,7 @@ import net.minecraft.item.ItemUsageContext;
|
|||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.hit.BlockHitResult;
|
import net.minecraft.util.hit.BlockHitResult;
|
||||||
import net.minecraft.util.hit.HitResult;
|
import net.minecraft.util.hit.HitResult;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.math.ColorHelper;
|
||||||
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;
|
||||||
@@ -61,12 +58,8 @@ public abstract class WorldRendererMixin {
|
|||||||
@Final
|
@Final
|
||||||
private BufferBuilderStorage bufferBuilders;
|
private BufferBuilderStorage bufferBuilders;
|
||||||
|
|
||||||
@Shadow
|
@Redirect(method = "renderTargetBlockOutline", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/hit/BlockHitResult;getType()Lnet/minecraft/util/hit/HitResult$Type;"))
|
||||||
private static void drawCuboidShapeOutline(MatrixStack matrices, VertexConsumer vertexConsumer, VoxelShape shape, double offsetX, double offsetY, double offsetZ, float red, float green, float blue, float alpha) {
|
private HitResult.Type dontRenderOutline(BlockHitResult instance) {
|
||||||
}
|
|
||||||
|
|
||||||
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/hit/HitResult;getType()Lnet/minecraft/util/hit/HitResult$Type;"))
|
|
||||||
private HitResult.Type dontRenderOutline(HitResult instance) {
|
|
||||||
if (MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN && MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) {
|
if (MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN && MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) {
|
||||||
return HitResult.Type.MISS;
|
return HitResult.Type.MISS;
|
||||||
}
|
}
|
||||||
@@ -74,15 +67,10 @@ public abstract class WorldRendererMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Inject(
|
@Inject(
|
||||||
method = "render",
|
method = "renderTargetBlockOutline",
|
||||||
at = @At(
|
at = @At("HEAD")
|
||||||
value = "FIELD",
|
|
||||||
target = "Lnet/minecraft/client/MinecraftClient;crosshairTarget:Lnet/minecraft/util/hit/HitResult;",
|
|
||||||
ordinal = 1,
|
|
||||||
shift = At.Shift.AFTER
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
private void onOutlineRender(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci, @Local MatrixStack matrices) {
|
private void onOutlineRender(Camera camera, VertexConsumerProvider.Immediate vertexConsumers, MatrixStack matrices, boolean translucent, CallbackInfo ci) {
|
||||||
if (((MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && MidnightControlsConfig.touchInControllerMode) || MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN)
|
if (((MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && MidnightControlsConfig.touchInControllerMode) || MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN)
|
||||||
&& MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) {
|
&& MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) {
|
||||||
this.midnightcontrols$renderFingerOutline(matrices, camera);
|
this.midnightcontrols$renderFingerOutline(matrices, camera);
|
||||||
@@ -102,8 +90,8 @@ public abstract class WorldRendererMixin {
|
|||||||
var pos = camera.getPos();
|
var pos = camera.getPos();
|
||||||
matrices.push();
|
matrices.push();
|
||||||
var vertexConsumer = this.bufferBuilders.getEntityVertexConsumers().getBuffer(RenderLayer.getLines());
|
var vertexConsumer = this.bufferBuilders.getEntityVertexConsumers().getBuffer(RenderLayer.getLines());
|
||||||
drawCuboidShapeOutline(matrices, vertexConsumer, outlineShape, blockPos.getX() - pos.getX(), blockPos.getY() - pos.getY(), blockPos.getZ() - pos.getZ(),
|
VertexRendering.drawOutline(matrices, vertexConsumer, outlineShape, blockPos.getX() - pos.getX(), blockPos.getY() - pos.getY(), blockPos.getZ() - pos.getZ(),
|
||||||
rgb.getRed() / 255.f, rgb.getGreen() / 255.f, rgb.getBlue() / 255.f, MidnightControlsConfig.touchOutlineColorAlpha / 255.f);
|
ColorHelper.withAlpha(MidnightControlsConfig.touchOutlineColorAlpha, rgb.getRGB()));
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,9 +122,8 @@ public abstract class WorldRendererMixin {
|
|||||||
if (MidnightControlsConfig.reacharoundOutlineColorHex.isEmpty()) rgb = RainbowColor.radialRainbow(1,1);
|
if (MidnightControlsConfig.reacharoundOutlineColorHex.isEmpty()) rgb = RainbowColor.radialRainbow(1,1);
|
||||||
matrices.push();
|
matrices.push();
|
||||||
var vertexConsumer = this.bufferBuilders.getEntityVertexConsumers().getBuffer(RenderLayer.getLines());
|
var vertexConsumer = this.bufferBuilders.getEntityVertexConsumers().getBuffer(RenderLayer.getLines());
|
||||||
drawCuboidShapeOutline(matrices, vertexConsumer, outlineShape,
|
VertexRendering.drawOutline(matrices, vertexConsumer, outlineShape, blockPos.getX() - pos.getX(), blockPos.getY() - pos.getY(), blockPos.getZ() - pos.getZ(),
|
||||||
(double) blockPos.getX() - pos.getX(), (double) blockPos.getY() - pos.getY(), (double) blockPos.getZ() - pos.getZ(),
|
ColorHelper.withAlpha(MidnightControlsConfig.touchOutlineColorAlpha, rgb.getRGB()));
|
||||||
rgb.getRed() / 255.f, rgb.getGreen() / 255.f, rgb.getBlue() / 255.f, MidnightControlsConfig.reacharoundOutlineColorAlpha / 255.f);
|
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,12 +85,12 @@ public class TouchInput {
|
|||||||
int previousStackCount = stackInHand.getCount();
|
int previousStackCount = stackInHand.getCount();
|
||||||
var interaction = client.interactionManager.interactBlock(client.player, client.player.getActiveHand(), blockHit);
|
var interaction = client.interactionManager.interactBlock(client.player, client.player.getActiveHand(), blockHit);
|
||||||
if (interaction.isAccepted()) {
|
if (interaction.isAccepted()) {
|
||||||
if (interaction.shouldSwingHand()) {
|
//if (interaction.shouldSwingHand()) {
|
||||||
client.player.swingHand(client.player.preferredHand);
|
client.player.swingHand(client.player.preferredHand);
|
||||||
if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || client.interactionManager.hasCreativeInventory())) {
|
if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || client.interactionManager.hasCreativeInventory())) {
|
||||||
client.gameRenderer.firstPersonRenderer.resetEquipProgress(client.player.preferredHand);
|
client.gameRenderer.firstPersonRenderer.resetEquipProgress(client.player.preferredHand);
|
||||||
}
|
}
|
||||||
}
|
//}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.minecraft.client.MinecraftClient;
|
|||||||
import net.minecraft.client.render.Camera;
|
import net.minecraft.client.render.Camera;
|
||||||
import net.minecraft.entity.projectile.ProjectileUtil;
|
import net.minecraft.entity.projectile.ProjectileUtil;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.UseAction;
|
import net.minecraft.item.consume.UseAction;
|
||||||
import net.minecraft.util.hit.BlockHitResult;
|
import net.minecraft.util.hit.BlockHitResult;
|
||||||
import net.minecraft.util.hit.EntityHitResult;
|
import net.minecraft.util.hit.EntityHitResult;
|
||||||
import net.minecraft.util.hit.HitResult;
|
import net.minecraft.util.hit.HitResult;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.touch.gui;
|
package eu.midnightdust.midnightcontrols.client.touch.gui;
|
||||||
|
|
||||||
|
import net.minecraft.item.consume.UseAction;
|
||||||
import org.thinkingstudio.obsidianui.Position;
|
import org.thinkingstudio.obsidianui.Position;
|
||||||
import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget;
|
import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget;
|
||||||
import eu.midnightdust.midnightcontrols.MidnightControlsConstants;
|
import eu.midnightdust.midnightcontrols.MidnightControlsConstants;
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
||||||
import net.minecraft.item.ArmorItem;
|
import net.minecraft.item.ArmorItem;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.UseAction;
|
|
||||||
|
|
||||||
public class ItemUseButtonWidget extends SpruceButtonWidget {
|
public class ItemUseButtonWidget extends SpruceButtonWidget {
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ import net.minecraft.client.gui.screen.ChatScreen;
|
|||||||
import net.minecraft.client.gui.screen.GameMenuScreen;
|
import net.minecraft.client.gui.screen.GameMenuScreen;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.item.ArmorItem;
|
import net.minecraft.item.ArmorItem;
|
||||||
|
import net.minecraft.item.consume.UseAction;
|
||||||
import net.minecraft.util.Arm;
|
import net.minecraft.util.Arm;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.UseAction;
|
|
||||||
import org.thinkingstudio.obsidianui.Position;
|
import org.thinkingstudio.obsidianui.Position;
|
||||||
import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget;
|
import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget;
|
||||||
import eu.midnightdust.lib.util.PlatformFunctions;
|
import eu.midnightdust.lib.util.PlatformFunctions;
|
||||||
|
|||||||
@@ -58,10 +58,19 @@ public class AxisStorage {
|
|||||||
}
|
}
|
||||||
this.polarity = currentPlusState ? AxisStorage.Polarity.PLUS : currentMinusState ? AxisStorage.Polarity.MINUS : AxisStorage.Polarity.ZERO;
|
this.polarity = currentPlusState ? AxisStorage.Polarity.PLUS : currentMinusState ? AxisStorage.Polarity.MINUS : AxisStorage.Polarity.ZERO;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Returns the specified axis as a button.
|
||||||
|
*
|
||||||
|
* @param positive true if the axis part is positive, else false
|
||||||
|
* @return the axis as a button
|
||||||
|
*/
|
||||||
|
public int getButtonId(boolean positive) {
|
||||||
|
return ButtonBinding.axisAsButton(axis, positive);
|
||||||
|
}
|
||||||
|
|
||||||
public void setupButtonStates() {
|
public void setupButtonStates() {
|
||||||
var posButton = ButtonBinding.axisAsButton(axis, true);
|
var posButton = getButtonId(true);
|
||||||
var negButton = ButtonBinding.axisAsButton(axis, false);
|
var negButton = getButtonId(false);
|
||||||
var previousPlusState = STATES.getOrDefault(posButton, ButtonState.NONE);
|
var previousPlusState = STATES.getOrDefault(posButton, ButtonState.NONE);
|
||||||
var previousMinusState = STATES.getOrDefault(negButton, ButtonState.NONE);
|
var previousMinusState = STATES.getOrDefault(negButton, ButtonState.NONE);
|
||||||
|
|
||||||
|
|||||||
@@ -130,8 +130,8 @@
|
|||||||
"midnightcontrols.controls_mode.default": "Keyboard/Mouse",
|
"midnightcontrols.controls_mode.default": "Keyboard/Mouse",
|
||||||
"midnightcontrols.controls_mode.controller": "Controller",
|
"midnightcontrols.controls_mode.controller": "Controller",
|
||||||
"midnightcontrols.controls_mode.touchscreen": "Touchscreen (Beta)",
|
"midnightcontrols.controls_mode.touchscreen": "Touchscreen (Beta)",
|
||||||
"midnightcontrols.hud_side.left": "Left",
|
"midnightcontrols.hud_side.LEFT": "Left",
|
||||||
"midnightcontrols.hud_side.right": "Right",
|
"midnightcontrols.hud_side.RIGHT": "Right",
|
||||||
"midnightcontrols.menu.analog_movement": "Analog Movement",
|
"midnightcontrols.menu.analog_movement": "Analog Movement",
|
||||||
"midnightcontrols.menu.analog_movement.tooltip": "When possible, enables analog movement.",
|
"midnightcontrols.menu.analog_movement.tooltip": "When possible, enables analog movement.",
|
||||||
"midnightcontrols.menu.auto_switch_mode": "Auto Switch Mode",
|
"midnightcontrols.menu.auto_switch_mode": "Auto Switch Mode",
|
||||||
|
|||||||
@@ -0,0 +1,238 @@
|
|||||||
|
{
|
||||||
|
"midnightcontrols.midnightconfig.title": "Configurações avançadas do MidnightControls",
|
||||||
|
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.DEFAULT_LIGHT": "Padrão claro",
|
||||||
|
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.DEFAULT_DARK": "Padrão escuro",
|
||||||
|
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.SECOND_LIGHT": "Segundo claro",
|
||||||
|
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.SECOND_DARK": "Segundo escuro",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.DEFAULT": "Padrão",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.DUALSHOCK": "DualShock",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.DUALSENSE": "DualSense",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.SWITCH": "Controle de Switch/Wii",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.XBOX": "Controle de Xbox One/Series",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.XBOX_360": "Controle de Xbox 360",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.STEAM_CONTROLLER": "Controle da Steam",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.STEAM_DECK": "Steam Deck",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.OUYA": "Controle de OUYA",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControllerType.NUMBERED": "Controle númerado",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControlsMode.DEFAULT": "Teclado/Mouse",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControlsMode.CONTROLLER": "Controle",
|
||||||
|
"midnightcontrols.midnightconfig.enum.ControlsMode.TOUCHSCREEN": "Tela sensível ao toque (Beta)",
|
||||||
|
"midnightcontrols.midnightconfig.enum.HudSide.LEFT": "Esquerda",
|
||||||
|
"midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Direita",
|
||||||
|
"midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "Na mira",
|
||||||
|
"midnightcontrols.midnightconfig.enum.TouchMode.FINGER_POS": "Posição do dedo",
|
||||||
|
"midnightcontrols.midnightconfig.enum.CameraMode.FLAT": "Plano",
|
||||||
|
"midnightcontrols.midnightconfig.enum.CameraMode.ADAPTIVE": "Adaptativo",
|
||||||
|
"key.categories.midnightcontrols": "MidnightControls",
|
||||||
|
"key.midnightcontrols.look_down": "Olhar para baixo",
|
||||||
|
"key.midnightcontrols.look_left": "Olhar para a esquerda",
|
||||||
|
"key.midnightcontrols.look_right": "Olhar para a direita",
|
||||||
|
"key.midnightcontrols.look_up": "Olhar para cima",
|
||||||
|
"key.midnightcontrols.ring": "Abrir anel de teclas não vinculadas",
|
||||||
|
"midnightcontrols.action.attack": "Atacar",
|
||||||
|
"midnightcontrols.action.back": "Voltar",
|
||||||
|
"midnightcontrols.action.chat": "Abrir bate-papo",
|
||||||
|
"midnightcontrols.action.controls_ring": "Abrir anel de teclas não vinculadas",
|
||||||
|
"midnightcontrols.action.debug_screen": "Abrir HUD de depuração (F3)",
|
||||||
|
"midnightcontrols.action.drop_item": "Soltar item",
|
||||||
|
"midnightcontrols.action.drink": "Beber",
|
||||||
|
"midnightcontrols.action.eat": "Comer",
|
||||||
|
"midnightcontrols.action.equip": "Equipar",
|
||||||
|
"midnightcontrols.action.exit": "Sair da tela",
|
||||||
|
"midnightcontrols.action.forward": "Para frente",
|
||||||
|
"midnightcontrols.action.hit": "Atacar",
|
||||||
|
"midnightcontrols.action.hotbar_left": "Move a barra rápida para esquerda",
|
||||||
|
"midnightcontrols.action.hotbar_right": "Move a barra rápida para direita",
|
||||||
|
"midnightcontrols.action.inventory": "Invetário",
|
||||||
|
"midnightcontrols.action.jump": "Pular",
|
||||||
|
"midnightcontrols.action.left": "Esquerda",
|
||||||
|
"midnightcontrols.action.pause_game": "Pausar",
|
||||||
|
"midnightcontrols.action.pick_block": "Pegar bloco",
|
||||||
|
"midnightcontrols.action.pickup": "Pegar",
|
||||||
|
"midnightcontrols.action.pickup_all": "Pegar todos",
|
||||||
|
"midnightcontrols.action.place": "Colocar",
|
||||||
|
"midnightcontrols.action.player_list": "Lista de jogadores",
|
||||||
|
"midnightcontrols.action.quick_move": "Mover rápido",
|
||||||
|
"midnightcontrols.action.right": "Direita",
|
||||||
|
"midnightcontrols.action.screenshot": "Tirar Screenshot",
|
||||||
|
"midnightcontrols.action.slot_up": "Mover Slot para cima",
|
||||||
|
"midnightcontrols.action.slot_down": "Mover Slot para baixo",
|
||||||
|
"midnightcontrols.action.slot_left": "Mover Slot para esquerda",
|
||||||
|
"midnightcontrols.action.slot_right": "Mover Slot para direita",
|
||||||
|
"midnightcontrols.action.sneak": "Esgueirar",
|
||||||
|
"midnightcontrols.action.sprint": "Correr",
|
||||||
|
"midnightcontrols.action.swap_hands": "Trocar de mãos",
|
||||||
|
"midnightcontrols.action.toggle_perspective": "Alternar perspectiva",
|
||||||
|
"midnightcontrols.action.toggle_smooth_camera": "Ativar câmera cinemática",
|
||||||
|
"midnightcontrols.action.page_back": "Página anterior",
|
||||||
|
"midnightcontrols.action.page_next": "Próxima página",
|
||||||
|
"midnightcontrols.action.tab_back": "Aba anterior",
|
||||||
|
"midnightcontrols.action.tab_next": "Próxima aba",
|
||||||
|
"midnightcontrols.action.take": "Pegar item",
|
||||||
|
"midnightcontrols.action.take_all": "Pegar pilha",
|
||||||
|
"midnightcontrols.action.use": "Usar",
|
||||||
|
"midnightcontrols.action.zoom": "Zoom",
|
||||||
|
"midnightcontrols.action.zoom_in": "Aumentar o Zoom",
|
||||||
|
"midnightcontrols.action.zoom_out": "Diminuir o Zoom",
|
||||||
|
"midnightcontrols.action.zoom_reset": "Resetar o Zoom",
|
||||||
|
"midnightcontrols.action.emi_page_left": "Página anterior",
|
||||||
|
"midnightcontrols.action.emi_page_right": "Próxima pickup",
|
||||||
|
"midnightcontrols.category.emi": "EMI",
|
||||||
|
"midnightcontrols.button.a": "A",
|
||||||
|
"midnightcontrols.button.b": "B",
|
||||||
|
"midnightcontrols.button.x": "X",
|
||||||
|
"midnightcontrols.button.y": "Y",
|
||||||
|
"midnightcontrols.button.left_bumper": "Botão L1",
|
||||||
|
"midnightcontrols.button.right_bumper": "Botão R1",
|
||||||
|
"midnightcontrols.button.back": "Voltar",
|
||||||
|
"midnightcontrols.button.start": "Começar",
|
||||||
|
"midnightcontrols.button.guide": "Guia",
|
||||||
|
"midnightcontrols.button.left_thumb": "Analógico esquerdo",
|
||||||
|
"midnightcontrols.button.right_thumb": "Analógico direito",
|
||||||
|
"midnightcontrols.button.dpad_up": "Botão direcional para cima",
|
||||||
|
"midnightcontrols.button.dpad_right": "Botão direcional para direita",
|
||||||
|
"midnightcontrols.button.dpad_down": "Botão direcional para baixo",
|
||||||
|
"midnightcontrols.button.dpad_left": "Botão direcional para esquerda",
|
||||||
|
"midnightcontrols.button.l4": "L4",
|
||||||
|
"midnightcontrols.button.l5": "L5",
|
||||||
|
"midnightcontrols.button.r4": "R4",
|
||||||
|
"midnightcontrols.button.r5": "L5",
|
||||||
|
"midnightcontrols.axis.left_x+": "Esquerda X+",
|
||||||
|
"midnightcontrols.axis.left_y+": "Esquerda Y+",
|
||||||
|
"midnightcontrols.axis.right_x+": "Direita X+",
|
||||||
|
"midnightcontrols.axis.right_y+": "Direita Y+",
|
||||||
|
"midnightcontrols.axis.left_trigger": "Gatilho da esquerda",
|
||||||
|
"midnightcontrols.axis.right_trigger": "Gatilho da direita",
|
||||||
|
"midnightcontrols.axis.left_x-": "Esquerda X-",
|
||||||
|
"midnightcontrols.axis.left_y-": "Esquerda Y-",
|
||||||
|
"midnightcontrols.axis.right_x-": "Direita X-",
|
||||||
|
"midnightcontrols.axis.right_y-": "Direita Y-",
|
||||||
|
"midnightcontrols.button.unknown": "Desconhecido (%d)",
|
||||||
|
"midnightcontrols.controller.tutorial.title": "Jogue o jogo com um controle!",
|
||||||
|
"midnightcontrols.controller.tutorial.description": "Vá para %s -> %s -> %s",
|
||||||
|
"midnightcontrols.controller.connected": "Controle %d conectado.",
|
||||||
|
"midnightcontrols.controller.disconnected": "Controle %d desconectado.",
|
||||||
|
"midnightcontrols.controller.mappings.1": "Para configurar o mapeamento do controle, por favor use %s",
|
||||||
|
"midnightcontrols.controller.mappings.3": "e cole o mapeamento no editor de arquivos do mapeamento.",
|
||||||
|
"midnightcontrols.controller.mappings.error": "Erro ao carregar mapeamentos.",
|
||||||
|
"midnightcontrols.controller.mappings.error.write": "Erro ao gravar mapeamentos no arquivo.",
|
||||||
|
"midnightcontrols.controller.mappings.updated": "Atualizando mapeamentos!",
|
||||||
|
"midnightcontrols.controller_type.default": "Padrão",
|
||||||
|
"midnightcontrols.controller_type.dualshock": "DualShock",
|
||||||
|
"midnightcontrols.controller_type.dualsense": "DualSense",
|
||||||
|
"midnightcontrols.controller_type.switch": "Controle de Switch/Wii",
|
||||||
|
"midnightcontrols.controller_type.xbox": "Controle de Xbox One/Series",
|
||||||
|
"midnightcontrols.controller_type.xbox_360": "Controle de Xbox 360",
|
||||||
|
"midnightcontrols.controller_type.steam_controller": "Controle da Steam",
|
||||||
|
"midnightcontrols.controller_type.steam_deck": "Steam Deck",
|
||||||
|
"midnightcontrols.controller_type.ouya": "Controle de OUYA",
|
||||||
|
"midnightcontrols.controller_type.numbered": "Controle númerado",
|
||||||
|
"midnightcontrols.controls_mode.default": "Teclado/Mouse",
|
||||||
|
"midnightcontrols.controls_mode.controller": "Controle",
|
||||||
|
"midnightcontrols.controls_mode.touchscreen": "Tela sensível ao toque (Beta)",
|
||||||
|
"midnightcontrols.hud_side.LEFT": "Esquerda",
|
||||||
|
"midnightcontrols.hud_side.RIGHT": "Direita",
|
||||||
|
"midnightcontrols.menu.analog_movement": "Movemento analógico",
|
||||||
|
"midnightcontrols.menu.analog_movement.tooltip": "Quando possível, ative o movemento analógico.",
|
||||||
|
"midnightcontrols.menu.auto_switch_mode": "Modo de troca automática",
|
||||||
|
"midnightcontrols.menu.auto_switch_mode.tooltip": "Se o modo de controle deve ser alterado automaticamente para o controle quando um for conectado.",
|
||||||
|
"midnightcontrols.menu.camera_mode": "Modo de câmera",
|
||||||
|
"midnightcontrols.menu.controller": "Controle",
|
||||||
|
"midnightcontrols.menu.controller2": "Segundo controle",
|
||||||
|
"midnightcontrols.menu.controller2.tooltip": "Segundo controle a ser usado, o que permite (por exemplo) o suporte a Joy-Cons.",
|
||||||
|
"midnightcontrols.menu.controller_toggle_sneak": "Alternar Esgueirar no Controle",
|
||||||
|
"midnightcontrols.menu.controller_toggle_sprint": "Alternar Correr no Controle",
|
||||||
|
"midnightcontrols.menu.controller_type": "Tipo de controle",
|
||||||
|
"midnightcontrols.menu.controller_type.tooltip": "O tipo de controle que você está usando (é preciso para mostrar os botões corretos)",
|
||||||
|
"midnightcontrols.menu.controls_mode": "Modo",
|
||||||
|
"midnightcontrols.menu.controls_mode.tooltip": "O modo de controle.",
|
||||||
|
"midnightcontrols.menu.copy_controller_guid": "Copiar o GUID",
|
||||||
|
"midnightcontrols.menu.current_controller_guid": "GUID do controle atual: %s",
|
||||||
|
"midnightcontrols.menu.double_tap_to_sprint": "Toque duplo para correr",
|
||||||
|
"midnightcontrols.menu.double_tap_to_sprint.tooltip": "Alterna se a tecla Andar para Frente faz o jogador correr quando pressionada duas vezes rapidamente",
|
||||||
|
"midnightcontrols.menu.fast_block_placing": "Colocação Rápida de Blocos",
|
||||||
|
"midnightcontrols.menu.fast_block_placing.tooltip": "Enquanto voando no criativo, ativar a Colocação de Rápida de Blocos. §cEm alguns servidores isso pode ser considerado como trapaça.",
|
||||||
|
"midnightcontrols.menu.fly_drifting": "Derrapagem ao Voar",
|
||||||
|
"midnightcontrols.menu.fly_drifting.tooltip": "Enquanto voando, ativa a deparragem/inércia Vanilla.",
|
||||||
|
"midnightcontrols.menu.fly_drifting_vertical": "Derrapagem vertical ao Voar",
|
||||||
|
"midnightcontrols.menu.fly_drifting_vertical.tooltip": "Enquanto voando, ativa a deparragem/inércia vertical Vanilla.",
|
||||||
|
"midnightcontrols.menu.hud_enable": "Ativar HUD",
|
||||||
|
"midnightcontrols.menu.hud_enable.tooltip": "Alterna o indicador de botão do controle na tela.",
|
||||||
|
"midnightcontrols.menu.hud_side": "Lado do HUD",
|
||||||
|
"midnightcontrols.menu.hud_side.tooltip": "A posição do HUD.",
|
||||||
|
"midnightcontrols.menu.invert_right_x_axis": "Inverter X Direito",
|
||||||
|
"midnightcontrols.menu.invert_right_y_axis": "Inverter Y Direito",
|
||||||
|
"midnightcontrols.menu.joystick_as_mouse": "Sempre usar analógico esquerdo como mouse",
|
||||||
|
"midnightcontrols.menu.joystick_as_mouse.tooltip": "Fazer o analógico agir como um mouse em todos os menus.",
|
||||||
|
"midnightcontrols.menu.eye_tracker_as_mouse": "Usar o rastreador ocular como um mouse",
|
||||||
|
"midnightcontrols.menu.eye_tracker_as_mouse.tooltip": "Substituir o mouse com um dispositivo de rastreamento ocular, (por exemplo) o Tobii 5.",
|
||||||
|
"midnightcontrols.menu.eye_tracker_deadzone": "Tamanho da zona morta do rastreador ocular",
|
||||||
|
"midnightcontrols.menu.eye_tracker_deadzone.tooltip": "Parar o movimento da camera quando olhar perto da mira",
|
||||||
|
"midnightcontrols.menu.keyboard_controls": "Controles do teclado...",
|
||||||
|
"midnightcontrols.menu.left_dead_zone": "Zona morta do analógico esquerdo",
|
||||||
|
"midnightcontrols.menu.left_dead_zone.tooltip": "A zona morta para o analógico esquerdo do controle.",
|
||||||
|
"midnightcontrols.menu.mappings.open_input_str": "Abrir editor de arquivo de mapeamentos",
|
||||||
|
"midnightcontrols.menu.max_left_x_value": "Valor máximo do eixo X esquerdo",
|
||||||
|
"midnightcontrols.menu.max_left_x_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo X esquerdo. Útil se o seu eixo não usa toda a faixa e parece lento.",
|
||||||
|
"midnightcontrols.menu.max_left_y_value": "Valor máximo do eixo Y esquerdo",
|
||||||
|
"midnightcontrols.menu.max_left_y_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo Y esquerdo. Útil se o seu eixo não usa toda a faixa e parece lento.",
|
||||||
|
"midnightcontrols.menu.max_right_x_value": "Valor máximo do eixo X direito",
|
||||||
|
"midnightcontrols.menu.max_right_x_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo X direito. Útil se o seu eixo não usa toda a faixa e parece lento.",
|
||||||
|
"midnightcontrols.menu.max_right_y_value": "Valor máximo do eixo Y direito",
|
||||||
|
"midnightcontrols.menu.max_right_y_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo Y direito. Útil se o seu eixo não usa toda a faixa e parece lento.",
|
||||||
|
"midnightcontrols.menu.mouse_speed": "Velocidade do mouse",
|
||||||
|
"midnightcontrols.menu.mouse_speed.tooltip": "A velocidade do mouse emulado pelo controle",
|
||||||
|
"midnightcontrols.menu.move_chat": "Mover a caixa do chat para o topo",
|
||||||
|
"midnightcontrols.menu.move_chat.tooltip": "Move a caixa do chat para o topo, para uma melhor digitação em dispositivos com teclados na tela.",
|
||||||
|
"midnightcontrols.menu.multiple_mapping_tip": "(Dica: Você também pode inserir múltiplos mapeamentos ao mesmo tempo)",
|
||||||
|
"midnightcontrols.menu.reacharound.horizontal": "Colocação frontal de blocos",
|
||||||
|
"midnightcontrols.menu.reacharound.horizontal.tooltip": "Ativa colocação frontal de blocos, §cEm alguns servidores isso pode ser considerado como trapaça.§r.",
|
||||||
|
"midnightcontrols.menu.reacharound.vertical": "Alcance vertical",
|
||||||
|
"midnightcontrols.menu.reacharound.vertical.tooltip": "Ativa alcance vertical, §c§cEm alguns servidores isso pode ser considerado como trapaça.§r.",
|
||||||
|
"midnightcontrols.menu.reload_controller_mappings": "Recarregar o mapeamento do controle",
|
||||||
|
"midnightcontrols.menu.reload_controller_mappings.tooltip": "Recarrega o arquivo de mapeamentos do controle.",
|
||||||
|
"midnightcontrols.menu.right_dead_zone": "Zona morta do analógico direito",
|
||||||
|
"midnightcontrols.menu.right_dead_zone.tooltip": "A zona morta para o analógico direito do controle..",
|
||||||
|
"midnightcontrols.menu.rotation_speed": "Velocidade de rotação do eixo X",
|
||||||
|
"midnightcontrols.menu.rotation_speed.tooltip": "A velocidade de rotação do eixo X da câmera no modo controle.",
|
||||||
|
"midnightcontrols.menu.y_axis_rotation_speed": "Velocidade de rotação do eixo Y",
|
||||||
|
"midnightcontrols.menu.y_axis_rotation_speed.tooltip": "A velocidade de rotação do eixo Y da câmera no modo controle.",
|
||||||
|
"midnightcontrols.menu.separate_controller_profile": "Separar perfil do controle",
|
||||||
|
"midnightcontrols.menu.separator.controller": "Controle",
|
||||||
|
"midnightcontrols.menu.separator.general": "Geral",
|
||||||
|
"midnightcontrols.menu.title": "MidnightControls - Configurações",
|
||||||
|
"midnightcontrols.menu.title.controller": "Configurações do controle",
|
||||||
|
"midnightcontrols.menu.title.controller_controls": "Mapeamento de controle",
|
||||||
|
"midnightcontrols.menu.title.gameplay": "Configurações de jogabilidade",
|
||||||
|
"midnightcontrols.menu.title.general": "Configurações gerais",
|
||||||
|
"midnightcontrols.menu.title.hud": "Configurações de HUD",
|
||||||
|
"midnightcontrols.menu.title.mappings.string": "Editor de arquivo de mapeamentos",
|
||||||
|
"midnightcontrols.menu.title.touch": "Configurações de toque",
|
||||||
|
"midnightcontrols.menu.title.visual": "Configurações de aparência",
|
||||||
|
"midnightcontrols.menu.touch_break_delay": "Atrasado de destruição do toque",
|
||||||
|
"midnightcontrols.menu.touch_speed": "Velocidade do toque",
|
||||||
|
"midnightcontrols.menu.invert_touch": "Inverter direção do toque",
|
||||||
|
"midnightcontrols.menu.touch_mode": "Modo de interação de toque",
|
||||||
|
"midnightcontrols.menu.touch_transparency": "Transparência do HUD de toque",
|
||||||
|
"midnightcontrols.menu.touch_with_controller": "Toque no modo do controle",
|
||||||
|
"midnightcontrols.menu.unfocused_input": "Entrada desfocada",
|
||||||
|
"midnightcontrols.menu.unfocused_input.tooltip": "Permite entrada de sinais do controle quando a janela não está em foco.",
|
||||||
|
"midnightcontrols.menu.virtual_mouse": "Mouse virtual",
|
||||||
|
"midnightcontrols.menu.virtual_mouse.tooltip": "Ativa o mouse virtual, que é útil durante o modo tela dividida.",
|
||||||
|
"midnightcontrols.menu.virtual_mouse.skin": "Tema do mouse virtual",
|
||||||
|
"midnightcontrols.menu.hide_cursor": "Desativar cursor do mouse padrão",
|
||||||
|
"midnightcontrols.menu.hide_cursor.tooltip": "Esconde o cursor padrão do mouse, deixando apenas o mouse virtual visível.",
|
||||||
|
"midnightcontrols.narrator.unbound": "Desmapear %s",
|
||||||
|
"midnightcontrols.not_bound": "Não mapeado",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.default_light": "Padrão claro",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.default_dark": "Padrão escuro",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.second_light": "Segundo claro",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.second_dark": "Segundo escuro",
|
||||||
|
"midnightcontrols.midnightconfig.category.controller": "Controle",
|
||||||
|
"midnightcontrols.midnightconfig.category.misc": "Variados",
|
||||||
|
"midnightcontrols.midnightconfig.category.screens": "Telas",
|
||||||
|
"midnightcontrols.midnightconfig.category.gameplay": "Jogabilidade",
|
||||||
|
"midnightcontrols.midnightconfig.category.touch": "Toque",
|
||||||
|
"midnightcontrols.midnightconfig.category.visual": "Visual",
|
||||||
|
"modmenu.descriptionTranslation.midnightcontrols": "Adiciona suporte a controles e aprimora o controle no geral.\nDerivado do LambdaControls, que infelizmente foi descontinuado."
|
||||||
|
}
|
||||||
@@ -1,27 +1,29 @@
|
|||||||
{
|
{
|
||||||
"required": true,
|
"required": true,
|
||||||
"package": "eu.midnightdust.midnightcontrols.client.mixin",
|
"package": "eu.midnightdust.midnightcontrols.client.mixin",
|
||||||
"compatibilityLevel": "JAVA_16",
|
"compatibilityLevel": "JAVA_21",
|
||||||
"client": [
|
"client": [
|
||||||
"ClickableWidgetAccessor",
|
|
||||||
"AdvancementsScreenAccessor",
|
"AdvancementsScreenAccessor",
|
||||||
|
"ChatScreenMixin",
|
||||||
|
"ClickableWidgetAccessor",
|
||||||
"ClientPlayerEntityMixin",
|
"ClientPlayerEntityMixin",
|
||||||
"GameOptionsScreenMixin",
|
|
||||||
"CreativeInventoryScreenAccessor",
|
"CreativeInventoryScreenAccessor",
|
||||||
|
"DrawContextAccessor",
|
||||||
|
"GameOptionsScreenMixin",
|
||||||
"GameRendererMixin",
|
"GameRendererMixin",
|
||||||
"HandledScreenMixin",
|
"HandledScreenMixin",
|
||||||
"KeyBindingMixin",
|
|
||||||
"InputUtilMixin",
|
"InputUtilMixin",
|
||||||
"MinecraftClientMixin",
|
|
||||||
"MouseMixin",
|
|
||||||
"MouseAccessor",
|
|
||||||
"ChatScreenMixin",
|
|
||||||
"RecipeBookWidgetAccessor",
|
|
||||||
"WorldRendererMixin",
|
|
||||||
"KeyBindingIDAccessor",
|
"KeyBindingIDAccessor",
|
||||||
"TabNavigationWidgetAccessor",
|
"KeyBindingMixin",
|
||||||
|
"KeyboardMixin",
|
||||||
|
"MinecraftClientMixin",
|
||||||
|
"MouseAccessor",
|
||||||
|
"MouseMixin",
|
||||||
|
"RecipeBookScreenAccessor",
|
||||||
|
"RecipeBookWidgetAccessor",
|
||||||
"ScreenMixin",
|
"ScreenMixin",
|
||||||
"KeyboardMixin"
|
"TabNavigationWidgetAccessor",
|
||||||
|
"WorldRendererMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"package": "eu.midnightdust.midnightcontrols.client.compat.mixin",
|
"package": "eu.midnightdust.midnightcontrols.client.compat.mixin",
|
||||||
"plugin": "eu.midnightdust.midnightcontrols.client.compat.MidnightControlsMixinPlugin",
|
"plugin": "eu.midnightdust.midnightcontrols.client.compat.MidnightControlsMixinPlugin",
|
||||||
"compatibilityLevel": "JAVA_16",
|
"compatibilityLevel": "JAVA_21",
|
||||||
"client": [
|
"client": [
|
||||||
"sodium.SodiumOptionsGUIAccessor"
|
"sodium.SodiumOptionsGUIAccessor"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ dependencies {
|
|||||||
modImplementation include ("maven.modrinth:midnightlib:${rootProject.midnightlib_version}-fabric")
|
modImplementation include ("maven.modrinth:midnightlib:${rootProject.midnightlib_version}-fabric")
|
||||||
modImplementation include ("maven.modrinth:obsidianui:${rootProject.obsidianui_version}-fabric") {}
|
modImplementation include ("maven.modrinth:obsidianui:${rootProject.obsidianui_version}-fabric") {}
|
||||||
include 'org.aperlambda:lambdajcommon:1.8.1'
|
include 'org.aperlambda:lambdajcommon:1.8.1'
|
||||||
modImplementation "maven.modrinth:emi:${project.emi_version}"
|
modCompileOnly "maven.modrinth:emi:${project.emi_version}"
|
||||||
|
|
||||||
common(project(path: ":common", configuration: "namedElements")) { transitive false }
|
common(project(path: ":common", configuration: "namedElements")) { transitive false }
|
||||||
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
|
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
|
||||||
@@ -92,7 +92,7 @@ unifiedPublishing {
|
|||||||
curseforge {
|
curseforge {
|
||||||
token = CURSEFORGE_TOKEN
|
token = CURSEFORGE_TOKEN
|
||||||
id = rootProject.curseforge_id
|
id = rootProject.curseforge_id
|
||||||
gameVersions.addAll "Java 21", project.minecraft_version
|
gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ unifiedPublishing {
|
|||||||
token = MODRINTH_TOKEN
|
token = MODRINTH_TOKEN
|
||||||
id = rootProject.modrinth_id
|
id = rootProject.modrinth_id
|
||||||
version = "$project.version-$project.name"
|
version = "$project.version-$project.name"
|
||||||
gameVersions.addAll project.minecraft_version
|
gameVersions.addAll project.minecraft_version, project.supported_versions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,13 +54,14 @@
|
|||||||
"fabric": ">=0.71.0",
|
"fabric": ">=0.71.0",
|
||||||
"minecraft": ">=1.20.5",
|
"minecraft": ">=1.20.5",
|
||||||
"obsidianui": ">=0.2.5",
|
"obsidianui": ">=0.2.5",
|
||||||
"java": ">=17"
|
"java": ">=21"
|
||||||
},
|
},
|
||||||
"suggests": {
|
"suggests": {
|
||||||
"kontrolo": "*"
|
"kontrolo": "*"
|
||||||
},
|
},
|
||||||
"breaks": {
|
"breaks": {
|
||||||
"lambdacontrols": "*",
|
"lambdacontrols": "*",
|
||||||
"modmenu": "<1.12.2"
|
"modmenu": "<1.12.2",
|
||||||
|
"sodium": "<=0.5.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,31 +2,32 @@
|
|||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.jvmargs=-Xmx2048M
|
org.gradle.jvmargs=-Xmx2048M
|
||||||
|
|
||||||
minecraft_version=1.21
|
minecraft_version=1.21.3
|
||||||
yarn_mappings=1.21+build.2
|
supported_versions=1.21.2
|
||||||
|
yarn_mappings=1.21.3+build.2
|
||||||
enabled_platforms=fabric,neoforge
|
enabled_platforms=fabric,neoforge
|
||||||
|
|
||||||
archives_base_name=midnightcontrols
|
archives_base_name=midnightcontrols
|
||||||
mod_version=1.10.0-alpha.1
|
mod_version=1.10.1
|
||||||
maven_group=eu.midnightdust
|
maven_group=eu.midnightdust
|
||||||
release_type=release
|
release_type=beta
|
||||||
modrinth_id = bXX9h73M
|
modrinth_id = bXX9h73M
|
||||||
curseforge_id = 621768
|
curseforge_id = 621768
|
||||||
# Configure the IDs here after creating the projects on the websites
|
# Configure the IDs here after creating the projects on the websites
|
||||||
|
|
||||||
midnightlib_version=1.5.7
|
midnightlib_version=1.6.4
|
||||||
|
|
||||||
fabric_loader_version=0.15.11
|
fabric_loader_version=0.16.9
|
||||||
fabric_api_version=0.100.1+1.21
|
fabric_api_version=0.107.3+1.21.3
|
||||||
|
|
||||||
neoforge_version=21.0.14-beta
|
neoforge_version=21.3.28-beta
|
||||||
yarn_mappings_patch_neoforge_version = 1.21+build.4
|
yarn_mappings_patch_neoforge_version = 1.21+build.4
|
||||||
|
|
||||||
quilt_loader_version=0.19.0-beta.18
|
quilt_loader_version=0.19.0-beta.18
|
||||||
quilt_fabric_api_version=7.0.1+0.83.0-1.20
|
quilt_fabric_api_version=7.0.1+0.83.0-1.20
|
||||||
|
|
||||||
sodium_version=mc1.21-0.5.11
|
sodium_version=mc1.21-0.6.0-beta.1
|
||||||
obsidianui_version=0.2.7+mc1.21
|
obsidianui_version=0.2.10+mc1.21.3
|
||||||
modmenu_version=10.0.0-beta.1
|
modmenu_version=10.0.0-beta.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.+
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ unifiedPublishing {
|
|||||||
curseforge {
|
curseforge {
|
||||||
token = CURSEFORGE_TOKEN
|
token = CURSEFORGE_TOKEN
|
||||||
id = rootProject.curseforge_id
|
id = rootProject.curseforge_id
|
||||||
gameVersions.addAll "Java 21", project.minecraft_version
|
gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ unifiedPublishing {
|
|||||||
token = MODRINTH_TOKEN
|
token = MODRINTH_TOKEN
|
||||||
id = rootProject.modrinth_id
|
id = rootProject.modrinth_id
|
||||||
version = "$project.version-$project.name"
|
version = "$project.version-$project.name"
|
||||||
gameVersions.addAll project.minecraft_version
|
gameVersions.addAll project.minecraft_version, project.supported_versions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,12 @@ public class NetworkUtilImpl {
|
|||||||
handler.send(packet);
|
handler.send(packet);
|
||||||
}
|
}
|
||||||
public static void sendPayloadC2S(CustomPayload payload) {
|
public static void sendPayloadC2S(CustomPayload payload) {
|
||||||
if (handler != null && client.world != null)
|
if (handler != null && client.world != null) {
|
||||||
handler.send(new CustomPayloadC2SPacket(payload));
|
try {
|
||||||
|
handler.send(new CustomPayloadC2SPacket(payload));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ public class MidnightControlsNeoforge {
|
|||||||
public class CommonEvents {
|
public class CommonEvents {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void registerPayloads(RegisterPayloadHandlersEvent event) {
|
public static void registerPayloads(RegisterPayloadHandlersEvent event) {
|
||||||
PayloadRegistrar registrar = event.registrar("1");
|
PayloadRegistrar registrar = event.registrar("1").optional();
|
||||||
registrar.playToServer(HelloPayload.PACKET_ID, HelloPayload.codec, (payload, context) -> {
|
registrar.playToServer(HelloPayload.PACKET_ID, HelloPayload.codec, (payload, context) -> {
|
||||||
ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> new PlayerChangeControlsModeEvent(context.player(), controlsMode));
|
ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> new PlayerChangeControlsModeEvent(context.player(), controlsMode));
|
||||||
context.connection().send(new CustomPayloadS2CPacket(new FeaturePayload(MidnightControlsFeature.HORIZONTAL_REACHAROUND)));
|
context.connection().send(new CustomPayloadS2CPacket(new FeaturePayload(MidnightControlsFeature.HORIZONTAL_REACHAROUND)));
|
||||||
|
|||||||
Reference in New Issue
Block a user