forked from Clones/Controlify
➕ Update to Minecraft 1.20
This commit is contained in:
@ -62,7 +62,7 @@ val minecraftVersion = libs.versions.minecraft.get()
|
|||||||
dependencies {
|
dependencies {
|
||||||
minecraft(libs.minecraft)
|
minecraft(libs.minecraft)
|
||||||
mappings(loom.layered {
|
mappings(loom.layered {
|
||||||
mappings("org.quiltmc:quilt-mappings:$minecraftVersion+build.${libs.versions.quilt.mappings.get()}:intermediary-v2")
|
//mappings("org.quiltmc:quilt-mappings:$minecraftVersion+build.${libs.versions.quilt.mappings.get()}:intermediary-v2")
|
||||||
officialMojangMappings()
|
officialMojangMappings()
|
||||||
})
|
})
|
||||||
modImplementation(libs.fabric.loader)
|
modImplementation(libs.fabric.loader)
|
||||||
@ -107,12 +107,12 @@ dependencies {
|
|||||||
// sodium compat
|
// sodium compat
|
||||||
modImplementation(libs.sodium)
|
modImplementation(libs.sodium)
|
||||||
// iris compat
|
// iris compat
|
||||||
modImplementation(libs.iris)
|
// modImplementation(libs.iris)
|
||||||
modRuntimeOnly("org.anarres:jcpp:1.4.14")
|
// modRuntimeOnly("org.anarres:jcpp:1.4.14")
|
||||||
modRuntimeOnly("io.github.douira:glsl-transformer:2.0.0-pre9")
|
// modRuntimeOnly("io.github.douira:glsl-transformer:2.0.0-pre9")
|
||||||
// immediately-fast compat
|
// immediately-fast compat
|
||||||
modImplementation(libs.immediately.fast)
|
// modImplementation(libs.immediately.fast)
|
||||||
modRuntimeOnly("net.lenni0451:Reflect:1.1.0")
|
// modRuntimeOnly("net.lenni0451:Reflect:1.1.0")
|
||||||
|
|
||||||
// testmod
|
// testmod
|
||||||
"testmodImplementation"(sourceSets.main.get().output)
|
"testmodImplementation"(sourceSets.main.get().output)
|
||||||
|
@ -8,16 +8,16 @@ machete = "2.+"
|
|||||||
grgit = "5.0.+"
|
grgit = "5.0.+"
|
||||||
blossom = "1.3.+"
|
blossom = "1.3.+"
|
||||||
|
|
||||||
minecraft = "1.19.4"
|
minecraft = "1.20-pre2"
|
||||||
quilt_mappings = "10"
|
#quilt_mappings = "10"
|
||||||
fabric_loader = "0.14.19"
|
fabric_loader = "0.14.19"
|
||||||
fabric_api = "0.81.0+1.19.4"
|
fabric_api = "0.81.2+1.20"
|
||||||
mixin_extras = "0.2.0-beta.7"
|
mixin_extras = "0.2.0-beta.7"
|
||||||
yet_another_config_lib = "2.5.1+1.19.4"
|
yet_another_config_lib = "2.5.1+1.19.4+1.20.x.dev-SNAPSHOT+1.20.x.dev-SNAPSHOT"
|
||||||
mod_menu = "6.2.1"
|
mod_menu = "7.0.0-beta.2"
|
||||||
hid4java = "0.7.0"
|
hid4java = "0.7.0"
|
||||||
quilt_json5 = "1.0.3"
|
quilt_json5 = "1.0.3"
|
||||||
sodium = "mc1.19.4-0.4.10"
|
sodium = "f041f7ccba"
|
||||||
iris = "1.6.3+1.19.4"
|
iris = "1.6.3+1.19.4"
|
||||||
immediately_fast = "1.1.12+1.19.4"
|
immediately_fast = "1.1.12+1.19.4"
|
||||||
sdl2_jni = "2.26.5-18"
|
sdl2_jni = "2.26.5-18"
|
||||||
@ -32,7 +32,7 @@ yet_another_config_lib = { module = "dev.isxander.yacl:yet-another-config-lib-fa
|
|||||||
mod_menu = { module = "com.terraformersmc:modmenu", version.ref = "mod_menu" }
|
mod_menu = { module = "com.terraformersmc:modmenu", version.ref = "mod_menu" }
|
||||||
hid4java = { module = "org.hid4java:hid4java", version.ref = "hid4java" }
|
hid4java = { module = "org.hid4java:hid4java", version.ref = "hid4java" }
|
||||||
quilt_json5 = { module = "org.quiltmc:quilt-json5", version.ref = "quilt_json5" }
|
quilt_json5 = { module = "org.quiltmc:quilt-json5", version.ref = "quilt_json5" }
|
||||||
sodium = { module = "maven.modrinth:sodium", version.ref = "sodium" }
|
sodium = { module = "com.github.CaffeineMC:sodium-fabric", version.ref = "sodium" }
|
||||||
iris = { module = "maven.modrinth:iris", version.ref = "iris" }
|
iris = { module = "maven.modrinth:iris", version.ref = "iris" }
|
||||||
immediately_fast = { module = "maven.modrinth:immediatelyfast", version.ref = "immediately_fast" }
|
immediately_fast = { module = "maven.modrinth:immediatelyfast", version.ref = "immediately_fast" }
|
||||||
sdl2_jni = { module = "dev.isxander:sdl2-jni", version.ref = "sdl2_jni" }
|
sdl2_jni = { module = "dev.isxander:sdl2-jni", version.ref = "sdl2_jni" }
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package dev.isxander.controlify.api.bind;
|
package dev.isxander.controlify.api.bind;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
|
||||||
public interface BindRenderer {
|
public interface BindRenderer {
|
||||||
DrawSize size();
|
DrawSize size();
|
||||||
|
|
||||||
void render(PoseStack poseStack, int x, int centerY);
|
void render(GuiGraphics graphics, int x, int centerY);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package dev.isxander.controlify.bindings;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
import dev.isxander.controlify.api.bind.BindRenderer;
|
import dev.isxander.controlify.api.bind.BindRenderer;
|
||||||
import dev.isxander.controlify.api.bind.ControllerBinding;
|
import dev.isxander.controlify.api.bind.ControllerBinding;
|
||||||
@ -18,6 +17,7 @@ import dev.isxander.controlify.controller.joystick.JoystickState;
|
|||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import dev.isxander.yacl.api.Option;
|
import dev.isxander.yacl.api.Option;
|
||||||
import net.minecraft.client.KeyMapping;
|
import net.minecraft.client.KeyMapping;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.locale.Language;
|
import net.minecraft.locale.Language;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -302,8 +302,8 @@ public class ControllerBindingImpl<T extends ControllerState> implements Control
|
|||||||
|
|
||||||
private record BindRendererImpl(IBind<?> bind) implements BindRenderer {
|
private record BindRendererImpl(IBind<?> bind) implements BindRenderer {
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack poseStack, int x, int centerY) {
|
public void render(GuiGraphics graphics, int x, int centerY) {
|
||||||
bind.draw(poseStack, x, centerY);
|
bind.draw(graphics, x, centerY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -514,7 +514,7 @@ public class ControllerBindings<T extends ControllerState> {
|
|||||||
|
|
||||||
if (Controlify.instance().currentInputMode() != InputMode.CONTROLLER)
|
if (Controlify.instance().currentInputMode() != InputMode.CONTROLLER)
|
||||||
return;
|
return;
|
||||||
if (Minecraft.getInstance().screen != null && !Minecraft.getInstance().screen.passEvents)
|
if (Minecraft.getInstance().screen != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (var binding : registry().values()) {
|
for (var binding : registry().values()) {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package dev.isxander.controlify.bindings;
|
package dev.isxander.controlify.bindings;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.controller.ControllerState;
|
import dev.isxander.controlify.controller.ControllerState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
|
||||||
public class EmptyBind<T extends ControllerState> implements IBind<T> {
|
public class EmptyBind<T extends ControllerState> implements IBind<T> {
|
||||||
public static final String BIND_ID = "empty";
|
public static final String BIND_ID = "empty";
|
||||||
@ -20,7 +20,7 @@ public class EmptyBind<T extends ControllerState> implements IBind<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(PoseStack matrices, int x, int centerY) {
|
public void draw(GuiGraphics graphics, int x, int centerY) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
package dev.isxander.controlify.bindings;
|
package dev.isxander.controlify.bindings;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.controller.gamepad.BuiltinGamepadTheme;
|
import dev.isxander.controlify.controller.gamepad.BuiltinGamepadTheme;
|
||||||
import dev.isxander.controlify.controller.gamepad.GamepadController;
|
import dev.isxander.controlify.controller.gamepad.GamepadController;
|
||||||
import dev.isxander.controlify.controller.gamepad.GamepadState;
|
import dev.isxander.controlify.controller.gamepad.GamepadState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -31,13 +29,9 @@ public class GamepadBind implements IBind<GamepadState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(PoseStack matrices, int x, int centerY) {
|
public void draw(GuiGraphics graphics, int x, int centerY) {
|
||||||
ResourceLocation texture = getTexture(gamepad.config().theme);
|
ResourceLocation texture = getTexture(gamepad.config().theme);
|
||||||
|
graphics.blit(texture, x, centerY - 22 / 2, 0, 0, 22, 22, 22, 22);
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
|
||||||
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
|
|
||||||
|
|
||||||
GuiComponent.blit(matrices, x, centerY - 22 / 2, 0, 0, 22, 22, 22, 22);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package dev.isxander.controlify.bindings;
|
package dev.isxander.controlify.bindings;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.controller.*;
|
import dev.isxander.controlify.controller.*;
|
||||||
import dev.isxander.controlify.controller.gamepad.GamepadController;
|
import dev.isxander.controlify.controller.gamepad.GamepadController;
|
||||||
import dev.isxander.controlify.controller.joystick.SingleJoystickController;
|
import dev.isxander.controlify.controller.joystick.SingleJoystickController;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
|
||||||
public interface IBind<S extends ControllerState> {
|
public interface IBind<S extends ControllerState> {
|
||||||
float state(S state);
|
float state(S state);
|
||||||
@ -13,7 +13,7 @@ public interface IBind<S extends ControllerState> {
|
|||||||
return state(state) > controller().config().buttonActivationThreshold;
|
return state(state) > controller().config().buttonActivationThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw(PoseStack matrices, int x, int centerY);
|
void draw(GuiGraphics graphics, int x, int centerY);
|
||||||
DrawSize drawSize();
|
DrawSize drawSize();
|
||||||
|
|
||||||
JsonObject toJson();
|
JsonObject toJson();
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package dev.isxander.controlify.bindings;
|
package dev.isxander.controlify.bindings;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickController;
|
import dev.isxander.controlify.controller.joystick.JoystickController;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||||
@ -10,7 +8,7 @@ import dev.isxander.controlify.controller.joystick.mapping.JoystickMapping;
|
|||||||
import dev.isxander.controlify.controller.joystick.mapping.UnmappedJoystickMapping;
|
import dev.isxander.controlify.controller.joystick.mapping.UnmappedJoystickMapping;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -38,7 +36,7 @@ public class JoystickAxisBind implements IBind<JoystickState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(PoseStack matrices, int x, int centerY) {
|
public void draw(GuiGraphics graphics, int x, int centerY) {
|
||||||
JoystickMapping mapping = joystick.mapping();
|
JoystickMapping mapping = joystick.mapping();
|
||||||
|
|
||||||
String type = joystick.type().themeId();
|
String type = joystick.type().themeId();
|
||||||
@ -46,14 +44,12 @@ public class JoystickAxisBind implements IBind<JoystickState> {
|
|||||||
String direction = mapping.axes()[axisIndex].getDirectionIdentifier(axisIndex, this.direction);
|
String direction = mapping.axes()[axisIndex].getDirectionIdentifier(axisIndex, this.direction);
|
||||||
var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/axis_" + axis + "_" + direction + ".png");
|
var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/axis_" + axis + "_" + direction + ".png");
|
||||||
|
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
graphics.blit(texture, x, centerY - 11, 0, 0, 22, 22, 22, 22);
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
|
||||||
GuiComponent.blit(matrices, x, centerY - 11, 0, 0, 22, 22, 22, 22);
|
|
||||||
|
|
||||||
if (mapping instanceof UnmappedJoystickMapping) {
|
if (mapping instanceof UnmappedJoystickMapping) {
|
||||||
var text = Integer.toString(axisIndex + 1);
|
var text = Integer.toString(axisIndex + 1);
|
||||||
var font = Minecraft.getInstance().font;
|
var font = Minecraft.getInstance().font;
|
||||||
GuiComponent.drawCenteredString(matrices, font, text, x + 11, centerY - font.lineHeight / 2, 0xFFFFFF);
|
graphics.drawCenteredString(font, text, x + 11, centerY - font.lineHeight / 2, 0xFFFFFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
package dev.isxander.controlify.bindings;
|
package dev.isxander.controlify.bindings;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickController;
|
import dev.isxander.controlify.controller.joystick.JoystickController;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -29,14 +27,12 @@ public class JoystickButtonBind implements IBind<JoystickState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(PoseStack matrices, int x, int centerY) {
|
public void draw(GuiGraphics graphics, int x, int centerY) {
|
||||||
String type = joystick.type().themeId();
|
String type = joystick.type().themeId();
|
||||||
String button = joystick.mapping().buttons()[buttonIndex].identifier();
|
String button = joystick.mapping().buttons()[buttonIndex].identifier();
|
||||||
var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/button_" + button + ".png");
|
var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/button_" + button + ".png");
|
||||||
|
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
graphics.blit(texture, x, centerY - 11, 0, 0, 22, 22, 22, 22);
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
|
||||||
GuiComponent.blit(matrices, x, centerY - 11, 0, 0, 22, 22, 22, 22);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
package dev.isxander.controlify.bindings;
|
package dev.isxander.controlify.bindings;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickController;
|
import dev.isxander.controlify.controller.joystick.JoystickController;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -31,7 +29,7 @@ public class JoystickHatBind implements IBind<JoystickState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(PoseStack matrices, int x, int centerY) {
|
public void draw(GuiGraphics graphics, int x, int centerY) {
|
||||||
String type = joystick.type().themeId();
|
String type = joystick.type().themeId();
|
||||||
String hat = joystick.mapping().hats()[hatIndex].identifier();
|
String hat = joystick.mapping().hats()[hatIndex].identifier();
|
||||||
String direction = "centered";
|
String direction = "centered";
|
||||||
@ -45,10 +43,7 @@ public class JoystickHatBind implements IBind<JoystickState> {
|
|||||||
direction = "right";
|
direction = "right";
|
||||||
|
|
||||||
var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/hat" + hat + "_" + direction + ".png");
|
var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/hat" + hat + "_" + direction + ".png");
|
||||||
|
graphics.blit(texture, x, centerY - 11, 0, 0, 22, 22, 22, 22);
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
|
||||||
GuiComponent.blit(matrices, x, centerY - 11, 0, 0, 22, 22, 22, 22);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package dev.isxander.controlify.compatibility.immediatelyfast;
|
package dev.isxander.controlify.compatibility.immediatelyfast;
|
||||||
|
|
||||||
import net.raphimc.immediatelyfast.feature.batching.BatchingBuffers;
|
//import net.raphimc.immediatelyfast.feature.batching.BatchingBuffers;
|
||||||
|
|
||||||
public class ImmediatelyFastCompat {
|
public class ImmediatelyFastCompat {
|
||||||
public static void beginHudBatching() {
|
public static void beginHudBatching() {
|
||||||
BatchingBuffers.beginHudBatching();
|
// BatchingBuffers.beginHudBatching();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void endHudBatching() {
|
public static void endHudBatching() {
|
||||||
BatchingBuffers.endHudBatching();
|
// BatchingBuffers.endHudBatching();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,8 @@ import dev.isxander.yacl.api.Option;
|
|||||||
import dev.isxander.yacl.api.utils.Dimension;
|
import dev.isxander.yacl.api.utils.Dimension;
|
||||||
import dev.isxander.yacl.gui.YACLScreen;
|
import dev.isxander.yacl.gui.YACLScreen;
|
||||||
import dev.isxander.yacl.gui.controllers.ControllerWidget;
|
import dev.isxander.yacl.gui.controllers.ControllerWidget;
|
||||||
import dev.isxander.yacl.gui.utils.GuiUtils;
|
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
@ -60,12 +60,12 @@ public abstract class AbstractBindController<T extends ControllerState> implemen
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void drawValueText(PoseStack matrices, int mouseX, int mouseY, float delta) {
|
protected void drawValueText(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
|
||||||
if (awaitingControllerInput) {
|
if (awaitingControllerInput) {
|
||||||
textRenderer.drawShadow(matrices, awaitingText, getDimension().xLimit() - textRenderer.width(awaitingText) - getXPadding(), getDimension().centerY() - textRenderer.lineHeight / 2f, 0xFFFFFF);
|
graphics.drawString(textRenderer, awaitingText, getDimension().xLimit() - textRenderer.width(awaitingText) - getXPadding(), (int)(getDimension().centerY() - textRenderer.lineHeight / 2f), 0xFFFFFF, true);
|
||||||
} else {
|
} else {
|
||||||
var bind = control.option().pendingValue();
|
var bind = control.option().pendingValue();
|
||||||
bind.draw(matrices, getDimension().xLimit() - bind.drawSize().width(), getDimension().centerY());
|
bind.draw(graphics, getDimension().xLimit() - bind.drawSize().width(), getDimension().centerY());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import dev.isxander.controlify.bindings.JoystickAxisBind;
|
|||||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -19,14 +19,15 @@ public abstract class GenericRenderer implements JoystickRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size) {
|
||||||
if (annotation != null) {
|
if (annotation != null) {
|
||||||
minecraft.font.draw(
|
graphics.drawString(
|
||||||
poseStack,
|
minecraft.font,
|
||||||
annotation,
|
annotation,
|
||||||
x + size + 2 - minecraft.font.width(annotation),
|
x + size + 2 - minecraft.font.width(annotation),
|
||||||
centerY + size/2f - minecraft.font.lineHeight * 0.75f,
|
(int)(centerY + size/2f - minecraft.font.lineHeight * 0.75f),
|
||||||
-1
|
-1,
|
||||||
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,34 +42,31 @@ public abstract class GenericRenderer implements JoystickRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size) {
|
||||||
RenderSystem.setShaderTexture(0, BUTTON_TEXTURE);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
graphics.pose().translate(x, centerY, 0);
|
||||||
|
|
||||||
poseStack.pushPose();
|
|
||||||
poseStack.translate(x, centerY, 0);
|
|
||||||
|
|
||||||
float scale = (float) size / 22f;
|
float scale = (float) size / 22f;
|
||||||
poseStack.scale(scale, scale, 1);
|
graphics.pose().scale(scale, scale, 1);
|
||||||
poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
||||||
|
|
||||||
GuiComponent.blit(poseStack, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE);
|
graphics.blit(BUTTON_TEXTURE, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE);
|
||||||
|
|
||||||
poseStack.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
super.render(poseStack, x, centerY, size);
|
super.render(graphics, x, centerY, size);
|
||||||
|
|
||||||
return new DrawSize(size, size);
|
return new DrawSize(size, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size, boolean down) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, boolean down) {
|
||||||
return this.render(poseStack, x, centerY, size);
|
return this.render(graphics, x, centerY, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, boolean down) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, boolean down) {
|
||||||
return this.render(poseStack, x, centerY, DEFAULT_SIZE);
|
return this.render(graphics, x, centerY, DEFAULT_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,28 +78,25 @@ public abstract class GenericRenderer implements JoystickRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) {
|
||||||
RenderSystem.setShaderTexture(0, AXIS_TEXTURE);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
graphics.pose().translate(x, centerY, 0);
|
||||||
|
|
||||||
poseStack.pushPose();
|
|
||||||
poseStack.translate(x, centerY, 0);
|
|
||||||
|
|
||||||
float scale = (float) size / 22f;
|
float scale = (float) size / 22f;
|
||||||
poseStack.scale(scale, scale, 1);
|
graphics.pose().scale(scale, scale, 1);
|
||||||
poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
||||||
|
|
||||||
GuiComponent.blit(
|
graphics.blit(
|
||||||
poseStack,
|
AXIS_TEXTURE,
|
||||||
0, 0,
|
0, 0,
|
||||||
direction.ordinal() * DEFAULT_SIZE, 0,
|
direction.ordinal() * DEFAULT_SIZE, 0,
|
||||||
DEFAULT_SIZE, DEFAULT_SIZE,
|
DEFAULT_SIZE, DEFAULT_SIZE,
|
||||||
DEFAULT_SIZE * JoystickAxisBind.AxisDirection.values().length, DEFAULT_SIZE
|
DEFAULT_SIZE * JoystickAxisBind.AxisDirection.values().length, DEFAULT_SIZE
|
||||||
);
|
);
|
||||||
|
|
||||||
poseStack.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
super.render(poseStack, x, centerY, size);
|
super.render(graphics, x, centerY, size);
|
||||||
|
|
||||||
return new DrawSize(size, size);
|
return new DrawSize(size, size);
|
||||||
}
|
}
|
||||||
@ -115,28 +110,25 @@ public abstract class GenericRenderer implements JoystickRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickState.HatState hatState) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickState.HatState hatState) {
|
||||||
RenderSystem.setShaderTexture(0, HAT_TEXTURE);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
graphics.pose().translate(x, centerY, 0);
|
||||||
|
|
||||||
poseStack.pushPose();
|
|
||||||
poseStack.translate(x, centerY, 0);
|
|
||||||
|
|
||||||
float scale = (float) size / 22f;
|
float scale = (float) size / 22f;
|
||||||
poseStack.scale(scale, scale, 1);
|
graphics.pose().scale(scale, scale, 1);
|
||||||
poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
||||||
|
|
||||||
GuiComponent.blit(
|
graphics.blit(
|
||||||
poseStack,
|
HAT_TEXTURE,
|
||||||
0, 0,
|
0, 0,
|
||||||
hatState.ordinal() * DEFAULT_SIZE, 0,
|
hatState.ordinal() * DEFAULT_SIZE, 0,
|
||||||
DEFAULT_SIZE, DEFAULT_SIZE,
|
DEFAULT_SIZE, DEFAULT_SIZE,
|
||||||
DEFAULT_SIZE * JoystickState.HatState.values().length, DEFAULT_SIZE
|
DEFAULT_SIZE * JoystickState.HatState.values().length, DEFAULT_SIZE
|
||||||
);
|
);
|
||||||
|
|
||||||
poseStack.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
super.render(poseStack, x, centerY, size);
|
super.render(graphics, x, centerY, size);
|
||||||
|
|
||||||
return new DrawSize(size, size);
|
return new DrawSize(size, size);
|
||||||
}
|
}
|
||||||
|
@ -4,45 +4,46 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||||||
import dev.isxander.controlify.bindings.JoystickAxisBind;
|
import dev.isxander.controlify.bindings.JoystickAxisBind;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
|
||||||
public interface JoystickRenderer {
|
public interface JoystickRenderer {
|
||||||
int DEFAULT_SIZE = 22;
|
int DEFAULT_SIZE = 22;
|
||||||
|
|
||||||
DrawSize render(PoseStack poseStack, int x, int centerY, int size);
|
DrawSize render(GuiGraphics graphics, int x, int centerY, int size);
|
||||||
|
|
||||||
interface Button extends JoystickRenderer {
|
interface Button extends JoystickRenderer {
|
||||||
DrawSize render(PoseStack poseStack, int x, int centerY, int size, boolean down);
|
DrawSize render(GuiGraphics graphics, int x, int centerY, int size, boolean down);
|
||||||
|
|
||||||
default DrawSize render(PoseStack poseStack, int x, int centerY, boolean down) {
|
default DrawSize render(GuiGraphics graphics, int x, int centerY, boolean down) {
|
||||||
return render(poseStack, x, centerY, DEFAULT_SIZE, down);
|
return render(graphics, x, centerY, DEFAULT_SIZE, down);
|
||||||
}
|
}
|
||||||
|
|
||||||
default DrawSize render(PoseStack poseStack, int x, int centerY, int size) {
|
default DrawSize render(GuiGraphics graphics, int x, int centerY, int size) {
|
||||||
return render(poseStack, x, centerY, size, false);
|
return render(graphics, x, centerY, size, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Axis extends JoystickRenderer {
|
interface Axis extends JoystickRenderer {
|
||||||
DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction);
|
DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction);
|
||||||
|
|
||||||
default DrawSize render(PoseStack poseStack, int x, int centerY, JoystickAxisBind.AxisDirection direction) {
|
default DrawSize render(GuiGraphics graphics, int x, int centerY, JoystickAxisBind.AxisDirection direction) {
|
||||||
return render(poseStack, x, centerY, DEFAULT_SIZE, direction);
|
return render(graphics, x, centerY, DEFAULT_SIZE, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
default DrawSize render(PoseStack poseStack, int x, int centerY, int size) {
|
default DrawSize render(GuiGraphics graphics, int x, int centerY, int size) {
|
||||||
return render(poseStack, x, centerY, size, JoystickAxisBind.AxisDirection.POSITIVE);
|
return render(graphics, x, centerY, size, JoystickAxisBind.AxisDirection.POSITIVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Hat extends JoystickRenderer {
|
interface Hat extends JoystickRenderer {
|
||||||
DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickState.HatState state);
|
DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickState.HatState state);
|
||||||
|
|
||||||
default DrawSize render(PoseStack poseStack, int x, int centerY, JoystickState.HatState state) {
|
default DrawSize render(GuiGraphics graphics, int x, int centerY, JoystickState.HatState state) {
|
||||||
return render(poseStack, x, centerY, DEFAULT_SIZE, state);
|
return render(graphics, x, centerY, DEFAULT_SIZE, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
default DrawSize render(PoseStack poseStack, int x, int centerY, int size) {
|
default DrawSize render(GuiGraphics graphics, int x, int centerY, int size) {
|
||||||
return render(poseStack, x, centerY, size, JoystickState.HatState.CENTERED);
|
return render(graphics, x, centerY, size, JoystickState.HatState.CENTERED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,10 @@
|
|||||||
package dev.isxander.controlify.controller.joystick.render;
|
package dev.isxander.controlify.controller.joystick.render;
|
||||||
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.bindings.JoystickAxisBind;
|
import dev.isxander.controlify.bindings.JoystickAxisBind;
|
||||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
public abstract class ThemedRenderer {
|
public abstract class ThemedRenderer {
|
||||||
@ -27,20 +24,17 @@ public abstract class ThemedRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size, boolean down) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, boolean down) {
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
graphics.pose().translate(x, centerY, 0);
|
||||||
|
|
||||||
poseStack.pushPose();
|
|
||||||
poseStack.translate(x, centerY, 0);
|
|
||||||
|
|
||||||
float scale = (float) size / 22f;
|
float scale = (float) size / 22f;
|
||||||
poseStack.scale(scale, scale, 1);
|
graphics.pose().scale(scale, scale, 1);
|
||||||
poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
||||||
|
|
||||||
GuiComponent.blit(poseStack, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE);
|
graphics.blit(texture, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE);
|
||||||
|
|
||||||
poseStack.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
return new DrawSize(size, size);
|
return new DrawSize(size, size);
|
||||||
}
|
}
|
||||||
@ -55,26 +49,23 @@ public abstract class ThemedRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) {
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
graphics.pose().translate(x, centerY, 0);
|
||||||
|
|
||||||
poseStack.pushPose();
|
|
||||||
poseStack.translate(x, centerY, 0);
|
|
||||||
|
|
||||||
float scale = (float) size / 22f;
|
float scale = (float) size / 22f;
|
||||||
poseStack.scale(scale, scale, 1);
|
graphics.pose().scale(scale, scale, 1);
|
||||||
poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
||||||
|
|
||||||
GuiComponent.blit(
|
graphics.blit(
|
||||||
poseStack,
|
texture,
|
||||||
0, 0,
|
0, 0,
|
||||||
direction.ordinal() * DEFAULT_SIZE, 0,
|
direction.ordinal() * DEFAULT_SIZE, 0,
|
||||||
DEFAULT_SIZE, DEFAULT_SIZE,
|
DEFAULT_SIZE, DEFAULT_SIZE,
|
||||||
DEFAULT_SIZE * JoystickAxisBind.AxisDirection.values().length, DEFAULT_SIZE
|
DEFAULT_SIZE * JoystickAxisBind.AxisDirection.values().length, DEFAULT_SIZE
|
||||||
);
|
);
|
||||||
|
|
||||||
poseStack.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
return new DrawSize(size, size);
|
return new DrawSize(size, size);
|
||||||
}
|
}
|
||||||
@ -89,26 +80,23 @@ public abstract class ThemedRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickState.HatState hatState) {
|
public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickState.HatState hatState) {
|
||||||
RenderSystem.setShaderTexture(0, texture);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
graphics.pose().translate(x, centerY, 0);
|
||||||
|
|
||||||
poseStack.pushPose();
|
|
||||||
poseStack.translate(x, centerY, 0);
|
|
||||||
|
|
||||||
float scale = (float) size / 22f;
|
float scale = (float) size / 22f;
|
||||||
poseStack.scale(scale, scale, 1);
|
graphics.pose().scale(scale, scale, 1);
|
||||||
poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0);
|
||||||
|
|
||||||
GuiComponent.blit(
|
graphics.blit(
|
||||||
poseStack,
|
texture,
|
||||||
0, 0,
|
0, 0,
|
||||||
hatState.ordinal() * DEFAULT_SIZE, 0,
|
hatState.ordinal() * DEFAULT_SIZE, 0,
|
||||||
DEFAULT_SIZE, DEFAULT_SIZE,
|
DEFAULT_SIZE, DEFAULT_SIZE,
|
||||||
DEFAULT_SIZE * JoystickState.HatState.values().length, DEFAULT_SIZE
|
DEFAULT_SIZE * JoystickState.HatState.values().length, DEFAULT_SIZE
|
||||||
);
|
);
|
||||||
|
|
||||||
poseStack.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
return new DrawSize(size, size);
|
return new DrawSize(size, size);
|
||||||
}
|
}
|
||||||
|
@ -1,178 +0,0 @@
|
|||||||
package dev.isxander.controlify.gui.guide;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.InputMode;
|
|
||||||
import dev.isxander.controlify.api.ControlifyApi;
|
|
||||||
import dev.isxander.controlify.api.event.ControlifyEvents;
|
|
||||||
import dev.isxander.controlify.bindings.ControllerBindings;
|
|
||||||
import dev.isxander.controlify.compatibility.ControlifyCompat;
|
|
||||||
import dev.isxander.controlify.controller.Controller;
|
|
||||||
import dev.isxander.controlify.gui.layout.AnchorPoint;
|
|
||||||
import dev.isxander.controlify.gui.layout.ColumnLayoutComponent;
|
|
||||||
import dev.isxander.controlify.gui.layout.PositionedComponent;
|
|
||||||
import dev.isxander.controlify.gui.layout.RowLayoutComponent;
|
|
||||||
import dev.isxander.controlify.mixins.feature.guide.screen.AbstractContainerScreenAccessor;
|
|
||||||
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
|
||||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public final class ContainerButtonGuide {
|
|
||||||
private static PositionedComponent<ColumnLayoutComponent<RowLayoutComponent<GuideActionRenderer<ContainerGuideCtx>>>> leftLayout;
|
|
||||||
private static PositionedComponent<ColumnLayoutComponent<RowLayoutComponent<GuideActionRenderer<ContainerGuideCtx>>>> rightLayout;
|
|
||||||
|
|
||||||
public static void setup() {
|
|
||||||
ScreenEvents.BEFORE_INIT.register((minecraft, screen, sw, sh) -> {
|
|
||||||
removeLayout();
|
|
||||||
|
|
||||||
if (isScreenCompatible(screen)) {
|
|
||||||
setupLayout();
|
|
||||||
|
|
||||||
ScreenEvents.afterRender(screen).register((s, stack, mouseX, mouseY, tickDelta) -> {
|
|
||||||
// Fabric API provides the wrong matrixstack (which is translated -2000), behind
|
|
||||||
// the ortho near plane, so we need to translate it back to the front.
|
|
||||||
// https://github.com/FabricMC/fabric/pull/3061
|
|
||||||
stack.pushPose();
|
|
||||||
stack.translate(0, 0, 2000);
|
|
||||||
|
|
||||||
renderGuide((AbstractContainerScreen<?>) s, stack, tickDelta, mouseX, mouseY, sw, sh);
|
|
||||||
|
|
||||||
stack.popPose();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ControlifyEvents.INPUT_MODE_CHANGED.register(mode -> {
|
|
||||||
if (isScreenCompatible(Minecraft.getInstance().screen)) {
|
|
||||||
if (mode == InputMode.CONTROLLER) {
|
|
||||||
setupLayout();
|
|
||||||
} else {
|
|
||||||
removeLayout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setupLayout() {
|
|
||||||
ControllerBindings<?> bindings = ControlifyApi.get().getCurrentController()
|
|
||||||
.map(Controller::bindings)
|
|
||||||
.orElseThrow();
|
|
||||||
|
|
||||||
leftLayout = new PositionedComponent<>(
|
|
||||||
ColumnLayoutComponent.<RowLayoutComponent<GuideActionRenderer<ContainerGuideCtx>>>builder()
|
|
||||||
.spacing(2)
|
|
||||||
.colPadding(2, 2)
|
|
||||||
.elementPosition(ColumnLayoutComponent.ElementPosition.LEFT)
|
|
||||||
.element(RowLayoutComponent.<GuideActionRenderer<ContainerGuideCtx>>builder()
|
|
||||||
.spacing(5)
|
|
||||||
.rowPadding(0)
|
|
||||||
.elementPosition(RowLayoutComponent.ElementPosition.MIDDLE)
|
|
||||||
.element(new GuideActionRenderer<>(
|
|
||||||
new GuideAction<>(bindings.VMOUSE_LCLICK, ctx -> {
|
|
||||||
if (!ctx.holdingItem().isEmpty())
|
|
||||||
if (ctx.hoveredSlot() != null && ctx.hoveredSlot().hasItem())
|
|
||||||
if (ctx.hoveredSlot().mayPlace(ctx.holdingItem()))
|
|
||||||
if (ctx.holdingItem().getCount() > 1)
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.place_all"));
|
|
||||||
else
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.place_one"));
|
|
||||||
else
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.swap"));
|
|
||||||
else if (ctx.cursorOutsideContainer())
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.drop"));
|
|
||||||
if (ctx.hoveredSlot() != null && ctx.hoveredSlot().hasItem())
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.take"));
|
|
||||||
return Optional.empty();
|
|
||||||
}),
|
|
||||||
false, false
|
|
||||||
))
|
|
||||||
.element(new GuideActionRenderer<>(
|
|
||||||
new GuideAction<>(bindings.GUI_BACK, ctx -> {
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.exit"));
|
|
||||||
}),
|
|
||||||
false, false
|
|
||||||
))
|
|
||||||
.build())
|
|
||||||
.build(),
|
|
||||||
AnchorPoint.BOTTOM_LEFT,
|
|
||||||
0, 0,
|
|
||||||
AnchorPoint.BOTTOM_LEFT
|
|
||||||
);
|
|
||||||
|
|
||||||
rightLayout = new PositionedComponent<>(
|
|
||||||
ColumnLayoutComponent.<RowLayoutComponent<GuideActionRenderer<ContainerGuideCtx>>>builder()
|
|
||||||
.spacing(2)
|
|
||||||
.elementPosition(ColumnLayoutComponent.ElementPosition.RIGHT)
|
|
||||||
.colPadding(2, 2)
|
|
||||||
.element(RowLayoutComponent.<GuideActionRenderer<ContainerGuideCtx>>builder()
|
|
||||||
.spacing(5)
|
|
||||||
.rowPadding(0)
|
|
||||||
.elementPosition(RowLayoutComponent.ElementPosition.MIDDLE)
|
|
||||||
.element(new GuideActionRenderer<>(
|
|
||||||
new GuideAction<>(bindings.VMOUSE_RCLICK, ctx -> {
|
|
||||||
if (ctx.hoveredSlot() != null && ctx.hoveredSlot().getItem().getCount() > 1 && ctx.holdingItem().isEmpty())
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.take_half"));
|
|
||||||
if (ctx.hoveredSlot() != null && !ctx.holdingItem().isEmpty() && ctx.hoveredSlot().mayPlace(ctx.holdingItem()))
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.take_one"));
|
|
||||||
return Optional.empty();
|
|
||||||
}),
|
|
||||||
true, false
|
|
||||||
))
|
|
||||||
.element(new GuideActionRenderer<>(
|
|
||||||
new GuideAction<>(bindings.VMOUSE_SHIFT_CLICK, ctx -> {
|
|
||||||
return Optional.of(Component.translatable("controlify.guide.container.quick_move"));
|
|
||||||
}),
|
|
||||||
true, false
|
|
||||||
))
|
|
||||||
.build())
|
|
||||||
.build(),
|
|
||||||
AnchorPoint.BOTTOM_RIGHT,
|
|
||||||
0, 0,
|
|
||||||
AnchorPoint.BOTTOM_RIGHT
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void removeLayout() {
|
|
||||||
leftLayout = null;
|
|
||||||
rightLayout = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void renderGuide(AbstractContainerScreen<?> screen, PoseStack stack, float tickDelta, int mouseX, int mouseY, int screenWidth, int screenHeight) {
|
|
||||||
if (leftLayout == null || rightLayout == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!ControlifyApi.get().getCurrentController().map(controller -> controller.config().showScreenGuide).orElse(false)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var accessor = (AbstractContainerScreenAccessor) screen;
|
|
||||||
|
|
||||||
ContainerGuideCtx ctx = new ContainerGuideCtx(accessor.getHoveredSlot(), screen.getMenu().getCarried(), accessor.invokeHasClickedOutside(mouseX, mouseY, accessor.getLeftPos(), accessor.getTopPos(), 0));
|
|
||||||
|
|
||||||
for (var row : leftLayout.getComponent().getChildComponents()) {
|
|
||||||
for (var element : row.getChildComponents()) {
|
|
||||||
element.updateName(ctx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (var row : rightLayout.getComponent().getChildComponents()) {
|
|
||||||
for (var element : row.getChildComponents()) {
|
|
||||||
element.updateName(ctx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
leftLayout.updatePosition();
|
|
||||||
rightLayout.updatePosition();
|
|
||||||
|
|
||||||
ControlifyCompat.ifBeginHudBatching();
|
|
||||||
leftLayout.renderComponent(stack, tickDelta);
|
|
||||||
rightLayout.renderComponent(stack, tickDelta);
|
|
||||||
ControlifyCompat.ifEndHudBatching();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isScreenCompatible(Screen screen) {
|
|
||||||
return screen instanceof AbstractContainerScreen<?>;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,11 @@
|
|||||||
package dev.isxander.controlify.gui.guide;
|
package dev.isxander.controlify.gui.guide;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.api.bind.BindRenderer;
|
import dev.isxander.controlify.api.bind.BindRenderer;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
import dev.isxander.controlify.gui.layout.RenderComponent;
|
import dev.isxander.controlify.gui.layout.RenderComponent;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.Font;
|
import net.minecraft.client.gui.Font;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
import org.joml.Vector2ic;
|
import org.joml.Vector2ic;
|
||||||
@ -27,7 +26,7 @@ public class GuideActionRenderer<T> implements RenderComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack stack, int x, int y, float deltaTime) {
|
public void render(GuiGraphics graphics, int x, int y, float deltaTime) {
|
||||||
if (!isVisible())
|
if (!isVisible())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -37,14 +36,14 @@ public class GuideActionRenderer<T> implements RenderComponent {
|
|||||||
DrawSize drawSize = renderer.size();
|
DrawSize drawSize = renderer.size();
|
||||||
int textWidth = font.width(name.get());
|
int textWidth = font.width(name.get());
|
||||||
|
|
||||||
renderer.render(stack, x + (!rtl ? 0 : textWidth + 2), y + drawSize.height() / 2);
|
renderer.render(graphics, x + (!rtl ? 0 : textWidth + 2), y + drawSize.height() / 2);
|
||||||
|
|
||||||
int textX = x + (rtl ? 0 : drawSize.width() + 2);
|
int textX = x + (rtl ? 0 : drawSize.width() + 2);
|
||||||
int textY = y + drawSize.height() / 2 - font.lineHeight / 2;
|
int textY = y + drawSize.height() / 2 - font.lineHeight / 2;
|
||||||
|
|
||||||
if (textContrast)
|
if (textContrast)
|
||||||
GuiComponent.fill(stack, textX - 1, textY - 1, textX + textWidth + 1, textY + font.lineHeight + 1, 0x80000000);
|
graphics.fill(textX - 1, textY - 1, textX + textWidth + 1, textY + font.lineHeight + 1, 0x80000000);
|
||||||
font.draw(stack, name.get(), textX, textY, 0xFFFFFF);
|
graphics.drawString(font, name.get(), textX, textY, 0xFFFFFF, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package dev.isxander.controlify.gui.guide;
|
package dev.isxander.controlify.gui.guide;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.api.bind.ControllerBinding;
|
import dev.isxander.controlify.api.bind.ControllerBinding;
|
||||||
import dev.isxander.controlify.api.guide.ActionPriority;
|
import dev.isxander.controlify.api.guide.ActionPriority;
|
||||||
import dev.isxander.controlify.api.guide.GuideActionNameSupplier;
|
import dev.isxander.controlify.api.guide.GuideActionNameSupplier;
|
||||||
@ -12,6 +11,7 @@ import dev.isxander.controlify.gui.layout.AnchorPoint;
|
|||||||
import dev.isxander.controlify.gui.layout.ColumnLayoutComponent;
|
import dev.isxander.controlify.gui.layout.ColumnLayoutComponent;
|
||||||
import dev.isxander.controlify.gui.layout.PositionedComponent;
|
import dev.isxander.controlify.gui.layout.PositionedComponent;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
@ -69,14 +69,14 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderHud(PoseStack poseStack, float tickDelta, int width, int height) {
|
public void renderHud(GuiGraphics graphics, float tickDelta, int width, int height) {
|
||||||
if (!controller.config().showIngameGuide || minecraft.screen != null || minecraft.options.renderDebug)
|
if (!controller.config().showIngameGuide || minecraft.screen != null || minecraft.options.renderDebug)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ControlifyCompat.ifBeginHudBatching();
|
ControlifyCompat.ifBeginHudBatching();
|
||||||
|
|
||||||
leftLayout.renderComponent(poseStack, tickDelta);
|
leftLayout.renderComponent(graphics, tickDelta);
|
||||||
rightLayout.renderComponent(poseStack, tickDelta);
|
rightLayout.renderComponent(graphics, tickDelta);
|
||||||
|
|
||||||
ControlifyCompat.ifEndHudBatching();
|
ControlifyCompat.ifEndHudBatching();
|
||||||
}
|
}
|
||||||
@ -111,13 +111,13 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
|||||||
if (player.getAbilities().flying)
|
if (player.getAbilities().flying)
|
||||||
return Optional.of(Component.translatable("controlify.guide.ingame.fly_up"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.fly_up"));
|
||||||
|
|
||||||
if (player.isOnGround())
|
if (player.onGround())
|
||||||
return Optional.of(Component.translatable("key.jump"));
|
return Optional.of(Component.translatable("key.jump"));
|
||||||
|
|
||||||
if (player.isInWater())
|
if (player.isInWater())
|
||||||
return Optional.of(Component.translatable("controlify.guide.ingame.swim_up"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.swim_up"));
|
||||||
|
|
||||||
if (!player.isOnGround() && !player.isFallFlying() && !player.isInWater() && !player.hasEffect(MobEffects.LEVITATION)) {
|
if (!player.onGround() && !player.isFallFlying() && !player.isInWater() && !player.hasEffect(MobEffects.LEVITATION)) {
|
||||||
var chestStack = player.getItemBySlot(EquipmentSlot.CHEST);
|
var chestStack = player.getItemBySlot(EquipmentSlot.CHEST);
|
||||||
if (chestStack.is(Items.ELYTRA) && ElytraItem.isFlyEnabled(chestStack))
|
if (chestStack.is(Items.ELYTRA) && ElytraItem.isFlyEnabled(chestStack))
|
||||||
return Optional.of(Component.translatable("controlify.guide.ingame.start_elytra"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.start_elytra"));
|
||||||
@ -131,7 +131,7 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
|||||||
return Optional.of(Component.translatable("controlify.guide.ingame.dismount"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.dismount"));
|
||||||
if (player.getAbilities().flying)
|
if (player.getAbilities().flying)
|
||||||
return Optional.of(Component.translatable("controlify.guide.ingame.fly_down"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.fly_down"));
|
||||||
if (player.isInWater() && !player.isOnGround())
|
if (player.isInWater() && !player.onGround())
|
||||||
return Optional.of(Component.translatable("controlify.guide.ingame.swim_down"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.swim_down"));
|
||||||
if (ctx.controller().config().toggleSneak) {
|
if (ctx.controller().config().toggleSneak) {
|
||||||
return Optional.of(Component.translatable(player.input.shiftKeyDown ? "controlify.guide.ingame.stop_sneaking" : "controlify.guide.ingame.start_sneaking"));
|
return Optional.of(Component.translatable(player.input.shiftKeyDown ? "controlify.guide.ingame.stop_sneaking" : "controlify.guide.ingame.start_sneaking"));
|
||||||
@ -182,8 +182,8 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
});
|
});
|
||||||
registerGuideAction(controller.bindings().DROP, ActionLocation.RIGHT, (ctx) -> {
|
registerGuideAction(controller.bindings().DROP, ActionLocation.RIGHT, (ctx) -> {
|
||||||
var player = ctx.player();
|
var holdingItem = ctx.player().getInventory().getSelected();
|
||||||
if (player.hasItemInSlot(EquipmentSlot.MAINHAND) || player.hasItemInSlot(EquipmentSlot.OFFHAND))
|
if (!holdingItem.isEmpty())
|
||||||
return Optional.of(Component.translatable("controlify.guide.ingame.drop"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.drop"));
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package dev.isxander.controlify.gui.layout;
|
package dev.isxander.controlify.gui.layout;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
import org.joml.Vector2ic;
|
import org.joml.Vector2ic;
|
||||||
@ -35,7 +35,7 @@ public class ColumnLayoutComponent<T extends RenderComponent> extends AbstractLa
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack stack, int x, int y, float deltaTime) {
|
public void render(GuiGraphics graphics, int x, int y, float deltaTime) {
|
||||||
int width = getMaxChildWidth();
|
int width = getMaxChildWidth();
|
||||||
|
|
||||||
if (width == -1)
|
if (width == -1)
|
||||||
@ -47,7 +47,7 @@ public class ColumnLayoutComponent<T extends RenderComponent> extends AbstractLa
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
element.render(
|
element.render(
|
||||||
stack,
|
graphics,
|
||||||
x + colPaddingLeft + elementPosition.positionFunction.apply(width, element.size().x()),
|
x + colPaddingLeft + elementPosition.positionFunction.apply(width, element.size().x()),
|
||||||
y + colPaddingTop + yOffset,
|
y + colPaddingTop + yOffset,
|
||||||
deltaTime
|
deltaTime
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package dev.isxander.controlify.gui.layout;
|
package dev.isxander.controlify.gui.layout;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.Renderable;
|
import net.minecraft.client.gui.components.Renderable;
|
||||||
import org.joml.Vector2ic;
|
import org.joml.Vector2ic;
|
||||||
|
|
||||||
@ -33,12 +33,12 @@ public class PositionedComponent<T extends RenderComponent> implements Renderabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
|
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
|
||||||
this.renderComponent(matrices, delta);
|
this.renderComponent(graphics, delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderComponent(PoseStack stack, float deltaTime) {
|
public void renderComponent(GuiGraphics graphics, float deltaTime) {
|
||||||
component.render(stack, x, y, deltaTime);
|
component.render(graphics, x, y, deltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int x() {
|
public int x() {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package dev.isxander.controlify.gui.layout;
|
package dev.isxander.controlify.gui.layout;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import org.joml.Vector2ic;
|
import org.joml.Vector2ic;
|
||||||
|
|
||||||
public interface RenderComponent {
|
public interface RenderComponent {
|
||||||
void render(PoseStack stack, int x, int y, float deltaTime);
|
void render(GuiGraphics graphics, int x, int y, float deltaTime);
|
||||||
|
|
||||||
Vector2ic size();
|
Vector2ic size();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package dev.isxander.controlify.gui.layout;
|
package dev.isxander.controlify.gui.layout;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
import org.joml.Vector2ic;
|
import org.joml.Vector2ic;
|
||||||
@ -32,7 +32,7 @@ public class RowLayoutComponent<T extends RenderComponent> extends AbstractLayou
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack stack, int x, int y, float deltaTime) {
|
public void render(GuiGraphics graphics, int x, int y, float deltaTime) {
|
||||||
int height = getMaxChildHeight();
|
int height = getMaxChildHeight();
|
||||||
|
|
||||||
if (height == -1)
|
if (height == -1)
|
||||||
@ -44,7 +44,7 @@ public class RowLayoutComponent<T extends RenderComponent> extends AbstractLayou
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
element.render(
|
element.render(
|
||||||
stack,
|
graphics,
|
||||||
x + rowPaddingLeft + xOffset,
|
x + rowPaddingLeft + xOffset,
|
||||||
y + rowPaddingTop + elementPosition.positionFunction.apply(height, element.size().y()),
|
y + rowPaddingTop + elementPosition.positionFunction.apply(height, element.size().y()),
|
||||||
deltaTime
|
deltaTime
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
package dev.isxander.controlify.gui.screen;
|
package dev.isxander.controlify.gui.screen;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.Util;
|
import net.minecraft.Util;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.AccessibilityOnboardingTextWidget;
|
import net.minecraft.client.gui.components.AccessibilityOnboardingTextWidget;
|
||||||
import net.minecraft.client.gui.components.Button;
|
import net.minecraft.client.gui.components.Button;
|
||||||
import net.minecraft.client.gui.components.MultiLineTextWidget;
|
import net.minecraft.client.gui.components.MultiLineTextWidget;
|
||||||
import net.minecraft.client.gui.layouts.FrameLayout;
|
|
||||||
import net.minecraft.client.gui.layouts.GridLayout;
|
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.client.gui.screens.TitleScreen;
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
import net.minecraft.network.chat.CommonComponents;
|
import net.minecraft.network.chat.CommonComponents;
|
||||||
@ -55,8 +53,8 @@ public class BetaNoticeScreen extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
|
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
|
||||||
renderBackground(matrices);
|
renderBackground(graphics);
|
||||||
super.render(matrices, mouseX, mouseY, delta);
|
super.render(graphics, mouseX, mouseY, delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.Button;
|
import net.minecraft.client.gui.components.Button;
|
||||||
import net.minecraft.client.gui.components.MultiLineLabel;
|
import net.minecraft.client.gui.components.MultiLineLabel;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
@ -57,36 +58,34 @@ public class ControllerDeadzoneCalibrationScreen extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
|
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
|
||||||
renderBackground(matrices);
|
renderBackground(graphics);
|
||||||
|
|
||||||
super.render(matrices, mouseX, mouseY, delta);
|
super.render(graphics, mouseX, mouseY, delta);
|
||||||
|
|
||||||
drawCenteredString(matrices, font, Component.translatable("controlify.calibration.title", controller.name()).withStyle(ChatFormatting.BOLD), width / 2, 8, -1);
|
graphics.drawCenteredString(font, Component.translatable("controlify.calibration.title", controller.name()).withStyle(ChatFormatting.BOLD), width / 2, 8, -1);
|
||||||
|
|
||||||
RenderSystem.setShaderTexture(0, GUI_BARS_LOCATION);
|
graphics.pose().pushPose();
|
||||||
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
|
graphics.pose().scale(2f, 2f, 1f);
|
||||||
matrices.pushPose();
|
drawBar(graphics, width / 2 / 2, 30 / 2, 1f, 0);
|
||||||
matrices.scale(2f, 2f, 1f);
|
|
||||||
drawBar(matrices, width / 2 / 2, 30 / 2, 1f, 0);
|
|
||||||
var progress = (calibrationTicks - 1 + delta) / 100f;
|
var progress = (calibrationTicks - 1 + delta) / 100f;
|
||||||
if (progress > 0)
|
if (progress > 0)
|
||||||
drawBar(matrices, width / 2 / 2, 30 / 2, progress, 5);
|
drawBar(graphics, width / 2 / 2, 30 / 2, progress, 5);
|
||||||
matrices.popPose();
|
graphics.pose().popPose();
|
||||||
|
|
||||||
MultiLineLabel label;
|
MultiLineLabel label;
|
||||||
if (calibrating) label = waitLabel;
|
if (calibrating) label = waitLabel;
|
||||||
else if (calibrated) label = completeLabel;
|
else if (calibrated) label = completeLabel;
|
||||||
else label = infoLabel;
|
else label = infoLabel;
|
||||||
|
|
||||||
label.renderCentered(matrices, width / 2, 55);
|
label.renderCentered(graphics, width / 2, 55);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawBar(PoseStack matrices, int centerX, int y, float progress, int vOffset) {
|
private void drawBar(GuiGraphics graphics, int centerX, int y, float progress, int vOffset) {
|
||||||
progress = 1 - (float)Math.pow(1 - progress, 3);
|
progress = 1 - (float)Math.pow(1 - progress, 3);
|
||||||
|
|
||||||
int x = centerX - 182 / 2;
|
int x = centerX - 182 / 2;
|
||||||
this.blit(matrices, x, y, 0, 30 + vOffset, (int)(progress * 182), 5);
|
graphics.blit(GUI_BARS_LOCATION, x, y, 0, 30 + vOffset, (int)(progress * 182), 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,7 +56,7 @@ public class ControllerPlayerMovement extends Input {
|
|||||||
if (!bindings.JUMP.held())
|
if (!bindings.JUMP.held())
|
||||||
this.jumping = false;
|
this.jumping = false;
|
||||||
|
|
||||||
if (player.getAbilities().flying || (player.isInWater() && !player.isOnGround()) || !controller.config().toggleSneak) {
|
if (player.getAbilities().flying || (player.isInWater() && !player.onGround()) || !controller.config().toggleSneak) {
|
||||||
if (bindings.SNEAK.justPressed())
|
if (bindings.SNEAK.justPressed())
|
||||||
this.shiftKeyDown = true;
|
this.shiftKeyDown = true;
|
||||||
if (!bindings.SNEAK.held())
|
if (!bindings.SNEAK.held())
|
||||||
|
@ -1,32 +1,32 @@
|
|||||||
package dev.isxander.controlify.mixins.compat.iris;
|
package dev.isxander.controlify.mixins.compat.iris;
|
||||||
|
|
||||||
import dev.isxander.controlify.compatibility.iris.BaseOptionElementComponentProcessor;
|
//import dev.isxander.controlify.compatibility.iris.BaseOptionElementComponentProcessor;
|
||||||
import dev.isxander.controlify.screenop.ComponentProcessor;
|
//import dev.isxander.controlify.screenop.ComponentProcessor;
|
||||||
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
|
//import dev.isxander.controlify.screenop.ComponentProcessorProvider;
|
||||||
import net.coderbot.iris.gui.NavigationController;
|
//import net.coderbot.iris.gui.NavigationController;
|
||||||
import net.coderbot.iris.gui.element.widget.BaseOptionElementWidget;
|
//import net.coderbot.iris.gui.element.widget.BaseOptionElementWidget;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
//import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
//import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
//import org.spongepowered.asm.mixin.Unique;
|
||||||
|
//
|
||||||
@Mixin(value = BaseOptionElementWidget.class, remap = false)
|
//@Mixin(value = BaseOptionElementWidget.class, remap = false)
|
||||||
public abstract class BaseOptionElementWidgetMixin implements ComponentProcessorProvider {
|
//public abstract class BaseOptionElementWidgetMixin implements ComponentProcessorProvider {
|
||||||
@Shadow public abstract boolean applyPreviousValue();
|
// @Shadow public abstract boolean applyPreviousValue();
|
||||||
@Shadow public abstract boolean applyNextValue();
|
// @Shadow public abstract boolean applyNextValue();
|
||||||
|
//
|
||||||
@Shadow protected NavigationController navigation;
|
// @Shadow protected NavigationController navigation;
|
||||||
@Unique private final BaseOptionElementComponentProcessor processor
|
// @Unique private final BaseOptionElementComponentProcessor processor
|
||||||
= new BaseOptionElementComponentProcessor(this::cycle);
|
// = new BaseOptionElementComponentProcessor(this::cycle);
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public ComponentProcessor componentProcessor() {
|
// public ComponentProcessor componentProcessor() {
|
||||||
return processor;
|
// return processor;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private void cycle(boolean reverse) {
|
// private void cycle(boolean reverse) {
|
||||||
boolean needsUpdate = reverse ? applyPreviousValue() : applyNextValue();
|
// boolean needsUpdate = reverse ? applyPreviousValue() : applyNextValue();
|
||||||
if (needsUpdate) {
|
// if (needsUpdate) {
|
||||||
navigation.refresh();
|
// navigation.refresh();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.ChatComponent;
|
import net.minecraft.client.gui.components.ChatComponent;
|
||||||
import net.minecraft.client.gui.screens.ChatScreen;
|
import net.minecraft.client.gui.screens.ChatScreen;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
@ -18,22 +19,22 @@ public class ChatComponentMixin {
|
|||||||
@Shadow @Final private Minecraft minecraft;
|
@Shadow @Final private Minecraft minecraft;
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("HEAD"))
|
@Inject(method = "render", at = @At("HEAD"))
|
||||||
private void translateRender(PoseStack matrices, int tickDelta, int i, int j, CallbackInfo ci) {
|
private void translateRender(GuiGraphics graphics, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||||
if (!(minecraft.screen instanceof ChatScreen))
|
if (!(minecraft.screen instanceof ChatScreen))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||||
matrices.pushPose();
|
graphics.pose().pushPose();
|
||||||
if (controller.config().chatKeyboardHeight == 0) return;
|
if (controller.config().chatKeyboardHeight == 0) return;
|
||||||
matrices.translate(0, -controller.config().chatKeyboardHeight * minecraft.getWindow().getGuiScaledHeight(), 0);
|
graphics.pose().translate(0, -controller.config().chatKeyboardHeight * minecraft.getWindow().getGuiScaledHeight(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("TAIL"))
|
@Inject(method = "render", at = @At("TAIL"))
|
||||||
private void finishTranslateRender(PoseStack matrices, int tickDelta, int i, int j, CallbackInfo ci) {
|
private void finishTranslateRender(GuiGraphics graphics, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||||
if (!(minecraft.screen instanceof ChatScreen))
|
if (!(minecraft.screen instanceof ChatScreen))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
matrices.popPose();
|
graphics.pose().popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModifyConstant(method = "render", constant = @Constant(intValue = 40))
|
@ModifyConstant(method = "render", constant = @Constant(intValue = 40))
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package dev.isxander.controlify.mixins.feature.chatkbheight;
|
package dev.isxander.controlify.mixins.feature.chatkbheight;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.screens.ChatScreen;
|
import net.minecraft.client.gui.screens.ChatScreen;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
@ -19,16 +19,16 @@ public abstract class ChatScreenMixin extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("HEAD"))
|
@Inject(method = "render", at = @At("HEAD"))
|
||||||
private void translateRender(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
private void translateRender(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||||
matrices.pushPose();
|
graphics.pose().pushPose();
|
||||||
|
|
||||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||||
matrices.translate(0, -controller.config().chatKeyboardHeight * this.height, 0);
|
graphics.pose().translate(0, -controller.config().chatKeyboardHeight * this.height, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("TAIL"))
|
@Inject(method = "render", at = @At("TAIL"))
|
||||||
private void finishTranslateRender(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
private void finishTranslateRender(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||||
matrices.popPose();
|
graphics.pose().popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModifyVariable(method = "mouseClicked", at = @At("HEAD"), ordinal = 1, argsOnly = true)
|
@ModifyVariable(method = "mouseClicked", at = @At("HEAD"), ordinal = 1, argsOnly = true)
|
||||||
|
@ -5,6 +5,7 @@ import dev.isxander.controlify.Controlify;
|
|||||||
import dev.isxander.controlify.gui.guide.InGameButtonGuide;
|
import dev.isxander.controlify.gui.guide.InGameButtonGuide;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
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;
|
||||||
@ -20,10 +21,10 @@ public class GuiMixin {
|
|||||||
@Shadow @Final private Minecraft minecraft;
|
@Shadow @Final private Minecraft minecraft;
|
||||||
|
|
||||||
@Inject(method = "render", at = @At(value = "CONSTANT", args = "stringValue=chat"))
|
@Inject(method = "render", at = @At(value = "CONSTANT", args = "stringValue=chat"))
|
||||||
private void renderButtonGuide(PoseStack matrices, float tickDelta, CallbackInfo ci) {
|
private void renderButtonGuide(GuiGraphics graphics, float tickDelta, CallbackInfo ci) {
|
||||||
Controlify.instance().inGameButtonGuide().ifPresent(guide -> {
|
Controlify.instance().inGameButtonGuide().ifPresent(guide -> {
|
||||||
minecraft.getProfiler().push("controlify_button_guide");
|
minecraft.getProfiler().push("controlify_button_guide");
|
||||||
guide.renderHud(matrices, tickDelta, screenWidth, screenHeight);
|
guide.renderHud(graphics, tickDelta, screenWidth, screenHeight);
|
||||||
minecraft.getProfiler().pop();
|
minecraft.getProfiler().pop();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,30 @@
|
|||||||
package dev.isxander.controlify.mixins.feature.guide.screen;
|
package dev.isxander.controlify.mixins.feature.guide.screen;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
import dev.isxander.controlify.InputMode;
|
import dev.isxander.controlify.InputMode;
|
||||||
import dev.isxander.controlify.api.bind.BindRenderer;
|
import dev.isxander.controlify.api.bind.BindRenderer;
|
||||||
import dev.isxander.controlify.api.buttonguide.ButtonRenderPosition;
|
import dev.isxander.controlify.api.buttonguide.ButtonRenderPosition;
|
||||||
import dev.isxander.controlify.bindings.IBind;
|
|
||||||
import dev.isxander.controlify.gui.ButtonGuideRenderer;
|
import dev.isxander.controlify.gui.ButtonGuideRenderer;
|
||||||
import dev.isxander.controlify.screenop.ComponentProcessor;
|
|
||||||
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
|
|
||||||
import dev.isxander.controlify.screenop.compat.vanilla.AbstractButtonComponentProcessor;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.Font;
|
import net.minecraft.client.gui.Font;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.AbstractButton;
|
import net.minecraft.client.gui.components.AbstractButton;
|
||||||
import net.minecraft.network.chat.CommonComponents;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.network.chat.contents.TranslatableContents;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
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;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@Mixin(AbstractButton.class)
|
@Mixin(AbstractButton.class)
|
||||||
public abstract class AbstractButtonMixin extends AbstractWidgetMixin implements ButtonGuideRenderer<AbstractButton> {
|
public abstract class AbstractButtonMixin extends AbstractWidgetMixin implements ButtonGuideRenderer<AbstractButton> {
|
||||||
@Unique private RenderData<AbstractButton> renderData = null;
|
@Unique private RenderData<AbstractButton> renderData = null;
|
||||||
|
|
||||||
@Inject(method = "renderString", at = @At("RETURN"))
|
@Inject(method = "renderString", at = @At("RETURN"))
|
||||||
private void renderButtonGuide(PoseStack matrices, Font renderer, int color, CallbackInfo ci) {
|
private void renderButtonGuide(GuiGraphics graphics, Font renderer, int color, CallbackInfo ci) {
|
||||||
if (shouldRender()) {
|
if (shouldRender()) {
|
||||||
switch (renderData.position()) {
|
switch (renderData.position()) {
|
||||||
case LEFT -> getBind().render(matrices, getX() - getBind().size().width() - 1, getY() + getHeight() / 2);
|
case LEFT -> getBind().render(graphics, getX() - getBind().size().width() - 1, getY() + getHeight() / 2);
|
||||||
case RIGHT -> getBind().render(matrices, getX() + getWidth() + 1, getY() + getHeight() / 2);
|
case RIGHT -> getBind().render(graphics, getX() + getWidth() + 1, getY() + getHeight() / 2);
|
||||||
case TEXT -> {
|
case TEXT -> {
|
||||||
Font font = Minecraft.getInstance().font;
|
Font font = Minecraft.getInstance().font;
|
||||||
int x;
|
int x;
|
||||||
@ -43,22 +34,22 @@ public abstract class AbstractButtonMixin extends AbstractWidgetMixin implements
|
|||||||
x = getX() + getWidth() / 2 - font.width(getMessage()) / 2 - getBind().size().width();
|
x = getX() + getWidth() / 2 - font.width(getMessage()) / 2 - getBind().size().width();
|
||||||
}
|
}
|
||||||
|
|
||||||
getBind().render(matrices, x, getY() + getHeight() / 2);
|
getBind().render(graphics, x, getY() + getHeight() / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "renderString", at = @At("HEAD"))
|
@Inject(method = "renderString", at = @At("HEAD"))
|
||||||
private void shiftXOffset(PoseStack matrices, Font renderer, int color, CallbackInfo ci) {
|
private void shiftXOffset(GuiGraphics graphics, Font renderer, int color, CallbackInfo ci) {
|
||||||
matrices.pushPose();
|
graphics.pose().pushPose();
|
||||||
if (!shouldRender() || Minecraft.getInstance().font.width(getMessage()) > getWidth() || renderData.position() != ButtonRenderPosition.TEXT) return;
|
if (!shouldRender() || Minecraft.getInstance().font.width(getMessage()) > getWidth() || renderData.position() != ButtonRenderPosition.TEXT) return;
|
||||||
matrices.translate(getBind().size().width() / 2f, 0, 0);
|
graphics.pose().translate(getBind().size().width() / 2f, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "renderString", at = @At("RETURN"))
|
@Inject(method = "renderString", at = @At("RETURN"))
|
||||||
private void finishShiftXOffset(PoseStack matrices, Font renderer, int color, CallbackInfo ci) {
|
private void finishShiftXOffset(GuiGraphics graphics, Font renderer, int color, CallbackInfo ci) {
|
||||||
matrices.popPose();
|
graphics.pose().popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package dev.isxander.controlify.mixins.feature.guide.screen;
|
package dev.isxander.controlify.mixins.feature.guide.screen;
|
||||||
|
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
|
||||||
import net.minecraft.client.gui.components.AbstractWidget;
|
import net.minecraft.client.gui.components.AbstractWidget;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@ -9,7 +8,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||||
|
|
||||||
@Mixin(AbstractWidget.class)
|
@Mixin(AbstractWidget.class)
|
||||||
public abstract class AbstractWidgetMixin extends GuiComponent {
|
public abstract class AbstractWidgetMixin {
|
||||||
@Shadow public abstract int getX();
|
@Shadow public abstract int getX();
|
||||||
|
|
||||||
@Shadow public abstract int getY();
|
@Shadow public abstract int getY();
|
||||||
@ -22,7 +21,7 @@ public abstract class AbstractWidgetMixin extends GuiComponent {
|
|||||||
|
|
||||||
@Shadow public abstract boolean isActive();
|
@Shadow public abstract boolean isActive();
|
||||||
|
|
||||||
@ModifyArg(method = "renderScrollingString(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/Font;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/AbstractWidget;renderScrollingString(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIII)V"), index = 3)
|
@ModifyArg(method = "renderScrollingString(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/Font;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/AbstractWidget;renderScrollingString(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIII)V"), index = 3)
|
||||||
protected int shiftDrawSize(int x) {
|
protected int shiftDrawSize(int x) {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
package dev.isxander.controlify.mixins.feature.guide.screen;
|
package dev.isxander.controlify.mixins.feature.guide.screen;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
import dev.isxander.controlify.InputMode;
|
import dev.isxander.controlify.InputMode;
|
||||||
import dev.isxander.controlify.api.bind.BindRenderer;
|
import dev.isxander.controlify.api.bind.BindRenderer;
|
||||||
import dev.isxander.controlify.bindings.IBind;
|
|
||||||
import dev.isxander.controlify.compatibility.ControlifyCompat;
|
import dev.isxander.controlify.compatibility.ControlifyCompat;
|
||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.gui.DrawSize;
|
import dev.isxander.controlify.gui.DrawSize;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.TabButton;
|
import net.minecraft.client.gui.components.TabButton;
|
||||||
import net.minecraft.client.gui.components.tabs.TabNavigationBar;
|
import net.minecraft.client.gui.components.tabs.TabNavigationBar;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
@ -25,16 +24,16 @@ public class TabNavigationBarMixin {
|
|||||||
@Shadow private int width;
|
@Shadow private int width;
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("RETURN"))
|
@Inject(method = "render", at = @At("RETURN"))
|
||||||
private void renderControllerButtonOverlay(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
private void renderControllerButtonOverlay(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||||
if (Controlify.instance().currentInputMode() == InputMode.CONTROLLER) {
|
if (Controlify.instance().currentInputMode() == InputMode.CONTROLLER) {
|
||||||
var controller = Controlify.instance().currentController();
|
var controller = Controlify.instance().currentController();
|
||||||
if (controller.config().showScreenGuide) {
|
if (controller.config().showScreenGuide) {
|
||||||
this.renderControllerButtonOverlay(matrices, controller);
|
this.renderControllerButtonOverlay(graphics, controller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderControllerButtonOverlay(PoseStack matrices, Controller<?, ?> controller) {
|
private void renderControllerButtonOverlay(GuiGraphics graphics, Controller<?, ?> controller) {
|
||||||
ControlifyCompat.ifBeginHudBatching();
|
ControlifyCompat.ifBeginHudBatching();
|
||||||
|
|
||||||
TabButton firstTab = tabButtons.get(0);
|
TabButton firstTab = tabButtons.get(0);
|
||||||
@ -44,14 +43,14 @@ public class TabNavigationBarMixin {
|
|||||||
DrawSize prevBindDrawSize = prevBind.size();
|
DrawSize prevBindDrawSize = prevBind.size();
|
||||||
int firstButtonX = Math.max(firstTab.getX() - 2 - prevBindDrawSize.width(), firstTab.getX() / 2 - prevBindDrawSize.width() / 2);
|
int firstButtonX = Math.max(firstTab.getX() - 2 - prevBindDrawSize.width(), firstTab.getX() / 2 - prevBindDrawSize.width() / 2);
|
||||||
int firstButtonY = 12;
|
int firstButtonY = 12;
|
||||||
prevBind.render(matrices, firstButtonX, firstButtonY);
|
prevBind.render(graphics, firstButtonX, firstButtonY);
|
||||||
|
|
||||||
BindRenderer nextBind = controller.bindings().GUI_NEXT_TAB.renderer();
|
BindRenderer nextBind = controller.bindings().GUI_NEXT_TAB.renderer();
|
||||||
DrawSize nextBindDrawSize = nextBind.size();
|
DrawSize nextBindDrawSize = nextBind.size();
|
||||||
int lastButtonEnd = lastTab.getX() + lastTab.getWidth();
|
int lastButtonEnd = lastTab.getX() + lastTab.getWidth();
|
||||||
int lastButtonX = Math.min(lastTab.getX() + lastTab.getWidth() + 2, lastButtonEnd + (width - lastButtonEnd) / 2 - nextBindDrawSize.width() / 2);
|
int lastButtonX = Math.min(lastTab.getX() + lastTab.getWidth() + 2, lastButtonEnd + (width - lastButtonEnd) / 2 - nextBindDrawSize.width() / 2);
|
||||||
int lastButtonY = 12;
|
int lastButtonY = 12;
|
||||||
nextBind.render(matrices, lastButtonX, lastButtonY);
|
nextBind.render(graphics, lastButtonX, lastButtonY);
|
||||||
|
|
||||||
ControlifyCompat.ifEndHudBatching();
|
ControlifyCompat.ifEndHudBatching();
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package dev.isxander.controlify.mixins.feature.screenop;
|
package dev.isxander.controlify.mixins.feature.screenop;
|
||||||
|
|
||||||
import com.llamalad7.mixinextras.sugar.Local;
|
import com.llamalad7.mixinextras.sugar.Local;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.api.ControlifyApi;
|
import dev.isxander.controlify.api.ControlifyApi;
|
||||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@ -17,11 +17,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
public class GameRendererMixin {
|
public class GameRendererMixin {
|
||||||
@Shadow @Final Minecraft minecraft;
|
@Shadow @Final Minecraft minecraft;
|
||||||
|
|
||||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", shift = At.Shift.AFTER))
|
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", shift = At.Shift.AFTER))
|
||||||
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local(ordinal = 1) PoseStack poseStack) {
|
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local GuiGraphics graphics) {
|
||||||
ControlifyApi.get().getCurrentController().ifPresent(controller -> {
|
ControlifyApi.get().getCurrentController().ifPresent(controller -> {
|
||||||
if (minecraft.screen == null) return;
|
if (minecraft.screen == null) return;
|
||||||
ScreenProcessorProvider.provide(minecraft.screen).render(controller, poseStack, tickDelta);
|
ScreenProcessorProvider.provide(minecraft.screen).render(controller, graphics, tickDelta);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package dev.isxander.controlify.mixins.feature.virtualmouse;
|
package dev.isxander.controlify.mixins.feature.virtualmouse;
|
||||||
|
|
||||||
import com.llamalad7.mixinextras.sugar.Local;
|
import com.llamalad7.mixinextras.sugar.Local;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import dev.isxander.controlify.Controlify;
|
import dev.isxander.controlify.Controlify;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@ -11,8 +11,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
|
|
||||||
@Mixin(GameRenderer.class)
|
@Mixin(GameRenderer.class)
|
||||||
public class GameRendererMixin {
|
public class GameRendererMixin {
|
||||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", shift = At.Shift.AFTER))
|
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", shift = At.Shift.AFTER))
|
||||||
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local(ordinal = 1) PoseStack poseStack) {
|
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local GuiGraphics graphics) {
|
||||||
Controlify.instance().virtualMouseHandler().renderVirtualMouse(poseStack);
|
Controlify.instance().virtualMouseHandler().renderVirtualMouse(graphics);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ public class ReachAroundHandler {
|
|||||||
&& cameraEntity.getXRot() >= 45
|
&& cameraEntity.getXRot() >= 45
|
||||||
// if the player is not standing on a block, this is inappropriate
|
// if the player is not standing on a block, this is inappropriate
|
||||||
// this also prevents selecting fluids as a valid position
|
// this also prevents selecting fluids as a valid position
|
||||||
&& cameraEntity.isOnGround()
|
&& cameraEntity.onGround()
|
||||||
// must respect config option
|
// must respect config option
|
||||||
&& Controlify.instance().config().globalSettings().reachAround.canReachAround();
|
&& Controlify.instance().config().globalSettings().reachAround.canReachAround();
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import dev.isxander.controlify.virtualmouse.VirtualMouseBehaviour;
|
|||||||
import dev.isxander.controlify.virtualmouse.VirtualMouseHandler;
|
import dev.isxander.controlify.virtualmouse.VirtualMouseHandler;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.ComponentPath;
|
import net.minecraft.client.gui.ComponentPath;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.AbstractWidget;
|
import net.minecraft.client.gui.components.AbstractWidget;
|
||||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||||
import net.minecraft.client.gui.components.tabs.Tab;
|
import net.minecraft.client.gui.components.tabs.Tab;
|
||||||
@ -51,9 +52,9 @@ public class ScreenProcessor<T extends Screen> {
|
|||||||
handleTabNavigation(controller);
|
handleTabNavigation(controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(Controller<?, ?> controller, PoseStack poseStack, float tickDelta) {
|
public void render(Controller<?, ?> controller, GuiGraphics graphics, float tickDelta) {
|
||||||
var vmouse = Controlify.instance().virtualMouseHandler();
|
var vmouse = Controlify.instance().virtualMouseHandler();
|
||||||
this.render(controller, poseStack, tickDelta, vmouse.isVirtualMouseEnabled() ? Optional.of(vmouse) : Optional.empty());
|
this.render(controller, graphics, tickDelta, vmouse.isVirtualMouseEnabled() ? Optional.of(vmouse) : Optional.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onInputModeChanged(InputMode mode) {
|
public void onInputModeChanged(InputMode mode) {
|
||||||
@ -190,7 +191,7 @@ public class ScreenProcessor<T extends Screen> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void render(Controller<?, ?> controller, PoseStack poseStack, float tickDelta, Optional<VirtualMouseHandler> vmouse) {
|
protected void render(Controller<?, ?> controller, GuiGraphics graphics, float tickDelta, Optional<VirtualMouseHandler> vmouse) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package dev.isxander.controlify.utils;
|
package dev.isxander.controlify.utils;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.Font;
|
import net.minecraft.client.gui.Font;
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.toasts.SystemToast;
|
import net.minecraft.client.gui.components.toasts.SystemToast;
|
||||||
import net.minecraft.client.gui.components.toasts.ToastComponent;
|
import net.minecraft.client.gui.components.toasts.ToastComponent;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
@ -26,11 +26,11 @@ public class ToastUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Visibility render(@NotNull PoseStack matrices, @NotNull ToastComponent manager, long startTime) {
|
public @NotNull Visibility render(@NotNull GuiGraphics graphics, @NotNull ToastComponent manager, long startTime) {
|
||||||
if (removed)
|
if (removed)
|
||||||
return Visibility.HIDE;
|
return Visibility.HIDE;
|
||||||
|
|
||||||
return super.render(matrices, manager, startTime);
|
return super.render(graphics, manager, startTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove() {
|
public void remove() {
|
||||||
|
@ -16,7 +16,7 @@ import dev.isxander.controlify.mixins.feature.virtualmouse.KeyboardHandlerAccess
|
|||||||
import dev.isxander.controlify.mixins.feature.virtualmouse.MouseHandlerAccessor;
|
import dev.isxander.controlify.mixins.feature.virtualmouse.MouseHandlerAccessor;
|
||||||
import dev.isxander.controlify.utils.ToastUtils;
|
import dev.isxander.controlify.utils.ToastUtils;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiComponent;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
@ -202,32 +202,28 @@ public class VirtualMouseHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderVirtualMouse(PoseStack matrices) {
|
public void renderVirtualMouse(GuiGraphics graphics) {
|
||||||
if (!virtualMouseEnabled) return;
|
if (!virtualMouseEnabled) return;
|
||||||
|
|
||||||
if (DebugProperties.DEBUG_SNAPPING) {
|
if (DebugProperties.DEBUG_SNAPPING) {
|
||||||
for (var snapPoint : snapPoints) {
|
for (var snapPoint : snapPoints) {
|
||||||
GuiComponent.fill(matrices, snapPoint.position().x() - snapPoint.range(), snapPoint.position().y() - snapPoint.range(), snapPoint.position().x() + snapPoint.range(), snapPoint.position().y() + snapPoint.range(), 0x33FFFFFF);
|
graphics.fill(snapPoint.position().x() - snapPoint.range(), snapPoint.position().y() - snapPoint.range(), snapPoint.position().x() + snapPoint.range(), snapPoint.position().y() + snapPoint.range(), 0x33FFFFFF);
|
||||||
GuiComponent.fill(matrices, snapPoint.position().x() - 1, snapPoint.position().y() - 1, snapPoint.position().x() + 1, snapPoint.position().y() + 1, snapPoint.equals(lastSnappedPoint) ? 0xFFFFFF00 : 0xFFFF0000);
|
graphics.fill( snapPoint.position().x() - 1, snapPoint.position().y() - 1, snapPoint.position().x() + 1, snapPoint.position().y() + 1, snapPoint.equals(lastSnappedPoint) ? 0xFFFFFF00 : 0xFFFF0000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderSystem.setShaderTexture(0, CURSOR_TEXTURE);
|
|
||||||
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
|
|
||||||
RenderSystem.enableBlend();
|
|
||||||
|
|
||||||
var scaledX = currentX * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth();
|
var scaledX = currentX * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth();
|
||||||
var scaledY = currentY * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight();
|
var scaledY = currentY * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight();
|
||||||
|
|
||||||
matrices.pushPose();
|
graphics.pose().pushPose();
|
||||||
matrices.translate(scaledX, scaledY, 1000f);
|
graphics.pose().translate(scaledX, scaledY, 1000f);
|
||||||
matrices.scale(0.5f, 0.5f, 0.5f);
|
graphics.pose().scale(0.5f, 0.5f, 0.5f);
|
||||||
|
|
||||||
GuiComponent.blit(matrices, -16, -16, 0, 0, 32, 32, 32, 32);
|
|
||||||
|
|
||||||
matrices.popPose();
|
|
||||||
|
|
||||||
|
RenderSystem.enableBlend();
|
||||||
|
graphics.blit(CURSOR_TEXTURE, -16, -16, 0, 0, 32, 32, 32, 32);
|
||||||
RenderSystem.disableBlend();
|
RenderSystem.disableBlend();
|
||||||
|
|
||||||
|
graphics.pose().popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enableVirtualMouse() {
|
public void enableVirtualMouse() {
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"compat.iris.BaseOptionElementWidgetMixin",
|
// "compat.iris.BaseOptionElementWidgetMixin",
|
||||||
"compat.sodium.CycleControlElementMixin",
|
"compat.sodium.CycleControlElementMixin",
|
||||||
"compat.sodium.SliderControlElementMixin",
|
"compat.sodium.SliderControlElementMixin",
|
||||||
"compat.sodium.TickBoxControlElementMixin",
|
"compat.sodium.TickBoxControlElementMixin",
|
||||||
|
@ -32,9 +32,9 @@
|
|||||||
"accessWidener": "controlify.accesswidener",
|
"accessWidener": "controlify.accesswidener",
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.14.0",
|
"fabricloader": ">=0.14.0",
|
||||||
"minecraft": "~1.19.4",
|
"minecraft": ">1.20-",
|
||||||
"java": ">=17",
|
"java": ">=17",
|
||||||
"yet-another-config-lib": "^2.4.0"
|
"yet_another_config_lib": "^2.4.0"
|
||||||
},
|
},
|
||||||
"breaks": {
|
"breaks": {
|
||||||
"midnightcontrols": "*"
|
"midnightcontrols": "*"
|
||||||
|
Reference in New Issue
Block a user