From e157978afc642472b364162bbbdbfc7cb11465e9 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 8 Jun 2023 18:32:00 +0100 Subject: [PATCH 1/5] Deprecate ITurtleAccess.getVisual{Position,Yaw} --- .github/ISSUE_TEMPLATE/bug_report.yaml | 1 + .../java/dan200/computercraft/api/turtle/ITurtleAccess.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 56263f1c2..0b7a516e6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -11,6 +11,7 @@ body: - 1.16.x - 1.18.x - 1.19.x + - 1.20.x validations: required: true - type: input diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java index 761b8b6be..3ef11c7ab 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -75,7 +75,9 @@ public interface ITurtleAccess { * @param f The subframe fraction. * @return A vector containing the floating point co-ordinates at which the turtle resides. * @see #getVisualYaw(float) + * @deprecated Will be removed in 1.20. */ + @Deprecated(forRemoval = true) Vec3 getVisualPosition(float f); /** @@ -84,7 +86,9 @@ public interface ITurtleAccess { * @param f The subframe fraction. * @return The yaw the turtle is facing. * @see #getVisualPosition(float) + * @deprecated Will be removed in 1.20. */ + @Deprecated(forRemoval = true) float getVisualYaw(float f); /** From cba207d62d262bec02a60863ba136b9860b90378 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 8 Jun 2023 18:48:50 +0100 Subject: [PATCH 2/5] Use Minecraft's method for checking paste events Fixes #1473. There's an argument we should use Screen.hasControlDown() (which handles Cmd vs Ctrl) instead of checking the modifiers, but we then need to update all the translation strings, and I'm not convinced it's worth it right now. --- .../client/gui/widgets/TerminalWidget.java | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/TerminalWidget.java b/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/TerminalWidget.java index 7f53bb569..6d6588e7e 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/TerminalWidget.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/TerminalWidget.java @@ -15,6 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarratedElementType; import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.network.chat.Component; import org.lwjgl.glfw.GLFW; @@ -81,6 +82,11 @@ public class TerminalWidget extends AbstractWidget { @Override public boolean keyPressed(int key, int scancode, int modifiers) { if (key == GLFW.GLFW_KEY_ESCAPE) return false; + if (Screen.isPaste(key)) { + paste(); + return true; + } + if ((modifiers & GLFW.GLFW_MOD_CONTROL) != 0) { switch (key) { case GLFW.GLFW_KEY_T -> { @@ -92,32 +98,6 @@ public class TerminalWidget extends AbstractWidget { case GLFW.GLFW_KEY_R -> { if (rebootTimer < 0) rebootTimer = 0; } - case GLFW.GLFW_KEY_V -> { - // Ctrl+V for paste - var clipboard = Minecraft.getInstance().keyboardHandler.getClipboard(); - if (clipboard != null) { - // Clip to the first occurrence of \r or \n - var newLineIndex1 = clipboard.indexOf("\r"); - var newLineIndex2 = clipboard.indexOf("\n"); - if (newLineIndex1 >= 0 && newLineIndex2 >= 0) { - clipboard = clipboard.substring(0, Math.min(newLineIndex1, newLineIndex2)); - } else if (newLineIndex1 >= 0) { - clipboard = clipboard.substring(0, newLineIndex1); - } else if (newLineIndex2 >= 0) { - clipboard = clipboard.substring(0, newLineIndex2); - } - - // Filter the string - clipboard = SharedConstants.filterText(clipboard); - if (!clipboard.isEmpty()) { - // Clip to 512 characters and queue the event - if (clipboard.length() > 512) clipboard = clipboard.substring(0, 512); - computer.queueEvent("paste", new Object[]{ clipboard }); - } - - return true; - } - } } } @@ -131,6 +111,29 @@ public class TerminalWidget extends AbstractWidget { return true; } + private void paste() { + var clipboard = Minecraft.getInstance().keyboardHandler.getClipboard(); + + // Clip to the first occurrence of \r or \n + var newLineIndex1 = clipboard.indexOf('\r'); + var newLineIndex2 = clipboard.indexOf('\n'); + if (newLineIndex1 >= 0 && newLineIndex2 >= 0) { + clipboard = clipboard.substring(0, Math.min(newLineIndex1, newLineIndex2)); + } else if (newLineIndex1 >= 0) { + clipboard = clipboard.substring(0, newLineIndex1); + } else if (newLineIndex2 >= 0) { + clipboard = clipboard.substring(0, newLineIndex2); + } + + // Filter the string + clipboard = SharedConstants.filterText(clipboard); + if (!clipboard.isEmpty()) { + // Clip to 512 characters and queue the event + if (clipboard.length() > 512) clipboard = clipboard.substring(0, 512); + computer.queueEvent("paste", new Object[]{ clipboard }); + } + } + @Override public boolean keyReleased(int key, int scancode, int modifiers) { // Queue the "key_up" event and remove from the down set From 68ef9f717ba45420e47cab7cad657916f75edd37 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 8 Jun 2023 20:32:50 +0100 Subject: [PATCH 3/5] Deprecate itemGroups field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since 1.19.3, this was only populated when the player opened the creative menu, and so was useless in survival or multi-player worlds. Rather than removing the field entirely (🦑 backwards compatibility), we replace it with the empty list. We also remove it from the docs, and add a note explaining what the field used to do. Closes #1285, albeit in the least satisfactory way possible. --- .../shared/details/ItemDetails.java | 28 ++----------------- .../shared/platform/PlatformHelper.java | 10 ------- .../computercraft/TestPlatformHelper.java | 8 ------ .../shared/platform/PlatformHelperImpl.java | 6 ---- .../generic/methods/InventoryMethods.java | 15 +++++----- .../shared/platform/PlatformHelperImpl.java | 8 ------ 6 files changed, 11 insertions(+), 64 deletions(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/details/ItemDetails.java b/projects/common/src/main/java/dan200/computercraft/shared/details/ItemDetails.java index d1d4dcfe4..b37396d0b 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/details/ItemDetails.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/details/ItemDetails.java @@ -5,14 +5,11 @@ package dan200.computercraft.shared.details; import com.google.gson.JsonParseException; -import dan200.computercraft.shared.platform.PlatformHelper; import dan200.computercraft.shared.platform.RegistryWrappers; import dan200.computercraft.shared.util.NBTUtil; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.EnchantedBookItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -45,7 +42,9 @@ public class ItemDetails { } data.put("tags", DetailHelpers.getTags(stack.getTags())); - data.put("itemGroups", getItemGroups(stack)); + + // Include deprecated itemGroups field + data.put("itemGroups", List.of()); var tag = stack.getTag(); if (tag != null && tag.contains("display", Tag.TAG_COMPOUND)) { @@ -84,27 +83,6 @@ public class ItemDetails { } } - /** - * Retrieve all item groups an item stack pertains to. - * - * @param stack Stack to analyse - * @return A filled list that contains pairs of item group IDs and their display names. - */ - private static List> getItemGroups(ItemStack stack) { - return CreativeModeTabs.allTabs().stream() - .filter(x -> x.shouldDisplay() && x.getType() == CreativeModeTab.Type.CATEGORY && x.contains(stack)) - .map(group -> { - Map groupData = new HashMap<>(2); - - var id = PlatformHelper.get().getCreativeTabId(group); - if (id != null) groupData.put("id", id.toString()); - - groupData.put("displayName", group.getDisplayName().getString()); - return groupData; - }) - .toList(); - } - /** * Retrieve all visible enchantments from given stack. Try to follow all tooltip rules : order and visibility. * diff --git a/projects/common/src/main/java/dan200/computercraft/shared/platform/PlatformHelper.java b/projects/common/src/main/java/dan200/computercraft/shared/platform/PlatformHelper.java index d05c0baaa..faba05862 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/platform/PlatformHelper.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/platform/PlatformHelper.java @@ -33,7 +33,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -273,15 +272,6 @@ public interface PlatformHelper extends dan200.computercraft.impl.PlatformHelper */ int getBurnTime(ItemStack stack); - /** - * Get a unique identifier for this creative tab. - * - * @param tab The tab to get - * @return The unique identifier, or {@code null} if not available. - */ - @Nullable - ResourceLocation getCreativeTabId(CreativeModeTab tab); - /** * Get the "container" item to be returned after crafting. For instance, crafting with a lava bucket should return * an empty bucket. diff --git a/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java b/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java index 60b016e9c..552e63756 100644 --- a/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java +++ b/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java @@ -36,7 +36,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; @@ -165,13 +164,6 @@ public class TestPlatformHelper extends AbstractComputerCraftAPI implements Plat throw new UnsupportedOperationException("Cannot interact with the world inside tests"); } - - @Nullable - @Override - public ResourceLocation getCreativeTabId(CreativeModeTab tab) { - return null; - } - @Override public RecipeIngredients getRecipeIngredients() { throw new UnsupportedOperationException("Cannot query recipes inside tests"); diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java index 1cf67972b..0c08744c4 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java @@ -256,12 +256,6 @@ public class PlatformHelperImpl implements PlatformHelper { return fuel == null ? 0 : fuel; } - @Nullable - @Override - public ResourceLocation getCreativeTabId(CreativeModeTab tab) { - return tab.getId(); - } - @Override public ItemStack getCraftingRemainingItem(ItemStack stack) { return stack.getRecipeRemainder(); diff --git a/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/InventoryMethods.java b/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/InventoryMethods.java index 3ca480232..290b8e09f 100644 --- a/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/InventoryMethods.java +++ b/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/InventoryMethods.java @@ -96,13 +96,18 @@ public class InventoryMethods implements GenericPeripheral { *

* The returned information contains the same information as each item in * {@link #list}, as well as additional details like the display name - * (`displayName`), item groups (`itemGroups`), which are the creative tabs - * an item will appear under, and item and item durability (`damage`, - * `maxDamage`, `durability`). + * (`displayName`), and item and item durability (`damage`, `maxDamage`, `durability`). *

* Some items include more information (such as enchantments) - it is * recommended to print it out using @{textutils.serialize} or in the Lua * REPL, to explore what is available. + *

+ * :::info Deprecated fields + * Older versions of CC: Tweaked exposed an {@code itemGroups} field, listing the + * creative tabs an item was available under. This information is no longer available on + * more recent versions of the game, and so this field will always be empty. Do not use this + * field in new code! + * ::: * * @param inventory The current inventory. * @param slot The slot to get information about. @@ -119,10 +124,6 @@ public class InventoryMethods implements GenericPeripheral { * print(("%s (%s)"):format(item.displayName, item.name)) * print(("Count: %d/%d"):format(item.count, item.maxCount)) * - * for _, group in pairs(item.itemGroups) do - * print(("Group: %s"):format(group.displayName)) - * end - * * if item.damage then * print(("Damage: %d/%d"):format(item.damage, item.maxDamage)) * end diff --git a/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java b/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java index 250ccbc2d..41154448c 100644 --- a/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java +++ b/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java @@ -38,7 +38,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; @@ -52,7 +51,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.CreativeModeTabRegistry; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.Tags; import net.minecraftforge.common.ToolActions; @@ -258,12 +256,6 @@ public class PlatformHelperImpl implements PlatformHelper { return ForgeHooks.getBurnTime(stack, null); } - @Nullable - @Override - public ResourceLocation getCreativeTabId(CreativeModeTab tab) { - return CreativeModeTabRegistry.getName(tab); - } - @Override public ItemStack getCraftingRemainingItem(ItemStack stack) { return stack.getCraftingRemainingItem(); From 96847bb8c28df51e5e49f2dd2978ff6cc4e2821b Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 8 Jun 2023 20:52:32 +0100 Subject: [PATCH 4/5] Make turtle placing consistent at all positions Turtles used to place stairs upside-down when at y<0. Now we know why! --- .../computercraft/shared/turtle/core/TurtlePlaceCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java index 447e7a456..1e9c9357a 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java @@ -168,7 +168,7 @@ public class TurtlePlaceCommand implements TurtleCommand { if (Math.abs(hitY - 0.5f) < 0.01f) hitY = 0.45f; // Check if there's something suitable to place onto - var hit = new BlockHitResult(new Vec3(hitX, hitY, hitZ), side, position, false); + var hit = new BlockHitResult(new Vec3(position.getX() + hitX, position.getY() + hitY, position.getZ() + hitZ), side, position, false); var context = new UseOnContext(turtlePlayer.player(), InteractionHand.MAIN_HAND, hit); if (!canDeployOnBlock(new BlockPlaceContext(context), turtle, turtlePlayer, position, side, adjacent, outErrorMessage)) { return false; From ec52f3e0e83d8d3157ef230cd506fd971bd80253 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sat, 10 Jun 2023 08:55:07 +0100 Subject: [PATCH 5/5] Bump CC:T to 1.104.0 --- .../cc-tweaked.mod-publishing.gradle.kts | 1 - .../kotlin/cc-tweaked.publishing.gradle.kts | 2 - gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- .../client/ClientTableFormatter.java | 2 +- .../computercraft/lua/rom/help/changelog.md | 24 ++++++++++ .../computercraft/lua/rom/help/whatsnew.md | 46 ++++++++----------- projects/fabric/build.gradle.kts | 4 ++ 8 files changed, 51 insertions(+), 32 deletions(-) diff --git a/buildSrc/src/main/kotlin/cc-tweaked.mod-publishing.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.mod-publishing.gradle.kts index ecd66e9c3..605a4b1a7 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.mod-publishing.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.mod-publishing.gradle.kts @@ -33,7 +33,6 @@ val publishCurseForge by tasks.registering(TaskPublishCurseForge::class) { enabled = apiToken != "" val mainFile = upload("282001", modPublishing.output.get().archiveFile) - dependsOn(modPublishing.output) // See https://github.com/Darkhax/CurseForgeGradle/pull/7. mainFile.changelog = "Release notes can be found on the [GitHub repository](https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v$mcVersion-$modVersion)." mainFile.changelogType = "markdown" diff --git a/buildSrc/src/main/kotlin/cc-tweaked.publishing.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.publishing.gradle.kts index 8b1ae5523..08cec53e8 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.publishing.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.publishing.gradle.kts @@ -2,8 +2,6 @@ // // SPDX-License-Identifier: MPL-2.0 -import org.gradle.kotlin.dsl.`maven-publish` - plugins { `java-library` `maven-publish` diff --git a/gradle.properties b/gradle.properties index f395aa0f3..31d73d2bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ kotlin.jvm.target.validation.mode=error # Mod properties isUnstable=false -modVersion=1.104.0 +modVersion=1.105.0 # Minecraft properties: We want to configure this here so we can read it in settings.gradle mcVersion=1.19.4 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fa3ffc7c3..e13ca1c60 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -50,7 +50,7 @@ junit = "5.9.2" # Build tools cctJavadoc = "1.7.0" checkstyle = "10.3.4" -curseForgeGradle = "1.0.11" +curseForgeGradle = "1.0.14" errorProne-core = "2.18.0" errorProne-plugin = "3.0.1" fabric-loom = "1.1.10" diff --git a/projects/common/src/client/java/dan200/computercraft/client/ClientTableFormatter.java b/projects/common/src/client/java/dan200/computercraft/client/ClientTableFormatter.java index 08042cc6a..fe6263b51 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/ClientTableFormatter.java +++ b/projects/common/src/client/java/dan200/computercraft/client/ClientTableFormatter.java @@ -23,7 +23,7 @@ import java.util.Objects; * A {@link TableFormatter} subclass which writes directly to {@linkplain ChatComponent the chat GUI}. *

* Each message written gets a special {@link GuiMessageTag}, so we can remove the previous table of the same - * {@link TableBuilder#getId() id}. + * {@linkplain TableBuilder#getId() id}. */ public class ClientTableFormatter implements TableFormatter { public static final ClientTableFormatter INSTANCE = new ClientTableFormatter(); diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md b/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md index a776f31c3..19561664c 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md @@ -1,3 +1,27 @@ +# New features in CC: Tweaked 1.105.0 + +* Optimise JSON string parsing. +* Add `colors.fromBlit` (Erb3). +* Upload file size limit is now configurable (khankul). +* Wired cables no longer have a distance limit. +* Java methods now coerce values to strings consistently with Lua. +* Add custom timeout support to the HTTP API. +* Support custom proxies for HTTP requests (Lemmmy). +* The `speaker` program now errors when playing HTTP files. +* `edit` now shows an error message when editing read-only files. +* Update Ukranian translation (SirEdvin). + +Several bug fixes: +* Allow GPS hosts to only be 1 block apart. +* Fix "Turn On"/"Turn Off" buttons being inverted in the computer GUI (Erb3). +* Fix arrow keys not working in the printout UI. +* Several documentation fixes (zyxkad, Lupus590, Commandcracker). +* Fix monitor renderer debug text always being visible on Forge. +* Fix crash when another mod changes the LoggerContext. +* Fix the `monitor_renderer` option not being present in Fabric config files. +* Pasting on MacOS/OSX now uses Cmd+V rather than Ctrl+V. +* Fix turtles placing blocks upside down when at y<0. + # New features in CC: Tweaked 1.104.0 * Update to Minecraft 1.19.4. diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md b/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md index 4973b3df2..3407fccd6 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md @@ -1,31 +1,25 @@ -New features in CC: Tweaked 1.104.0 +New features in CC: Tweaked 1.105.0 -* Update to Minecraft 1.19.4. -* Turtles can now right click items "into" certain blocks (cauldrons and hives by default, configurable with the `computercraft:turtle_can_use` block tag). -* Update Cobalt to 0.7: - * `table` methods and `ipairs` now use metamethods. - * Type errors now use the `__name` metatag. - * Coroutines no longer run on multiple threads. - * Timeout errors should be thrown more reliably. -* `speaker` program now reports an error on common unsupported audio formats. -* `multishell` now hides the implementation details of its terminal redirect from programs. -* Use VBO monitor renderer by default. -* Improve syntax errors when missing commas in tables, and on trailing commas in parameter lists. -* Turtles can now hold flags. -* Update several translations (Alessandro, chesiren, Erlend, RomanPlayer22). +* Optimise JSON string parsing. +* Add `colors.fromBlit` (Erb3). +* Upload file size limit is now configurable (khankul). +* Wired cables no longer have a distance limit. +* Java methods now coerce values to strings consistently with Lua. +* Add custom timeout support to the HTTP API. +* Support custom proxies for HTTP requests (Lemmmy). +* The `speaker` program now errors when playing HTTP files. +* `edit` now shows an error message when editing read-only files. +* Update Ukranian translation (SirEdvin). Several bug fixes: -* `settings.load` now ignores malformed values created by editing the `.settings` file by hand. -* Fix introduction dates on `os.cancelAlarm` and `os.cancelTimer` (MCJack123). -* Fix the REPL syntax reporting crashing on valid parses. -* Make writes to the ID file atomic. -* Obey stack limits when transferring items with Fabric's APIs. -* Ignore metatables in `textutils.serialize`. -* Correctly recurse into NBT lists when computing the NBT hash (Lemmmy). -* Fix advanced pocket computers rendering as greyscale. -* Fix stack overflow when using `shell` as a hashbang program. -* Fix websocket messages being empty when using a non-default compression settings. -* Fix `gps.locate` returning `nan` when receiving a duplicate location (Wojbie). -* Remove several thread safety issues inside Java-side argument parsing code. +* Allow GPS hosts to only be 1 block apart. +* Fix "Turn On"/"Turn Off" buttons being inverted in the computer GUI (Erb3). +* Fix arrow keys not working in the printout UI. +* Several documentation fixes (zyxkad, Lupus590, Commandcracker). +* Fix monitor renderer debug text always being visible on Forge. +* Fix crash when another mod changes the LoggerContext. +* Fix the `monitor_renderer` option not being present in Fabric config files. +* Pasting on MacOS/OSX now uses Cmd+V rather than Ctrl+V. +* Fix turtles placing blocks upside down when at y<0. Type "help changelog" to see the full version history. diff --git a/projects/fabric/build.gradle.kts b/projects/fabric/build.gradle.kts index 576bac769..f2aef9cb8 100644 --- a/projects/fabric/build.gradle.kts +++ b/projects/fabric/build.gradle.kts @@ -251,3 +251,7 @@ publishing { } } } + +modrinth { + required.project("fabric-api") +}