diff --git a/build.gradle b/build.gradle index bfb8474..c5843f9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,14 +3,11 @@ plugins { id 'java-library' id 'maven-publish' id 'com.github.johnrengelman.shadow' version '7.0.0' - id 'com.modrinth.minotaur' version '2.+' - id 'net.darkhax.curseforgegradle' version '1.+' + id "me.shedaniel.unified-publishing" version "0.1.+" } -import net.darkhax.curseforgegradle.TaskPublishCurseForge - group = project.maven_group -version = "${project.mod_version}+${getMCVersionString()}" +version = "${project.mod_version}+${project.minecraft_version}" // This field defines the Java version your mod target. def targetJavaVersion = 21 @@ -20,30 +17,6 @@ boolean isMCVersionNonRelease() { || project.minecraft_version.matches('\\d+\\.\\d+-(pre|rc)(\\d+)') } -String getMCVersionString() { - return project.minecraft_version -} - -boolean pingUrl(String address) { - try { - def conn = (HttpURLConnection) new URL(address).openConnection() - int responseCode = conn.getResponseCode() - return (200 <= responseCode && responseCode <= 399) - } catch (IOException ignored) { - return false - } -} - -String parseReadme() { - def excludeRegex = /(?m)(.|\n)*?/ - def linkRegex = /!\[([A-z_ ]+)]\((images\/[A-z.\/_]+)\)/ - - def readme = (String) file('README.md').text - readme = readme.replaceAll(excludeRegex, '') - return readme -} - - repositories { mavenLocal() mavenCentral() @@ -144,39 +117,55 @@ processResources { expand 'version': project.version } } -modrinth { - token = System.getenv("MODRINTH_TOKEN") // Remember to have the MODRINTH_TOKEN environment variable set or else this will fail - just make sure it stays private! - projectId = project.archives_base_name // This can be the project ID or the slug. Either will work! - versionNumber = project.version // You don't need to set this manually. Will fail if Modrinth has this version already - versionName = "MidnightControls " + project.mod_version + " - " + project.minecraft_version - versionType = isMCVersionNonRelease() ? "beta" : "release" // Can also be `beta` or `alpha` - uploadFile = remapJar // With Loom, this MUST be set to `remapJar` instead of `jar`! - gameVersions = [(String) project.minecraft_version] // Must be an array, even with only one version - loaders = ["fabric","quilt"] // Must also be an array - no need to specify this if you're using Loom or ForgeGradle - dependencies { // A special DSL for creating dependencies - // scope.type - // The scope can be `required`, `optional`, `incompatible`, or `embedded` - // The type can either be `project` or `version` - required.project "midnightlib" // Creates a new required dependency on MidnightLib + +ext { + releaseChangelog = { + def changes = new StringBuilder() + changes << "## MidnightControls v$project.version for $project.minecraft_version\n[View the changelog](https://www.github.com/TeamMidnightDust/MidnightControls/commits/)" + def proc = "git log --max-count=1 --pretty=format:%s".execute() + proc.in.eachLine { line -> + def processedLine = line.toString() + if (!processedLine.contains("New translations") && !processedLine.contains("Merge") && !processedLine.contains("branch")) { + changes << "\n- ${processedLine.capitalize()}" + } + } + proc.waitFor() + return changes.toString() } - changelog = project.changelog } -tasks.register('publishCurseForge', TaskPublishCurseForge) { - // This token is used to authenticate with CurseForge. It should be handled - // with the same level of care and security as your actual password. You - // should never share your token with an untrusted source or publish it - // publicly to GitHub or embed it within a project. The best practice is to - // store this token in an environment variable or a build secret. - apiToken = System.getenv("CURSEFORGE_TOKEN") +unifiedPublishing { + project { + displayName = "MidnightControls v$project.version - Fabric $project.minecraft_version" + releaseType = "$project.release_type" + changelog = releaseChangelog() + gameVersions = [] + gameLoaders = ["fabric","quilt"] + mainPublication remapJar + relations { + includes { + curseforge = "midnightlib" + modrinth = "midnightlib" + } + } - // Tells CurseForgeGradle to publish the output of the jar task. This will - // return a UploadArtifact object that can be used to further configure the - // file. - def mainFile = upload(project.curseforge_id, remapJar) - mainFile.changelog = project.changelog - mainFile.displayName = "MidnightControls " + project.mod_version + " - " + project.minecraft_version - mainFile.addModLoader("Fabric", "Quilt") - mainFile.addRequirement("midnightlib") - mainFile.releaseType = "release" + var CURSEFORGE_TOKEN = project.findProperty("CURSEFORGE_TOKEN") ?: System.getenv("CURSEFORGE_TOKEN") + if (CURSEFORGE_TOKEN != null) { + curseforge { + token = CURSEFORGE_TOKEN + id = rootProject.curseforge_id + gameVersions.addAll "Java 21", project.minecraft_version + } + } + + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + modrinth { + token = MODRINTH_TOKEN + id = rootProject.modrinth_id + version = "$project.version" + gameVersions.addAll project.minecraft_version + } + } + } } diff --git a/gradle.properties b/gradle.properties index f76eefc..18decfd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,24 +3,24 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=1.20.5 -yarn_mappings=1.20.5+build.1 -loader_version=0.15.10 +minecraft_version=1.21 +yarn_mappings=1.21+build.1 +loader_version=0.15.11 # Mod Properties -mod_version = 1.9.5 +mod_version = 1.9.6 maven_group = eu.midnightdust archives_base_name = midnightcontrols +release_type=beta modrinth_id = bXX9h73M curseforge_id = 621768 -changelog = See changes at: https://github.com/TeamMidnightDust/MidnightControls/commits/ # 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.97.7+1.20.5 +fabric_version=0.100.1+1.21 sodium_version=mc1.19.2-0.4.4 spruceui_version=5.0.3+1.20.4 -midnightlib_version=1.5.4-fabric +midnightlib_version=1.5.7-fabric modmenu_version=10.0.0-beta.1 emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric bendylib_version=2.0.+ diff --git a/settings.gradle b/settings.gradle index 2602762..9515566 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,6 +4,7 @@ pluginManagement { name 'Fabric' url 'https://maven.fabricmc.net/' } + maven { url "https://maven.architectury.dev/" } gradlePluginPortal() } } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java index 2c76298..c727308 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java @@ -13,20 +13,13 @@ import eu.midnightdust.midnightcontrols.event.PlayerChangeControlsModeCallback; import eu.midnightdust.midnightcontrols.packet.ControlsModePacket; import eu.midnightdust.midnightcontrols.packet.FeaturePacket; import eu.midnightdust.midnightcontrols.packet.HelloPacket; -import io.netty.buffer.Unpooled; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.loader.api.FabricLoader; -import net.fabricmc.loader.api.ModContainer; -import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.CustomPayload; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.jetbrains.annotations.NotNull; - -import java.util.Objects; -import java.util.Optional; /** * Represents the MidnightControls mod. @@ -37,9 +30,9 @@ import java.util.Optional; */ public class MidnightControls implements ModInitializer { private static MidnightControls INSTANCE; - public static final CustomPayload.Id CONTROLS_MODE_CHANNEL = CustomPayload.id(MidnightControlsConstants.CONTROLS_MODE_CHANNEL.toString()); - public static final CustomPayload.Id FEATURE_CHANNEL = CustomPayload.id(MidnightControlsConstants.FEATURE_CHANNEL.toString()); - public static final CustomPayload.Id HELLO_CHANNEL = CustomPayload.id(MidnightControlsConstants.HELLO_CHANNEL.toString()); + public static final CustomPayload.Id CONTROLS_MODE_CHANNEL = new CustomPayload.Id<>(MidnightControlsConstants.CONTROLS_MODE_CHANNEL); + public static final CustomPayload.Id FEATURE_CHANNEL = new CustomPayload.Id<>(MidnightControlsConstants.FEATURE_CHANNEL); + public static final CustomPayload.Id HELLO_CHANNEL = new CustomPayload.Id<>(MidnightControlsConstants.HELLO_CHANNEL); public static boolean isExtrasLoaded; public final Logger logger = LogManager.getLogger("MidnightControls"); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java index 9491bc4..4a0aa8f 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java @@ -21,7 +21,7 @@ import net.minecraft.util.Identifier; */ public class MidnightControlsConstants { public static final String NAMESPACE = "midnightcontrols"; - public static final Identifier CONTROLS_MODE_CHANNEL = new Identifier(NAMESPACE, "controls_mode"); - public static final Identifier FEATURE_CHANNEL = new Identifier(NAMESPACE, "feature"); - public static final Identifier HELLO_CHANNEL = new Identifier("lambdacontrols", "hello"); + public static final Identifier CONTROLS_MODE_CHANNEL = Identifier.of(NAMESPACE, "controls_mode"); + public static final Identifier FEATURE_CHANNEL = Identifier.of(NAMESPACE, "feature"); + public static final Identifier HELLO_CHANNEL = Identifier.of(NAMESPACE, "hello"); } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index 0849d62..0ca5183 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -64,20 +64,20 @@ import java.util.*; public class MidnightControlsClient extends MidnightControls implements ClientModInitializer { public static boolean lateInitDone = false; private static MidnightControlsClient INSTANCE; - public static final KeyBinding BINDING_LOOK_UP = InputManager.makeKeyBinding(new Identifier(MidnightControlsConstants.NAMESPACE, "look_up"), + public static final KeyBinding BINDING_LOOK_UP = InputManager.makeKeyBinding(Identifier.of(MidnightControlsConstants.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(MidnightControlsConstants.NAMESPACE, "look_right"), + public static final KeyBinding BINDING_LOOK_RIGHT = InputManager.makeKeyBinding(Identifier.of(MidnightControlsConstants.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(MidnightControlsConstants.NAMESPACE, "look_down"), + public static final KeyBinding BINDING_LOOK_DOWN = InputManager.makeKeyBinding(Identifier.of(MidnightControlsConstants.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(MidnightControlsConstants.NAMESPACE, "look_left"), + public static final KeyBinding BINDING_LOOK_LEFT = InputManager.makeKeyBinding(Identifier.of(MidnightControlsConstants.NAMESPACE, "look_left"), InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_4, "key.categories.movement"); - public static final KeyBinding BINDING_RING = InputManager.makeKeyBinding(new Identifier(MidnightControlsConstants.NAMESPACE, "ring"), + public static final KeyBinding BINDING_RING = InputManager.makeKeyBinding(Identifier.of(MidnightControlsConstants.NAMESPACE, "ring"), InputUtil.Type.KEYSYM, InputUtil.UNKNOWN_KEY.getCode(), "key.categories.misc"); - public static final Identifier CONTROLLER_BUTTONS = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_buttons.png"); - public static final Identifier CONTROLLER_EXPANDED = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_expanded.png"); - public static final Identifier CONTROLLER_AXIS = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_axis.png"); - public static final Identifier CURSOR_TEXTURE = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/cursor.png"); + public static final Identifier CONTROLLER_BUTTONS = Identifier.of(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_buttons.png"); + public static final Identifier CONTROLLER_EXPANDED = Identifier.of(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_expanded.png"); + public static final Identifier CONTROLLER_AXIS = Identifier.of(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_axis.png"); + public static final Identifier CURSOR_TEXTURE = Identifier.of(MidnightControlsConstants.NAMESPACE, "textures/gui/cursor.png"); public final static File MAPPINGS_FILE = new File("config/gamecontrollercustommappings.txt"); public final MidnightInput input = new MidnightInput(); public final MidnightRing ring = new MidnightRing(this); @@ -137,8 +137,8 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo HudManager.register(this.hud = new MidnightControlsHud(this)); FabricLoader.getInstance().getModContainer("midnightcontrols").ifPresent(modContainer -> { - ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("midnightcontrols","bedrock"), modContainer, ResourcePackActivationType.NORMAL); - ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("midnightcontrols","legacy"), modContainer, ResourcePackActivationType.NORMAL); + ResourceManagerHelper.registerBuiltinResourcePack(Identifier.of("midnightcontrols","bedrock"), modContainer, ResourcePackActivationType.NORMAL); + ResourceManagerHelper.registerBuiltinResourcePack(Identifier.of("midnightcontrols","legacy"), modContainer, ResourcePackActivationType.NORMAL); }); } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java index 1c4714a..ffe4bb4 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java @@ -23,9 +23,6 @@ import eu.midnightdust.midnightcontrols.client.gui.RingScreen; import eu.midnightdust.midnightcontrols.client.gui.TouchscreenOverlay; import eu.midnightdust.midnightcontrols.client.mixin.*; import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor; -import net.fabricmc.fabric.impl.client.itemgroup.CreativeGuiExtensions; -import net.fabricmc.fabric.impl.client.itemgroup.FabricCreativeGuiComponents; -import net.fabricmc.fabric.impl.itemgroup.FabricItemGroup; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.TitleScreen; @@ -64,11 +61,7 @@ public class InputHandlers { private InputHandlers() { } private static List getVisibleGroups(CreativeInventoryScreen screen) { - return ItemGroups.getGroups().stream() - .filter(itemGroup -> { - if (FabricCreativeGuiComponents.COMMON_GROUPS.contains(itemGroup)) return true; - return ((CreativeGuiExtensions)screen).fabric_currentPage() == ((FabricItemGroup)itemGroup).getPage() && itemGroup.shouldDisplay(); - }).toList(); + return (screen.getItemGroupsOnPage(screen.getCurrentPage())); } public static PressAction handleHotbar(boolean next) { diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java index 1e4528b..99ac213 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java @@ -73,8 +73,8 @@ public class InputManager { public void updateMousePosition(@NotNull MinecraftClient client) { Objects.requireNonNull(client, "Client instance cannot be null."); if (this.prevTargetMouseX != this.targetMouseX || this.prevTargetMouseY != this.targetMouseY) { - double mouseX = this.prevTargetMouseX + (this.targetMouseX - this.prevTargetMouseX) * client.getTickDelta() + 0.5; - double mouseY = this.prevTargetMouseY + (this.targetMouseY - this.prevTargetMouseY) * client.getTickDelta() + 0.5; + double mouseX = this.prevTargetMouseX + (this.targetMouseX - this.prevTargetMouseX) * client.getRenderTickCounter().getTickDelta(true) + 0.5; + double mouseY = this.prevTargetMouseY + (this.targetMouseY - this.prevTargetMouseY) * client.getRenderTickCounter().getTickDelta(true) + 0.5; if (!MidnightControlsConfig.virtualMouse) GLFW.glfwSetCursorPos(client.getWindow().getHandle(), mouseX, mouseY); ((MouseAccessor) client.mouse).midnightcontrols$onCursorPos(client.getWindow().getHandle(), mouseX, mouseY); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java index e7d2d2e..ddb8d72 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java @@ -14,9 +14,18 @@ import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import eu.midnightdust.midnightcontrols.client.util.MathUtil; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.item.ItemStack; +import net.minecraft.predicate.entity.MovementPredicate; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.MathHelper; +import org.apache.commons.lang3.mutable.MutableFloat; import org.jetbrains.annotations.NotNull; +import org.spongepowered.asm.mixin.Unique; /** * Represents the movement handler. @@ -35,7 +44,7 @@ public final class MovementHandler implements PressAction { private float slowdownFactor = 1.f; private float movementForward = 0.f; private float movementSideways = 0.f; - private MathUtil.PolarUtil polarUtil = new MathUtil.PolarUtil(); + private final MathUtil.PolarUtil polarUtil = new MathUtil.PolarUtil(); private MovementHandler() { } @@ -81,7 +90,7 @@ public final class MovementHandler implements PressAction { } this.slowdownFactor = client.player.shouldSlowDown() ? (MathHelper.clamp( - 0.3F + EnchantmentHelper.getSwiftSneakSpeedBoost(client.player), + 0.3F + (float) client.player.getAttributeValue(EntityAttributes.PLAYER_SNEAKING_SPEED), 0.0F, 1.0F )) : 1.f; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java index 24c4e96..357d013 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java @@ -57,7 +57,7 @@ public class MidnightControlsHud extends Hud { private static boolean isCrammed = false; public MidnightControlsHud(@NotNull MidnightControlsClient mod) { - super(new Identifier(MidnightControlsConstants.NAMESPACE, "hud/button_indicator")); + super(Identifier.of(MidnightControlsConstants.NAMESPACE, "hud/button_indicator")); this.mod = mod; } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java index 5c576cb..154126b 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java @@ -509,15 +509,14 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { float g = (float)(color.getGreen()) / 255.0F; float b = (float)(color.getBlue()) / 255.0F; float t = (float)(transparency) / 255.0F; - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); + BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t).next(); - bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t).next(); - bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t).next(); - bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t).next(); + bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t); + bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t); + bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t); + bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.disableBlend(); matrixStack.pop(); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/TouchscreenOverlay.java b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/TouchscreenOverlay.java index 83b30a2..add530e 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/TouchscreenOverlay.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/TouchscreenOverlay.java @@ -51,7 +51,7 @@ import static org.lwjgl.glfw.GLFW.GLFW_GAMEPAD_AXIS_RIGHT_Y; * Represents the touchscreen overlay */ public class TouchscreenOverlay extends Screen { - public static final Identifier WIDGETS_LOCATION = new Identifier("midnightcontrols", "textures/gui/widgets.png"); + public static final Identifier WIDGETS_LOCATION = Identifier.of("midnightcontrols", "textures/gui/widgets.png"); private final MidnightControlsClient mod; private SilentTexturedButtonWidget inventoryButton; private SilentTexturedButtonWidget swapHandsButton; @@ -168,15 +168,15 @@ public class TouchscreenOverlay extends Screen { int emoteOffset = 0; if (PlatformFunctions.isModLoaded("emotecraft")) { emoteOffset = 10; - TextIconButtonWidget emoteButton = TextIconButtonWidget.builder(Text.empty(), btn -> EmotecraftCompat.openEmotecraftScreen(this), true).width(20).texture(new Identifier(MidnightControlsConstants.NAMESPACE, "touch/emote"), 20, 20).build(); + TextIconButtonWidget emoteButton = TextIconButtonWidget.builder(Text.empty(), btn -> EmotecraftCompat.openEmotecraftScreen(this), true).width(20).texture(Identifier.of(MidnightControlsConstants.NAMESPACE, "touch/emote"), 20, 20).build(); emoteButton.setPosition(scaledWidth / 2 - 30, 0); this.addDrawableChild(emoteButton); } - TextIconButtonWidget chatButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.client.setScreen(new ChatScreen("")), true).width(20).texture(new Identifier(MidnightControlsConstants.NAMESPACE, "touch/chat"), 20, 20).build(); + TextIconButtonWidget chatButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.client.setScreen(new ChatScreen("")), true).width(20).texture(Identifier.of(MidnightControlsConstants.NAMESPACE, "touch/chat"), 20, 20).build(); chatButton.setPosition(scaledWidth / 2 - 20 + emoteOffset, 0); this.addDrawableChild(chatButton); - TextIconButtonWidget pauseButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.pauseGame(), true).width(20).texture(new Identifier(MidnightControlsConstants.NAMESPACE, "touch/pause"), 20, 20).build(); + TextIconButtonWidget pauseButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.pauseGame(), true).width(20).texture(Identifier.of(MidnightControlsConstants.NAMESPACE, "touch/pause"), 20, 20).build(); pauseButton.setPosition(scaledWidth / 2 + emoteOffset, 0); this.addDrawableChild(pauseButton); // Inventory buttons. @@ -291,17 +291,17 @@ public class TouchscreenOverlay extends Screen { } private void initCustomButtons(boolean left) { assert client != null; - Identifier emptySprite = new Identifier(MidnightControlsConstants.NAMESPACE, "touch/empty"); + Identifier emptySprite = Identifier.of(MidnightControlsConstants.NAMESPACE, "touch/empty"); List list = left ? MidnightControlsConfig.leftTouchBinds : MidnightControlsConfig.rightTouchBinds; Sprite missingSprite = client.getGuiAtlasManager().getSprite(MissingSprite.getMissingSpriteId()); for (int i = 0; i < list.size(); i++) { String bindName = list.get(i); ButtonBinding binding = InputManager.getBinding(bindName); if (binding == null) continue; - boolean hasTexture = client.getGuiAtlasManager().getSprite(new Identifier(MidnightControlsConstants.NAMESPACE, "binding/"+bindName)) != missingSprite; - if (MidnightControlsConfig.debug) System.out.println(left +" "+new Identifier(MidnightControlsConstants.NAMESPACE, "binding/"+bindName)+" "+ hasTexture); + boolean hasTexture = client.getGuiAtlasManager().getSprite(Identifier.of(MidnightControlsConstants.NAMESPACE, "binding/"+bindName)) != missingSprite; + if (MidnightControlsConfig.debug) System.out.println(left +" "+Identifier.of(MidnightControlsConstants.NAMESPACE, "binding/"+bindName)+" "+ hasTexture); var button = TextIconButtonWidget.builder(Text.translatable(binding.getTranslationKey()), b -> binding.handle(client, 1, ButtonState.PRESS), hasTexture) - .texture(hasTexture ? new Identifier(MidnightControlsConstants.NAMESPACE, "binding/"+bindName) : emptySprite, 20, 20).dimension(20, 20).build(); + .texture(hasTexture ? Identifier.of(MidnightControlsConstants.NAMESPACE, "binding/"+bindName) : emptySprite, 20, 20).dimension(20, 20).build(); button.setPosition(left ? (3+(i*23)) : this.width-(23+(i*23)), 3); button.setAlpha(MidnightControlsConfig.touchTransparency / 100f); this.addDrawableChild(button); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java index e61814c..b806400 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java @@ -14,14 +14,11 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.GameOptionsScreen; -import net.minecraft.client.gui.widget.OptionListWidget; import net.minecraft.client.gui.widget.TextIconButtonWidget; import net.minecraft.client.option.GameOptions; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -33,15 +30,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ControlsOptionsScreen.class) public abstract class ControlsOptionsScreenMixin extends GameOptionsScreen { - @Shadow @Nullable private OptionListWidget optionListWidget; - public ControlsOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text title) { super(parent, gameOptions, title); } @Unique TextIconButtonWidget button = TextIconButtonWidget.builder(Text.translatable("midnightcontrols.menu.title.controller"), (button -> this.client.setScreen(new MidnightControlsSettingsScreen(this, false))), true) - .dimension(20,20).texture(new Identifier("midnightcontrols", "icon/controller"), 20, 20).build(); + .dimension(20,20).texture(Identifier.of("midnightcontrols", "icon/controller"), 20, 20).build(); - @Inject(at = @At("TAIL"), method = "init") + @Inject(at = @At("TAIL"), method = "addOptions") public void midnightcontrols$onInit(CallbackInfo ci) { this.midnightcontrols$setupButton(); this.addDrawableChild(button); @@ -54,7 +49,7 @@ public abstract class ControlsOptionsScreenMixin extends GameOptionsScreen { } @Unique public void midnightcontrols$setupButton() { - assert optionListWidget != null; - button.setPosition(optionListWidget.getWidth() / 2 + 158, optionListWidget.getY() + 4); + assert body != null; + button.setPosition(body.getWidth() / 2 + 158, body.getY() + 4); } } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java index 50aafe5..80dbff7 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java @@ -19,6 +19,7 @@ import eu.midnightdust.midnightcontrols.client.touch.TouchUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.RenderTickCounter; import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -34,17 +35,17 @@ public abstract class GameRendererMixin { MinecraftClient client; @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Mouse;getX()D", shift = At.Shift.BEFORE)) - private void onRender(float tickDelta, long startTime, boolean fullRender, CallbackInfo ci) { + private void onRender(RenderTickCounter tickCounter, boolean tick, CallbackInfo ci) { if (this.client.currentScreen != null && MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER) MidnightControlsClient.get().input.onPreRenderScreen(this.client, this.client.currentScreen); } @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;draw()V", shift = At.Shift.BEFORE)) - private void renderVirtualCursor(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local DrawContext drawContext) { + private void renderVirtualCursor(RenderTickCounter tickCounter, boolean tick, CallbackInfo ci, @Local DrawContext drawContext) { MidnightControlsRenderer.renderVirtualCursor(drawContext, client); drawContext.draw(); } @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z"), method = "renderWorld") - private void captureProjAndModMatrix(float tickDelta, long limitTime, CallbackInfo ci, @Local(ordinal = 1) Matrix4f matrices) { + private void captureProjAndModMatrix(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 1) Matrix4f matrices) { TouchUtils.lastProjMat.set(RenderSystem.getProjectionMatrix()); TouchUtils.lastModMat.set(RenderSystem.getModelViewMatrix()); TouchUtils.lastWorldSpaceMatrix.set(matrices); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java index 151af5e..c57e0f9 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java @@ -18,10 +18,10 @@ import eu.midnightdust.midnightcontrols.client.touch.TouchUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; import net.minecraft.client.util.GlfwUtil; -import net.minecraft.client.util.SmoothUtil; import net.minecraft.item.ItemStack; import net.minecraft.item.ThrowablePotionItem; import net.minecraft.util.UseAction; +import net.minecraft.util.math.Smoother; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -57,9 +57,9 @@ public abstract class MouseMixin implements MouseAccessor { @Shadow private double glfwTime; - @Shadow @Final private SmoothUtil cursorXSmoother; + @Shadow @Final private Smoother cursorXSmoother; - @Shadow @Final private SmoothUtil cursorYSmoother; + @Shadow @Final private Smoother cursorYSmoother; @Shadow private boolean leftButtonClicked; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java index ca74665..46b7c1b 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java @@ -80,7 +80,7 @@ public abstract class WorldRendererMixin { shift = At.Shift.AFTER ) ) - private void onOutlineRender(float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci, @Local MatrixStack matrices) { + private void onOutlineRender(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci, @Local MatrixStack matrices) { if (((MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && MidnightControlsConfig.touchInControllerMode) || MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN) && MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) { this.renderFingerOutline(matrices, camera); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java index a5dcc19..67fb36f 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java @@ -2,8 +2,8 @@ package eu.midnightdust.midnightcontrols.client.mouse; import net.minecraft.client.MinecraftClient; import net.minecraft.client.util.GlfwUtil; -import net.minecraft.client.util.SmoothUtil; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import net.minecraft.util.math.Smoother; public class EyeTrackerHandler { @@ -16,8 +16,8 @@ public class EyeTrackerHandler { double lastMouseUpdateTime, boolean holdingLeftMouseButton, boolean usingLongRangedTool, - SmoothUtil smoothX, - SmoothUtil smoothY + Smoother smoothX, + Smoother smoothY ) { // The player wants objects of interest to be moved under the crosshair that is always center of screen. // Normal mouse controls operate with the delta values from the direction of mouse movement,