diff --git a/.bugs b/.bugs index a8825db0..bf5c5055 100644 --- a/.bugs +++ b/.bugs @@ -9,7 +9,7 @@ patched 35361 client basic patched 46737 client basic patched 46766 client basic patched 57057 client basic -patched 59810 client basic +previous 59810 26.3-snapshot-9 patched 61489 client basic patched 79545 client basic patched 80859 client basic @@ -21,7 +21,7 @@ patched 116379 client basic patched 116510 client basic patched 118740 client basic patched 122627 client basic -patched 122477 client basic +previous 122477 26.3-snapshot-4 patched 127970 client basic patched 143474 client basic patched 159163 client gameplay @@ -31,7 +31,7 @@ patched 168573 client basic patched 176559 client basic patched 188359 client basic patched 197260 client basic -patched 206540 client basic +previous 206540 26.3-snapshot-8 patched 210318 client basic patched 211561 client basic patched 215531 client basic @@ -39,7 +39,7 @@ patched 217716 client basic patched 231097 client gameplay patched 237493 client basic patched 242809 client basic -patched 259512 client basic +previous 259512 26.3-snapshot-8 patched 267376 client basic patched 268420 client basic patched 280220 client basic @@ -49,7 +49,7 @@ patched 298558 client basic patched 7569 server basic patched 8187 server gameplay patched 30391 server basic -patched 81773 server basic +previous 81773 25w46a patched 82263 server basic patched 84661 server basic patched 88371 server basic @@ -61,14 +61,14 @@ patched 119754 server basic patched 121706 server basic patched 121903 server basic patched 123450 server basic -patched 129909 server basic +previous 129909 25w46a patched 132878 server basic patched 134110 server basic patched 136249 server gameplay patched 139041 server basic patched 147659 server basic patched 155509 server basic -patched 159283 server basic +previous 159283 26.3-snapshot-6 patched 160095 server basic patched 170462 server basic patched 176806 server basic @@ -79,7 +79,7 @@ patched 187100 server basic patched 200418 server basic patched 201374 server basic patched 202637 server basic -patched 206705 server basic +previous 206705 25w46a patched 206922 server basic patched 214147 server basic patched 215530 server basic @@ -87,7 +87,7 @@ patched 221257 server basic patched 223153 server basic patched 224729 server basic patched 226961 server basic -patched 227008 server basic +previous 227008 26.3-snapshot-9 patched 227337 server basic patched 231743 server basic patched 232869 server basic @@ -97,10 +97,10 @@ patched 267125 server basic patched 268617 server basic patched 271899 server basic patched 272431 server basic -patched 298066 server basic +previous 298066 26.3-snapshot-4 patched 263999 server basic patched 153010 server basic -patched 44654 server basic +previous 44654 26.3-snapshot-8 patched 264979 server basic patched 264285 server basic patched 131562 server basic diff --git a/CHANGELOG.md b/CHANGELOG.md index d83a99fa..3d3a1a16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,4 +2,20 @@ ## Changes -Update to 26.2 +Update to 26.3 + +## Removed fixes + +These bugs have been fixed by Mojang and no longer need patching: + +- [MC-44654](https://mojira.dev/MC-44654) - Some entities don't update position to the client when teleported +- [MC-59810](https://mojira.dev/MC-59810) - Cannot break blocks while sprinting on macOS +- [MC-81773](https://mojira.dev/MC-81773) - Bows, crossbows, and tridents drawn in survival/creative/adventure mode can be released in spectator mode +- [MC-122477](https://mojira.dev/MC-122477) - Opening chat sometimes writes the character of the key used to open it +- [MC-129909](https://mojira.dev/MC-129909) - Players in spectator mode continue to consume foods and liquids shortly after switching game modes +- [MC-159283](https://mojira.dev/MC-159283) - Terrain generation fails in progressively shrinking rings centred on the world origin +- [MC-206540](https://mojira.dev/MC-206540) - Increased input delay when riding an entity +- [MC-206705](https://mojira.dev/MC-206705) - Spyglasses stay in use in spectator mode +- [MC-227008](https://mojira.dev/MC-227008) - Endermen constantly try to teleport when riding a vehicle under daylight +- [MC-259512](https://mojira.dev/MC-259512) - Horizontal camera rotation lags when riding +- [MC-298066](https://mojira.dev/MC-298066) - Directly entering a bed from a mount places the player in the wrong place diff --git a/PATCHED.md b/PATCHED.md index 0a7e202e..8f4c87a5 100644 --- a/PATCHED.md +++ b/PATCHED.md @@ -1,7 +1,7 @@ # List of Patched Bugs @@ -16,7 +16,6 @@ | Basic | [MC-46737](https://mojira.dev/MC-46737) | Entities' shaders are applied when beginning to spectate them in third person | No | | Basic | [MC-46766](https://mojira.dev/MC-46766) | Breaking particles, sounds, and block cracks can be created in spectator mode | No | | Basic | [MC-57057](https://mojira.dev/MC-57057) | Guardian laser attack sound ignores distance | No | - | Basic | [MC-59810](https://mojira.dev/MC-59810) | Cannot break blocks while sprinting (Ctrl+Click = right click on macOS) | No | | Basic | [MC-61489](https://mojira.dev/MC-61489) | Book GUI is not vertically centered | No | | Basic | [MC-79545](https://mojira.dev/MC-79545) | The experience bar disappears when too many levels are given to the player | No | | Basic | [MC-80859](https://mojira.dev/MC-80859) | Starting to drag item stacks over other compatible stacks makes the latter invisible until appearance change (stack size increases) | No | @@ -27,7 +26,6 @@ | Basic | [MC-116379](https://mojira.dev/MC-116379) | Punching with a cast fishing rod in the off-hand detaches fishing line from rod | No | | Basic | [MC-116510](https://mojira.dev/MC-116510) | Attack indicator doesn't indicate (most of the time) that breaking instantly-mineable blocks resets your attack | No | | Basic | [MC-118740](https://mojira.dev/MC-118740) | Performing any right-click action silently resets the attack cooldown | No | - | Basic | [MC-122477](https://mojira.dev/MC-122477) | Linux/GNU: Opening chat sometimes writes 't' | No | | Basic | [MC-122627](https://mojira.dev/MC-122627) | Tab suggestion box has missing padding on right side | No | | Basic | [MC-127970](https://mojira.dev/MC-127970) | Using Riptide on a trident with an item in your off-hand causes visual glitch with said item | No | | Basic | [MC-143474](https://mojira.dev/MC-143474) | Respawning causes your hotbar to reset to the first space | No | @@ -38,7 +36,6 @@ | Basic | [MC-176559](https://mojira.dev/MC-176559) | Breaking process resets when a pickaxe enchanted with Mending mends by XP / Mending slows down breaking blocks again | No | | Basic | [MC-188359](https://mojira.dev/MC-188359) | Burp sound does not play after drinking or after eating cake | No | | Basic | [MC-197260](https://mojira.dev/MC-197260) | Armor Stand renders itself and armor dark if its head is in a solid block | No | - | Basic | [MC-206540](https://mojira.dev/MC-206540) | Increased input delay when riding an entity | No | | Basic | [MC-210318](https://mojira.dev/MC-210318) | Maximum length of book title changed from 16 to 15 characters | No | | Basic | [MC-211561](https://mojira.dev/MC-211561) | Fishing line appears in opposite hand when switching slots | No | | Basic | [MC-215531](https://mojira.dev/MC-215531) | The carved pumpkin overlay is rendered in spectator mode | No | @@ -46,7 +43,6 @@ | Gameplay | [MC-231097](https://mojira.dev/MC-231097) | Holding the "Use" button continues to slow down the player even after the used item has been dropped | No | | Basic | [MC-237493](https://mojira.dev/MC-237493) | Telemetry cannot be disabled | No | | Basic | [MC-242809](https://mojira.dev/MC-242809) | IP field in the multiplayer menu will not detect the IP if a space is put at the beginning/end of it | No | - | Basic | [MC-259512](https://mojira.dev/MC-259512) | Horizontal camera rotation lags when riding | No | | Basic | [MC-267376](https://mojira.dev/MC-267376) | You can view through blocks on small scales (near plane clipping) | No | | Basic | [MC-268420](https://mojira.dev/MC-268420) | Cooldown indicator flashes when switching items with high attack speed attribute | No | | Basic | [MC-280220](https://mojira.dev/MC-280220) | When a Dolphin holds an item, it is rendered upside-down | No | @@ -57,22 +53,19 @@ | Type | Bug ID | Name | Tested | |------|--------|------|--------| | Basic | [MC-7569](https://mojira.dev/MC-7569) | RCON output has newlines removed | No | - | Gameplay | [MC-8187](https://mojira.dev/MC-8187) | Two-by-two arrangements of jungle or spruce saplings cannot grow when there are adjacent blocks located north or west of the sapling formation | Yes | - | Basic | [MC-30391](https://mojira.dev/MC-30391) | Chickens, blazes and the wither emit particles when landing from a height, despite falling slowly | Yes | - | Basic | [MC-44654](https://mojira.dev/MC-44654) | Some entities don't update position to the client when teleported | No | - | Basic | [MC-81773](https://mojira.dev/MC-81773) | Bows, crossbows, and tridents drawn in survival/creative/adventure mode can be released in spectator mode | No | + | Gameplay | [MC-8187](https://mojira.dev/MC-8187) | Two-by-two arrangements of jungle or spruce saplings cannot grow when there are adjacent blocks located north or west of the sapling formation | No | + | Basic | [MC-30391](https://mojira.dev/MC-30391) | Chickens, blazes and the wither emit particles when landing from a height, despite falling slowly | No | | Basic | [MC-82263](https://mojira.dev/MC-82263) | Ender dragon produces regular hurt sound on final hit | No | | Basic | [MC-84661](https://mojira.dev/MC-84661) | Glowing is considered a positive effect in potion item tooltips | No | | Basic | [MC-88371](https://mojira.dev/MC-88371) | Ender Dragon flies down in the void when the exit portal is destroyed | No | | Basic | [MC-89146](https://mojira.dev/MC-89146) | Pistons forget update when being reloaded | No | - | Basic | [MC-93018](https://mojira.dev/MC-93018) | Wild wolves show breeding hearts but do not breed | Yes | + | Basic | [MC-93018](https://mojira.dev/MC-93018) | Wild wolves show breeding hearts but do not breed | No | | Basic | [MC-94054](https://mojira.dev/MC-94054) | Cave spiders and spiders with small scale attribute spin around when walking | No | - | Basic | [MC-100991](https://mojira.dev/MC-100991) | Killing entities with a fishing rod doesn't count as a kill | Yes | + | Basic | [MC-100991](https://mojira.dev/MC-100991) | Killing entities with a fishing rod doesn't count as a kill | No | | Basic | [MC-119754](https://mojira.dev/MC-119754) | Firework boosting on elytra continues in spectator mode | No | | Basic | [MC-121706](https://mojira.dev/MC-121706) | Skeletons and illusioners aren't looking up / down at their target while strafing | No | | Basic | [MC-121903](https://mojira.dev/MC-121903) | Command block minecarts do not save execution cooldown to NBT | No | | Basic | [MC-123450](https://mojira.dev/MC-123450) | Item frames play sounds when the item within them is read from NBT | No | - | Basic | [MC-129909](https://mojira.dev/MC-129909) | Players in spectator mode continue to consume foods and liquids shortly after switching game modes | No | | Basic | [MC-131562](https://mojira.dev/MC-131562) | Pressing the "Done" button in empty command block minecarts prints the message "Command set:" in chat | No | | Basic | [MC-132878](https://mojira.dev/MC-132878) | Armor stands destroyed by explosions/lava/fire don't produce particles | No | | Basic | [MC-133218](https://mojira.dev/MC-133218) | Usable items continue to be used on the death screen after dying when the "keepInventory" gamerule is set to "true" | No | @@ -83,7 +76,6 @@ | Basic | [MC-153010](https://mojira.dev/MC-153010) | doMobLoot gamerule doesn't prevent foxes from dropping their items | No | | Basic | [MC-155509](https://mojira.dev/MC-155509) | Dying puffed pufferfish can still sting players | No | | Basic | [MC-158900](https://mojira.dev/MC-158900) | "bad packet id 26" upon connecting after tempban expire | No | - | Basic | [MC-159283](https://mojira.dev/MC-159283) | The End terrain does not generate in multiple rings centered around the world center | No | | Basic | [MC-160095](https://mojira.dev/MC-160095) | Partial blocks break cactus when moved by pistons | No | | Basic | [MC-170462](https://mojira.dev/MC-170462) | Bad Omen is considered a positive effect in potion item tooltips | No | | Basic | [MC-176806](https://mojira.dev/MC-176806) | "minecraft.used:minecraft.glowstone" doesn't increase when charging a respawn anchor | No | @@ -94,7 +86,6 @@ | Basic | [MC-200418](https://mojira.dev/MC-200418) | Cured baby zombie villagers stay as jockey variant | No | | Basic | [MC-201374](https://mojira.dev/MC-201374) | Wrong position passed to getCollisionShape from CampfireBlock#isSmokingBlockAt | No | | Basic | [MC-202637](https://mojira.dev/MC-202637) | Last sound clip of eating will still play when Players volume is set to 0% | No | - | Basic | [MC-206705](https://mojira.dev/MC-206705) | Spyglasses stay in use in spectator mode | No | | Basic | [MC-206922](https://mojira.dev/MC-206922) | Items dropped by entities that are killed by lightning instantly disappear | No | | Basic | [MC-214147](https://mojira.dev/MC-214147) | Skeletons wearing leather armor still convert to strays in powder snow | No | | Basic | [MC-215530](https://mojira.dev/MC-215530) | The freezing effect isn't immediately removed upon switching into spectator mode | No | @@ -102,7 +93,6 @@ | Basic | [MC-223153](https://mojira.dev/MC-223153) | Block of Raw Copper uses stone sounds instead of copper sounds | No | | Basic | [MC-224729](https://mojira.dev/MC-224729) | Partially generated chunks are not saved in some situations | No | | Basic | [MC-226961](https://mojira.dev/MC-226961) | Experience orbs treat flowing lava as a full block | No | - | Basic | [MC-227008](https://mojira.dev/MC-227008) | Endermen constantly try to teleport when in a boat or a minecart under daylight | No | | Basic | [MC-227337](https://mojira.dev/MC-227337) | When a shulker bullet hits an entity, the explosion sound is not played and particles are not produced | No | | Basic | [MC-231743](https://mojira.dev/MC-231743) | "minecraft.used:minecraft." doesn't increase when placing plants into flower pots | No | | Basic | [MC-232869](https://mojira.dev/MC-232869) | Adult striders can spawn with saddles in peaceful mode | No | @@ -115,7 +105,6 @@ | Basic | [MC-268617](https://mojira.dev/MC-268617) | Structures can't be saved if the game directory is named in a certain way | No | | Basic | [MC-271899](https://mojira.dev/MC-271899) | StructureTemplate Palette's caches are not thread safe | No | | Basic | [MC-272431](https://mojira.dev/MC-272431) | Ender Dragon incorrect vertical velocity causes erratic behavior | No | - | Basic | [MC-298066](https://mojira.dev/MC-298066) | Directly entering a bed from a mount places the player in the wrong place | No | ## Previously patched Bugs that this mod has patched in the past, but has since been fixed by a vanilla update. @@ -128,20 +117,25 @@ | [MC-22882](https://mojira.dev/MC-22882) | Ctrl + Q doesn't work on Mac | 25w41a | | [MC-26757](https://mojira.dev/MC-26757) | Large item tooltips can get cut off at the edges of the screen | 22w42a | | [MC-31819](https://mojira.dev/MC-31819) | Hunger saturation depletes on peaceful difficulty | 24w21a | + | [MC-44654](https://mojira.dev/MC-44654) | Some entities' positions are not updated on the client when teleported | 26.3-snapshot-8 | | [MC-46503](https://mojira.dev/MC-46503) | You can retain entities' shaders by running the "/kill" command while in spectator mode | 25w33a | | [MC-53312](https://mojira.dev/MC-53312) | Illager/(zombie) villager/witch robes don't render the last two rows of pixels | 22w17a | | [MC-55347](https://mojira.dev/MC-55347) | Title with long duration shows in other world | 24w44a | + | [MC-59810](https://mojira.dev/MC-59810) | Cannot break blocks while sprinting on macOS | 26.3-snapshot-9 | | [MC-69216](https://mojira.dev/MC-69216) | Switching to spectator mode while fishing keeps rod cast | 25w33a | | [MC-72151](https://mojira.dev/MC-72151) | Snow Golem's snowballs damage wolves instead of pushing them | 24w06a | | [MC-72687](https://mojira.dev/MC-72687) | There are no shadows on text displayed within the action bar | 22w24a | + | [MC-81773](https://mojira.dev/MC-81773) | Bows, crossbows, and tridents drawn in survival/creative/adventure mode can be released in spectator mode | 25w46a | | [MC-84873](https://mojira.dev/MC-84873) | DeathTime values 20+ cause corrupted mobs | 22w43a | | [MC-90084](https://mojira.dev/MC-90084) | When sitting in boats and boats with chest mobs legs penetrate the hull | 23w31a | | [MC-111516](https://mojira.dev/MC-111516) | Player flickers/turns invisible when flying at high speeds | 24w44a | | [MC-112730](https://mojira.dev/MC-112730) | Beacon beam and structure block render twice per frame | 25w21a | | [MC-119417](https://mojira.dev/MC-119417) | A spectator can occupy a bed if they enter it and then are switched to spectator mode | 25w33a | | [MC-121772](https://mojira.dev/MC-121772) | Can't scroll while holding SHIFT on macOS | 23w31a | + | [MC-122477](https://mojira.dev/MC-122477) | Opening the chat sometimes appends the character the used key types to the message on Linux | 26.3-snapshot-4 | | [MC-123605](https://mojira.dev/MC-123605) | Debug world still sets clear weather time instead of deactivating gamerule doWeatherCycle | 26.1-snapshot-6 | | [MC-124177](https://mojira.dev/MC-124177) | Teleporting to another dimension loses some client states | 24w20a | + | [MC-129909](https://mojira.dev/MC-129909) | Players in spectator mode continue to consume foods and liquids shortly after switching game modes | 25w46a | | [MC-135971](https://mojira.dev/MC-135971) | Can't use CTRL+Q in crafting table | 24w33a | | [MC-135973](https://mojira.dev/MC-135973) | Can't hold Q to drop items rapidly from container inventories | 22w42a | | [MC-140646](https://mojira.dev/MC-140646) | Text fields don't scroll while selecting text with Shift | 23w31a | @@ -150,18 +144,24 @@ | [MC-147784](https://mojira.dev/MC-147784) | Fletching table flashes crafting table's GUI for about a second upon right-clicking it in spectator mode | 25w34a | | [MC-148149](https://mojira.dev/MC-148149) | Linux game crash when opening links | 1.19.1-pre6 | | [MC-151412](https://mojira.dev/MC-151412) | "Edit Server Info" window does not focus "Server Name" text field automatically | 22w46a | + | [MC-159283](https://mojira.dev/MC-159283) | Terrain generation fails in progressively shrinking rings centered around the End's center | 26.3-snapshot-6 | | [MC-162253](https://mojira.dev/MC-162253) | Lag spike when crossing certain chunk borders | 23w16a | | [MC-165595](https://mojira.dev/MC-165595) | Guardian beam does not render when over a certain "Time" in level.dat | 23w03a | | [MC-183776](https://mojira.dev/MC-183776) | After switching game modes using F3+F4, you need to press F3 twice to toggle the debug screen | 25w31a | | [MC-193343](https://mojira.dev/MC-193343) | Soul Speed effect remains after switching to spectator mode | 24w18a | | [MC-199467](https://mojira.dev/MC-199467) | Certain entity animations stop after they've existed in world for too long | 25w45a | | [MC-201723](https://mojira.dev/MC-201723) | Statistics sprites don't look pressed when clicked | 1.21.9 | + | [MC-206540](https://mojira.dev/MC-206540) | Increased input delay when riding an entity | 26.3-snapshot-8 | + | [MC-206705](https://mojira.dev/MC-206705) | Spyglasses stay in use in spectator mode | 25w46a | | [MC-219981](https://mojira.dev/MC-219981) | Leader zombie-type mobs spawn with 20 health despite having an increased maximum health | 26.1-snapshot-1 | + | [MC-227008](https://mojira.dev/MC-227008) | Endermen constantly try to teleport when riding a vehicle under daylight | 26.3-snapshot-9 | | [MC-227169](https://mojira.dev/MC-227169) | The main hand is positioned incorrectly when holding a loaded crossbow in your offhand | 24w33a | | [MC-228976](https://mojira.dev/MC-228976) | Entity collision is run on render thread | 1.19.3-pre3 | | [MC-233042](https://mojira.dev/MC-233042) | Server Address field isn't focused when Direct Connection menu is opened | 22w46a | | [MC-235035](https://mojira.dev/MC-235035) | Sleeping in a custom dimension with "natural" set to false causes crash | 22w15a | | [MC-249059](https://mojira.dev/MC-249059) | Loading terrain screen cannot close before 2 seconds have passed | 22w46a | + | [MC-259512](https://mojira.dev/MC-259512) | Horizontal camera rotation lags when riding | 26.3-snapshot-8 | | [MC-263865](https://mojira.dev/MC-263865) | Fullscreen state isn't saved | 25w04a | | [MC-267469](https://mojira.dev/MC-267469) | GUI List Entry highlight border not always aligned properly | 1.21.9 | + | [MC-298066](https://mojira.dev/MC-298066) | Directly entering a bed from a mount places the player in the wrong place | 26.3-snapshot-4 | | [MC-299115](https://mojira.dev/MC-299115) | Arrows lose their owner tag when deflected while the owner is offline | 25w34a | \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index fafd5c6a..aa1490e6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ plugins { val minecraftVersion = libs.versions.minecraft.get() group = "dev.isxander" -version = "26.2.0.0" +version = "26.3.0.0" base.archivesName = "debugify" java { @@ -70,7 +70,7 @@ dependencies { val bugsList = bugs.parseBugs(providers.fileContents(rootProject.layout.projectDirectory.file(".bugs")).asText) -val minecraftVersionRange = "[26.2]" +val minecraftVersionRange = "[26.3]" val supportedMinecraftVersions = manifests.minecraftReleasesMatching(minecraftVersionRange) val modManifest = manifests.fabricModJson { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 00e8eb86..e1daf765 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,11 +7,11 @@ mod_publish_plugin = "2.0.1" central_portal_publishing = "0.1.8" spotless = "8.6.0" -minecraft = "26.2" -fabric_loader = "0.19.3" -fabric_api = "0.152.2+26.2" -mod_menu = "20.0.0-beta.2" -yet_another_config_lib = "3.9.4+26.2-fabric" +minecraft = "26.3" +fabric_loader = "0.19.5" +fabric_api = "0.161.0+26.3" +mod_menu = "21.0.0-beta.1" +yet_another_config_lib = "3.9.7+26.3-fabric" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index b1b8ef56..eddabd2e 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index eb84db68..ad7845be 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip networkTimeout=10000 retries=0 retryBackOffMs=500 diff --git a/src/client/java/dev/isxander/debugify/client/helpers/mc122477/KeyboardPollCounter.java b/src/client/java/dev/isxander/debugify/client/helpers/mc122477/KeyboardPollCounter.java deleted file mode 100644 index 0521e25d..00000000 --- a/src/client/java/dev/isxander/debugify/client/helpers/mc122477/KeyboardPollCounter.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.helpers.mc122477; - -public class KeyboardPollCounter { - private static int count = 0; - private static boolean requiresCount = false; - - public static void poll() { - if (requiresCount) - count++; - } - - public static void startCounting() { - requiresCount = true; - } - - public static void stopCountingAndReset() { - requiresCount = false; - count = 0; - } - - public static int getCount() { - return count; - } -} diff --git a/src/client/java/dev/isxander/debugify/client/helpers/mc147605/TextFieldHolder.java b/src/client/java/dev/isxander/debugify/client/helpers/mc147605/TextFieldHolder.java deleted file mode 100644 index 9700d441..00000000 --- a/src/client/java/dev/isxander/debugify/client/helpers/mc147605/TextFieldHolder.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.helpers.mc147605; - -import net.minecraft.client.gui.components.EditBox; -import org.jetbrains.annotations.Nullable; - -public interface TextFieldHolder { - @Nullable EditBox getFocusedTextField(); - - void setFocusedTextField(@Nullable EditBox widget); -} diff --git a/src/client/java/dev/isxander/debugify/client/helpers/mc26757/TooltipWrapper.java b/src/client/java/dev/isxander/debugify/client/helpers/mc26757/TooltipWrapper.java deleted file mode 100644 index c87b44a5..00000000 --- a/src/client/java/dev/isxander/debugify/client/helpers/mc26757/TooltipWrapper.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.helpers.mc26757; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; -import net.minecraft.util.FormattedCharSequence; - -public class TooltipWrapper { - public static List wrapTooltipLines(Screen screen, Font textRenderer, List lines) { - int width = getMaxWidth(textRenderer, lines); - int maxWidth = screen.width - 30; - if (width <= maxWidth) - return lines.stream().map(Component::getVisualOrderText).collect(Collectors.toList()); - - List wrapped = new ArrayList<>(); - for (Component line : lines) { - wrapped.addAll(textRenderer.split(line, maxWidth)); - } - - return wrapped; - } - - private static int getMaxWidth(Font textRenderer, List lines) { - int maxWidth = 0; - - for (Component line : lines) { - int width = textRenderer.width(line); - if (width > maxWidth) - maxWidth = width; - } - - return maxWidth; - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java index e3d20270..35d4155d 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java @@ -39,7 +39,7 @@ private void applyRotation(SquidRenderState state, PoseStack poseStack, float bo String name = squidEntity.getName().getString(); if ("Dinnerbone".equals(name) || "Grumm".equals(name)) { poseStack.translate(0.0F, squidEntity.getBbHeight() + 0.1F, 0.0F); - poseStack.mulPose(Axis.XP.rotationDegrees(180.0F)); + poseStack.rotateDegrees(Axis.XP, 180.0F); } } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc116379/FishingHookRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc116379/FishingHookRendererMixin.java index 14ec052d..8d97280e 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc116379/FishingHookRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc116379/FishingHookRendererMixin.java @@ -24,7 +24,7 @@ public class FishingHookRendererMixin { method = "extractRenderState(Lnet/minecraft/world/entity/projectile/FishingHook;Lnet/minecraft/client/renderer/entity/state/FishingHookRenderState;F)V", at = @At( value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getAttackAnim(F)F" + target = "Lnet/minecraft/world/entity/player/Player;getSwingAnimation(F)F" ) ) private float modifyHandSwingProgress(float handSwingProgress, FishingHook entity) { diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/HudMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/HudMixin.java index 597764aa..1577f111 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/HudMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/HudMixin.java @@ -17,7 +17,7 @@ /** * Taken from MoulberrysTweaks - * https://github.com/Moulberry/MoulberrysTweaks + * ... * under MIT license * * @author Moulberry diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LivingEntityMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LivingEntityMixin.java new file mode 100644 index 00000000..e86fdbd6 --- /dev/null +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LivingEntityMixin.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2026 The Debugify Contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ +package dev.isxander.debugify.client.mixins.basic.mc118740; + +import dev.isxander.debugify.client.helpers.mc118740.LocalPlayerDuck; +import dev.isxander.debugify.fixes.BugFix; +import dev.isxander.debugify.fixes.FixCategory; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.component.SwingAnimation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * Taken from MoulberrysTweaks + * under MIT license + * + *

