From e676a37c7fb282c2aeecac48e3aaec3252d2dab3 Mon Sep 17 00:00:00 2001 From: LambdAurora Date: Sat, 27 Jun 2020 16:08:10 +0200 Subject: [PATCH] Update to 1.16. --- fabric/build.gradle | 6 +- .../lambdacontrols/LambdaControls.java | 7 +- .../client/LambdaControlsClient.java | 36 ++++---- .../client/LambdaControlsModMenu.java | 8 +- .../lambdacontrols/client/LambdaInput.java | 89 ++++++++++--------- .../client/compat/OkZoomerCompat.java | 8 +- .../client/compat/ReiCompat.java | 6 +- .../mixin/RecipeViewingScreenAccessor.java | 8 +- .../client/controller/ButtonBinding.java | 61 ++++++------- .../client/controller/InputHandlers.java | 42 ++++----- .../client/controller/InputManager.java | 32 +++++++ .../client/gui/ControllerButtonWidget.java | 17 ++-- .../client/gui/ControllerControlsScreen.java | 32 ++++--- .../client/gui/ControlsListWidget.java | 54 ++++++----- .../client/gui/LambdaControlsHud.java | 64 ++++++------- .../client/gui/LambdaControlsRenderer.java | 27 +++--- .../gui/LambdaControlsSettingsScreen.java | 77 ++++++++-------- .../gui/ReloadControllerMappingsOption.java | 2 +- .../client/gui/TouchscreenOverlay.java | 86 +++++++++--------- .../mixin/ControlsOptionsScreenMixin.java | 5 +- .../CreativeInventoryScreenAccessor.java | 2 +- .../client/mixin/EntryListWidgetAccessor.java | 2 +- ...reenMixin.java => HandledScreenMixin.java} | 22 ++--- .../client/mixin/MinecraftClientMixin.java | 2 +- ...reenMixin.java => OptionsScreenMixin.java} | 14 +-- .../client/mixin/WorldRendererMixin.java | 6 +- ...cessor.java => HandledScreenAccessor.java} | 4 +- .../assets/lambdacontrols/lang/en_us.json | 1 - .../assets/lambdacontrols/lang/fr_ca.json | 1 - .../assets/lambdacontrols/lang/fr_fr.json | 1 - fabric/src/main/resources/config.toml | 2 +- .../main/resources/lambdacontrols.mixins.json | 4 +- gradle.properties | 14 +-- 33 files changed, 395 insertions(+), 347 deletions(-) rename fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/{ContainerScreenMixin.java => HandledScreenMixin.java} (60%) rename fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/{SettingsScreenMixin.java => OptionsScreenMixin.java} (68%) rename fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/{ContainerScreenAccessor.java => HandledScreenAccessor.java} (91%) diff --git a/fabric/build.gradle b/fabric/build.gradle index 1242bd7..54d5aee 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '0.2.6-SNAPSHOT' + id 'fabric-loom' version '0.4-SNAPSHOT' id 'java-library' id 'maven-publish' } @@ -47,8 +47,8 @@ dependencies { include "com.github.lambdaurora:spruceui:${project.spruceui_version}" // Compatibility mods - modCompile "io.github.joaoh1:okzoomer:2.1.0-beta.2" - modCompile "me.shedaniel:RoughlyEnoughItems:3.4.5" + modCompile "io.github.joaoh1:okzoomer:4.0.0-alpha.3.1.16.pre5" + modCompile "me.shedaniel:RoughlyEnoughItems:4.5.5" api project(":core") shadow project(":core") diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/LambdaControls.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/LambdaControls.java index 5dfbc81..4c1b610 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/LambdaControls.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/LambdaControls.java @@ -15,8 +15,9 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; -import net.minecraft.util.PacketByteBuf; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; @@ -28,7 +29,7 @@ import java.util.Optional; * Represents the LambdaControls mod. * * @author LambdAurora - * @version 1.1.0 + * @version 1.3.0 * @since 1.0.0 */ public class LambdaControls implements ModInitializer @@ -38,6 +39,8 @@ public class LambdaControls implements ModInitializer public static final Identifier FEATURE_CHANNEL = new Identifier(LambdaControlsConstants.FEATURE_CHANNEL.toString()); public static final Identifier HELLO_CHANNEL = new Identifier(LambdaControlsConstants.HELLO_CHANNEL.toString()); + public static final TranslatableText NOT_BOUND_TEXT = new TranslatableText("lambdacontrols.not_bound"); + public final Logger logger = LogManager.getLogger("LambdaControls"); @Override diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java index 0310531..10bc91d 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java @@ -16,16 +16,18 @@ import me.lambdaurora.lambdacontrols.LambdaControlsFeature; import me.lambdaurora.lambdacontrols.client.compat.LambdaControlsCompat; import me.lambdaurora.lambdacontrols.client.controller.ButtonBinding; import me.lambdaurora.lambdacontrols.client.controller.Controller; +import me.lambdaurora.lambdacontrols.client.controller.InputManager; import me.lambdaurora.lambdacontrols.client.gui.LambdaControlsHud; import me.lambdaurora.lambdacontrols.client.gui.TouchscreenOverlay; import me.lambdaurora.spruceui.event.OpenScreenCallback; import me.lambdaurora.spruceui.hud.HudManager; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry; -import net.fabricmc.fabric.api.event.client.ClientTickCallback; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.options.KeyBinding; import net.minecraft.client.toast.SystemToast; import net.minecraft.client.util.InputUtil; import net.minecraft.text.LiteralText; @@ -38,20 +40,20 @@ import org.lwjgl.glfw.GLFW; * Represents the LambdaControls client mod. * * @author LambdAurora - * @version 1.2.0 + * @version 1.3.0 * @since 1.1.0 */ public class LambdaControlsClient extends LambdaControls implements ClientModInitializer { private static LambdaControlsClient INSTANCE; - public static final FabricKeyBinding BINDING_LOOK_UP = FabricKeyBinding.Builder.create(new Identifier(LambdaControlsConstants.NAMESPACE, "look_up"), - InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_8, "key.categories.movement").build(); - public static final FabricKeyBinding BINDING_LOOK_RIGHT = FabricKeyBinding.Builder.create(new Identifier(LambdaControlsConstants.NAMESPACE, "look_right"), - InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_6, "key.categories.movement").build(); - public static final FabricKeyBinding BINDING_LOOK_DOWN = FabricKeyBinding.Builder.create(new Identifier(LambdaControlsConstants.NAMESPACE, "look_down"), - InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_2, "key.categories.movement").build(); - public static final FabricKeyBinding BINDING_LOOK_LEFT = FabricKeyBinding.Builder.create(new Identifier(LambdaControlsConstants.NAMESPACE, "look_left"), - InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_4, "key.categories.movement").build(); + public static final KeyBinding BINDING_LOOK_UP = InputManager.makeKeyBinding(new Identifier(LambdaControlsConstants.NAMESPACE, "look_up"), + InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_8, "key.categories.movement"); + public static final KeyBinding BINDING_LOOK_RIGHT = InputManager.makeKeyBinding(new Identifier(LambdaControlsConstants.NAMESPACE, "look_right"), + InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_6, "key.categories.movement"); + public static final KeyBinding BINDING_LOOK_DOWN = InputManager.makeKeyBinding(new Identifier(LambdaControlsConstants.NAMESPACE, "look_down"), + InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_2, "key.categories.movement"); + public static final KeyBinding BINDING_LOOK_LEFT = InputManager.makeKeyBinding(new Identifier(LambdaControlsConstants.NAMESPACE, "look_left"), + InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_4, "key.categories.movement"); public static final Identifier CONTROLLER_BUTTONS = new Identifier(LambdaControlsConstants.NAMESPACE, "textures/gui/controller_buttons.png"); public static final Identifier CONTROLLER_AXIS = new Identifier(LambdaControlsConstants.NAMESPACE, "textures/gui/controller_axis.png"); public final LambdaControlsConfig config = new LambdaControlsConfig(this); @@ -63,10 +65,10 @@ public class LambdaControlsClient extends LambdaControls implements ClientModIni public void onInitializeClient() { INSTANCE = this; - KeyBindingRegistry.INSTANCE.register(BINDING_LOOK_UP); - KeyBindingRegistry.INSTANCE.register(BINDING_LOOK_RIGHT); - KeyBindingRegistry.INSTANCE.register(BINDING_LOOK_DOWN); - KeyBindingRegistry.INSTANCE.register(BINDING_LOOK_LEFT); + KeyBindingHelper.registerKeyBinding(BINDING_LOOK_UP); + KeyBindingHelper.registerKeyBinding(BINDING_LOOK_RIGHT); + KeyBindingHelper.registerKeyBinding(BINDING_LOOK_DOWN); + KeyBindingHelper.registerKeyBinding(BINDING_LOOK_LEFT); ClientSidePacketRegistry.INSTANCE.register(CONTROLS_MODE_CHANNEL, (context, attachedData) -> context.getTaskQueue() .execute(() -> ClientSidePacketRegistry.INSTANCE.sendToServer(CONTROLS_MODE_CHANNEL, this.makeControlsModeBuffer(this.config.getControlsMode())))); @@ -76,7 +78,7 @@ public class LambdaControlsClient extends LambdaControls implements ClientModIni LambdaControlsFeature.fromName(name).ifPresent(feature -> context.getTaskQueue().execute(() -> feature.setAllowed(allowed))); }); - ClientTickCallback.EVENT.register(this::onTick); + ClientTickEvents.END_CLIENT_TICK.register(this::onTick); OpenScreenCallback.EVENT.register((client, screen) -> { if (screen == null && this.config.getControlsMode() == ControlsMode.TOUCHSCREEN) { @@ -131,7 +133,7 @@ public class LambdaControlsClient extends LambdaControls implements ClientModIni public void onRender(MinecraftClient client) { - this.input.onRender(client); + this.input.onRender(client.getTickDelta(), client); } /** diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsModMenu.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsModMenu.java index cb4b591..644e19d 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsModMenu.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsModMenu.java @@ -18,17 +18,11 @@ import me.lambdaurora.lambdacontrols.client.gui.LambdaControlsSettingsScreen; * Represents the API implementation of ModMenu for LambdaControls. * * @author LambdAurora - * @version 1.2.0 + * @version 1.3.0 * @since 1.1.0 */ public class LambdaControlsModMenu implements ModMenuApi { - @Override - public String getModId() - { - return LambdaControlsConstants.NAMESPACE; - } - @Override public ConfigScreenFactory getModConfigScreenFactory() { diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaInput.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaInput.java index 407ed21..8dfbaea 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaInput.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaInput.java @@ -19,7 +19,7 @@ import me.lambdaurora.lambdacontrols.client.gui.TouchscreenOverlay; import me.lambdaurora.lambdacontrols.client.mixin.AdvancementsScreenAccessor; import me.lambdaurora.lambdacontrols.client.mixin.CreativeInventoryScreenAccessor; import me.lambdaurora.lambdacontrols.client.mixin.EntryListWidgetAccessor; -import me.lambdaurora.lambdacontrols.client.util.ContainerScreenAccessor; +import me.lambdaurora.lambdacontrols.client.util.HandledScreenAccessor; import me.lambdaurora.spruceui.SpruceLabelWidget; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -31,18 +31,20 @@ import net.minecraft.client.gui.ParentElement; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.advancement.AdvancementTab; import net.minecraft.client.gui.screen.advancement.AdvancementsScreen; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; import net.minecraft.client.gui.screen.world.WorldListWidget; import net.minecraft.client.gui.widget.AbstractPressableButtonWidget; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; +import net.minecraft.client.gui.widget.EntryListWidget; import net.minecraft.client.gui.widget.SliderWidget; -import net.minecraft.container.Slot; -import net.minecraft.container.SlotActionType; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; @@ -69,7 +71,7 @@ import static org.lwjgl.glfw.GLFW.*; * Represents the LambdaControls' input handler. * * @author LambdAurora - * @version 1.2.0 + * @version 1.3.0 * @since 1.0.0 */ public class LambdaInput @@ -80,8 +82,6 @@ public class LambdaInput private int actionGuiCooldown = 0; private int ignoreNextA = 0; // Sneak state. - private double prevTargetYaw = 0.0; - private double prevTargetPitch = 0.0; private double targetYaw = 0.0; private double targetPitch = 0.0; private float prevXAxis = 0.F; @@ -103,8 +103,8 @@ public class LambdaInput */ public void onTick(@NotNull MinecraftClient client) { - this.prevTargetYaw = this.targetYaw; - this.prevTargetPitch = this.targetPitch; + this.targetYaw = 0.F; + this.targetPitch = 0.F; // Handles the key bindings. if (LambdaControlsClient.BINDING_LOOK_UP.isPressed()) { @@ -189,20 +189,24 @@ public class LambdaInput * * @param client The client instance. */ - public void onRender(@NotNull MinecraftClient client) + public void onRender(float tickDelta, @NotNull MinecraftClient client) { - if ((client.currentScreen == null || client.currentScreen instanceof TouchscreenOverlay) && - (this.prevTargetYaw != this.targetYaw || this.prevTargetPitch != this.targetPitch)) { - float deltaYaw = (float) ((this.targetYaw - client.player.prevYaw) * client.getTickDelta()); - float deltaPitch = (float) ((this.targetPitch - client.player.prevPitch) * client.getTickDelta()); - float rotationYaw = client.player.prevYaw + deltaYaw; - float rotationPitch = client.player.prevPitch + deltaPitch; + if (!(client.currentScreen == null || client.currentScreen instanceof TouchscreenOverlay)) + return; + + PlayerEntity player = client.player; + if (player == null) + return; + + if (this.targetYaw != 0F || this.targetPitch != 0F) { + float rotationYaw = (float) (player.prevYaw + (this.targetYaw / 0.10) * tickDelta); + float rotationPitch = (float) (player.prevPitch + (this.targetPitch / 0.10) * tickDelta); client.player.yaw = rotationYaw; client.player.pitch = MathHelper.clamp(rotationPitch, -90.F, 90.F); if (client.player.isRiding()) { client.player.getVehicle().copyPositionAndRotation(client.player); } - client.getTutorialManager().onUpdateMouse(deltaPitch, deltaYaw); + client.getTutorialManager().onUpdateMouse(this.targetPitch, this.targetYaw); } } @@ -314,28 +318,28 @@ public class LambdaInput } } - if (client.currentScreen instanceof ContainerScreen && client.interactionManager != null && client.player != null) { + if (client.currentScreen instanceof HandledScreen && client.interactionManager != null && client.player != null) { double x = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(); double y = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight(); - Slot slot = ((ContainerScreenAccessor) client.currentScreen).lambdacontrols_getSlotAt(x, y); + Slot slot = ((HandledScreenAccessor) client.currentScreen).lambdacontrols_getSlotAt(x, y); SlotActionType slotAction = SlotActionType.PICKUP; if (button == GLFW.GLFW_GAMEPAD_BUTTON_A && slot != null) { if (client.currentScreen instanceof CreativeInventoryScreen) { if (((CreativeInventoryScreenAccessor) client.currentScreen).lambdacontrols_isCreativeInventorySlot(slot)) slotAction = SlotActionType.CLONE; } - client.interactionManager.clickSlot(((ContainerScreen) client.currentScreen).getContainer().syncId, slot.id, GLFW.GLFW_MOUSE_BUTTON_1, slotAction, client.player); - client.player.playerContainer.sendContentUpdates(); + client.interactionManager.clickSlot(((HandledScreen) client.currentScreen).getScreenHandler().syncId, slot.id, GLFW.GLFW_MOUSE_BUTTON_1, slotAction, client.player); + client.player.playerScreenHandler.sendContentUpdates(); this.actionGuiCooldown = 5; return; } else if (button == GLFW.GLFW_GAMEPAD_BUTTON_B) { - client.player.closeContainer(); + client.player.closeHandledScreen(); return; } else if (button == GLFW.GLFW_GAMEPAD_BUTTON_X && slot != null) { - client.interactionManager.clickSlot(((ContainerScreen) client.currentScreen).getContainer().syncId, slot.id, GLFW.GLFW_MOUSE_BUTTON_2, SlotActionType.PICKUP, client.player); + client.interactionManager.clickSlot(((HandledScreen) client.currentScreen).getScreenHandler().syncId, slot.id, GLFW.GLFW_MOUSE_BUTTON_2, SlotActionType.PICKUP, client.player); return; } else if (button == GLFW.GLFW_GAMEPAD_BUTTON_Y && slot != null) { - client.interactionManager.clickSlot(((ContainerScreen) client.currentScreen).getContainer().syncId, slot.id, GLFW.GLFW_MOUSE_BUTTON_1, SlotActionType.QUICK_MOVE, client.player); + client.interactionManager.clickSlot(((HandledScreen) client.currentScreen).getScreenHandler().syncId, slot.id, GLFW.GLFW_MOUSE_BUTTON_1, SlotActionType.QUICK_MOVE, client.player); return; } } else if (button == GLFW.GLFW_GAMEPAD_BUTTON_B) { @@ -437,6 +441,7 @@ public class LambdaInput if (client.currentScreen == null) { // Handles the look direction. + absValue -= this.config.getDeadZone(); this.handleLook(client, axis, (float) (absValue / (1.0 - this.config.getDeadZone())), state); } else { boolean allowMouseControl = true; @@ -555,7 +560,7 @@ public class LambdaInput this.actionGuiCooldown = 2; // Prevent to press too quickly the focused element, so we have to skip 5 ticks. return false; } else if (element instanceof AlwaysSelectedEntryListWidget) { - ((EntryListWidgetAccessor) element).lambdacontrols_moveSelection(right ? 1 : -1); + ((EntryListWidgetAccessor) element).lambdacontrols_moveSelection(right ? EntryListWidget.class_5403.field_25661 : EntryListWidget.class_5403.field_25662); return false; } else if (element instanceof ParentElement) { ParentElement entryList = (ParentElement) element; @@ -570,7 +575,7 @@ public class LambdaInput /** * Handles the look direction input. * - * @param client The client isntance. + * @param client The client instance. * @param axis The axis to change. * @param value The value of the look. * @param state The state. @@ -579,21 +584,19 @@ public class LambdaInput { // Handles the look direction. if (client.player != null) { - double powValue = Math.pow(value, 4.0); + double powValue = Math.pow(value, 2.0); if (axis == GLFW_GAMEPAD_AXIS_RIGHT_Y) { if (state == 2) { - this.targetPitch = client.player.pitch - this.config.getRightYAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; - this.targetPitch = MathHelper.clamp(this.targetPitch, -90.0D, 90.0D); + this.targetPitch = -this.config.getRightYAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; } else if (state == 1) { - this.targetPitch = client.player.pitch + this.config.getRightYAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; - this.targetPitch = MathHelper.clamp(this.targetPitch, -90.0D, 90.0D); + this.targetPitch = this.config.getRightYAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; } } if (axis == GLFW_GAMEPAD_AXIS_RIGHT_X) { if (state == 2) { - this.targetYaw = client.player.yaw - this.config.getRightXAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; + this.targetYaw = -this.config.getRightXAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; } else if (state == 1) { - this.targetYaw = client.player.yaw + this.config.getRightXAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; + this.targetYaw = this.config.getRightXAxisSign() * (this.config.getRotationSpeed() * powValue) * 0.33D; } } } @@ -615,26 +618,26 @@ public class LambdaInput private static boolean isScreenInteractive(@NotNull Screen screen) { - return !(screen instanceof AdvancementsScreen || screen instanceof ContainerScreen || LambdaControlsCompat.requireMouseOnScreen(screen)); + return !(screen instanceof AdvancementsScreen || screen instanceof HandledScreen || LambdaControlsCompat.requireMouseOnScreen(screen)); } // Inspired from https://github.com/MrCrayfish/Controllable/blob/1.14.X/src/main/java/com/mrcrayfish/controllable/client/ControllerInput.java#L686. private void moveMouseToClosestSlot(@NotNull MinecraftClient client, @Nullable Screen screen) { // Makes the mouse attracted to slots. This helps with selecting items when using a controller. - if (screen instanceof ContainerScreen) { - ContainerScreen inventoryScreen = (ContainerScreen) screen; - ContainerScreenAccessor accessor = (ContainerScreenAccessor) inventoryScreen; + if (screen instanceof HandledScreen) { + HandledScreen inventoryScreen = (HandledScreen) screen; + HandledScreenAccessor accessor = (HandledScreenAccessor) inventoryScreen; int guiLeft = accessor.getX(); int guiTop = accessor.getY(); int mouseX = (int) (targetMouseX * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth()); int mouseY = (int) (targetMouseY * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight()); // Finds the closest slot in the GUI within 14 pixels. - Optional> closestSlot = inventoryScreen.getContainer().slots.parallelStream() + Optional> closestSlot = inventoryScreen.getScreenHandler().slots.parallelStream() .map(slot -> { - int x = guiLeft + slot.xPosition + 8; - int y = guiTop + slot.yPosition + 8; + int x = guiLeft + slot.x + 8; + int y = guiTop + slot.y + 8; // Distance between the slot and the cursor. double distance = Math.sqrt(Math.pow(x - mouseX, 2) + Math.pow(y - mouseY, 2)); @@ -645,8 +648,8 @@ public class LambdaInput if (closestSlot.isPresent()) { Slot slot = closestSlot.get().key; if (slot.hasStack() || !client.player.inventory.getMainHandStack().isEmpty()) { - int slotCenterXScaled = guiLeft + slot.xPosition + 8; - int slotCenterYScaled = guiTop + slot.yPosition + 8; + int slotCenterXScaled = guiLeft + slot.x + 8; + int slotCenterYScaled = guiTop + slot.y + 8; int slotCenterX = (int) (slotCenterXScaled / ((double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth())); int slotCenterY = (int) (slotCenterYScaled / ((double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight())); double deltaX = slotCenterX - targetMouseX; @@ -705,7 +708,7 @@ public class LambdaInput { if (!LambdaControlsFeature.FRONT_BLOCK_PLACING.isAvailable()) return null; - if (client.player != null && client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.MISS && client.player.onGround && client.player.pitch > 35.0F) { + if (client.player != null && client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.MISS && client.player.isOnGround() && client.player.pitch > 35.0F) { if (client.player.isRiding()) return null; BlockPos playerPos = client.player.getBlockPos().down(); diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/OkZoomerCompat.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/OkZoomerCompat.java index 552d203..3aada37 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/OkZoomerCompat.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/OkZoomerCompat.java @@ -9,7 +9,7 @@ package me.lambdaurora.lambdacontrols.client.compat; -import io.github.joaoh1.okzoomer.OkZoomer; +import io.github.joaoh1.okzoomer.client.OkZoomerClientMod; import me.lambdaurora.lambdacontrols.client.LambdaControlsClient; import me.lambdaurora.lambdacontrols.client.controller.ButtonBinding; import org.jetbrains.annotations.NotNull; @@ -19,12 +19,12 @@ import org.lwjgl.glfw.GLFW; * Represents a compatibility handler for OkZoomer. * * @author LambdAurora - * @version 1.1.0 + * @version 1.3.0 * @since 1.1.0 */ public class OkZoomerCompat implements CompatHandler { - public static final String OKZOOMER_CLASS_PATH = "io.github.joaoh1.okzoomer.OkZoomer"; + public static final String OKZOOMER_CLASS_PATH = "io.github.joaoh1.okzoomer.client.OkZoomerClientMod"; @Override public void handle(@NotNull LambdaControlsClient mod) @@ -34,7 +34,7 @@ public class OkZoomerCompat implements CompatHandler .onlyInGame() .cooldown(true) .category(ButtonBinding.MISC_CATEGORY) - .linkKeybind(OkZoomer.zoomKeyBinding) + .linkKeybind(OkZoomerClientMod.zoomKeyBinding) .register(); } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/ReiCompat.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/ReiCompat.java index 2699138..745337d 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/ReiCompat.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/ReiCompat.java @@ -37,7 +37,7 @@ import static org.lwjgl.glfw.GLFW.*; * Represents a compatibility handler for REI. * * @author LambdAurora - * @version 1.2.0 + * @version 1.3.0 * @since 1.2.0 */ public class ReiCompat implements CompatHandler @@ -155,9 +155,9 @@ public class ReiCompat implements CompatHandler if (client.currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreenAccessor screen = (RecipeViewingScreenAccessor) client.currentScreen; if (next) - screen.getCategoryNext().onPressed(); + screen.getCategoryNext().onClick(); else - screen.getCategoryBack().onPressed(); + screen.getCategoryBack().onClick(); return true; } else if (client.currentScreen instanceof VillagerRecipeViewingScreen) { VillagerRecipeViewingScreenAccessor screen = (VillagerRecipeViewingScreenAccessor) client.currentScreen; diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/mixin/RecipeViewingScreenAccessor.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/mixin/RecipeViewingScreenAccessor.java index 5d7d87f..b4e3ad6 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/mixin/RecipeViewingScreenAccessor.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/compat/mixin/RecipeViewingScreenAccessor.java @@ -9,8 +9,8 @@ package me.lambdaurora.lambdacontrols.client.compat.mixin; +import me.shedaniel.rei.api.widgets.Button; import me.shedaniel.rei.gui.RecipeViewingScreen; -import me.shedaniel.rei.gui.widget.ButtonWidget; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -18,15 +18,15 @@ import org.spongepowered.asm.mixin.gen.Accessor; * Represents an accessor to REI's RecipeViewingScreen. * * @author LambdAurora - * @version 1.2.0 + * @version 1.3.0 * @since 1.2.0 */ @Mixin(RecipeViewingScreen.class) public interface RecipeViewingScreenAccessor { @Accessor("categoryBack") - ButtonWidget getCategoryBack(); + Button getCategoryBack(); @Accessor("categoryNext") - ButtonWidget getCategoryNext(); + Button getCategoryNext(); } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/ButtonBinding.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/ButtonBinding.java index 57b11ce..9d5b2ef 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/ButtonBinding.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/ButtonBinding.java @@ -14,6 +14,8 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.options.GameOptions; import net.minecraft.client.options.KeyBinding; import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; import org.aperlambda.lambdacommon.Identifier; import org.aperlambda.lambdacommon.utils.Nameable; import org.aperlambda.lambdacommon.utils.function.PairPredicate; @@ -31,7 +33,7 @@ import static org.lwjgl.glfw.GLFW.*; * Represents a button binding. * * @author LambdAurora - * @version 1.1.0 + * @version 1.3.0 * @since 1.0.0 */ public class ButtonBinding implements Nameable @@ -320,64 +322,63 @@ public class ButtonBinding implements Nameable * @param button The button. * @return The localized name of the button. */ - public static @NotNull - String getLocalizedButtonName(int button) + public static @NotNull Text getLocalizedButtonName(int button) { switch (button % 500) { case -1: - return I18n.translate("key.keyboard.unknown"); + return new TranslatableText("key.keyboard.unknown"); case GLFW_GAMEPAD_BUTTON_A: - return I18n.translate("lambdacontrols.button.a"); + return new TranslatableText("lambdacontrols.button.a"); case GLFW_GAMEPAD_BUTTON_B: - return I18n.translate("lambdacontrols.button.b"); + return new TranslatableText("lambdacontrols.button.b"); case GLFW_GAMEPAD_BUTTON_X: - return I18n.translate("lambdacontrols.button.x"); + return new TranslatableText("lambdacontrols.button.x"); case GLFW_GAMEPAD_BUTTON_Y: - return I18n.translate("lambdacontrols.button.y"); + return new TranslatableText("lambdacontrols.button.y"); case GLFW_GAMEPAD_BUTTON_LEFT_BUMPER: - return I18n.translate("lambdacontrols.button.left_bumper"); + return new TranslatableText("lambdacontrols.button.left_bumper"); case GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER: - return I18n.translate("lambdacontrols.button.right_bumper"); + return new TranslatableText("lambdacontrols.button.right_bumper"); case GLFW_GAMEPAD_BUTTON_BACK: - return I18n.translate("lambdacontrols.button.back"); + return new TranslatableText("lambdacontrols.button.back"); case GLFW_GAMEPAD_BUTTON_START: - return I18n.translate("lambdacontrols.button.start"); + return new TranslatableText("lambdacontrols.button.start"); case GLFW_GAMEPAD_BUTTON_GUIDE: - return I18n.translate("lambdacontrols.button.guide"); + return new TranslatableText("lambdacontrols.button.guide"); case GLFW_GAMEPAD_BUTTON_LEFT_THUMB: - return I18n.translate("lambdacontrols.button.left_thumb"); + return new TranslatableText("lambdacontrols.button.left_thumb"); case GLFW_GAMEPAD_BUTTON_RIGHT_THUMB: - return I18n.translate("lambdacontrols.button.right_thumb"); + return new TranslatableText("lambdacontrols.button.right_thumb"); case GLFW_GAMEPAD_BUTTON_DPAD_UP: - return I18n.translate("lambdacontrols.button.dpad_up"); + return new TranslatableText("lambdacontrols.button.dpad_up"); case GLFW_GAMEPAD_BUTTON_DPAD_RIGHT: - return I18n.translate("lambdacontrols.button.dpad_right"); + return new TranslatableText("lambdacontrols.button.dpad_right"); case GLFW_GAMEPAD_BUTTON_DPAD_DOWN: - return I18n.translate("lambdacontrols.button.dpad_down"); + return new TranslatableText("lambdacontrols.button.dpad_down"); case GLFW_GAMEPAD_BUTTON_DPAD_LEFT: - return I18n.translate("lambdacontrols.button.dpad_left"); + return new TranslatableText("lambdacontrols.button.dpad_left"); case 100: - return I18n.translate("lambdacontrols.axis.left_x+"); + return new TranslatableText("lambdacontrols.axis.left_x+"); case 101: - return I18n.translate("lambdacontrols.axis.left_y+"); + return new TranslatableText("lambdacontrols.axis.left_y+"); case 102: - return I18n.translate("lambdacontrols.axis.right_x+"); + return new TranslatableText("lambdacontrols.axis.right_x+"); case 103: - return I18n.translate("lambdacontrols.axis.right_y+"); + return new TranslatableText("lambdacontrols.axis.right_y+"); case 104: - return I18n.translate("lambdacontrols.axis.left_trigger"); + return new TranslatableText("lambdacontrols.axis.left_trigger"); case 105: - return I18n.translate("lambdacontrols.axis.right_trigger"); + return new TranslatableText("lambdacontrols.axis.right_trigger"); case 200: - return I18n.translate("lambdacontrols.axis.left_x-"); + return new TranslatableText("lambdacontrols.axis.left_x-"); case 201: - return I18n.translate("lambdacontrols.axis.left_y-"); + return new TranslatableText("lambdacontrols.axis.left_y-"); case 202: - return I18n.translate("lambdacontrols.axis.right_x-"); + return new TranslatableText("lambdacontrols.axis.right_x-"); case 203: - return I18n.translate("lambdacontrols.axis.right_y-"); + return new TranslatableText("lambdacontrols.axis.right_y-"); default: - return I18n.translate("lambdacontrols.button.unknown", button); + return new TranslatableText("lambdacontrols.button.unknown", button); } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputHandlers.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputHandlers.java index c039e33..f810387 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputHandlers.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputHandlers.java @@ -13,18 +13,18 @@ import me.lambdaurora.lambdacontrols.client.ButtonState; import me.lambdaurora.lambdacontrols.client.mixin.AdvancementsScreenAccessor; import me.lambdaurora.lambdacontrols.client.mixin.CreativeInventoryScreenAccessor; import me.lambdaurora.lambdacontrols.client.mixin.RecipeBookWidgetAccessor; -import me.lambdaurora.lambdacontrols.client.util.ContainerScreenAccessor; +import me.lambdaurora.lambdacontrols.client.util.HandledScreenAccessor; import me.lambdaurora.lambdacontrols.client.util.KeyBindingAccessor; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.advancement.AdvancementTab; import net.minecraft.client.gui.screen.advancement.AdvancementsScreen; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.screen.recipebook.RecipeGroupButtonWidget; import net.minecraft.client.util.ScreenshotUtils; -import net.minecraft.container.Slot; import net.minecraft.item.ItemGroup; +import net.minecraft.screen.slot.Slot; import org.aperlambda.lambdacommon.utils.Pair; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ import java.util.stream.Collectors; * Represents some input handlers. * * @author LambdAurora - * @version 1.2.0 + * @version 1.3.0 * @since 1.1.0 */ public class InputHandlers @@ -109,8 +109,8 @@ public class InputHandlers // If in game, then pause the game. if (client.currentScreen == null) client.openPauseMenu(false); - else if (client.currentScreen instanceof ContainerScreen && client.player != null) // If the current screen is a container then close it. - client.player.closeContainer(); + else if (client.currentScreen instanceof HandledScreen && client.player != null) // If the current screen is a container then close it. + client.player.closeHandledScreen(); else // Else just close the current screen. client.currentScreen.onClose(); } @@ -145,11 +145,11 @@ public class InputHandlers public static PressAction handleInventorySlotPad(int direction) { return (client, binding, action) -> { - if (!(client.currentScreen instanceof ContainerScreen && action != ButtonState.RELEASE)) + if (!(client.currentScreen instanceof HandledScreen && action != ButtonState.RELEASE)) return false; - ContainerScreen inventory = (ContainerScreen) client.currentScreen; - ContainerScreenAccessor accessor = (ContainerScreenAccessor) inventory; + HandledScreen inventory = (HandledScreen) client.currentScreen; + HandledScreenAccessor accessor = (HandledScreenAccessor) inventory; int guiLeft = accessor.getX(); int guiTop = accessor.getY(); double mouseX = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(); @@ -159,17 +159,17 @@ public class InputHandlers Slot mouseSlot = accessor.lambdacontrols_getSlotAt(mouseX, mouseY); // Finds the closest slot in the GUI within 14 pixels. - Optional closestSlot = inventory.getContainer().slots.parallelStream() + Optional closestSlot = inventory.getScreenHandler().slots.parallelStream() .filter(Predicate.isEqual(mouseSlot).negate()) .map(slot -> { - int posX = guiLeft + slot.xPosition + 8; - int posY = guiTop + slot.yPosition + 8; + int posX = guiLeft + slot.x + 8; + int posY = guiTop + slot.y + 8; int otherPosX = (int) mouseX; int otherPosY = (int) mouseY; if (mouseSlot != null) { - otherPosX = guiLeft + mouseSlot.xPosition + 8; - otherPosY = guiTop + mouseSlot.yPosition + 8; + otherPosX = guiLeft + mouseSlot.x + 8; + otherPosY = guiTop + mouseSlot.y + 8; } // Distance between the slot and the cursor. @@ -177,13 +177,13 @@ public class InputHandlers return Pair.of(slot, distance); }).filter(entry -> { Slot slot = entry.key; - int posX = guiLeft + slot.xPosition + 8; - int posY = guiTop + slot.yPosition + 8; + int posX = guiLeft + slot.x + 8; + int posY = guiTop + slot.y + 8; int otherPosX = (int) mouseX; int otherPosY = (int) mouseY; if (mouseSlot != null) { - otherPosX = guiLeft + mouseSlot.xPosition + 8; - otherPosY = guiTop + mouseSlot.yPosition + 8; + otherPosX = guiLeft + mouseSlot.x + 8; + otherPosY = guiTop + mouseSlot.y + 8; } if (direction == 0) return posY < otherPosY; @@ -201,8 +201,8 @@ public class InputHandlers if (closestSlot.isPresent()) { Slot slot = closestSlot.get(); - int x = guiLeft + slot.xPosition + 8; - int y = guiTop + slot.yPosition + 8; + int x = guiLeft + slot.x + 8; + int y = guiTop + slot.y + 8; InputManager.queueMousePosition(x * (double) client.getWindow().getWidth() / (double) client.getWindow().getScaledWidth(), y * (double) client.getWindow().getHeight() / (double) client.getWindow().getScaledHeight()); return true; @@ -244,7 +244,7 @@ public class InputHandlers */ public static boolean inInventory(@NotNull MinecraftClient client, @NotNull ButtonBinding binding) { - return client.currentScreen instanceof ContainerScreen; + return client.currentScreen instanceof HandledScreen; } /** diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputManager.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputManager.java index 5cd2f83..7a84bb3 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputManager.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/controller/InputManager.java @@ -15,6 +15,8 @@ import me.lambdaurora.lambdacontrols.client.LambdaControlsClient; import me.lambdaurora.lambdacontrols.client.LambdaControlsConfig; import me.lambdaurora.lambdacontrols.client.util.MouseAccessor; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.options.KeyBinding; +import net.minecraft.client.util.InputUtil; import net.minecraft.util.math.MathHelper; import org.aperlambda.lambdacommon.Identifier; import org.aperlambda.lambdacommon.utils.function.PairPredicate; @@ -357,4 +359,34 @@ public class InputManager { return CATEGORIES.stream(); } + + /** + * Returns a new key binding instance. + * @param id The identifier of the key binding. + * @param type The type. + * @param code The code. + * @param category The category of the key binding. + * @return The key binding. + * + * @see #makeKeyBinding(Identifier, InputUtil.Type, int, String) + */ + public static @NotNull KeyBinding makeKeyBinding(@NotNull net.minecraft.util.Identifier id, InputUtil.Type type, int code, @NotNull String category) + { + return makeKeyBinding(new Identifier(id.getNamespace(), id.getPath()), type, code, category); + } + + /** + * Returns a new key binding instance. + * @param id The identifier of the key binding. + * @param type The type. + * @param code The code. + * @param category The category of the key binding. + * @return The key binding. + * + * @see #makeKeyBinding(net.minecraft.util.Identifier, InputUtil.Type, int, String) + */ + public static @NotNull KeyBinding makeKeyBinding(@NotNull Identifier id, InputUtil.Type type, int code, @NotNull String category) + { + return new KeyBinding(String.format("key.%s.%s", id.getNamespace(), id.getName()), type, code, category); + } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerButtonWidget.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerButtonWidget.java index e664978..a1ecb4b 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerButtonWidget.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerButtonWidget.java @@ -9,10 +9,13 @@ package me.lambdaurora.lambdacontrols.client.gui; +import me.lambdaurora.lambdacontrols.LambdaControls; import me.lambdaurora.lambdacontrols.client.controller.ButtonBinding; import me.lambdaurora.spruceui.AbstractIconButtonWidget; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; import org.aperlambda.lambdacommon.utils.Pair; import org.jetbrains.annotations.NotNull; @@ -33,25 +36,25 @@ public class ControllerButtonWidget extends AbstractIconButtonWidget public void update() { int length = binding.getButton().length; - this.setMessage(this.binding.isNotBound() ? I18n.translate("lambdacontrols.not_bound") : - (length > 0 ? ButtonBinding.getLocalizedButtonName(binding.getButton()[0]) : "<>")); + this.setMessage(this.binding.isNotBound() ? LambdaControls.NOT_BOUND_TEXT : + (length > 0 ? ButtonBinding.getLocalizedButtonName(binding.getButton()[0]) : new LiteralText("<>"))); } @Override - public String getMessage() + public Text getMessage() { if (this.binding.getButton().length > 1) - return ""; + return LiteralText.EMPTY; return super.getMessage(); } @Override - protected int renderIcon(int mouseX, int mouseY, float delta, int x, int y) + protected int renderIcon(MatrixStack matrices, int mouseX, int mouseY, float delta, int x, int y) { if (this.binding.getButton().length > 1) { x += (this.width / 2 - this.iconWidth / 2) - 4; } - Pair size = LambdaControlsRenderer.drawButton(x, y, this.binding, MinecraftClient.getInstance()); + Pair size = LambdaControlsRenderer.drawButton(matrices, x, y, this.binding, MinecraftClient.getInstance()); this.iconWidth = size.key; return size.value; } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerControlsScreen.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerControlsScreen.java index 7eca949..02d47f4 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerControlsScreen.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControllerControlsScreen.java @@ -16,7 +16,7 @@ import me.lambdaurora.spruceui.SpruceButtonWidget; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.options.ControlsOptionsScreen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.TranslatableText; import org.aperlambda.lambdacommon.utils.function.Predicates; import org.jetbrains.annotations.NotNull; @@ -56,26 +56,30 @@ public class ControllerControlsScreen extends Screen @Override protected void init() { - this.addButton(new SpruceButtonWidget(this.width / 2 - 155, 18, this.hideSettings ? 310 : 150, 20, I18n.translate("lambdacontrols.menu.keyboard_controls"), - btn -> this.minecraft.openScreen(new ControlsOptionsScreen(this, this.minecraft.options)))); + this.addButton(new SpruceButtonWidget(this.width / 2 - 155, 18, this.hideSettings ? 310 : 150, 20, + new TranslatableText("lambdacontrols.menu.keyboard_controls"), + btn -> this.client.openScreen(new ControlsOptionsScreen(this, this.client.options)))); if (!this.hideSettings) - this.addButton(new SpruceButtonWidget(this.width / 2 - 155 + 160, 18, 150, 20, I18n.translate("menu.options"), - btn -> this.minecraft.openScreen(new LambdaControlsSettingsScreen(this, true)))); - this.bindingsListWidget = new ControlsListWidget(this, this.minecraft); + this.addButton(new SpruceButtonWidget(this.width / 2 - 155 + 160, 18, 150, 20, + new TranslatableText("menu.options"), + btn -> this.client.openScreen(new LambdaControlsSettingsScreen(this, true)))); + this.bindingsListWidget = new ControlsListWidget(this, this.client); this.children.add(this.bindingsListWidget); - this.resetButton = this.addButton(new ButtonWidget(this.width / 2 - 155, this.height - 29, 150, 20, I18n.translate("controls.resetAll"), + this.resetButton = this.addButton(new ButtonWidget(this.width / 2 - 155, this.height - 29, 150, 20, + new TranslatableText("controls.resetAll"), btn -> InputManager.streamBindings().forEach(binding -> this.mod.config.setButtonBinding(binding, binding.getDefaultButton())))); - this.addButton(new ButtonWidget(this.width / 2 - 155 + 160, this.height - 29, 150, 20, I18n.translate("gui.done"), - btn -> this.minecraft.openScreen(this.parent))); + this.addButton(new ButtonWidget(this.width / 2 - 155 + 160, this.height - 29, 150, 20, + new TranslatableText("gui.done"), + btn -> this.client.openScreen(this.parent))); } @Override - public void render(int mouseX, int mouseY, float delta) + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackground(); - this.bindingsListWidget.render(mouseX, mouseY, delta); - this.drawCenteredString(this.font, this.title.asFormattedString(), this.width / 2, 8, 16777215); + this.renderBackground(matrices); + this.bindingsListWidget.render(matrices, mouseX, mouseY, delta); + this.drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, 8, 16777215); this.resetButton.active = InputManager.streamBindings().anyMatch(Predicates.not(ButtonBinding::isDefault)); - super.render(mouseX, mouseY, delta); + super.render(matrices, mouseX, mouseY, delta); } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControlsListWidget.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControlsListWidget.java index 6cd8c33..d48afe4 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControlsListWidget.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ControlsListWidget.java @@ -20,6 +20,10 @@ import net.minecraft.client.gui.Element; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.MutableText; +import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; @@ -48,7 +52,7 @@ public class ControlsListWidget extends ElementListWidget { - int i = client.textRenderer.getStringWidth(I18n.translate(binding.getTranslationKey())); + int i = client.textRenderer.getWidth(I18n.translate(binding.getTranslationKey())); if (i > this.field_2733) { this.field_2733 = i; } @@ -59,9 +63,9 @@ public class ControlsListWidget extends ElementListWidget gui.mod.config.setButtonBinding(binding, binding.getDefaultButton())) { - protected String getNarrationMessage() + protected MutableText getNarrationMessage() { - return I18n.translate("narrator.controls.reset", bindingName); + return new TranslatableText("narrator.controls.reset", bindingName); } }; - this.unboundButton = new ButtonWidget(0, 0, 50, 20, I18n.translate("lambdacontrols.menu.unbound"), + this.unboundButton = new ButtonWidget(0, 0, 50, 20, new TranslatableText("lambdacontrols.menu.unbound"), btn -> { gui.mod.config.setButtonBinding(binding, UNBOUND); gui.focusedBinding = null; }) { - protected String getNarrationMessage() + protected MutableText getNarrationMessage() { - return I18n.translate("lambdacontrols.narrator.unbound", bindingName); + return new TranslatableText("lambdacontrols.narrator.unbound", bindingName); } }; } @@ -121,34 +125,38 @@ public class ControlsListWidget extends ElementListWidget " + Formatting.YELLOW + this.editButton.getMessage() + Formatting.WHITE + " <"); + MutableText text = new LiteralText("> ").formatted(Formatting.WHITE); + text.append(this.editButton.getMessage().copy().formatted(Formatting.YELLOW)); + this.editButton.setMessage(text.append(new LiteralText(" <").formatted(Formatting.WHITE))); } else if (!this.binding.isNotBound() && InputManager.hasDuplicatedBindings(this.binding)) { - this.editButton.setMessage(Formatting.RED + this.editButton.getMessage()); + MutableText text = this.editButton.getMessage().copy(); + this.editButton.setMessage(text.formatted(Formatting.RED)); } else if (this.binding.isNotBound()) { - this.editButton.setMessage(Formatting.GOLD + this.editButton.getMessage()); + MutableText text = this.editButton.getMessage().copy(); + this.editButton.setMessage(text.formatted(Formatting.GOLD)); } - this.editButton.render(mouseX, mouseY, delta); + this.editButton.render(matrices, mouseX, mouseY, delta); } public boolean mouseClicked(double mouseX, double mouseY, int button) @@ -175,13 +183,13 @@ public class ControlsListWidget extends ElementListWidget drawButton(int x, int y, @NotNull ButtonBinding button, @NotNull MinecraftClient client) + public static Pair drawButton(MatrixStack matrices, int x, int y, @NotNull ButtonBinding button, @NotNull MinecraftClient client) { - return drawButton(x, y, button.getButton(), client); + return drawButton(matrices, x, y, button.getButton(), client); } - public static Pair drawButton(int x, int y, int[] buttons, @NotNull MinecraftClient client) + public static Pair drawButton(MatrixStack matrices, int x, int y, int[] buttons, @NotNull MinecraftClient client) { int height = 0; int length = 0; int currentX = x; for (int i = 0; i < buttons.length; i++) { int btn = buttons[i]; - int size = drawButton(currentX, y, btn, client); + int size = drawButton(matrices, currentX, y, btn, client); if (size > height) height = size; length += size; @@ -107,7 +108,7 @@ public class LambdaControlsRenderer } @SuppressWarnings("deprecated") - public static int drawButton(int x, int y, int button, @NotNull MinecraftClient client) + public static int drawButton(MatrixStack matrices, int x, int y, int button, @NotNull MinecraftClient client) { boolean second = false; if (button == -1) @@ -190,7 +191,7 @@ public class LambdaControlsRenderer int assetSize = axis ? AXIS_SIZE : BUTTON_SIZE; RenderSystem.color4f(1.0F, second ? 0.0F : 1.0F, 1.0F, 1.0F); - DrawableHelper.blit(x + (ICON_SIZE / 2 - assetSize / 2), y + (ICON_SIZE / 2 - assetSize / 2), + DrawableHelper.drawTexture(matrices, x + (ICON_SIZE / 2 - assetSize / 2), y + (ICON_SIZE / 2 - assetSize / 2), (float) buttonOffset, (float) (controllerType * (axis ? AXIS_SIZE : BUTTON_SIZE)), assetSize, assetSize, 256, 256); @@ -199,20 +200,20 @@ public class LambdaControlsRenderer return ICON_SIZE; } - public static int drawButtonTip(int x, int y, @NotNull ButtonBinding button, boolean display, @NotNull MinecraftClient client) + public static int drawButtonTip(MatrixStack matrices, int x, int y, @NotNull ButtonBinding button, boolean display, @NotNull MinecraftClient client) { - return drawButtonTip(x, y, button.getButton(), button.getTranslationKey(), display, client); + return drawButtonTip(matrices, x, y, button.getButton(), button.getTranslationKey(), display, client); } - public static int drawButtonTip(int x, int y, int[] button, @NotNull String action, boolean display, @NotNull MinecraftClient client) + public static int drawButtonTip(MatrixStack matrices, int x, int y, int[] button, @NotNull String action, boolean display, @NotNull MinecraftClient client) { if (display) { - int buttonWidth = drawButton(x, y, button, client).key; + int buttonWidth = drawButton(matrices, x, y, button, client).key; String translatedAction = I18n.translate(action); int textY = (LambdaControlsRenderer.ICON_SIZE / 2 - client.textRenderer.fontHeight / 2) + 1; - return client.textRenderer.drawWithShadow(translatedAction, (float) (x + buttonWidth + 2), (float) (y + textY), 14737632); + return client.textRenderer.drawWithShadow(matrices, translatedAction, (float) (x + buttonWidth + 2), (float) (y + textY), 14737632); } return -10; @@ -220,6 +221,6 @@ public class LambdaControlsRenderer private static int getButtonTipWidth(@NotNull String action, @NotNull TextRenderer textRenderer) { - return 15 + 5 + textRenderer.getStringWidth(action); + return 15 + 5 + textRenderer.getWidth(action); } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java index d61a3c5..241517f 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java @@ -25,6 +25,9 @@ import net.minecraft.client.gui.widget.ButtonListWidget; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.options.Option; import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.MutableText; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import net.minecraft.util.Util; @@ -35,7 +38,7 @@ import org.lwjgl.glfw.GLFW; */ public class LambdaControlsSettingsScreen extends Screen { - public static final String GAMEPAD_TOOL_URL = "http://generalarcade.com/gamepadtool/"; + public static final String GAMEPAD_TOOL_URL = "https://generalarcade.com/gamepadtool/"; final LambdaControlsClient mod; private final Screen parent; private final boolean hideControls; @@ -61,7 +64,9 @@ public class LambdaControlsSettingsScreen extends Screen // Hud options private final Option hudEnableOption; private final Option hudSideOption; - private final String controllerMappingsUrlText = I18n.translate("lambdacontrols.controller.mappings.2", Formatting.GOLD.toString(), GAMEPAD_TOOL_URL, Formatting.RESET.toString()); + private final MutableText controllerMappingsUrlText = new LiteralText("(") + .append(new LiteralText(GAMEPAD_TOOL_URL).formatted(Formatting.GOLD)) + .append("),"); private ButtonListWidget list; private SpruceLabelWidget gamepadToolUrlLabel; @@ -74,19 +79,19 @@ public class LambdaControlsSettingsScreen extends Screen // General options this.autoSwitchModeOption = new SpruceBooleanOption("lambdacontrols.menu.auto_switch_mode", this.mod.config::hasAutoSwitchMode, this.mod.config::setAutoSwitchMode, new TranslatableText("lambdacontrols.tooltip.auto_switch_mode"), true); - this.rotationSpeedOption = new SpruceDoubleOption("lambdacontrols.menu.rotation_speed", 0.0, 150.0, 0.5F, this.mod.config::getRotationSpeed, + this.rotationSpeedOption = new SpruceDoubleOption("lambdacontrols.menu.rotation_speed", 0.0, 100.0, 0.5F, this.mod.config::getRotationSpeed, newValue -> { synchronized (this.mod.config) { this.mod.config.setRotationSpeed(newValue); } - }, option -> option.getDisplayPrefix() + option.get(), + }, option -> option.getDisplayPrefix().append(String.valueOf(option.get())), new TranslatableText("lambdacontrols.tooltip.rotation_speed")); this.mouseSpeedOption = new SpruceDoubleOption("lambdacontrols.menu.mouse_speed", 0.0, 150.0, 0.5F, this.mod.config::getMouseSpeed, newValue -> { synchronized (this.mod.config) { this.mod.config.setMouseSpeed(newValue); } - }, option -> option.getDisplayPrefix() + option.get(), + }, option -> option.getDisplayPrefix().append(String.valueOf(option.get())), new TranslatableText("lambdacontrols.tooltip.mouse_speed")); this.resetOption = new SpruceResetOption(btn -> { this.mod.config.reset(); @@ -113,11 +118,11 @@ public class LambdaControlsSettingsScreen extends Screen }, option -> { String controllerName = this.mod.config.getController().getName(); if (!this.mod.config.getController().isConnected()) - return option.getDisplayPrefix() + Formatting.RED + controllerName; + return option.getDisplayPrefix().append(new LiteralText(controllerName).formatted(Formatting.RED)); else if (!this.mod.config.getController().isGamepad()) - return option.getDisplayPrefix() + Formatting.GOLD + controllerName; + return option.getDisplayPrefix().append(new LiteralText(controllerName).formatted(Formatting.GOLD)); else - return option.getDisplayPrefix() + controllerName; + return option.getDisplayPrefix().append(controllerName); }, null); this.secondControllerOption = new SpruceCyclingOption("lambdacontrols.menu.controller2", amount -> { @@ -129,16 +134,16 @@ public class LambdaControlsSettingsScreen extends Screen }, option -> this.mod.config.getSecondController().map(controller -> { String controllerName = controller.getName(); if (!controller.isConnected()) - return option.getDisplayPrefix() + Formatting.RED + controllerName; + return option.getDisplayPrefix().append(new LiteralText(controllerName).formatted(Formatting.RED)); else if (!controller.isGamepad()) - return option.getDisplayPrefix() + Formatting.GOLD + controllerName; + return option.getDisplayPrefix().append(new LiteralText(controllerName).formatted(Formatting.GOLD)); else - return option.getDisplayPrefix() + controllerName; - }).orElse(option.getDisplayPrefix() + Formatting.RED + I18n.translate("options.off")), + return option.getDisplayPrefix().append(controllerName); + }).orElse(option.getDisplayPrefix().append(new TranslatableText("options.off").formatted(Formatting.RED))), new TranslatableText("lambdacontrols.tooltip.controller2")); this.controllerTypeOption = new SpruceCyclingOption("lambdacontrols.menu.controller_type", amount -> this.mod.config.setControllerType(this.mod.config.getControllerType().next()), - option -> option.getDisplayPrefix() + this.mod.config.getControllerType().getTranslatedName(), + option -> option.getDisplayPrefix().append(this.mod.config.getControllerType().getTranslatedName()), new TranslatableText("lambdacontrols.tooltip.controller_type")); this.deadZoneOption = new SpruceDoubleOption("lambdacontrols.menu.dead_zone", 0.05, 1.0, 0.05F, this.mod.config::getDeadZone, newValue -> { @@ -147,7 +152,7 @@ public class LambdaControlsSettingsScreen extends Screen } }, option -> { String value = String.valueOf(option.get()); - return option.getDisplayPrefix() + value.substring(0, Math.min(value.length(), 5)); + return option.getDisplayPrefix().append(value.substring(0, Math.min(value.length(), 5))); }, new TranslatableText("lambdacontrols.tooltip.dead_zone")); this.invertsRightXAxis = new SpruceBooleanOption("lambdacontrols.menu.invert_right_x_axis", this.mod.config::doesInvertRightXAxis, newValue -> { @@ -168,7 +173,7 @@ public class LambdaControlsSettingsScreen extends Screen this.mod::setHudEnabled, new TranslatableText("lambdacontrols.tooltip.hud_enable"), true); this.hudSideOption = new SpruceCyclingOption("lambdacontrols.menu.hud_side", amount -> this.mod.config.setHudSide(this.mod.config.getHudSide().next()), - option -> option.getDisplayPrefix() + this.mod.config.getHudSide().getTranslatedName(), + option -> option.getDisplayPrefix().append(this.mod.config.getHudSide().getTranslatedName()), new TranslatableText("lambdacontrols.tooltip.hud_side")); } @@ -188,7 +193,7 @@ public class LambdaControlsSettingsScreen extends Screen private int getTextHeight() { - return (5 + this.font.fontHeight) * 3 + 5; + return (5 + this.textRenderer.fontHeight) * 3 + 5; } @Override @@ -197,29 +202,29 @@ public class LambdaControlsSettingsScreen extends Screen super.init(); int buttonHeight = 20; SpruceButtonWidget controlsModeBtn = new SpruceButtonWidget(this.width / 2 - 155, 18, this.hideControls ? 310 : 150, buttonHeight, - I18n.translate("lambdacontrols.menu.controls_mode") + ": " + I18n.translate(this.mod.config.getControlsMode().getTranslationKey()), + new TranslatableText("lambdacontrols.menu.controls_mode").append(": ").append(new TranslatableText(this.mod.config.getControlsMode().getTranslationKey())), btn -> { ControlsMode next = this.mod.config.getControlsMode().next(); - btn.setMessage(I18n.translate("lambdacontrols.menu.controls_mode") + ": " + I18n.translate(next.getTranslationKey())); + btn.setMessage(new TranslatableText("lambdacontrols.menu.controls_mode").append(": ").append(new TranslatableText(next.getTranslationKey()))); this.mod.config.setControlsMode(next); this.mod.config.save(); - if (this.minecraft.player != null) { + if (this.client.player != null) { ClientSidePacketRegistry.INSTANCE.sendToServer(LambdaControls.CONTROLS_MODE_CHANNEL, this.mod.makeControlsModeBuffer(next)); } }); controlsModeBtn.setTooltip(new TranslatableText("lambdacontrols.tooltip.controls_mode")); this.addButton(controlsModeBtn); if (!this.hideControls) - this.addButton(new ButtonWidget(this.width / 2 - 155 + 160, 18, 150, buttonHeight, I18n.translate("options.controls"), + this.addButton(new ButtonWidget(this.width / 2 - 155 + 160, 18, 150, buttonHeight, new TranslatableText("options.controls"), btn -> { if (this.mod.config.getControlsMode() == ControlsMode.CONTROLLER) - this.minecraft.openScreen(new ControllerControlsScreen(this, true)); + this.client.openScreen(new ControllerControlsScreen(this, true)); else - this.minecraft.openScreen(new ControlsOptionsScreen(this, this.minecraft.options)); + this.client.openScreen(new ControlsOptionsScreen(this, this.client.options)); })); - this.list = new ButtonListWidget(this.minecraft, this.width, this.height, 43, this.height - 29 - this.getTextHeight(), 25); + this.list = new ButtonListWidget(this.client, this.width, this.height, 43, this.height - 29 - this.getTextHeight(), 25); // General options this.list.addSingleOptionEntry(new SpruceSeparatorOption("lambdacontrols.menu.title.general", true, null)); this.list.addOptionEntry(this.rotationSpeedOption, this.mouseSpeedOption); @@ -243,27 +248,27 @@ public class LambdaControlsSettingsScreen extends Screen this.list.addOptionEntry(this.hudEnableOption, this.hudSideOption); this.children.add(this.list); - this.gamepadToolUrlLabel = new SpruceLabelWidget(this.width / 2, this.height - 29 - (5 + this.font.fontHeight) * 2, this.controllerMappingsUrlText, this.width, + this.gamepadToolUrlLabel = new SpruceLabelWidget(this.width / 2, this.height - 29 - (5 + this.textRenderer.fontHeight) * 2, this.controllerMappingsUrlText, this.width, label -> Util.getOperatingSystem().open(GAMEPAD_TOOL_URL), true); this.gamepadToolUrlLabel.setTooltip(new TranslatableText("chat.link.open")); this.children.add(this.gamepadToolUrlLabel); - this.addButton(this.resetOption.createButton(this.minecraft.options, this.width / 2 - 155, this.height - 29, 150)); - this.addButton(new ButtonWidget(this.width / 2 - 155 + 160, this.height - 29, 150, buttonHeight, I18n.translate("gui.done"), - (buttonWidget) -> this.minecraft.openScreen(this.parent))); + this.addButton(this.resetOption.createButton(this.client.options, this.width / 2 - 155, this.height - 29, 150)); + this.addButton(new ButtonWidget(this.width / 2 - 155 + 160, this.height - 29, 150, buttonHeight, new TranslatableText("gui.done"), + (buttonWidget) -> this.client.openScreen(this.parent))); } @Override - public void render(int mouseX, int mouseY, float delta) + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackground(); - this.list.render(mouseX, mouseY, delta); - super.render(mouseX, mouseY, delta); - this.drawCenteredString(this.font, I18n.translate("lambdacontrols.menu.title"), this.width / 2, 8, 16777215); - this.drawCenteredString(this.font, I18n.translate("lambdacontrols.controller.mappings.1", Formatting.GREEN.toString(), Formatting.RESET.toString()), this.width / 2, this.height - 29 - (5 + this.font.fontHeight) * 3, 10526880); - this.gamepadToolUrlLabel.render(mouseX, mouseY, delta); - this.drawCenteredString(this.font, I18n.translate("lambdacontrols.controller.mappings.3", Formatting.GREEN.toString(), Formatting.RESET.toString()), this.width / 2, this.height - 29 - (5 + this.font.fontHeight), 10526880); + this.renderBackground(matrices); + this.list.render(matrices, mouseX, mouseY, delta); + super.render(matrices, mouseX, mouseY, delta); + this.drawCenteredString(matrices, this.textRenderer, I18n.translate("lambdacontrols.menu.title"), this.width / 2, 8, 16777215); + this.drawCenteredString(matrices, this.textRenderer, I18n.translate("lambdacontrols.controller.mappings.1", Formatting.GREEN.toString(), Formatting.RESET.toString()), this.width / 2, this.height - 29 - (5 + this.textRenderer.fontHeight) * 3, 10526880); + this.gamepadToolUrlLabel.render(matrices, mouseX, mouseY, delta); + this.drawCenteredString(matrices, this.textRenderer, I18n.translate("lambdacontrols.controller.mappings.3", Formatting.GREEN.toString(), Formatting.RESET.toString()), this.width / 2, this.height - 29 - (5 + this.textRenderer.fontHeight), 10526880); - Tooltip.renderAll(); + Tooltip.renderAll(matrices); } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ReloadControllerMappingsOption.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ReloadControllerMappingsOption.java index 526b74f..d88aab5 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ReloadControllerMappingsOption.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/ReloadControllerMappingsOption.java @@ -36,7 +36,7 @@ public class ReloadControllerMappingsOption extends Option implements Nameable @Override public AbstractButtonWidget createButton(GameOptions options, int x, int y, int width) { - SpruceButtonWidget button = new SpruceButtonWidget(x, y, width, 20, this.getName(), btn -> { + SpruceButtonWidget button = new SpruceButtonWidget(x, y, width, 20, new TranslatableText(KEY), btn -> { MinecraftClient client = MinecraftClient.getInstance(); Controller.updateMappings(); if (client.currentScreen != null) diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/TouchscreenOverlay.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/TouchscreenOverlay.java index 78e2236..941a4ac 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/TouchscreenOverlay.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/TouchscreenOverlay.java @@ -70,14 +70,14 @@ public class TouchscreenOverlay extends Screen private void pauseGame(boolean bl) { - if (this.minecraft == null) + if (this.client == null) return; - boolean bl2 = this.minecraft.isIntegratedServerRunning() && !this.minecraft.getServer().isRemote(); + boolean bl2 = this.client.isIntegratedServerRunning() && !this.client.getServer().isRemote(); if (bl2) { - this.minecraft.openScreen(new GameMenuScreen(!bl)); - this.minecraft.getSoundManager().pauseAll(); + this.client.openScreen(new GameMenuScreen(!bl)); + this.client.getSoundManager().pauseAll(); } else { - this.minecraft.openScreen(new GameMenuScreen(true)); + this.client.openScreen(new GameMenuScreen(true)); } } @@ -99,9 +99,9 @@ public class TouchscreenOverlay extends Screen */ private void updateJumpButtons() { - if (this.minecraft == null) + if (this.client == null) return; - if (this.minecraft.player.abilities.allowFlying && this.minecraft.player.abilities.flying) { + if (this.client.player.abilities.allowFlying && this.client.player.abilities.flying) { boolean oldStateFly = this.flyButton.visible; this.jumpButton.visible = false; this.flyButton.visible = true; @@ -128,7 +128,7 @@ public class TouchscreenOverlay extends Screen */ private void handleJump(ButtonWidget btn, boolean state) { - ((KeyBindingAccessor) this.minecraft.options.keyJump).lambdacontrols_handlePressState(state); + ((KeyBindingAccessor) this.client.options.keyJump).lambdacontrols_handlePressState(state); } @Override @@ -149,27 +149,27 @@ public class TouchscreenOverlay extends Screen protected void init() { super.init(); - int scaledWidth = this.minecraft.getWindow().getScaledWidth(); - int scaledHeight = this.minecraft.getWindow().getScaledHeight(); + int scaledWidth = this.client.getWindow().getScaledWidth(); + int scaledHeight = this.client.getWindow().getScaledHeight(); this.addButton(new TexturedButtonWidget(scaledWidth / 2 - 20, 0, 20, 20, 0, 106, 20, ButtonWidget.WIDGETS_LOCATION, 256, 256, - btn -> this.minecraft.openScreen(new ChatScreen("")), "")); + btn -> this.client.openScreen(new ChatScreen("")), LiteralText.EMPTY)); this.addButton(new TexturedButtonWidget(scaledWidth / 2, 0, 20, 20, 0, 0, 20, WIDGETS_LOCATION, 256, 256, btn -> this.pauseGame(false))); // Inventory buttons. int inventoryButtonX = scaledWidth / 2; int inventoryButtonY = scaledHeight - 16 - 5; - if (this.minecraft.options.mainArm == Arm.LEFT) { + if (this.client.options.mainArm == Arm.LEFT) { inventoryButtonX = inventoryButtonX - 91 - 24; } else { inventoryButtonX = inventoryButtonX + 91 + 4; } this.addButton(new TexturedButtonWidget(inventoryButtonX, inventoryButtonY, 20, 20, 20, 0, 20, WIDGETS_LOCATION, 256, 256, btn -> { - if (this.minecraft.interactionManager.hasRidingInventory()) { - this.minecraft.player.openRidingInventory(); + if (this.client.interactionManager.hasRidingInventory()) { + this.client.player.openRidingInventory(); } else { - this.minecraft.getTutorialManager().onInventoryOpened(); - this.minecraft.openScreen(new InventoryScreen(this.minecraft.player)); + this.client.getTutorialManager().onInventoryOpened(); + this.client.openScreen(new InventoryScreen(this.client.player)); } })); int jumpButtonX, swapHandsX, sneakButtonX; @@ -187,31 +187,31 @@ public class TouchscreenOverlay extends Screen this.addButton(new SpruceTexturedButtonWidget(swapHandsX, sneakButtonY, 20, 20, 0, 160, 20, WIDGETS_LOCATION, (btn, state) -> { if (state) { - if (!this.minecraft.player.isSpectator()) { - this.minecraft.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.SWAP_HELD_ITEMS, BlockPos.ORIGIN, Direction.DOWN)); + if (!this.client.player.isSpectator()) { + this.client.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.SWAP_ITEM_WITH_OFFHAND, BlockPos.ORIGIN, Direction.DOWN)); } } })); // Drop this.addButton(new SpruceTexturedButtonWidget(swapHandsX, sneakButtonY + 5 + 20, 20, 20, 20, 160, 20, WIDGETS_LOCATION, - (btn, state) -> ((KeyBindingAccessor) this.minecraft.options.keyDrop).lambdacontrols_handlePressState(state))); + (btn, state) -> ((KeyBindingAccessor) this.client.options.keyDrop).lambdacontrols_handlePressState(state))); // Jump keys this.addButton(this.jumpButton = new SpruceTexturedButtonWidget(jumpButtonX, sneakButtonY, 20, 20, 0, 40, 20, WIDGETS_LOCATION, this::handleJump)); this.addButton(this.flyButton = new SpruceTexturedButtonWidget(jumpButtonX, sneakButtonY, 20, 20, 20, 40, 20, WIDGETS_LOCATION, (btn, state) -> { - if (this.flyButtonEnableTicks == 0) this.minecraft.player.abilities.flying = false; + if (this.flyButtonEnableTicks == 0) this.client.player.abilities.flying = false; })); this.addButton(this.flyUpButton = new SpruceTexturedButtonWidget(jumpButtonX, sneakButtonY - 5 - 20, 20, 20, 40, 40, 20, WIDGETS_LOCATION, this::handleJump)); this.addButton(this.flyDownButton = new SpruceTexturedButtonWidget(jumpButtonX, sneakButtonY + 20 + 5, 20, 20, 60, 40, 20, WIDGETS_LOCATION, - (btn, state) -> ((KeyBindingAccessor) this.minecraft.options.keySneak).lambdacontrols_handlePressState(state))); + (btn, state) -> ((KeyBindingAccessor) this.client.options.keySneak).lambdacontrols_handlePressState(state))); this.updateJumpButtons(); // Movements keys this.addButton((this.startSneakButton = new SpruceTexturedButtonWidget(sneakButtonX, sneakButtonY, 20, 20, 0, 120, 20, WIDGETS_LOCATION, (btn, state) -> { if (state) { - ((KeyBindingAccessor) this.minecraft.options.keySneak).lambdacontrols_handlePressState(true); + ((KeyBindingAccessor) this.client.options.keySneak).lambdacontrols_handlePressState(true); this.startSneakButton.visible = false; this.endSneakButton.visible = true; } @@ -219,7 +219,7 @@ public class TouchscreenOverlay extends Screen this.addButton((this.endSneakButton = new SpruceTexturedButtonWidget(sneakButtonX, sneakButtonY, 20, 20, 20, 120, 20, WIDGETS_LOCATION, (btn, state) -> { if (state) { - ((KeyBindingAccessor) this.minecraft.options.keySneak).lambdacontrols_handlePressState(false); + ((KeyBindingAccessor) this.client.options.keySneak).lambdacontrols_handlePressState(false); this.endSneakButton.visible = false; this.startSneakButton.visible = true; } @@ -227,49 +227,49 @@ public class TouchscreenOverlay extends Screen this.endSneakButton.visible = false; this.addButton(this.forwardLeftButton = new SpruceTexturedButtonWidget(sneakButtonX - 20 - 5, sneakButtonY - 5 - 20, 20, 20, 80, 80, 20, WIDGETS_LOCATION, (btn, state) -> { - ((KeyBindingAccessor) this.minecraft.options.keyForward).lambdacontrols_handlePressState(state); - ((KeyBindingAccessor) this.minecraft.options.keyLeft).lambdacontrols_handlePressState(state); + ((KeyBindingAccessor) this.client.options.keyForward).lambdacontrols_handlePressState(state); + ((KeyBindingAccessor) this.client.options.keyLeft).lambdacontrols_handlePressState(state); this.updateForwardButtonsState(state); })); this.forwardLeftButton.visible = false; this.addButton(new SpruceTexturedButtonWidget(sneakButtonX, sneakButtonY - 5 - 20, 20, 20, 0, 80, 20, WIDGETS_LOCATION, (btn, state) -> { - ((KeyBindingAccessor) this.minecraft.options.keyForward).lambdacontrols_handlePressState(state); + ((KeyBindingAccessor) this.client.options.keyForward).lambdacontrols_handlePressState(state); this.updateForwardButtonsState(state); this.forwardLeftButton.visible = true; this.forwardRightButton.visible = true; })); this.addButton(this.forwardRightButton = new SpruceTexturedButtonWidget(sneakButtonX + 20 + 5, sneakButtonY - 5 - 20, 20, 20, 100, 80, 20, WIDGETS_LOCATION, (btn, state) -> { - ((KeyBindingAccessor) this.minecraft.options.keyForward).lambdacontrols_handlePressState(state); - ((KeyBindingAccessor) this.minecraft.options.keyRight).lambdacontrols_handlePressState(state); + ((KeyBindingAccessor) this.client.options.keyForward).lambdacontrols_handlePressState(state); + ((KeyBindingAccessor) this.client.options.keyRight).lambdacontrols_handlePressState(state); this.updateForwardButtonsState(state); })); this.forwardRightButton.visible = true; this.addButton(new SpruceTexturedButtonWidget(sneakButtonX + 20 + 5, sneakButtonY, 20, 20, 20, 80, 20, WIDGETS_LOCATION, - (btn, state) -> ((KeyBindingAccessor) this.minecraft.options.keyRight).lambdacontrols_handlePressState(state))); + (btn, state) -> ((KeyBindingAccessor) this.client.options.keyRight).lambdacontrols_handlePressState(state))); this.addButton(new SpruceTexturedButtonWidget(sneakButtonX, sneakButtonY + 20 + 5, 20, 20, 40, 80, 20, WIDGETS_LOCATION, - (btn, state) -> ((KeyBindingAccessor) this.minecraft.options.keyBack).lambdacontrols_handlePressState(state))); + (btn, state) -> ((KeyBindingAccessor) this.client.options.keyBack).lambdacontrols_handlePressState(state))); this.addButton(new SpruceTexturedButtonWidget(sneakButtonX - 20 - 5, sneakButtonY, 20, 20, 60, 80, 20, WIDGETS_LOCATION, - (btn, state) -> ((KeyBindingAccessor) this.minecraft.options.keyLeft).lambdacontrols_handlePressState(state))); - } + (btn, state) -> ((KeyBindingAccessor) this.client.options.keyLeft).lambdacontrols_handlePressState(state))); - @Override - public void render(int mouseX, int mouseY, float delta) - { - super.render(mouseX, mouseY, delta); + this.buttons.forEach(button -> { + if (button instanceof SpruceTexturedButtonWidget) { + ((SpruceTexturedButtonWidget) button).setSilent(true); + } + }); } @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (mouseY >= (double) (this.height - 22) && this.minecraft != null && this.minecraft.player != null) { + if (mouseY >= (double) (this.height - 22) && this.client != null && this.client.player != null) { int centerX = this.width / 2; if (mouseX >= (double) (centerX - 90) && mouseX <= (double) (centerX + 90)) { for (int slot = 0; slot < 9; ++slot) { int slotX = centerX - 90 + slot * 20 + 2; if (mouseX >= (double) slotX && mouseX <= (double) (slotX + 20)) { - this.minecraft.player.inventory.selectedSlot = slot; + this.client.player.inventory.selectedSlot = slot; return true; } } @@ -281,16 +281,16 @@ public class TouchscreenOverlay extends Screen @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - if (button == GLFW.GLFW_MOUSE_BUTTON_1 && this.minecraft != null) { + if (button == GLFW.GLFW_MOUSE_BUTTON_1 && this.client != null) { if (deltaY > 0.01) - this.mod.input.handleLook(this.minecraft, GLFW_GAMEPAD_AXIS_RIGHT_Y, (float) Math.abs(deltaY / 5.0), 2); + this.mod.input.handleLook(this.client, GLFW_GAMEPAD_AXIS_RIGHT_Y, (float) Math.abs(deltaY / 5.0), 2); else if (deltaY < 0.01) - this.mod.input.handleLook(this.minecraft, GLFW_GAMEPAD_AXIS_RIGHT_Y, (float) Math.abs(deltaY / 5.0), 1); + this.mod.input.handleLook(this.client, GLFW_GAMEPAD_AXIS_RIGHT_Y, (float) Math.abs(deltaY / 5.0), 1); if (deltaX > 0.01) - this.mod.input.handleLook(this.minecraft, GLFW_GAMEPAD_AXIS_RIGHT_X, (float) Math.abs(deltaX / 5.0), 2); + this.mod.input.handleLook(this.client, GLFW_GAMEPAD_AXIS_RIGHT_X, (float) Math.abs(deltaX / 5.0), 2); else if (deltaX < 0.01) - this.mod.input.handleLook(this.minecraft, GLFW_GAMEPAD_AXIS_RIGHT_X, (float) Math.abs(deltaX / 5.0), 1); + this.mod.input.handleLook(this.client, GLFW_GAMEPAD_AXIS_RIGHT_X, (float) Math.abs(deltaX / 5.0), 1); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ControlsOptionsScreenMixin.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ControlsOptionsScreenMixin.java index 428ff99..329e8e0 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ControlsOptionsScreenMixin.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ControlsOptionsScreenMixin.java @@ -19,6 +19,7 @@ import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.options.GameOptions; import net.minecraft.client.resource.language.I18n; import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -40,7 +41,7 @@ public class ControlsOptionsScreenMixin extends GameOptionsScreen if (this.parent instanceof ControllerControlsScreen) return this.addButton(btn); else - return this.addButton(new ButtonWidget(btn.x, btn.y, btn.getWidth(), ((AbstractButtonWidgetAccessor) btn).getHeight(), I18n.translate("menu.options"), - b -> this.minecraft.openScreen(new LambdaControlsSettingsScreen(this, true)))); + return this.addButton(new ButtonWidget(btn.x, btn.y, btn.getWidth(), ((AbstractButtonWidgetAccessor) btn).getHeight(), new TranslatableText("menu.options"), + b -> this.client.openScreen(new LambdaControlsSettingsScreen(this, true)))); } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/CreativeInventoryScreenAccessor.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/CreativeInventoryScreenAccessor.java index 60bed45..3b643b2 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/CreativeInventoryScreenAccessor.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/CreativeInventoryScreenAccessor.java @@ -10,8 +10,8 @@ package me.lambdaurora.lambdacontrols.client.mixin; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.container.Slot; import net.minecraft.item.ItemGroup; +import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/EntryListWidgetAccessor.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/EntryListWidgetAccessor.java index 592353e..8906267 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/EntryListWidgetAccessor.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/EntryListWidgetAccessor.java @@ -17,5 +17,5 @@ import org.spongepowered.asm.mixin.gen.Invoker; public interface EntryListWidgetAccessor { @Invoker("moveSelection") - void lambdacontrols_moveSelection(int amount); + void lambdacontrols_moveSelection(EntryListWidget.class_5403 direction); } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ContainerScreenMixin.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/HandledScreenMixin.java similarity index 60% rename from fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ContainerScreenMixin.java rename to fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/HandledScreenMixin.java index f1707ae..fd97430 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/ContainerScreenMixin.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/HandledScreenMixin.java @@ -13,11 +13,11 @@ import me.lambdaurora.lambdacontrols.ControlsMode; import me.lambdaurora.lambdacontrols.client.LambdaControlsClient; import me.lambdaurora.lambdacontrols.client.compat.LambdaControlsCompat; import me.lambdaurora.lambdacontrols.client.gui.LambdaControlsRenderer; -import me.lambdaurora.lambdacontrols.client.util.ContainerScreenAccessor; -import net.fabricmc.loader.api.FabricLoader; +import me.lambdaurora.lambdacontrols.client.util.HandledScreenAccessor; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; -import net.minecraft.container.Slot; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.screen.slot.Slot; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -29,8 +29,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * Represents the mixin for the class ContainerScreen. */ -@Mixin(ContainerScreen.class) -public abstract class ContainerScreenMixin implements ContainerScreenAccessor +@Mixin(HandledScreen.class) +public abstract class HandledScreenMixin implements HandledScreenAccessor { @Accessor("x") public abstract int getX(); @@ -42,20 +42,20 @@ public abstract class ContainerScreenMixin implements ContainerScreenAccessor public abstract Slot lambdacontrols_getSlotAt(double posX, double posY); @Inject(method = "render", at = @At("RETURN")) - public void onRender(int mouseX, int mouseY, float delta, CallbackInfo ci) + public void onRender(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (LambdaControlsClient.get().config.getControlsMode() == ControlsMode.CONTROLLER) { MinecraftClient client = MinecraftClient.getInstance(); int x = 2, y = client.getWindow().getScaledHeight() - 2 - LambdaControlsRenderer.ICON_SIZE; - x = LambdaControlsRenderer.drawButtonTip(x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_A}, "lambdacontrols.action.pickup_all", true, client) + 2; - x = LambdaControlsRenderer.drawButtonTip(x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_B}, "lambdacontrols.action.exit", true, client) + 2; + x = LambdaControlsRenderer.drawButtonTip(matrices, x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_A}, "lambdacontrols.action.pickup_all", true, client) + 2; + x = LambdaControlsRenderer.drawButtonTip(matrices, x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_B}, "lambdacontrols.action.exit", true, client) + 2; if (LambdaControlsCompat.isReiPresent()) { x = 2; y -= 24; } - x = LambdaControlsRenderer.drawButtonTip(x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_X}, "lambdacontrols.action.pickup", true, client) + 2; - LambdaControlsRenderer.drawButtonTip(x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_Y}, "lambdacontrols.action.quick_move", true, client); + x = LambdaControlsRenderer.drawButtonTip(matrices, x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_X}, "lambdacontrols.action.pickup", true, client) + 2; + LambdaControlsRenderer.drawButtonTip(matrices, x, y, new int[]{GLFW.GLFW_GAMEPAD_BUTTON_Y}, "lambdacontrols.action.quick_move", true, client); } } } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java index 874d53c..7c63afd 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java @@ -138,7 +138,7 @@ public abstract class MinecraftClientMixin implements FrontBlockPlaceResultAcces private void onItemUse(CallbackInfo ci, Hand[] hands, int handCount, int handIndex, Hand hand, ItemStack stackInHand) { if (!stackInHand.isEmpty() && this.player.pitch > 35.0F && LambdaControlsFeature.FRONT_BLOCK_PLACING.isAvailable()) { - if (this.crosshairTarget != null && this.crosshairTarget.getType() == HitResult.Type.MISS && this.player.onGround) { + if (this.crosshairTarget != null && this.crosshairTarget.getType() == HitResult.Type.MISS && this.player.isOnGround()) { if (!stackInHand.isEmpty() && stackInHand.getItem() instanceof BlockItem) { BlockHitResult hitResult = LambdaInput.tryFrontPlace(((MinecraftClient) (Object) this)); diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/SettingsScreenMixin.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/OptionsScreenMixin.java similarity index 68% rename from fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/SettingsScreenMixin.java rename to fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/OptionsScreenMixin.java index 2046173..a33ace9 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/SettingsScreenMixin.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/OptionsScreenMixin.java @@ -13,7 +13,7 @@ import me.lambdaurora.lambdacontrols.ControlsMode; import me.lambdaurora.lambdacontrols.client.LambdaControlsClient; import me.lambdaurora.lambdacontrols.client.gui.ControllerControlsScreen; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.SettingsScreen; +import net.minecraft.client.gui.screen.options.OptionsScreen; import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.text.Text; @@ -24,20 +24,20 @@ import org.spongepowered.asm.mixin.injection.Redirect; /** * Injects the new controls settings button. */ -@Mixin(SettingsScreen.class) -public class SettingsScreenMixin extends Screen +@Mixin(OptionsScreen.class) +public class OptionsScreenMixin extends Screen { - protected SettingsScreenMixin(Text title) + protected OptionsScreenMixin(Text title) { super(title); } - @Redirect(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/SettingsScreen;addButton(Lnet/minecraft/client/gui/widget/AbstractButtonWidget;)Lnet/minecraft/client/gui/widget/AbstractButtonWidget;", ordinal = 7)) - private AbstractButtonWidget lambdacontrols_onInit(SettingsScreen screen, AbstractButtonWidget btn) + @Redirect(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/options/OptionsScreen;addButton(Lnet/minecraft/client/gui/widget/AbstractButtonWidget;)Lnet/minecraft/client/gui/widget/AbstractButtonWidget;", ordinal = 7)) + private AbstractButtonWidget lambdacontrols_onInit(OptionsScreen screen, AbstractButtonWidget btn) { if (LambdaControlsClient.get().config.getControlsMode() == ControlsMode.CONTROLLER) { return this.addButton(new ButtonWidget(btn.x, btn.y, btn.getWidth(), ((AbstractButtonWidgetAccessor) btn).getHeight(), btn.getMessage(), - b -> this.minecraft.openScreen(new ControllerControlsScreen(this, false)))); + b -> this.client.openScreen(new ControllerControlsScreen(this, false)))); } else { return this.addButton(btn); } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/WorldRendererMixin.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/WorldRendererMixin.java index 87bc9ac..afa1b61 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/WorldRendererMixin.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/WorldRendererMixin.java @@ -14,12 +14,11 @@ import me.lambdaurora.lambdacontrols.client.LambdaInput; import me.lambdaurora.lambdacontrols.client.util.FrontBlockPlaceResultAccessor; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.*; -import net.minecraft.client.util.math.Matrix4f; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.EntityContext; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; @@ -28,6 +27,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Matrix4f; import net.minecraft.util.math.Vec3d; import net.minecraft.util.profiler.Profiler; import net.minecraft.util.shape.VoxelShape; @@ -91,7 +91,7 @@ public abstract class WorldRendererMixin BlockState placementState = block.getPlacementState(context); if (placementState == null) return; - VoxelShape outlineShape = placementState.getOutlineShape(this.client.world, blockPos, EntityContext.of(camera.getFocusedEntity())); + VoxelShape outlineShape = placementState.getOutlineShape(this.client.world, blockPos, ShapeContext.of(camera.getFocusedEntity())); int[] color = LambdaControlsClient.get().config.getFrontBlockOutlineColor(); drawShapeOutline(matrices, vertexConsumer, outlineShape, (double) blockPos.getX() - x, (double) blockPos.getY() - y, (double) blockPos.getZ() - z, color[0] / 255.f, color[1] / 255.f, color[2] / 255.f, color[3] / 255.f); } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/ContainerScreenAccessor.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/HandledScreenAccessor.java similarity index 91% rename from fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/ContainerScreenAccessor.java rename to fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/HandledScreenAccessor.java index 9a5d96a..dfb35e1 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/ContainerScreenAccessor.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/util/HandledScreenAccessor.java @@ -9,12 +9,12 @@ package me.lambdaurora.lambdacontrols.client.util; -import net.minecraft.container.Slot; +import net.minecraft.screen.slot.Slot; /** * Represents an accessor to AbstractContainerScreen. */ -public interface ContainerScreenAccessor +public interface HandledScreenAccessor { /** * Gets the left coordinate of the GUI. diff --git a/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json b/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json index 37658d3..be379e4 100644 --- a/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json +++ b/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json @@ -60,7 +60,6 @@ "lambdacontrols.controller.connected": "Controller %d connected.", "lambdacontrols.controller.disconnected": "Controller %d disconnected.", "lambdacontrols.controller.mappings.1": "To configure the controller mappings, please use %sSDL2 Gamepad Tool%s", - "lambdacontrols.controller.mappings.2": "(%s%s%s),", "lambdacontrols.controller.mappings.3": "and put the mapping in `%s.minecraft/config/gamecontrollerdb.txt%s`.", "lambdacontrols.controller.mappings.updated": "Updated mappings!", "lambdacontrols.controller_type.default": "default", diff --git a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json index 6ae0610..f1ac7b0 100644 --- a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json +++ b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json @@ -60,7 +60,6 @@ "lambdacontrols.controller.connected": "Manette %d connecté.", "lambdacontrols.controller.disconnected": "Manette %d déconnecté.", "lambdacontrols.controller.mappings.1": "Pour configurer les correspondances de la manette, veuillez utiliser %sSDL2 Gamepad Tool%s", - "lambdacontrols.controller.mappings.2": "(%s%s%s),", "lambdacontrols.controller.mappings.3": "et mettez les correspondances dans le fichier `%s.minecraft/config/gamecontrollerdb.txt%s`.", "lambdacontrols.controller.mappings.updated": "Configuration des manettes mise à jour!", "lambdacontrols.controller_type.default": "default", diff --git a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json index 6ae0610..f1ac7b0 100644 --- a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json +++ b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json @@ -60,7 +60,6 @@ "lambdacontrols.controller.connected": "Manette %d connecté.", "lambdacontrols.controller.disconnected": "Manette %d déconnecté.", "lambdacontrols.controller.mappings.1": "Pour configurer les correspondances de la manette, veuillez utiliser %sSDL2 Gamepad Tool%s", - "lambdacontrols.controller.mappings.2": "(%s%s%s),", "lambdacontrols.controller.mappings.3": "et mettez les correspondances dans le fichier `%s.minecraft/config/gamecontrollerdb.txt%s`.", "lambdacontrols.controller.mappings.updated": "Configuration des manettes mise à jour!", "lambdacontrols.controller_type.default": "default", diff --git a/fabric/src/main/resources/config.toml b/fabric/src/main/resources/config.toml index 4ac0d55..0c64894 100644 --- a/fabric/src/main/resources/config.toml +++ b/fabric/src/main/resources/config.toml @@ -40,7 +40,7 @@ auto_switch_mode = false # Controller's dead zone. dead_zone = 0.20 # Rotation speed for look directions. - rotation_speed = 40.0 + rotation_speed = 10.0 # Mouse speed in GUI. mouse_speed = 30.0 # Inverts the right X axis. diff --git a/fabric/src/main/resources/lambdacontrols.mixins.json b/fabric/src/main/resources/lambdacontrols.mixins.json index 980489e..8f76f65 100644 --- a/fabric/src/main/resources/lambdacontrols.mixins.json +++ b/fabric/src/main/resources/lambdacontrols.mixins.json @@ -5,7 +5,6 @@ "client": [ "AbstractButtonWidgetAccessor", "AdvancementsScreenAccessor", - "ContainerScreenMixin", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", "ControlsOptionsScreenMixin", @@ -13,11 +12,12 @@ "EntryListWidgetAccessor", "GameOptionsMixin", "GameRendererMixin", + "HandledScreenMixin", "KeyBindingMixin", "MinecraftClientMixin", "MouseMixin", + "OptionsScreenMixin", "RecipeBookWidgetAccessor", - "SettingsScreenMixin", "WorldRendererMixin" ], "injectors": { diff --git a/gradle.properties b/gradle.properties index eaf7d7e..3db8c04 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,17 +3,17 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.15.2 - yarn_mappings=1.15.2+build.14:v2 - loader_version=0.7.6+build.180 + minecraft_version=1.16.1 + yarn_mappings=1.16.1+build.9:v2 + loader_version=0.8.8+build.202 # Mod Properties - mod_version = 1.2.0 + mod_version = 1.3.0 maven_group = me.lambdaurora archives_base_name = lambdacontrols # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.4.29+build.290-1.15 - spruceui_version=1.3.5 - modmenu_version=1.10.1+build.30 + fabric_version=0.14.0+build.371-1.16 + spruceui_version=1.5.1 + modmenu_version=1.12.2+build.17