26.3 removed LocalPlayer's swing override, which only sent the swing packet, and left the + * swing itself on LivingEntity, so the reset hooks the base method and narrows to the local + * player the same way the sibling Player mixin does.

+ * + * @author Moulberry + */ +@BugFix(id = "MC-118740", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, modConflicts = "moulberrystweaks", description = "Performing any right-click action silently resets the attack cooldown") +@Mixin(LivingEntity.class) +public class LivingEntityMixin { + @Inject(method = "swing", at = @At("HEAD")) + public void swing(InteractionHand hand, SwingAnimation animation, boolean sendToSwingingEntity, CallbackInfoReturnable cir) { + if (this instanceof LocalPlayerDuck localPlayerExt) { + localPlayerExt.debugify$resetVisualAttackStrengthScale(); + } + } +} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LocalPlayerMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LocalPlayerMixin.java index aba1c156..e53d56cb 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LocalPlayerMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc118740/LocalPlayerMixin.java @@ -11,14 +11,10 @@ import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.player.LocalPlayer; import net.minecraft.util.Mth; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * Taken from MoulberrysTweaks @@ -35,11 +31,6 @@ public LocalPlayerMixin(Level level, GameProfile gameProfile) { super(level, gameProfile); } - @Inject(method = "swing", at = @At("HEAD")) - public void swing(InteractionHand hand, CallbackInfo ci) { - this.visualAttackStrengthTicker = 0; - } - @Override public float debugify$getVisualAttackStrengthScale(float partialTick) { return Mth.clamp(((float)this.visualAttackStrengthTicker + partialTick) / this.getCurrentItemAttackStrengthDelay(), 0.0F, 1.0F); diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java deleted file mode 100644 index 4f5077bb..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.mixins.basic.mc122477; - -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import dev.isxander.debugify.client.helpers.mc122477.KeyboardPollCounter; -import dev.isxander.debugify.fixes.OS; -import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.input.CharacterEvent; -import net.minecraft.util.Util; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@BugFix(id = "MC-122477", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, os = OS.LINUX, description = "Linux/GNU: Opening chat sometimes writes 't'") -@Mixin(EditBox.class) -public class EditBoxMixin { - @Inject( - method = "(Lnet/minecraft/client/gui/Font;IIIILnet/minecraft/client/gui/components/EditBox;Lnet/minecraft/network/chat/Component;)V", - at = @At("RETURN") - ) - private void startPolling(CallbackInfo ci) { - KeyboardPollCounter.startCounting(); - } - - @WrapMethod(method = "charTyped") - private boolean stopPolling(CharacterEvent event, Operation original) { - if (Util.getPlatform() == Util.OS.LINUX) { - if (KeyboardPollCounter.getCount() == 1) { - return true; - } - - if (KeyboardPollCounter.getCount() >= 1) { - KeyboardPollCounter.stopCountingAndReset(); - } - } - - return original.call(event); - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/MinecraftMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/MinecraftMixin.java deleted file mode 100644 index a2f83d63..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/MinecraftMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.mixins.basic.mc122477; - -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import dev.isxander.debugify.client.helpers.mc122477.KeyboardPollCounter; -import dev.isxander.debugify.fixes.OS; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@BugFix(id = "MC-122477", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, os = OS.LINUX, description = "Linux/GNU: Opening chat sometimes writes 't'") -@Mixin(Minecraft.class) -public class MinecraftMixin { - @Inject(method = "run", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;pollEvents()V")) - private void onPollEvents(CallbackInfo ci) { - KeyboardPollCounter.poll(); - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc127970/ItemInHandRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc127970/ItemInHandRendererMixin.java index d8ffe747..fef313e0 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc127970/ItemInHandRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc127970/ItemInHandRendererMixin.java @@ -8,21 +8,23 @@ import com.llamalad7.mixinextras.sugar.Local; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.client.renderer.ItemInHandRenderer; +import net.minecraft.client.renderer.FirstPersonHandsAndItemsRenderer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import org.spongepowered.asm.mixin.Mixin; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.injection.At; @BugFix(id = "MC-127970", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, description = "Using Riptide on a trident with an item in your off-hand causes visual glitch with said item") -@Mixin(ItemInHandRenderer.class) +@Mixin(FirstPersonHandsAndItemsRenderer.class) public class ItemInHandRendererMixin { @ModifyExpressionValue( method = "submitArmWithItem", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/player/AbstractClientPlayer;isAutoSpinAttack()Z" + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;isAutoSpinAttack:Z" ) ) private boolean isUsingRiptideHand(boolean original, @Local(argsOnly = true, name = "itemStack") ItemStack itemStack) { diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165305/RenderPipelinesMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165305/RenderPipelinesMixin.java index c0611237..2c76e2d0 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165305/RenderPipelinesMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165305/RenderPipelinesMixin.java @@ -9,7 +9,7 @@ import com.llamalad7.mixinextras.expression.Expression; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.renderer.RenderPipelines; @@ -19,9 +19,9 @@ @BugFix(id = "MC-165306", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, description = "Beacon beams are transparent from the inside") @Mixin(RenderPipelines.class) public class RenderPipelinesMixin { - @Definition(id = "BEACON_BEAM_OPAQUE", field = "Lnet/minecraft/client/renderer/RenderPipelines;BEACON_BEAM_OPAQUE:Lcom/mojang/blaze3d/pipeline/RenderPipeline;") - @Definition(id = "build", method = "Lcom/mojang/blaze3d/pipeline/RenderPipeline$Builder;build()Lcom/mojang/blaze3d/pipeline/RenderPipeline;") - @Definition(id = "register", method = "Lnet/minecraft/client/renderer/RenderPipelines;register(Lcom/mojang/blaze3d/pipeline/RenderPipeline;)Lcom/mojang/blaze3d/pipeline/RenderPipeline;") + @Definition(id = "BEACON_BEAM_OPAQUE", field = "Lnet/minecraft/client/renderer/RenderPipelines;BEACON_BEAM_OPAQUE:Lcom/mojang/renderpearl/api/pipeline/RenderPipeline;") + @Definition(id = "build", method = "Lcom/mojang/renderpearl/api/pipeline/RenderPipeline$Builder;build()Lcom/mojang/renderpearl/api/pipeline/RenderPipeline;") + @Definition(id = "register", method = "Lnet/minecraft/client/renderer/RenderPipelines;register(Lcom/mojang/renderpearl/api/pipeline/RenderPipeline;)Lcom/mojang/renderpearl/api/pipeline/RenderPipeline;") @Expression("BEACON_BEAM_OPAQUE = register(@(?.build()))") @WrapOperation(method = "", at = @At("MIXINEXTRAS:EXPRESSION")) private static RenderPipeline disableCull(RenderPipeline.Builder builder, Operation original) { diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165381/LocalPlayerMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165381/MultiPlayerGameModeMixin.java similarity index 65% rename from src/client/java/dev/isxander/debugify/client/mixins/basic/mc165381/LocalPlayerMixin.java rename to src/client/java/dev/isxander/debugify/client/mixins/basic/mc165381/MultiPlayerGameModeMixin.java index c269c718..c2731761 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165381/LocalPlayerMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc165381/MultiPlayerGameModeMixin.java @@ -7,31 +7,32 @@ import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import org.spongepowered.asm.mixin.Final; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * 26.3 moved dropping off LocalPlayer and onto MultiPlayerGameMode.dropItem, which is where the + * selected stack is now taken from the inventory, so the destroy stop moved with it. + */ @BugFix(id = "MC-165381", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, description = "Block breaking can be delayed by dropping/throwing the tool while breaking a block") -@Mixin(LocalPlayer.class) -public class LocalPlayerMixin { +@Mixin(MultiPlayerGameMode.class) +public abstract class MultiPlayerGameModeMixin { @Shadow - @Final - protected Minecraft minecraft; + public abstract void stopDestroyBlock(); @Inject( - method = "drop", + method = "dropItem", at = @At( value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Inventory;removeFromSelected(Z)Lnet/minecraft/world/item/ItemStack;", shift = At.Shift.AFTER ) ) - private void onDropItem(CallbackInfoReturnable cir) { - minecraft.gameMode.stopDestroyBlock(); + private void onDropItem(CallbackInfo ci) { + this.stopDestroyBlock(); } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc206540/EntityMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc206540/EntityMixin.java deleted file mode 100644 index fe3afff4..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc206540/EntityMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.mixins.basic.mc206540; - -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@BugFix(id = "MC-206540", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, modConflicts = "ridingmousefix", description = "Increased input delay when riding an entity") -@Mixin(Entity.class) -public abstract class EntityMixin { - @Shadow - public abstract float getYRot(); - - /** - * Code taken from {@link net.minecraft.world.entity.vehicle.boat.AbstractBoat} - */ - @Inject(method = "onPassengerTurned", at = @At("HEAD")) - private void fixCameraMovement(Entity passenger, CallbackInfo ci) { - if (passenger.isAlwaysTicking()) { - passenger.setYBodyRot(this.getYRot()); - float f = Mth.wrapDegrees(passenger.getYRot() - this.getYRot()); - float g = Mth.clamp(f, -180.0F, 180.0F); - passenger.yRotO += g - f; - passenger.setYRot(passenger.getYRot() + g - f); - passenger.setYHeadRot(passenger.getYRot()); - } - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc217716/GameRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc217716/LevelExtractorMixin.java similarity index 75% rename from src/client/java/dev/isxander/debugify/client/mixins/basic/mc217716/GameRendererMixin.java rename to src/client/java/dev/isxander/debugify/client/mixins/basic/mc217716/LevelExtractorMixin.java index e023744e..2328dc43 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc217716/GameRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc217716/LevelExtractorMixin.java @@ -11,25 +11,22 @@ import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.extract.LevelExtractor; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @BugFix(id = "MC-217716", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, description = "The green nausea overlay isn't removed when switching into spectator mode") -@Mixin(GameRenderer.class) -public class GameRendererMixin { +@Mixin(LevelExtractor.class) +public class LevelExtractorMixin { @Shadow @Final private Minecraft minecraft; - // Naughty minecraft using references to player in `render`!! - // This should be in extractOptions and we shouldn't be referencing player either here but - // we have to because mojang gets the nausea blend factor here @Definition(id = "getEffectBlendFactor", method = "Lnet/minecraft/client/player/LocalPlayer;getEffectBlendFactor(Lnet/minecraft/core/Holder;F)F") @Definition(id = "NAUSEA", field = "Lnet/minecraft/world/effect/MobEffects;NAUSEA:Lnet/minecraft/core/Holder;") @Expression("?.getEffectBlendFactor(NAUSEA, ?)") - @ModifyExpressionValue(method = "renderLevel", at = @At("MIXINEXTRAS:EXPRESSION")) + @ModifyExpressionValue(method = "extractPlayerState", at = @At("MIXINEXTRAS:EXPRESSION")) private float shouldShowNauseaOverlay(float original) { return minecraft.player.isSpectator() ? 0.0f : original; } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc259512/LivingEntityMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc259512/LivingEntityMixin.java deleted file mode 100644 index 78003e29..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc259512/LivingEntityMixin.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.mixins.basic.mc259512; - -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@BugFix(id = "MC-259512", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, modConflicts = "eg_fix_horizontal_camera_lag", description = "Increased input delay when riding an entity") -@Mixin(LivingEntity.class) -public abstract class LivingEntityMixin extends Entity { - public LivingEntityMixin(EntityType entityType, Level level) { - super(entityType, level); - } - - /** - * yHeadRot does not match yRot. yRot is your actual view rotation (the blue line in your debug hitbox), - * while yHeadRot is interpolated and lags behind (your visible head rotation) - */ - @ModifyExpressionValue( - method = "getViewYRot", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/world/entity/LivingEntity;yHeadRot:F", - opcode = Opcodes.GETFIELD - ) - ) - private float smoothYRot(float original) { - return (Entity) this instanceof Player ? this.getYRot() : original; - } - - @ModifyExpressionValue( - method = "getViewYRot", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/world/entity/LivingEntity;yHeadRotO:F", - opcode = Opcodes.GETFIELD - ) - ) - private float smoothYRot0(float original) { - return (Entity) this instanceof Player ? this.yRotO : original; - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/HudMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/HudMixin.java index f582fd6e..48988260 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/HudMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/HudMixin.java @@ -6,7 +6,7 @@ package dev.isxander.debugify.client.mixins.basic.mc268420; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.Minecraft; @@ -26,7 +26,7 @@ public class HudMixin { private Minecraft minecraft; // the FULL sprite never shows anyway so no need to wrap it - @WrapWithCondition(method = "extractCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/Identifier;IIII)V", ordinal = 2)) + @WrapWithCondition(method = "extractCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;blitSprite(Lcom/mojang/renderpearl/api/pipeline/RenderPipeline;Lnet/minecraft/resources/Identifier;IIII)V", ordinal = 2)) private boolean fixAttackIndicatorFlashing(GuiGraphicsExtractor instance, RenderPipeline renderPipeline, Identifier location, int x, int y, int width, int height) { return this.minecraft.player.getAttackStrengthScale(0.0F) * 17F > 0; } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc280220/DolphinCarryingItemLayerMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc280220/DolphinCarryingItemLayerMixin.java index 410a269d..30b0d368 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc280220/DolphinCarryingItemLayerMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc280220/DolphinCarryingItemLayerMixin.java @@ -27,7 +27,7 @@ public class DolphinCarryingItemLayerMixin { ) ) private void flipItem(CallbackInfo ci, @Local(argsOnly = true, name = "poseStack") PoseStack poseStack) { - poseStack.mulPose(Axis.ZP.rotationDegrees(180F)); + poseStack.rotateDegrees(Axis.ZP, 180F); poseStack.translate(0F, -0.4F, 0F); // Eyeballed value to make items not float } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java index a44d5415..0bb4b00f 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java @@ -21,7 +21,7 @@ public class GameRendererMixin { method = "checkEntityPostEffect", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/renderer/GameRenderer;setPostEffect(Lnet/minecraft/resources/Identifier;)V" + target = "Lnet/minecraft/client/renderer/GameRenderer;setSpectatedEntityPostEffect(Lnet/minecraft/resources/Identifier;)V" ) ) private boolean thirdPersonCheck(GameRenderer renderer, Identifier id) { diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc59810/MouseHandlerMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc59810/MouseHandlerMixin.java deleted file mode 100644 index f8a6ffa5..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc59810/MouseHandlerMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.client.mixins.basic.mc59810; - -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import dev.isxander.debugify.fixes.OS; -import net.minecraft.client.MouseHandler; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@BugFix(id = "MC-59810", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, enabled = false, modConflicts = "mcmouser", os = OS.MAC, description = "Cannot break blocks while sprinting (Ctrl+Click = right click on macOS)") -@Mixin(MouseHandler.class) -public class MouseHandlerMixin { - @ModifyExpressionValue( - method = "simulateRightClick", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/client/input/InputQuirks;SIMULATE_RIGHT_CLICK_WITH_LONG_LEFT_CLICK:Z", - opcode = Opcodes.GETSTATIC - ) - ) - private boolean doRightClickEmulation(boolean isMac) { - return false; - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/gameplay/mc231097/LocalPlayerMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/gameplay/mc231097/MultiPlayerGameModeMixin.java similarity index 60% rename from src/client/java/dev/isxander/debugify/client/mixins/gameplay/mc231097/LocalPlayerMixin.java rename to src/client/java/dev/isxander/debugify/client/mixins/gameplay/mc231097/MultiPlayerGameModeMixin.java index 4c83e00a..99da6eeb 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/gameplay/mc231097/LocalPlayerMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/gameplay/mc231097/MultiPlayerGameModeMixin.java @@ -8,33 +8,36 @@ import dev.isxander.debugify.Debugify; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; import net.minecraft.client.player.LocalPlayer; -import org.spongepowered.asm.mixin.Final; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * 26.3 moved dropping off LocalPlayer and onto MultiPlayerGameMode.dropItem, which hands the + * player over as an argument, so the release reads it from there rather than from the mixin. + */ @BugFix(id = "MC-231097", category = FixCategory.GAMEPLAY, env = BugFix.Env.CLIENT, description = "Holding the \"Use\" button continues to slow down the player even after the used item has been dropped") -@Mixin(LocalPlayer.class) -public abstract class LocalPlayerMixin { - @Shadow @Final protected Minecraft minecraft; - - @Shadow public abstract boolean isUsingItem(); +@Mixin(MultiPlayerGameMode.class) +public abstract class MultiPlayerGameModeMixin { + @Shadow + public abstract void releaseUsingItem(Player player); @Inject( - method = "drop", + method = "dropItem", at = @At( value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Inventory;removeFromSelected(Z)Lnet/minecraft/world/item/ItemStack;", shift = At.Shift.AFTER ) ) - private void onDropItem(boolean all, CallbackInfoReturnable cir) { - if (Debugify.isGameplayFixesEnabled() && isUsingItem()) { - minecraft.gameMode.releaseUsingItem((LocalPlayer) (Object) this); + private void onDropItem(LocalPlayer player, boolean all, CallbackInfo ci) { + if (Debugify.isGameplayFixesEnabled() && player.isUsingItem()) { + this.releaseUsingItem(player); } } } diff --git a/src/client/resources/debugify.client.mixins.json b/src/client/resources/debugify.client.mixins.json index 806bca89..c1fe1dec 100644 --- a/src/client/resources/debugify.client.mixins.json +++ b/src/client/resources/debugify.client.mixins.json @@ -14,22 +14,21 @@ "basic.mc115092.SquidRendererMixin", "basic.mc116379.FishingHookRendererMixin", "basic.mc118740.HudMixin", + "basic.mc118740.LivingEntityMixin", "basic.mc118740.LocalPlayerMixin", - "basic.mc122477.EditBoxMixin", - "basic.mc122477.MinecraftMixin", "basic.mc122627.CommandSuggestionsMixin", "basic.mc127970.ItemInHandRendererMixin", "basic.mc143474.ClientPacketListenerMixin", "basic.mc165305.RenderPipelinesMixin", - "basic.mc165381.LocalPlayerMixin", + "basic.mc165381.MultiPlayerGameModeMixin", "basic.mc176559.MultiPlayerGameModeMixin", "basic.mc197260.ArmorStandRendererMixin", "basic.mc197260.LivingEntityRendererMixin", "basic.mc210318.BookSignScreenMixin", "basic.mc211561.FishingHookRendererMixin", "basic.mc215531.HudMixin", - "basic.mc217716.GameRendererMixin", - "gameplay.mc231097.LocalPlayerMixin", + "basic.mc217716.LevelExtractorMixin", + "gameplay.mc231097.MultiPlayerGameModeMixin", "basic.mc237493.OptionsMixin", "basic.mc237493.TelemetryEventInstanceMixin", "basic.mc237493.TelemetryEventWidgetMixin", @@ -49,7 +48,6 @@ "basic.mc46766.MinecraftMixin", "basic.mc57057.GuardianAttackSoundInstanceMixin", "basic.mc577.AbstractContainerScreenMixin", - "basic.mc59810.MouseHandlerMixin", "basic.mc61489.BookEditScreenMixin", "basic.mc61489.BookViewScreenMixin", "basic.mc79545.ExperienceBarMixin", @@ -62,8 +60,6 @@ "basic.mc118740.PlayerMixin", "basic.mc176559.ItemStackAccessor", "basic.mc188359.CakeBlockMixin", - "basic.mc188359.ConsumableMixin", - "basic.mc206540.EntityMixin", - "basic.mc259512.LivingEntityMixin" + "basic.mc188359.ConsumableMixin" ] } diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc129909/ServerPlayerMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc129909/ServerPlayerMixin.java deleted file mode 100644 index 9d511af6..00000000 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc129909/ServerPlayerMixin.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.mixins.basic.mc129909; - -import com.mojang.authlib.GameProfile; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.GameType; -import net.minecraft.world.level.Level; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@BugFix(id = "MC-129909", category = FixCategory.BASIC, env = BugFix.Env.SERVER, description = "Players in spectator mode continue to consume foods and liquids shortly after switching game modes") -@Mixin(ServerPlayer.class) -public abstract class ServerPlayerMixin extends Player { - public ServerPlayerMixin(Level world, GameProfile gameProfile) { - super(world, gameProfile); - } - - /** - * Also fixes - * MC-81773, MC-206705 - */ - @Inject( - method = "setGameMode", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;stopRiding()V" - ) - ) - private void onChangeToSpectator(GameType mode, CallbackInfoReturnable cir) { - releaseUsingItem(); - } -} diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc159283/DensityFunctionsMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc159283/DensityFunctionsMixin.java deleted file mode 100644 index 4aa0b93a..00000000 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc159283/DensityFunctionsMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.mixins.basic.mc159283; - -import com.llamalad7.mixinextras.expression.Definition; -import com.llamalad7.mixinextras.expression.Expression; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.util.Mth; -import net.minecraft.world.level.levelgen.DensityFunctions; -import net.minecraft.world.level.levelgen.synth.SimplexNoise; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -/** - * Taken from Thorium - * https://github.com/PotassiumMC/thorium - * under LGPLv3 license - * - * @author NoahvdAa - */ -@BugFix(id = "MC-159283", category = FixCategory.BASIC, env = BugFix.Env.SERVER, description = "The End terrain does not generate in multiple rings centered around the world center") -@Mixin(DensityFunctions.EndIslandDensityFunction.class) -public class DensityFunctionsMixin { - /** - * Explicitly cast `x` and `z` to long (from int) to prevent integer overflow when squaring. - * We use a WrapOperation instead of ModifyArg so we don't do the math twice (one bugged one fixed) - */ - @Definition(id = "sqrt", method = "Lnet/minecraft/util/Mth;sqrt(F)F") - @Definition(id = "sectionX", local = @Local(type = int.class, name = "sectionX", argsOnly = true)) - @Definition(id = "sectionZ", local = @Local(type = int.class, name = "sectionZ", argsOnly = true)) - @Expression("sqrt((float) (sectionX * sectionX + sectionZ * sectionZ))") - @WrapOperation(method = "getHeightValue", at = @At("MIXINEXTRAS:EXPRESSION")) - private static float castToLongs(float x, Operation original, SimplexNoise islandNoise, int sectionX, int sectionZ) { - return Mth.sqrt((long) sectionX * (long) sectionX + (long) sectionZ * (long) sectionZ); - } -} diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc227008/EnderManMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc227008/EnderManMixin.java deleted file mode 100644 index 1230dff8..00000000 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc227008/EnderManMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.mixins.basic.mc227008; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.world.entity.monster.EnderMan; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@BugFix(id = "MC-227008", category = FixCategory.BASIC, env = BugFix.Env.SERVER, description = "Enderman constantly tries to teleport when in a boat or a minecart under daylight") -@Mixin(EnderMan.class) -public class EnderManMixin { - // Target getLightLevelDependentMagicValue so we get an EnderMan instance without needing to cast `this`. As long as this returns <= 0.5F the enderman won't teleport - @WrapOperation( - method = "customServerAiStep", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/monster/EnderMan;getLightLevelDependentMagicValue()F" - ) - ) - private float checkRiding(EnderMan instance, Operation original) { - return instance.isPassenger() ? 0F : original.call(instance); - } -} diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc298066/LivingEntityMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc298066/LivingEntityMixin.java deleted file mode 100644 index e4c26cc5..00000000 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc298066/LivingEntityMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.mixins.basic.mc298066; - -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.Level; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@BugFix(id = "MC-298066", category = FixCategory.BASIC, env = BugFix.Env.SERVER, description = "Directly entering a bed from a mount places the player in the wrong place") -@Mixin(LivingEntity.class) -public abstract class LivingEntityMixin extends Entity { - public LivingEntityMixin(EntityType entityType, Level level) { - super(entityType, level); - } - - // This is just a hacky fix to force the player into the correct position - @Inject(method = "setPosToBed", at = @At("TAIL")) - private void teleportToBed(BlockPos bedPosition, CallbackInfo ci) { - this.teleportTo(bedPosition.getX() + 0.5, bedPosition.getY() + 0.6875, bedPosition.getZ() + 0.5); - } -} diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc44654/EntityMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc44654/EntityMixin.java deleted file mode 100644 index 39b1d285..00000000 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc44654/EntityMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2026 The Debugify Contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - */ -package dev.isxander.debugify.mixins.basic.mc44654; - -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@BugFix(id = "MC-44654", category = FixCategory.BASIC, env = BugFix.Env.SERVER, description = "Some entities don't update position to the client when teleported") -@Mixin(Entity.class) -public abstract class EntityMixin { - @Shadow - public abstract EntityType getType(); - - @Shadow - public boolean needsSync; - - /** - * Since the update interval is set to infinity, the position will never get updated. - * To fix, we mark velocity as dirty via needsSync to force an update. - * - * We inject precisely here as the target is only called when `!firstTick && isServerLevel`, - * since this is where the issue occurs. - */ - @Inject( - method = "setPosRaw", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;isRemoved()Z" - ) - ) - private void forceClientUpdate(CallbackInfo ci) { - if (this.getType().updateInterval() == Integer.MAX_VALUE) { - this.needsSync = true; - } - } -} diff --git a/src/main/java/dev/isxander/debugify/mixins/errorhandler/CrashReportMixin.java b/src/main/java/dev/isxander/debugify/mixins/errorhandler/CrashReportMixin.java index 3cd84f40..08b5c6c7 100644 --- a/src/main/java/dev/isxander/debugify/mixins/errorhandler/CrashReportMixin.java +++ b/src/main/java/dev/isxander/debugify/mixins/errorhandler/CrashReportMixin.java @@ -20,7 +20,7 @@ public class CrashReportMixin { @Definition(id = "appendToCrashReportString", method = "Lnet/minecraft/SystemReport;appendToCrashReportString(Ljava/lang/StringBuilder;)V") @Expression("this.systemReport.appendToCrashReportString(?)") @Inject(method = "getDetails(Ljava/lang/StringBuilder;)V", at = @At("MIXINEXTRAS:EXPRESSION")) - private void appendCrashReport(StringBuilder sb, CallbackInfo ci) { - CrashReportInjector.addDetailsToCrashReport(sb); + private void appendCrashReport(StringBuilder builder, CallbackInfo ci) { + CrashReportInjector.addDetailsToCrashReport(builder); } } diff --git a/src/main/java/dev/isxander/debugify/mixins/gameplay/mc8187/TreeFeatureMixin.java b/src/main/java/dev/isxander/debugify/mixins/gameplay/mc8187/TreeFeatureMixin.java index ab31bc8b..d229c27a 100644 --- a/src/main/java/dev/isxander/debugify/mixins/gameplay/mc8187/TreeFeatureMixin.java +++ b/src/main/java/dev/isxander/debugify/mixins/gameplay/mc8187/TreeFeatureMixin.java @@ -13,8 +13,9 @@ import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.world.level.levelgen.feature.TreeFeature; -import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration; +import net.minecraft.world.level.levelgen.feature.featuresize.FeatureSize; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; /** @@ -31,7 +32,14 @@ **/ @BugFix(id = "MC-8187", category = FixCategory.GAMEPLAY, env = BugFix.Env.SERVER, modConflicts = "flwr-8187", description = "Two-by-two arrangements of jungle or spruce saplings cannot grow when there are adjacent blocks located north or west of the sapling formation") @Mixin(TreeFeature.class) -public class TreeFeatureMixin { +public abstract class TreeFeatureMixin { + /** + * 26.3 folded TreeConfiguration into TreeFeature itself, which is now a record, and dropped + * the config argument from getMaxFreeTreeHeight; the minimum size is read off the feature. + */ + @Shadow + public abstract FeatureSize minimumSize(); + /** * Corrects the starting value if the trunk's minimum size is {@literal 1} * and the starting value is {@literal -1} by returning {@literal 0}. @@ -49,11 +57,10 @@ public class TreeFeatureMixin { @ModifyExpressionValue(method = "getMaxFreeTreeHeight", at = @At("MIXINEXTRAS:EXPRESSION")) private int fixOffsetNew( int start, - @Local(argsOnly = true, name = "maxTreeHeight") int maxTreeHeight, - @Local(argsOnly = true, name = "config") TreeConfiguration config + @Local(argsOnly = true, name = "maxTreeHeight") int maxTreeHeight ) { // Roughly height == 0 && trunk == 1 - if (Debugify.isGameplayFixesEnabled() && start == -1 && config.minimumSize.getSizeAtHeight(maxTreeHeight, 0) == 1) { + if (Debugify.isGameplayFixesEnabled() && start == -1 && minimumSize().getSizeAtHeight(maxTreeHeight, 0) == 1) { return 0; } return start; diff --git a/src/main/resources/debugify.ct b/src/main/resources/debugify.ct index 6f25e007..db828961 100644 --- a/src/main/resources/debugify.ct +++ b/src/main/resources/debugify.ct @@ -4,5 +4,4 @@ accessible class net/minecraft/client/Options$FieldAccess accessible class net/minecraft/client/gui/screens/telemetry/TelemetryEventWidget$ContentBuilder accessible class net/minecraft/client/gui/screens/telemetry/TelemetryEventWidget$Content accessible class net/minecraft/client/gui/screens/achievement/StatsScreen$ItemStatisticsList -accessible class net/minecraft/world/level/levelgen/DensityFunctions$EndIslandDensityFunction accessible class net/minecraft/server/MinecraftServer$ReloadableResources diff --git a/src/main/resources/debugify.mixins.json b/src/main/resources/debugify.mixins.json index d9c6d490..cd0fd688 100644 --- a/src/main/resources/debugify.mixins.json +++ b/src/main/resources/debugify.mixins.json @@ -15,7 +15,6 @@ "basic.mc121706.RangedBowAttackGoalMixin", "basic.mc121903.MinecraftCommandBlockMixin", "basic.mc123450.ItemFrameMixin", - "basic.mc129909.ServerPlayerMixin", "basic.mc131562.ServerGamePacketListenerImplMixin", "basic.mc132878.ArmorStandMixin", "basic.mc133218.ServerPlayerMixin", @@ -26,7 +25,6 @@ "basic.mc153010.FoxMixin", "basic.mc155509.PufferfishMixin", "basic.mc158900.PlayerListMixin", - "basic.mc159283.DensityFunctionsMixin", "basic.mc160095.CactusBlockMixin", "basic.mc168573.BlocksAttacksMixin", "basic.mc170462.MobEffectsMixin", @@ -45,7 +43,6 @@ "basic.mc223153.BlocksMixin", "basic.mc224729.ChunkMapMixin", "basic.mc226961.ExperienceOrbMixin", - "basic.mc227008.EnderManMixin", "basic.mc227337.ShulkerBulletMixin", "basic.mc231743.FlowerPotBlockMixin", "basic.mc232869.StriderMixin", @@ -58,9 +55,7 @@ "basic.mc271899.StructureTemplateMixin", "basic.mc272431.EnderDragonMixin", "basic.mc297837.WaypointTransmitterMixin", - "basic.mc298066.LivingEntityMixin", "basic.mc30391.LivingEntityMixin", - "basic.mc44654.EntityMixin", "basic.mc7569.RconConsoleSourceMixin", "basic.mc82263.EnderDragonMixin", "basic.mc84661.MobEffectsMixin",