From c3fe9f00d4e35554c00f7228ab11eefa77d21f02 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 8 Dec 2022 19:45:02 +0000 Subject: [PATCH] Update to Minecraft 1.19.3 Lots of minor changes, but nothing too nasty - just tedious. Known bugs/issues: - REI and JEI haven't been updated at the time of writing, so our usage of their APIs may be incompatible. - Crash when opening the config UI in Fabric, as forgeconfigapi-port hasn't been updated yet. Will hold off on doing a release until those mods have updated. --- gradle.properties | 2 +- gradle/libs.versions.toml | 21 ++-- .../client/turtle/TurtleUpgradeModellers.java | 8 +- .../computercraft/api/ComputerCraftTags.java | 6 +- .../api/pocket/PocketUpgradeDataProvider.java | 10 +- .../api/pocket/PocketUpgradeSerialiser.java | 6 +- .../api/turtle/TurtleUpgradeDataProvider.java | 16 +-- .../api/turtle/TurtleUpgradeSerialiser.java | 6 +- .../api/upgrades/UpgradeDataProvider.java | 26 ++--- .../computercraft/client/ClientRegistry.java | 4 +- .../client/gui/AbstractComputerScreen.java | 9 +- .../client/gui/ComputerScreen.java | 2 +- .../client/gui/NoTermComputerScreen.java | 7 -- .../client/gui/OptionScreen.java | 9 +- .../client/gui/widgets/ComputerSidebar.java | 26 +++-- .../gui/widgets/DynamicImageButton.java | 50 +++++----- .../client/gui/widgets/TerminalWidget.java | 9 +- .../client/render/ComputerBorderRenderer.java | 2 +- .../client/render/ItemMapLikeRenderer.java | 14 +-- .../client/render/PocketItemRenderer.java | 8 +- .../client/render/PrintoutItemRenderer.java | 6 +- .../client/render/PrintoutRenderer.java | 2 +- .../client/render/RenderTypes.java | 4 +- .../render/TurtleBlockEntityRenderer.java | 10 +- .../monitor/MonitorBlockEntityRenderer.java | 13 ++- .../monitor/MonitorHighlightRenderer.java | 4 +- .../render/text/FixedWidthFontRenderer.java | 8 +- .../client/render/vbo/DirectVertexBuffer.java | 2 +- ...in.java => ClientPacketListenerMixin.java} | 8 +- .../computercraft-client.mixins.json | 2 +- .../computercraft/data/DataProviders.java | 46 ++++----- .../computercraft/data/LanguageProvider.java | 25 ++--- .../computercraft/data/LootTableProvider.java | 10 +- .../computercraft/data/ModelProvider.java | 44 ++++----- .../data/PocketUpgradeProvider.java | 6 +- .../computercraft/data/RecipeProvider.java | 82 ++++++++-------- .../computercraft/data/TagProvider.java | 22 ++++- .../data/TurtleUpgradeProvider.java | 6 +- .../mixin/CreativeModeTabAccessor.java | 24 ----- .../computercraft/shared/ModRegistry.java | 98 ++++++++++++++----- .../command/arguments/ArgumentUtils.java | 8 +- .../shared/common/ColourableRecipe.java | 5 +- .../shared/computer/apis/CommandAPI.java | 4 +- .../recipe/ComputerConvertRecipe.java | 5 +- .../computer/recipe/ComputerFamilyRecipe.java | 16 +-- .../recipe/ComputerUpgradeRecipe.java | 9 +- .../shared/details/BlockDetails.java | 4 +- .../shared/details/DetailHelpers.java | 4 +- .../shared/details/ItemDetails.java | 19 ++-- .../integration/UpgradeRecipeGenerator.java | 5 +- .../shared/media/items/DiskItem.java | 10 -- .../shared/media/items/TreasureDiskItem.java | 6 -- .../shared/media/recipes/DiskRecipe.java | 5 +- .../shared/media/recipes/PrintoutRecipe.java | 5 +- .../client/PlayRecordClientMessage.java | 6 +- .../client/SpeakerPlayClientMessage.java | 4 +- .../peripheral/generic/GenericPeripheral.java | 4 +- .../modem/wired/CableBlockItem.java | 12 +-- .../peripheral/speaker/SpeakerPeripheral.java | 21 ++-- .../shared/platform/PlatformHelper.java | 18 ++-- ...{Registries.java => RegistryWrappers.java} | 23 ++--- .../pocket/items/PocketComputerItem.java | 9 -- .../recipes/PocketComputerUpgradeRecipe.java | 5 +- .../shared/turtle/items/TurtleItem.java | 12 --- .../shared/turtle/recipes/TurtleRecipe.java | 9 +- .../turtle/recipes/TurtleUpgradeRecipe.java | 5 +- .../turtle/upgrades/TurtleToolSerialiser.java | 12 +-- .../shared/util/ArgumentHelpers.java | 4 +- .../shared/util/ImpostorRecipe.java | 12 ++- .../shared/util/ImpostorShapelessRecipe.java | 24 ++--- .../computercraft-common.accesswidener | 2 + .../main/resources/computercraft.mixins.json | 1 - .../computercraft/TestPlatformHelper.java | 13 +-- .../computer/core/ResourceMountTest.java | 6 +- .../dan200/computercraft/export/Exporter.java | 10 +- .../computercraft/export/ImageRenderer.java | 4 +- .../dan200/computercraft/export/JsonDump.java | 8 +- .../computercraft/gametest/Loot_Test.kt | 2 +- .../gametest/api/ClientTestExtensions.kt | 4 +- .../gametest/api/TestExtensions.kt | 6 +- .../gametest/core/ClientTestHooks.kt | 21 ++-- projects/fabric/build.gradle.kts | 1 + .../client/model/TransformedBakedModel.java | 7 +- .../model/turtle/TurtleModelLoader.java | 15 ++- .../mixin/client/GameRendererMixin.java | 4 +- .../mixin/client/ItemFrameRendererMixin.java | 2 +- .../assets/computercraft/lang/en_us.json | 1 + .../{computercraft => redstone}/cable.json | 0 .../computer_advanced.json | 0 .../computer_advanced_upgrade.json | 0 .../computer_command.json | 0 .../computer_normal.json | 0 .../{computercraft => redstone}/disk_1.json | 0 .../{computercraft => redstone}/disk_10.json | 0 .../{computercraft => redstone}/disk_11.json | 0 .../{computercraft => redstone}/disk_12.json | 0 .../{computercraft => redstone}/disk_13.json | 0 .../{computercraft => redstone}/disk_14.json | 0 .../{computercraft => redstone}/disk_15.json | 0 .../{computercraft => redstone}/disk_16.json | 0 .../{computercraft => redstone}/disk_2.json | 0 .../{computercraft => redstone}/disk_3.json | 0 .../{computercraft => redstone}/disk_4.json | 0 .../{computercraft => redstone}/disk_5.json | 0 .../{computercraft => redstone}/disk_6.json | 0 .../{computercraft => redstone}/disk_7.json | 0 .../{computercraft => redstone}/disk_8.json | 0 .../{computercraft => redstone}/disk_9.json | 0 .../disk_drive.json | 0 .../monitor_advanced.json | 0 .../monitor_normal.json | 0 .../computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../pocket_computer_advanced.json | 0 .../pocket_computer_advanced_upgrade.json | 0 .../pocket_computer_normal.json | 0 .../pocket_normal/computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../printed_book.json | 0 .../printed_pages.json | 0 .../{computercraft => redstone}/printer.json | 0 .../{computercraft => redstone}/speaker.json | 0 .../turtle_advanced.json | 0 .../computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../minecraft/crafting_table.json | 0 .../minecraft/diamond_axe.json | 0 .../minecraft/diamond_hoe.json | 0 .../minecraft/diamond_pickaxe.json | 0 .../minecraft/diamond_shovel.json | 0 .../minecraft/diamond_sword.json | 0 .../turtle_advanced_upgrade.json | 0 .../turtle_normal.json | 0 .../turtle_normal/computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../minecraft/crafting_table.json | 0 .../turtle_normal/minecraft/diamond_axe.json | 0 .../turtle_normal/minecraft/diamond_hoe.json | 0 .../minecraft/diamond_pickaxe.json | 0 .../minecraft/diamond_shovel.json | 0 .../minecraft/diamond_sword.json | 0 .../wired_modem.json | 0 .../wired_modem_full_from.json | 0 .../wired_modem_full_to.json | 0 .../wireless_modem_advanced.json | 0 .../wireless_modem_normal.json | 0 .../data/computercraft/recipes/cable.json | 1 + .../data/computercraft/recipes/colour.json | 2 +- .../recipes/computer_advanced.json | 1 + .../recipes/computer_advanced_upgrade.json | 1 + .../recipes/computer_command.json | 1 + .../recipes/computer_normal.json | 1 + .../data/computercraft/recipes/disk.json | 2 +- .../data/computercraft/recipes/disk_1.json | 1 + .../data/computercraft/recipes/disk_10.json | 1 + .../data/computercraft/recipes/disk_11.json | 1 + .../data/computercraft/recipes/disk_12.json | 1 + .../data/computercraft/recipes/disk_13.json | 1 + .../data/computercraft/recipes/disk_14.json | 1 + .../data/computercraft/recipes/disk_15.json | 1 + .../data/computercraft/recipes/disk_16.json | 1 + .../data/computercraft/recipes/disk_2.json | 1 + .../data/computercraft/recipes/disk_3.json | 1 + .../data/computercraft/recipes/disk_4.json | 1 + .../data/computercraft/recipes/disk_5.json | 1 + .../data/computercraft/recipes/disk_6.json | 1 + .../data/computercraft/recipes/disk_7.json | 1 + .../data/computercraft/recipes/disk_8.json | 1 + .../data/computercraft/recipes/disk_9.json | 1 + .../computercraft/recipes/disk_drive.json | 1 + .../recipes/monitor_advanced.json | 1 + .../computercraft/recipes/monitor_normal.json | 1 + .../computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../recipes/pocket_computer_advanced.json | 1 + .../pocket_computer_advanced_upgrade.json | 1 + .../recipes/pocket_computer_normal.json | 1 + .../recipes/pocket_computer_upgrade.json | 2 +- .../pocket_normal/computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../computercraft/recipes/printed_book.json | 1 + .../computercraft/recipes/printed_pages.json | 1 + .../data/computercraft/recipes/printer.json | 1 + .../data/computercraft/recipes/printout.json | 2 +- .../computercraft/recipes/skull_cloudy.json | 1 + .../computercraft/recipes/skull_dan200.json | 1 + .../data/computercraft/recipes/speaker.json | 1 + .../recipes/turtle_advanced.json | 1 + .../computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../minecraft/crafting_table.json | 1 + .../minecraft/diamond_axe.json | 1 + .../minecraft/diamond_hoe.json | 1 + .../minecraft/diamond_pickaxe.json | 1 + .../minecraft/diamond_shovel.json | 1 + .../minecraft/diamond_sword.json | 1 + .../recipes/turtle_advanced_upgrade.json | 1 + .../computercraft/recipes/turtle_normal.json | 1 + .../turtle_normal/computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../minecraft/crafting_table.json | 1 + .../turtle_normal/minecraft/diamond_axe.json | 1 + .../turtle_normal/minecraft/diamond_hoe.json | 1 + .../minecraft/diamond_pickaxe.json | 1 + .../minecraft/diamond_shovel.json | 1 + .../minecraft/diamond_sword.json | 1 + .../computercraft/recipes/turtle_upgrade.json | 2 +- .../computercraft/recipes/wired_modem.json | 1 + .../recipes/wired_modem_full_from.json | 1 + .../recipes/wired_modem_full_to.json | 1 + .../recipes/wireless_modem_advanced.json | 1 + .../recipes/wireless_modem_normal.json | 1 + .../data/FabricDataGenerators.java | 91 ++++++++++------- .../data/MoreConventionalTagsProvider.java | 15 +-- .../mixin/TagsProviderMixin.java | 6 +- .../computercraft/shared/ComputerCraft.java | 3 + .../shared/details/FluidDetails.java | 4 +- .../shared/platform/FakeNetHandler.java | 2 +- .../shared/platform/FakePlayer.java | 2 +- .../shared/platform/MoreConventionalTags.java | 4 +- .../shared/platform/PlatformHelperImpl.java | 38 +++---- .../fabric/src/main/resources/fabric.mod.json | 6 +- .../computercraft/shared/FabricBootstrap.java | 50 +++++++++- .../client/ForgeClientRegistry.java | 2 +- .../model/turtle/TurtleModelLoader.java | 19 +--- .../assets/computercraft/lang/en_us.json | 1 + .../{computercraft => redstone}/cable.json | 0 .../computer_advanced.json | 0 .../computer_advanced_upgrade.json | 0 .../computer_command.json | 0 .../computer_normal.json | 0 .../{computercraft => redstone}/disk_1.json | 0 .../{computercraft => redstone}/disk_10.json | 0 .../{computercraft => redstone}/disk_11.json | 0 .../{computercraft => redstone}/disk_12.json | 0 .../{computercraft => redstone}/disk_13.json | 0 .../{computercraft => redstone}/disk_14.json | 0 .../{computercraft => redstone}/disk_15.json | 0 .../{computercraft => redstone}/disk_16.json | 0 .../{computercraft => redstone}/disk_2.json | 0 .../{computercraft => redstone}/disk_3.json | 0 .../{computercraft => redstone}/disk_4.json | 0 .../{computercraft => redstone}/disk_5.json | 0 .../{computercraft => redstone}/disk_6.json | 0 .../{computercraft => redstone}/disk_7.json | 0 .../{computercraft => redstone}/disk_8.json | 0 .../{computercraft => redstone}/disk_9.json | 0 .../disk_drive.json | 0 .../monitor_advanced.json | 0 .../monitor_normal.json | 0 .../computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../pocket_computer_advanced.json | 0 .../pocket_computer_advanced_upgrade.json | 0 .../pocket_computer_normal.json | 0 .../pocket_normal/computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../printed_book.json | 0 .../printed_pages.json | 0 .../{computercraft => redstone}/printer.json | 0 .../{computercraft => redstone}/speaker.json | 0 .../turtle_advanced.json | 0 .../computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../minecraft/crafting_table.json | 0 .../minecraft/diamond_axe.json | 0 .../minecraft/diamond_hoe.json | 0 .../minecraft/diamond_pickaxe.json | 0 .../minecraft/diamond_shovel.json | 0 .../minecraft/diamond_sword.json | 0 .../turtle_advanced_upgrade.json | 0 .../turtle_normal.json | 0 .../turtle_normal/computercraft/speaker.json | 0 .../wireless_modem_advanced.json | 0 .../computercraft/wireless_modem_normal.json | 0 .../minecraft/crafting_table.json | 0 .../turtle_normal/minecraft/diamond_axe.json | 0 .../turtle_normal/minecraft/diamond_hoe.json | 0 .../minecraft/diamond_pickaxe.json | 0 .../minecraft/diamond_shovel.json | 0 .../minecraft/diamond_sword.json | 0 .../wired_modem.json | 0 .../wired_modem_full_from.json | 0 .../wired_modem_full_to.json | 0 .../wireless_modem_advanced.json | 0 .../wireless_modem_normal.json | 0 .../data/computercraft/recipes/cable.json | 1 + .../data/computercraft/recipes/colour.json | 2 +- .../recipes/computer_advanced.json | 1 + .../recipes/computer_advanced_upgrade.json | 1 + .../recipes/computer_command.json | 1 + .../recipes/computer_normal.json | 1 + .../data/computercraft/recipes/disk.json | 2 +- .../data/computercraft/recipes/disk_1.json | 1 + .../data/computercraft/recipes/disk_10.json | 1 + .../data/computercraft/recipes/disk_11.json | 1 + .../data/computercraft/recipes/disk_12.json | 1 + .../data/computercraft/recipes/disk_13.json | 1 + .../data/computercraft/recipes/disk_14.json | 1 + .../data/computercraft/recipes/disk_15.json | 1 + .../data/computercraft/recipes/disk_16.json | 1 + .../data/computercraft/recipes/disk_2.json | 1 + .../data/computercraft/recipes/disk_3.json | 1 + .../data/computercraft/recipes/disk_4.json | 1 + .../data/computercraft/recipes/disk_5.json | 1 + .../data/computercraft/recipes/disk_6.json | 1 + .../data/computercraft/recipes/disk_7.json | 1 + .../data/computercraft/recipes/disk_8.json | 1 + .../data/computercraft/recipes/disk_9.json | 1 + .../computercraft/recipes/disk_drive.json | 1 + .../recipes/monitor_advanced.json | 1 + .../computercraft/recipes/monitor_normal.json | 1 + .../computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../recipes/pocket_computer_advanced.json | 1 + .../pocket_computer_advanced_upgrade.json | 1 + .../recipes/pocket_computer_normal.json | 1 + .../recipes/pocket_computer_upgrade.json | 2 +- .../pocket_normal/computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../computercraft/recipes/printed_book.json | 1 + .../computercraft/recipes/printed_pages.json | 1 + .../data/computercraft/recipes/printer.json | 1 + .../data/computercraft/recipes/printout.json | 2 +- .../computercraft/recipes/skull_cloudy.json | 1 + .../computercraft/recipes/skull_dan200.json | 1 + .../data/computercraft/recipes/speaker.json | 1 + .../recipes/turtle_advanced.json | 1 + .../computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../minecraft/crafting_table.json | 1 + .../minecraft/diamond_axe.json | 1 + .../minecraft/diamond_hoe.json | 1 + .../minecraft/diamond_pickaxe.json | 1 + .../minecraft/diamond_shovel.json | 1 + .../minecraft/diamond_sword.json | 1 + .../recipes/turtle_advanced_upgrade.json | 1 + .../computercraft/recipes/turtle_normal.json | 1 + .../turtle_normal/computercraft/speaker.json | 1 + .../wireless_modem_advanced.json | 1 + .../computercraft/wireless_modem_normal.json | 1 + .../minecraft/crafting_table.json | 1 + .../turtle_normal/minecraft/diamond_axe.json | 1 + .../turtle_normal/minecraft/diamond_hoe.json | 1 + .../minecraft/diamond_pickaxe.json | 1 + .../minecraft/diamond_shovel.json | 1 + .../minecraft/diamond_sword.json | 1 + .../computercraft/recipes/turtle_upgrade.json | 2 +- .../computercraft/recipes/wired_modem.json | 1 + .../recipes/wired_modem_full_from.json | 1 + .../recipes/wired_modem_full_to.json | 1 + .../recipes/wireless_modem_advanced.json | 1 + .../recipes/wireless_modem_normal.json | 1 + .../dan200/computercraft/ComputerCraft.java | 7 ++ .../dan200/computercraft/data/Generators.java | 77 +++++---------- .../shared/details/FluidData.java | 4 +- .../generic/methods/FluidMethods.java | 6 +- .../shared/platform/PlatformHelperImpl.java | 68 ++++++++----- .../src/main/resources/META-INF/mods.toml | 4 +- 373 files changed, 886 insertions(+), 728 deletions(-) rename projects/common/src/client/java/dan200/computercraft/mixin/client/{LocalPlayerMixin.java => ClientPacketListenerMixin.java} (75%) delete mode 100644 projects/common/src/main/java/dan200/computercraft/mixin/CreativeModeTabAccessor.java rename projects/common/src/main/java/dan200/computercraft/shared/platform/{Registries.java => RegistryWrappers.java} (81%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/cable.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_advanced_upgrade.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_command.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_1.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_10.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_11.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_12.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_13.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_14.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_15.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_16.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_2.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_3.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_4.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_5.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_6.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_7.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_8.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_9.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_drive.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/monitor_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/monitor_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_advanced/computercraft/speaker.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_advanced/computercraft/wireless_modem_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_advanced/computercraft/wireless_modem_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_computer_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_computer_advanced_upgrade.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_computer_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_normal/computercraft/speaker.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_normal/computercraft/wireless_modem_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_normal/computercraft/wireless_modem_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/printed_book.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/printed_pages.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/printer.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/speaker.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/computercraft/speaker.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/computercraft/wireless_modem_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/computercraft/wireless_modem_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/crafting_table.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_axe.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_hoe.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_pickaxe.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_shovel.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_sword.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced_upgrade.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/computercraft/speaker.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/computercraft/wireless_modem_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/computercraft/wireless_modem_normal.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/crafting_table.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_axe.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_hoe.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_pickaxe.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_shovel.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_sword.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wired_modem.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wired_modem_full_from.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wired_modem_full_to.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wireless_modem_advanced.json (100%) rename projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wireless_modem_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/cable.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_advanced_upgrade.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_command.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/computer_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_1.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_10.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_11.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_12.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_13.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_14.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_15.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_16.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_2.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_3.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_4.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_5.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_6.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_7.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_8.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_9.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/disk_drive.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/monitor_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/monitor_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_advanced/computercraft/speaker.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_advanced/computercraft/wireless_modem_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_advanced/computercraft/wireless_modem_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_computer_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_computer_advanced_upgrade.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_computer_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_normal/computercraft/speaker.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_normal/computercraft/wireless_modem_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/pocket_normal/computercraft/wireless_modem_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/printed_book.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/printed_pages.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/printer.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/speaker.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/computercraft/speaker.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/computercraft/wireless_modem_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/computercraft/wireless_modem_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/crafting_table.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_axe.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_hoe.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_pickaxe.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_shovel.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced/minecraft/diamond_sword.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_advanced_upgrade.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/computercraft/speaker.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/computercraft/wireless_modem_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/computercraft/wireless_modem_normal.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/crafting_table.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_axe.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_hoe.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_pickaxe.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_shovel.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/turtle_normal/minecraft/diamond_sword.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wired_modem.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wired_modem_full_from.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wired_modem_full_to.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wireless_modem_advanced.json (100%) rename projects/forge/src/generated/resources/data/computercraft/advancements/recipes/{computercraft => redstone}/wireless_modem_normal.json (100%) diff --git a/gradle.properties b/gradle.properties index 8f948b486..1521f2f63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ isUnstable=true modVersion=1.102.0-SNAPSHOT # Minecraft properties: We want to configure this here so we can read it in settings.gradle -mcVersion=1.19.2 +mcVersion=1.19.3 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 736c217cb..60211f8e9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,12 +2,12 @@ # Minecraft # MC version is specified in gradle.properties, as we need that in settings.gradle. -fabric-api = "0.67.0+1.19.2" -fabric-loader = "0.14.10" -forge = "43.1.1" +fabric-api = "0.68.1+1.19.3" +fabric-loader = "0.14.11" +forge = "44.0.0" forgeSpi = "6.0.0" mixin = "0.8.5" -parchment = "2022.10.16" +parchment = "2022.11.27" parchmentMc = "1.19.2" # Normal dependencies @@ -28,16 +28,16 @@ slf4j = "1.7.36" # Minecraft mods forgeConfig = "4.2.7" -iris = "1.19.x-v1.4.0" +iris = "1.19.3-v1.4.6" jei = "11.3.0.262" -modmenu = "4.1.0" +modmenu = "5.0.1" oculus = "1.2.5" rei = "9.1.550" rubidium = "0.6.1" -sodium = "mc1.19.2-0.4.4" +sodium = "mc1.19.3-0.4.6" # Testing -byteBuddy = "1.12.18" +byteBuddy = "1.12.19" hamcrest = "2.2" jqwik = "1.7.0" junit = "5.9.1" @@ -100,6 +100,7 @@ sodium = { module = "maven.modrinth:sodium", version.ref = "sodium" } # Testing byteBuddyAgent = { module ="net.bytebuddy:byte-buddy-agent", version.ref = "byteBuddy" } +byteBuddy = { module ="net.bytebuddy:byte-buddy", version.ref = "byteBuddy" } hamcrest = { module = "org.hamcrest:hamcrest", version.ref = "hamcrest" } jqwik-api = { module = "net.jqwik:jqwik-api", version.ref = "jqwik" } jqwik-engine = { module = "net.jqwik:jqwik-engine", version.ref = "jqwik" } @@ -143,10 +144,10 @@ kotlin = ["kotlin-stdlib", "kotlin-coroutines"] # Minecraft externalMods-common = ["jei-api", "forgeConfig", "nightConfig-core", "nightConfig-toml"] externalMods-forge-compile = ["oculus", "jei-api"] -externalMods-forge-runtime = ["jei-forge"] +externalMods-forge-runtime = [] externalMods-fabric = ["fabric-loader", "fabric-api", "forgeConfig", "nightConfig-core", "nightConfig-toml"] externalMods-fabric-compile = ["iris", "jei-api", "rei-api", "rei-builtin"] -externalMods-fabric-runtime = ["jei-fabric", "modmenu"] +externalMods-fabric-runtime = ["modmenu"] # Testing test = ["junit-jupiter-api", "junit-jupiter-params", "hamcrest", "jqwik-api"] diff --git a/projects/common-api/src/client/java/dan200/computercraft/api/client/turtle/TurtleUpgradeModellers.java b/projects/common-api/src/client/java/dan200/computercraft/api/client/turtle/TurtleUpgradeModellers.java index d1d872172..94ef3d2cf 100644 --- a/projects/common-api/src/client/java/dan200/computercraft/api/client/turtle/TurtleUpgradeModellers.java +++ b/projects/common-api/src/client/java/dan200/computercraft/api/client/turtle/TurtleUpgradeModellers.java @@ -5,13 +5,11 @@ */ package dan200.computercraft.api.client.turtle; -import com.mojang.math.Matrix4f; import com.mojang.math.Transformation; import dan200.computercraft.api.client.TransformedModel; import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; - -import java.nio.FloatBuffer; +import org.joml.Matrix4f; class TurtleUpgradeModellers { private static final Transformation leftTransform = getMatrixFor(-0.40625f); @@ -19,12 +17,12 @@ class TurtleUpgradeModellers { private static Transformation getMatrixFor(float offset) { var matrix = new Matrix4f(); - matrix.load(FloatBuffer.wrap(new float[]{ + matrix.set(new float[]{ 0.0f, 0.0f, -1.0f, 1.0f + offset, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - })); + }); matrix.transpose(); return new Transformation(matrix); } diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/ComputerCraftTags.java b/projects/common-api/src/main/java/dan200/computercraft/api/ComputerCraftTags.java index 2fe008cfe..a77c71aa5 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/ComputerCraftTags.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/ComputerCraftTags.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.api; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -22,7 +22,7 @@ public static class Items { public static final TagKey MONITOR = make("monitor"); private static TagKey make(String name) { - return TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(ComputerCraftAPI.MOD_ID, name)); + return TagKey.create(Registries.ITEM, new ResourceLocation(ComputerCraftAPI.MOD_ID, name)); } } @@ -53,7 +53,7 @@ public static class Blocks { public static final TagKey TURTLE_HOE_BREAKABLE = make("turtle_hoe_harvestable"); private static TagKey make(String name) { - return TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(ComputerCraftAPI.MOD_ID, name)); + return TagKey.create(Registries.BLOCK, new ResourceLocation(ComputerCraftAPI.MOD_ID, name)); } } } diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeDataProvider.java b/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeDataProvider.java index 90dabc4df..2cb24cbf3 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeDataProvider.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeDataProvider.java @@ -7,19 +7,21 @@ import dan200.computercraft.api.upgrades.UpgradeDataProvider; import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import java.util.function.Consumer; /** * A data provider to generate pocket computer upgrades. *

- * This should be subclassed and registered to a {@link DataGenerator}. Override the {@link #addUpgrades(Consumer)} function, - * construct each upgrade, and pass them off to the provided consumer to generate them. + * This should be subclassed and registered to a {@link DataGenerator.PackGenerator}. Override the + * {@link #addUpgrades(Consumer)} function, construct each upgrade, and pass them off to the provided consumer to + * generate them. * * @see PocketUpgradeSerialiser */ public abstract class PocketUpgradeDataProvider extends UpgradeDataProvider> { - public PocketUpgradeDataProvider(DataGenerator generator) { - super(generator, "Pocket Computer Upgrades", "computercraft/pocket_upgrades", PocketUpgradeSerialiser.REGISTRY_ID); + public PocketUpgradeDataProvider(PackOutput output) { + super(output, "Pocket Computer Upgrades", "computercraft/pocket_upgrades", PocketUpgradeSerialiser.REGISTRY_ID); } } diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeSerialiser.java b/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeSerialiser.java index 01b30ce39..ed3432553 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeSerialiser.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/pocket/PocketUpgradeSerialiser.java @@ -14,7 +14,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import java.util.function.BiFunction; import java.util.function.Function; @@ -36,8 +36,8 @@ public interface PocketUpgradeSerialiser extends Upgra ResourceKey>> REGISTRY_ID = ResourceKey.createRegistryKey(new ResourceLocation(ComputerCraftAPI.MOD_ID, "pocket_upgrade_serialiser")); /** - * Create an upgrade serialiser for a simple upgrade. This is similar to a {@link SimpleRecipeSerializer}, but for - * upgrades. + * Create an upgrade serialiser for a simple upgrade. This is similar to a {@link SimpleCraftingRecipeSerializer}, + * but for upgrades. *

* If you might want to vary the item, it's suggested you use {@link #simpleWithCustomItem(BiFunction)} instead. * diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeDataProvider.java b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeDataProvider.java index 4487b6d8d..841c92a8e 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeDataProvider.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeDataProvider.java @@ -9,8 +9,9 @@ import dan200.computercraft.api.ComputerCraftTags; import dan200.computercraft.api.upgrades.UpgradeDataProvider; import dan200.computercraft.impl.PlatformHelper; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.ai.attributes.Attributes; @@ -23,16 +24,17 @@ /** * A data provider to generate turtle upgrades. *

- * This should be subclassed and registered to a {@link DataGenerator}. Override the {@link #addUpgrades(Consumer)} function, - * construct each upgrade, and pass them off to the provided consumer to generate them. + * This should be subclassed and registered to a {@link DataGenerator.PackGenerator}. Override the + * {@link #addUpgrades(Consumer)} function, construct each upgrade, and pass them off to the provided consumer to + * generate them. * * @see TurtleUpgradeSerialiser */ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider> { private static final ResourceLocation TOOL_ID = new ResourceLocation(ComputerCraftAPI.MOD_ID, "tool"); - public TurtleUpgradeDataProvider(DataGenerator generator) { - super(generator, "Turtle Upgrades", "computercraft/turtle_upgrades", TurtleUpgradeSerialiser.REGISTRY_ID); + public TurtleUpgradeDataProvider(PackOutput output) { + super(output, "Turtle Upgrades", "computercraft/turtle_upgrades", TurtleUpgradeSerialiser.REGISTRY_ID); } /** @@ -124,10 +126,10 @@ public ToolBuilder breakable(TagKey breakable) { */ public void add(Consumer>> add) { add.accept(new Upgrade<>(id, serialiser, s -> { - s.addProperty("item", PlatformHelper.get().getRegistryKey(Registry.ITEM_REGISTRY, toolItem).toString()); + s.addProperty("item", PlatformHelper.get().getRegistryKey(Registries.ITEM, toolItem).toString()); if (adjective != null) s.addProperty("adjective", adjective); if (craftingItem != null) { - s.addProperty("craftItem", PlatformHelper.get().getRegistryKey(Registry.ITEM_REGISTRY, craftingItem).toString()); + s.addProperty("craftItem", PlatformHelper.get().getRegistryKey(Registries.ITEM, craftingItem).toString()); } if (damageMultiplier != null) s.addProperty("damageMultiplier", damageMultiplier); if (breakable != null) s.addProperty("breakable", breakable.location().toString()); diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeSerialiser.java b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeSerialiser.java index a6f4a24d7..d1739c109 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeSerialiser.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeSerialiser.java @@ -15,7 +15,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import java.util.function.BiFunction; import java.util.function.Function; @@ -71,8 +71,8 @@ public interface TurtleUpgradeSerialiser extends Upgra ResourceKey>> REGISTRY_ID = ResourceKey.createRegistryKey(new ResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_upgrade_serialiser")); /** - * Create an upgrade serialiser for a simple upgrade. This is similar to a {@link SimpleRecipeSerializer}, but for - * upgrades. + * Create an upgrade serialiser for a simple upgrade. This is similar to a {@link SimpleCraftingRecipeSerializer}, + * but for upgrades. *

* If you might want to vary the item, it's suggested you use {@link #simpleWithCustomItem(BiFunction)} instead. * diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/upgrades/UpgradeDataProvider.java b/projects/common-api/src/main/java/dan200/computercraft/api/upgrades/UpgradeDataProvider.java index 703eea5c8..1e572b7db 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/upgrades/UpgradeDataProvider.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/upgrades/UpgradeDataProvider.java @@ -11,10 +11,12 @@ import dan200.computercraft.impl.PlatformHelper; import dan200.computercraft.impl.upgrades.SerialiserWithCraftingItem; import dan200.computercraft.impl.upgrades.SimpleSerialiser; +import net.minecraft.Util; import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.data.CachedOutput; -import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; @@ -22,11 +24,11 @@ import org.apache.logging.log4j.Logger; import javax.annotation.Nullable; -import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.function.Function; @@ -40,15 +42,15 @@ public abstract class UpgradeDataProvider> implements DataProvider { private static final Logger LOGGER = LogManager.getLogger(); - private final DataGenerator generator; + private final PackOutput output; private final String name; private final String folder; private final ResourceKey> registry; private @Nullable List upgrades; - protected UpgradeDataProvider(DataGenerator generator, String name, String folder, ResourceKey> registry) { - this.generator = generator; + protected UpgradeDataProvider(PackOutput output, String name, String folder, ResourceKey> registry) { + this.output = output; this.name = name; this.folder = folder; this.registry = registry; @@ -84,7 +86,7 @@ public final Upgrade simpleWithCustomItem(ResourceLocation id, R serialiser, } return new Upgrade<>(id, serialiser, s -> - s.addProperty("item", PlatformHelper.get().getRegistryKey(Registry.ITEM_REGISTRY, item).toString()) + s.addProperty("item", PlatformHelper.get().getRegistryKey(Registries.ITEM, item).toString()) ); } @@ -103,11 +105,12 @@ public final Upgrade simpleWithCustomItem(ResourceLocation id, R serialiser, protected abstract void addUpgrades(Consumer> addUpgrade); @Override - public final void run(CachedOutput cache) throws IOException { - var base = generator.getOutputFolder().resolve("data"); + public final CompletableFuture run(CachedOutput cache) { + var base = output.getOutputFolder().resolve("data"); Set seen = new HashSet<>(); List upgrades = new ArrayList<>(); + List> futures = new ArrayList<>(); addUpgrades(upgrade -> { if (!seen.add(upgrade.id())) throw new IllegalStateException("Duplicate upgrade " + upgrade.id()); @@ -115,11 +118,7 @@ public final void run(CachedOutput cache) throws IOException { json.addProperty("type", PlatformHelper.get().getRegistryKey(registry, upgrade.serialiser()).toString()); upgrade.serialise().accept(json); - try { - DataProvider.saveStable(cache, json, base.resolve(upgrade.id().getNamespace() + "/" + folder + "/" + upgrade.id().getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Failed to save {} {}", name, upgrade.id(), e); - } + futures.add(DataProvider.saveStable(cache, json, base.resolve(upgrade.id().getNamespace() + "/" + folder + "/" + upgrade.id().getPath() + ".json"))); try { var result = upgrade.serialiser().fromJson(upgrade.id(), json); @@ -130,6 +129,7 @@ public final void run(CachedOutput cache) throws IOException { }); this.upgrades = upgrades; + return Util.sequenceFailFast(futures); } @Override diff --git a/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java b/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java index 76928d6a1..e7a8830b4 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java +++ b/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java @@ -29,7 +29,7 @@ import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.ResourceProvider; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -177,7 +177,7 @@ public interface BlockEntityRenderRegistry { void register(BlockEntityType type, BlockEntityRendererProvider provider); } - public static void registerShaders(ResourceManager resources, BiConsumer> load) throws IOException { + public static void registerShaders(ResourceProvider resources, BiConsumer> load) throws IOException { RenderTypes.registerShaders(resources, load); } diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/AbstractComputerScreen.java b/projects/common/src/client/java/dan200/computercraft/client/gui/AbstractComputerScreen.java index 423f5adaa..a282683ff 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/AbstractComputerScreen.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/AbstractComputerScreen.java @@ -77,19 +77,12 @@ protected final TerminalWidget getTerminal() { @Override protected void init() { super.init(); - minecraft.keyboardHandler.setSendRepeatsToGui(true); terminal = addRenderableWidget(createTerminal()); - ComputerSidebar.addButtons(this, menu::isOn, input, this::addRenderableWidget, leftPos, topPos + sidebarYOffset); + ComputerSidebar.addButtons(menu::isOn, input, this::addRenderableWidget, leftPos, topPos + sidebarYOffset); setFocused(terminal); } - @Override - public void removed() { - super.removed(); - minecraft.keyboardHandler.setSendRepeatsToGui(false); - } - @Override public void containerTick() { super.containerTick(); diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/ComputerScreen.java b/projects/common/src/client/java/dan200/computercraft/client/gui/ComputerScreen.java index 323b3075a..c4d7c6234 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/ComputerScreen.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/ComputerScreen.java @@ -34,7 +34,7 @@ public void renderBg(PoseStack stack, float partialTicks, int mouseX, int mouseY // Draw a border around the terminal var terminal = getTerminal(); ComputerBorderRenderer.render( - stack.last().pose(), ComputerBorderRenderer.getTexture(family), terminal.x, terminal.y, getBlitOffset(), + stack.last().pose(), ComputerBorderRenderer.getTexture(family), terminal.getX(), terminal.getY(), getBlitOffset(), FULL_BRIGHT_LIGHTMAP, terminal.getWidth(), terminal.getHeight() ); ComputerSidebar.renderBackground(stack, leftPos, topPos + sidebarYOffset); diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/NoTermComputerScreen.java b/projects/common/src/client/java/dan200/computercraft/client/gui/NoTermComputerScreen.java index 473b6bea2..813b1b50d 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/NoTermComputerScreen.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/NoTermComputerScreen.java @@ -46,7 +46,6 @@ protected void init() { KeyMapping.releaseAll(); super.init(); - minecraft.keyboardHandler.setSendRepeatsToGui(true); terminal = addWidget(new TerminalWidget(terminalData, new ClientInputHandler(menu), 0, 0)); terminal.visible = false; @@ -54,12 +53,6 @@ protected void init() { setFocused(terminal); } - @Override - public final void removed() { - super.removed(); - minecraft.keyboardHandler.setSendRepeatsToGui(false); - } - @Override public final void tick() { super.tick(); diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/OptionScreen.java b/projects/common/src/client/java/dan200/computercraft/client/gui/OptionScreen.java index a2e89e3f8..145991061 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/OptionScreen.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/OptionScreen.java @@ -74,8 +74,7 @@ public void init() { var x = (width - buttonWidth) / 2; for (var button : buttons) { - button.x = x; - button.y = y + textHeight; + button.setPosition(x, y + textHeight); addRenderableWidget(button); x += BUTTON_WIDTH + PADDING; @@ -105,11 +104,7 @@ public void onClose() { } public static AbstractWidget newButton(Component component, Button.OnPress clicked) { - return new Button(0, 0, BUTTON_WIDTH, BUTTON_HEIGHT, component, clicked); - } - - public void disable() { - for (var widget : buttons) widget.active = false; + return Button.builder(component, clicked).bounds(0, 0, BUTTON_WIDTH, BUTTON_HEIGHT).build(); } public Screen getOriginalScreen() { diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/ComputerSidebar.java b/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/ComputerSidebar.java index ec80d7f35..5610369b3 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/ComputerSidebar.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/ComputerSidebar.java @@ -7,17 +7,15 @@ import com.mojang.blaze3d.vertex.PoseStack; import dan200.computercraft.api.ComputerCraftAPI; +import dan200.computercraft.client.gui.widgets.DynamicImageButton.HintedMessage; import dan200.computercraft.client.render.ComputerBorderRenderer; import dan200.computercraft.shared.computer.core.InputHandler; import dan200.computercraft.shared.computer.inventory.AbstractComputerMenu; -import net.minecraft.ChatFormatting; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import java.util.Arrays; -import java.util.Collections; import java.util.function.BooleanSupplier; import java.util.function.Consumer; @@ -44,29 +42,29 @@ public final class ComputerSidebar { private ComputerSidebar() { } - public static void addButtons(Screen screen, BooleanSupplier isOn, InputHandler input, Consumer add, int x, int y) { + public static void addButtons(BooleanSupplier isOn, InputHandler input, Consumer add, int x, int y) { x += CORNERS_BORDER + 1; y += CORNERS_BORDER + ICON_MARGIN; + var turnOn = new HintedMessage( + Component.translatable("gui.computercraft.tooltip.turn_off"), + Component.translatable("gui.computercraft.tooltip.turn_off.key") + ); + var turnOff = new HintedMessage(Component.translatable("gui.computercraft.tooltip.turn_on"), (Component) null); add.accept(new DynamicImageButton( - screen, x, y, ICON_WIDTH, ICON_HEIGHT, () -> isOn.getAsBoolean() ? 15 : 1, 1, ICON_TEX_Y_DIFF, + x, y, ICON_WIDTH, ICON_HEIGHT, () -> isOn.getAsBoolean() ? 15 : 1, 1, ICON_TEX_Y_DIFF, TEXTURE, TEX_SIZE, TEX_SIZE, b -> toggleComputer(isOn, input), - () -> isOn.getAsBoolean() ? Arrays.asList( - Component.translatable("gui.computercraft.tooltip.turn_off"), - Component.translatable("gui.computercraft.tooltip.turn_off.key").withStyle(ChatFormatting.GRAY) - ) : Collections.singletonList( - Component.translatable("gui.computercraft.tooltip.turn_on") - ) + () -> isOn.getAsBoolean() ? turnOff : turnOn )); y += ICON_HEIGHT + ICON_MARGIN * 2; add.accept(new DynamicImageButton( - screen, x, y, ICON_WIDTH, ICON_HEIGHT, 29, 1, ICON_TEX_Y_DIFF, + x, y, ICON_WIDTH, ICON_HEIGHT, 29, 1, ICON_TEX_Y_DIFF, TEXTURE, TEX_SIZE, TEX_SIZE, b -> input.queueEvent("terminate"), - Arrays.asList( + new HintedMessage( Component.translatable("gui.computercraft.tooltip.terminate"), - Component.translatable("gui.computercraft.tooltip.terminate.key").withStyle(ChatFormatting.GRAY) + Component.translatable("gui.computercraft.tooltip.terminate.key") ) )); } diff --git a/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/DynamicImageButton.java b/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/DynamicImageButton.java index 79bb2cf07..fb289d67d 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/DynamicImageButton.java +++ b/projects/common/src/client/java/dan200/computercraft/client/gui/widgets/DynamicImageButton.java @@ -7,12 +7,13 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.ChatFormatting; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.Tooltip; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import java.util.List; +import javax.annotation.Nullable; import java.util.function.IntSupplier; import java.util.function.Supplier; @@ -21,42 +22,39 @@ * dynamically. */ public class DynamicImageButton extends Button { - private final Screen screen; private final ResourceLocation texture; private final IntSupplier xTexStart; private final int yTexStart; private final int yDiffTex; private final int textureWidth; private final int textureHeight; - private final Supplier> tooltip; + private final Supplier message; public DynamicImageButton( - Screen screen, int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, + int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation texture, int textureWidth, int textureHeight, - OnPress onPress, List tooltip + OnPress onPress, HintedMessage message ) { this( - screen, x, y, width, height, () -> xTexStart, yTexStart, yDiffTex, + x, y, width, height, () -> xTexStart, yTexStart, yDiffTex, texture, textureWidth, textureHeight, - onPress, () -> tooltip + onPress, () -> message ); } - public DynamicImageButton( - Screen screen, int x, int y, int width, int height, IntSupplier xTexStart, int yTexStart, int yDiffTex, + int x, int y, int width, int height, IntSupplier xTexStart, int yTexStart, int yDiffTex, ResourceLocation texture, int textureWidth, int textureHeight, - OnPress onPress, Supplier> tooltip + OnPress onPress, Supplier message ) { - super(x, y, width, height, Component.empty(), onPress); - this.screen = screen; + super(x, y, width, height, Component.empty(), onPress, DEFAULT_NARRATION); this.textureWidth = textureWidth; this.textureHeight = textureHeight; this.xTexStart = xTexStart; this.yTexStart = yTexStart; this.yDiffTex = yDiffTex; this.texture = texture; - this.tooltip = tooltip; + this.message = message; } @Override @@ -67,23 +65,29 @@ public void renderButton(PoseStack stack, int mouseX, int mouseY, float partialT var yTex = yTexStart; if (isHoveredOrFocused()) yTex += yDiffTex; - blit(stack, x, y, xTexStart.getAsInt(), yTex, width, height, textureWidth, textureHeight); + blit(stack, getX(), getY(), xTexStart.getAsInt(), yTex, width, height, textureWidth, textureHeight); RenderSystem.enableDepthTest(); - - if (isHovered) renderToolTip(stack, mouseX, mouseY); } @Override public Component getMessage() { - var tooltip = this.tooltip.get(); - return tooltip.isEmpty() ? Component.empty() : tooltip.get(0); + return message.get().message; } @Override - public void renderToolTip(PoseStack stack, int mouseX, int mouseY) { - var tooltip = this.tooltip.get(); - if (!tooltip.isEmpty()) { - screen.renderComponentTooltip(stack, tooltip, mouseX, mouseY); + public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { + setTooltip(message.get().tooltip()); + super.render(stack, mouseX, mouseY, partialTicks); + } + + public record HintedMessage(Component message, Tooltip tooltip) { + public HintedMessage(Component message, @Nullable Component hint) { + this( + message, + hint == null + ? Tooltip.create(message) + : Tooltip.create(Component.empty().append(message).append("\n").append(hint.copy().withStyle(ChatFormatting.GRAY)), hint) + ); } } } 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 c5abcc2eb..682537ab3 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 @@ -14,6 +14,7 @@ import net.minecraft.SharedConstants; 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.renderer.MultiBufferSource; import net.minecraft.network.chat.Component; @@ -26,6 +27,8 @@ import static dan200.computercraft.client.render.text.FixedWidthFontRenderer.FONT_WIDTH; public class TerminalWidget extends AbstractWidget { + private static final Component DESCRIPTION = Component.translatable("gui.computercraft.terminal"); + private static final float TERMINATE_TIME = 0.5f; private final Terminal terminal; @@ -48,7 +51,7 @@ public class TerminalWidget extends AbstractWidget { private final BitSet keysDown = new BitSet(256); public TerminalWidget(Terminal terminal, InputHandler computer, int x, int y) { - super(x, y, terminal.getWidth() * FONT_WIDTH + MARGIN * 2, terminal.getHeight() * FONT_HEIGHT + MARGIN * 2, Component.empty()); + super(x, y, terminal.getWidth() * FONT_WIDTH + MARGIN * 2, terminal.getHeight() * FONT_HEIGHT + MARGIN * 2, DESCRIPTION); this.terminal = terminal; this.computer = computer; @@ -278,8 +281,8 @@ public void render(PoseStack transform, int mouseX, int mouseY, float partialTic } @Override - public void updateNarration(NarrationElementOutput output) { - // I'm not sure what the right option is here. + protected void updateWidgetNarration(NarrationElementOutput output) { + output.add(NarratedElementType.TITLE, getMessage()); } public static int getWidth(int termWidth) { diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/ComputerBorderRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/ComputerBorderRenderer.java index a3d543f39..7364f4655 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/ComputerBorderRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/ComputerBorderRenderer.java @@ -7,12 +7,12 @@ import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.shared.computer.core.ComputerFamily; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix4f; public class ComputerBorderRenderer { public static final ResourceLocation BACKGROUND_NORMAL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/corners_normal.png"); diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/ItemMapLikeRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/ItemMapLikeRenderer.java index 17049ed9b..c649295da 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/ItemMapLikeRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/ItemMapLikeRenderer.java @@ -6,7 +6,7 @@ package dan200.computercraft.client.render; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemInHandRenderer; import net.minecraft.client.renderer.MultiBufferSource; @@ -66,7 +66,7 @@ private void renderItemFirstPersonSide(PoseStack transform, MultiBufferSource re // If the player is not invisible then render a single arm if (!minecraft.player.isInvisible()) { transform.pushPose(); - transform.mulPose(Vector3f.ZP.rotationDegrees(offset * 10f)); + transform.mulPose(Axis.ZP.rotationDegrees(offset * 10f)); minecraft.getEntityRenderDispatcher().getItemInHandRenderer().renderPlayerArm(transform, render, combinedLight, equipProgress, swingProgress, side); transform.popPose(); } @@ -81,8 +81,8 @@ private void renderItemFirstPersonSide(PoseStack transform, MultiBufferSource re var f4 = 0.4f * Mth.sin(f1 * ((float) Math.PI * 2f)); var f5 = -0.3f * Mth.sin(swingProgress * (float) Math.PI); transform.translate(offset * f3, f4 - 0.3f * f2, f5); - transform.mulPose(Vector3f.XP.rotationDegrees(f2 * -45f)); - transform.mulPose(Vector3f.YP.rotationDegrees(offset * f2 * -30f)); + transform.mulPose(Axis.XP.rotationDegrees(f2 * -45f)); + transform.mulPose(Axis.YP.rotationDegrees(offset * f2 * -30f)); renderItem(transform, render, stack, combinedLight); @@ -114,17 +114,17 @@ private void renderItemFirstPersonCenter(PoseStack transform, MultiBufferSource var pitchAngle = renderer.calculateMapTilt(pitch); transform.translate(0, 0.04F + equipProgress * -1.2f + pitchAngle * -0.5f, -0.72f); - transform.mulPose(Vector3f.XP.rotationDegrees(pitchAngle * -85.0f)); + transform.mulPose(Axis.XP.rotationDegrees(pitchAngle * -85.0f)); if (!minecraft.player.isInvisible()) { transform.pushPose(); - transform.mulPose(Vector3f.YP.rotationDegrees(90.0F)); + transform.mulPose(Axis.YP.rotationDegrees(90.0F)); renderer.renderMapHand(transform, render, combinedLight, HumanoidArm.RIGHT); renderer.renderMapHand(transform, render, combinedLight, HumanoidArm.LEFT); transform.popPose(); } var rX = Mth.sin(swingRt * (float) Math.PI); - transform.mulPose(Vector3f.XP.rotationDegrees(rX * 20.0F)); + transform.mulPose(Axis.XP.rotationDegrees(rX * 20.0F)); transform.scale(2.0F, 2.0F, 2.0F); renderItem(transform, render, stack, combinedLight); diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/PocketItemRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/PocketItemRenderer.java index 2992cf830..9da595fbc 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/PocketItemRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/PocketItemRenderer.java @@ -6,8 +6,7 @@ package dan200.computercraft.client.render; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import dan200.computercraft.client.pocket.ClientPocketComputers; import dan200.computercraft.client.render.text.FixedWidthFontRenderer; import dan200.computercraft.core.util.Colour; @@ -15,6 +14,7 @@ import dan200.computercraft.shared.pocket.items.PocketComputerItem; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.world.item.ItemStack; +import org.joml.Matrix4f; import static dan200.computercraft.client.render.ComputerBorderRenderer.*; import static dan200.computercraft.client.render.text.FixedWidthFontRenderer.FONT_HEIGHT; @@ -43,8 +43,8 @@ protected void renderItem(PoseStack transform, MultiBufferSource bufferSource, I // Setup various transformations. Note that these are partially adapted from the corresponding method // in ItemRenderer transform.pushPose(); - transform.mulPose(Vector3f.YP.rotationDegrees(180f)); - transform.mulPose(Vector3f.ZP.rotationDegrees(180f)); + transform.mulPose(Axis.YP.rotationDegrees(180f)); + transform.mulPose(Axis.ZP.rotationDegrees(180f)); transform.scale(0.5f, 0.5f, 0.5f); var scale = 0.75f / Math.max(width + BORDER * 2, height + BORDER * 2 + LIGHT_HEIGHT); diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutItemRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutItemRenderer.java index ce5561722..d13b7c5db 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutItemRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutItemRenderer.java @@ -6,7 +6,7 @@ package dan200.computercraft.client.render; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import dan200.computercraft.shared.media.items.PrintoutItem; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.world.entity.EntityType; @@ -30,7 +30,7 @@ private PrintoutItemRenderer() { @Override protected void renderItem(PoseStack transform, MultiBufferSource render, ItemStack stack, int light) { - transform.mulPose(Vector3f.XP.rotationDegrees(180f)); + transform.mulPose(Axis.XP.rotationDegrees(180f)); transform.scale(0.42f, 0.42f, -0.42f); transform.translate(-0.5f, -0.48f, 0.0f); @@ -42,7 +42,7 @@ public static void onRenderInFrame(PoseStack transform, MultiBufferSource render // Move a little bit forward to ensure we're not clipping with the frame transform.translate(0.0f, 0.0f, -0.001f); - transform.mulPose(Vector3f.ZP.rotationDegrees(180f)); + transform.mulPose(Axis.ZP.rotationDegrees(180f)); transform.scale(0.95f, 0.95f, -0.95f); transform.translate(-0.5f, -0.5f, 0.0f); diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutRenderer.java index 7a3b65614..fc2134b27 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/PrintoutRenderer.java @@ -7,11 +7,11 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; import dan200.computercraft.client.render.text.FixedWidthFontRenderer; import dan200.computercraft.core.terminal.Palette; import dan200.computercraft.core.terminal.TextBuffer; import net.minecraft.client.renderer.MultiBufferSource; +import org.joml.Matrix4f; import static dan200.computercraft.client.render.text.FixedWidthFontRenderer.FONT_HEIGHT; import static dan200.computercraft.shared.media.items.PrintoutItem.LINES_PER_PAGE; diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/RenderTypes.java b/projects/common/src/client/java/dan200/computercraft/client/render/RenderTypes.java index e10d74575..8ea49b9ef 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/RenderTypes.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/RenderTypes.java @@ -15,7 +15,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.ShaderInstance; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.ResourceProvider; import javax.annotation.Nullable; import java.io.IOException; @@ -60,7 +60,7 @@ public static ShaderInstance getTerminalShader() { return Objects.requireNonNull(GameRenderer.getRendertypeTextShader(), "Text shader has not been registered"); } - public static void registerShaders(ResourceManager resources, BiConsumer> load) throws IOException { + public static void registerShaders(ResourceProvider resources, BiConsumer> load) throws IOException { load.accept( new MonitorTextureBufferShader( resources, diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/TurtleBlockEntityRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/TurtleBlockEntityRenderer.java index 7b53058e1..726e6737c 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/TurtleBlockEntityRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/TurtleBlockEntityRenderer.java @@ -7,8 +7,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; import com.mojang.math.Transformation; -import com.mojang.math.Vector3f; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.client.platform.ClientPlatformHelper; @@ -37,8 +37,8 @@ import java.util.List; public class TurtleBlockEntityRenderer implements BlockEntityRenderer { - private static final ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation("computercraft:turtle_normal", "inventory"); - private static final ModelResourceLocation ADVANCED_TURTLE_MODEL = new ModelResourceLocation("computercraft:turtle_advanced", "inventory"); + private static final ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_normal", "inventory"); + private static final ModelResourceLocation ADVANCED_TURTLE_MODEL = new ModelResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_advanced", "inventory"); private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour"); private static final ResourceLocation ELF_OVERLAY_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_elf_overlay"); @@ -96,7 +96,7 @@ public void render(TurtleBlockEntity turtle, float partialTicks, PoseStack trans transform.translate(offset.x, offset.y, offset.z); transform.translate(0.5f, 0.5f, 0.5f); - transform.mulPose(Vector3f.YP.rotationDegrees(180.0f - yaw)); + transform.mulPose(Axis.YP.rotationDegrees(180.0f - yaw)); if (label != null && (label.equals("Dinnerbone") || label.equals("Grumm"))) { // Flip the model transform.scale(1.0f, -1.0f, 1.0f); @@ -131,7 +131,7 @@ private void renderUpgrade(PoseStack transform, VertexConsumer renderer, int lig var toolAngle = turtle.getToolRenderAngle(side, f); transform.translate(0.0f, 0.5f, 0.5f); - transform.mulPose(Vector3f.XN.rotationDegrees(toolAngle)); + transform.mulPose(Axis.XN.rotationDegrees(toolAngle)); transform.translate(0.0f, -0.5f, -0.5f); var model = TurtleUpgradeModellers.getModel(upgrade, turtle.getAccess(), side); diff --git a/projects/common/src/client/java/dan200/computercraft/client/render/monitor/MonitorBlockEntityRenderer.java b/projects/common/src/client/java/dan200/computercraft/client/render/monitor/MonitorBlockEntityRenderer.java index 8892a20cc..260a2bf6d 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/render/monitor/MonitorBlockEntityRenderer.java +++ b/projects/common/src/client/java/dan200/computercraft/client/render/monitor/MonitorBlockEntityRenderer.java @@ -12,9 +12,7 @@ import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexBuffer; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import dan200.computercraft.client.FrameInfo; import dan200.computercraft.client.integration.ShaderMod; import dan200.computercraft.client.render.RenderTypes; @@ -28,10 +26,11 @@ import dan200.computercraft.shared.peripheral.monitor.MonitorBlockEntity; import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer; import dan200.computercraft.shared.util.DirectionUtil; -import net.minecraft.Util; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import org.joml.Matrix3f; +import org.joml.Matrix4f; import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; @@ -56,7 +55,7 @@ public class MonitorBlockEntityRenderer implements BlockEntityRenderer ci) { if (ClientHooks.onChatMessage(message)) ci.setReturnValue(true); } diff --git a/projects/common/src/client/resources/computercraft-client.mixins.json b/projects/common/src/client/resources/computercraft-client.mixins.json index 2416ec476..0f9d50ff5 100644 --- a/projects/common/src/client/resources/computercraft-client.mixins.json +++ b/projects/common/src/client/resources/computercraft-client.mixins.json @@ -7,7 +7,7 @@ "defaultRequire": 1 }, "client": [ - "LocalPlayerMixin" + "ClientPacketListenerMixin" ], "refmap": "client-computercraft.refmap.json" } diff --git a/projects/common/src/main/java/dan200/computercraft/data/DataProviders.java b/projects/common/src/main/java/dan200/computercraft/data/DataProviders.java index e461c1781..155244234 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/DataProviders.java +++ b/projects/common/src/main/java/dan200/computercraft/data/DataProviders.java @@ -5,62 +5,50 @@ */ package dan200.computercraft.data; -import com.mojang.datafixers.util.Pair; -import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.data.loot.LootTableProvider.SubProviderEntry; import net.minecraft.data.models.BlockModelGenerators; import net.minecraft.data.models.ItemModelGenerators; -import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.tags.TagsProvider; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import java.util.List; -import java.util.function.BiConsumer; import java.util.function.Consumer; -import java.util.function.Supplier; /** - * All data providers for ComputerCraft. We require a mod-loader abstraction {@link DataProviders.GeneratorFactory} to - * handle the slight differences between how Forge and Fabric expose Minecraft's data providers. + * All data providers for ComputerCraft. We require a mod-loader abstraction {@link GeneratorSink} (instead of + * {@link PackOutput})to handle the slight differences between how Forge and Fabric expose Minecraft's data providers. */ public final class DataProviders { private DataProviders() { } - public static void add(DataGenerator generator, GeneratorFactory generators, boolean includeServer, boolean includeClient) { - var turtleUpgrades = new TurtleUpgradeProvider(generator); - var pocketUpgrades = new PocketUpgradeProvider(generator); + public static void add(GeneratorSink generator) { + var turtleUpgrades = generator.add(TurtleUpgradeProvider::new); + var pocketUpgrades = generator.add(PocketUpgradeProvider::new); + generator.add(out -> new RecipeProvider(out, turtleUpgrades, pocketUpgrades)); - generator.addProvider(includeServer, turtleUpgrades); - generator.addProvider(includeServer, pocketUpgrades); - generator.addProvider(includeServer, generators.recipes(new RecipeProvider(turtleUpgrades, pocketUpgrades)::addRecipes)); + var blockTags = generator.blockTags(TagProvider::blockTags); + generator.itemTags(TagProvider::itemTags, blockTags); - var blockTags = generators.blockTags(TagProvider::blockTags); - generator.addProvider(includeServer, blockTags); - generator.addProvider(includeServer, generators.itemTags(TagProvider::itemTags, blockTags)); + generator.lootTable(LootTableProvider.getTables()); - for (var provider : generators.lootTable(LootTableProvider.getTables())) { - generator.addProvider(includeServer, provider); - } + generator.models(BlockModelProvider::addBlockModels, ItemModelProvider::addItemModels); - generator.addProvider(includeClient, generators.models(BlockModelProvider::addBlockModels, ItemModelProvider::addItemModels)); - - generator.addProvider(includeServer, new LanguageProvider(generator, turtleUpgrades, pocketUpgrades)); + generator.add(out -> new LanguageProvider(out, turtleUpgrades, pocketUpgrades)); } - interface GeneratorFactory { - DataProvider recipes(Consumer> recipes); + interface GeneratorSink { + T add(DataProvider.Factory factory); - List lootTable(List>>, LootContextParamSet>> tables); + void lootTable(List tables); TagsProvider blockTags(Consumer> tags); TagsProvider itemTags(Consumer tags, TagsProvider blocks); - DataProvider models(Consumer blocks, Consumer items); + void models(Consumer blocks, Consumer items); } } diff --git a/projects/common/src/main/java/dan200/computercraft/data/LanguageProvider.java b/projects/common/src/main/java/dan200/computercraft/data/LanguageProvider.java index 3bcc3e8bb..cad7bca90 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/LanguageProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/LanguageProvider.java @@ -18,35 +18,35 @@ import dan200.computercraft.shared.computer.metrics.basic.Aggregate; import dan200.computercraft.shared.computer.metrics.basic.AggregatedMetric; import dan200.computercraft.shared.config.ConfigSpec; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.data.CachedOutput; -import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraftforge.common.ForgeConfigSpec; -import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; public final class LanguageProvider implements DataProvider { - private final DataGenerator generator; + private final PackOutput output; private final TurtleUpgradeDataProvider turtleUpgrades; private final PocketUpgradeDataProvider pocketUpgrades; private final Map translations = new HashMap<>(); - public LanguageProvider(DataGenerator generator, TurtleUpgradeDataProvider turtleUpgrades, PocketUpgradeDataProvider pocketUpgrades) { - this.generator = generator; + public LanguageProvider(PackOutput output, TurtleUpgradeDataProvider turtleUpgrades, PocketUpgradeDataProvider pocketUpgrades) { + this.output = output; this.turtleUpgrades = turtleUpgrades; this.pocketUpgrades = pocketUpgrades; } @Override - public void run(CachedOutput cachedOutput) throws IOException { + public CompletableFuture run(CachedOutput cachedOutput) { addTranslations(); getExpectedKeys().forEach(x -> { if (!translations.containsKey(x)) throw new IllegalStateException("No translation for " + x); @@ -54,7 +54,7 @@ public void run(CachedOutput cachedOutput) throws IOException { var json = new JsonObject(); for (var pair : translations.entrySet()) json.addProperty(pair.getKey(), pair.getValue()); - DataProvider.saveStable(cachedOutput, json, generator.getOutputFolder().resolve("assets/" + ComputerCraftAPI.MOD_ID + "/lang/en_us.json")); + return DataProvider.saveStable(cachedOutput, json, output.getOutputFolder().resolve("assets/" + ComputerCraftAPI.MOD_ID + "/lang/en_us.json")); } @Override @@ -190,6 +190,7 @@ private void addTranslations() { add(AggregatedMetric.TRANSLATION_PREFIX + Aggregate.COUNT.id(), "%s (count)"); // Additional UI elements + add("gui.computercraft.terminal", "Computer terminal"); add("gui.computercraft.tooltip.copy", "Copy to clipboard"); add("gui.computercraft.tooltip.computer_id", "Computer ID: %s"); add("gui.computercraft.tooltip.disk_id", "Disk ID: %s"); @@ -266,11 +267,11 @@ private void addTranslations() { private Stream getExpectedKeys() { return Stream.of( - Registries.BLOCKS.stream() - .filter(x -> Registries.BLOCKS.getKey(x).getNamespace().equals(ComputerCraftAPI.MOD_ID)) + RegistryWrappers.BLOCKS.stream() + .filter(x -> RegistryWrappers.BLOCKS.getKey(x).getNamespace().equals(ComputerCraftAPI.MOD_ID)) .map(Block::getDescriptionId), - Registries.ITEMS.stream() - .filter(x -> Registries.ITEMS.getKey(x).getNamespace().equals(ComputerCraftAPI.MOD_ID)) + RegistryWrappers.ITEMS.stream() + .filter(x -> RegistryWrappers.ITEMS.getKey(x).getNamespace().equals(ComputerCraftAPI.MOD_ID)) .map(Item::getDescriptionId), turtleUpgrades.getGeneratedUpgrades().stream().map(UpgradeBase::getUnlocalisedAdjective), pocketUpgrades.getGeneratedUpgrades().stream().map(UpgradeBase::getUnlocalisedAdjective), diff --git a/projects/common/src/main/java/dan200/computercraft/data/LootTableProvider.java b/projects/common/src/main/java/dan200/computercraft/data/LootTableProvider.java index 455910a2f..2e78d5361 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/LootTableProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/LootTableProvider.java @@ -5,7 +5,6 @@ */ package dan200.computercraft.data; -import com.mojang.datafixers.util.Pair; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.shared.CommonHooks; import dan200.computercraft.shared.ModRegistry; @@ -15,6 +14,7 @@ import dan200.computercraft.shared.peripheral.modem.wired.CableBlock; import dan200.computercraft.shared.peripheral.modem.wired.CableModemVariant; import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.data.loot.LootTableProvider.SubProviderEntry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootPool; @@ -23,7 +23,6 @@ import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; import net.minecraft.world.level.storage.loot.functions.CopyNameFunction; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.predicates.AlternativeLootItemCondition; import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition; @@ -33,14 +32,13 @@ import java.util.List; import java.util.function.BiConsumer; -import java.util.function.Consumer; import java.util.function.Supplier; class LootTableProvider { - public static List>>, LootContextParamSet>> getTables() { + public static List getTables() { return List.of( - Pair.of(() -> LootTableProvider::registerBlocks, LootContextParamSets.BLOCK), - Pair.of(() -> LootTableProvider::registerGeneric, LootContextParamSets.ALL_PARAMS) + new SubProviderEntry(() -> LootTableProvider::registerBlocks, LootContextParamSets.BLOCK), + new SubProviderEntry(() -> LootTableProvider::registerGeneric, LootContextParamSets.ALL_PARAMS) ); } diff --git a/projects/common/src/main/java/dan200/computercraft/data/ModelProvider.java b/projects/common/src/main/java/dan200/computercraft/data/ModelProvider.java index 3c60b1601..34d74ad3a 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/ModelProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/ModelProvider.java @@ -6,10 +6,11 @@ package dan200.computercraft.data; import com.google.gson.JsonElement; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; +import net.minecraft.Util; import net.minecraft.data.CachedOutput; -import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; import net.minecraft.data.models.BlockModelGenerators; import net.minecraft.data.models.ItemModelGenerators; import net.minecraft.data.models.blockstates.BlockStateGenerator; @@ -18,14 +19,10 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.nio.file.Path; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -37,24 +34,22 @@ * Please don't sue me Mojang. Or at least make these changes to vanilla before doing so! */ public class ModelProvider implements DataProvider { - private static final Logger LOG = LoggerFactory.getLogger(ModelProvider.class); - - private final DataGenerator.PathProvider blockStatePath; - private final DataGenerator.PathProvider modelPath; + private final PackOutput.PathProvider blockStatePath; + private final PackOutput.PathProvider modelPath; private final Consumer blocks; private final Consumer items; - public ModelProvider(DataGenerator generator, Consumer blocks, Consumer items) { - blockStatePath = generator.createPathProvider(DataGenerator.Target.RESOURCE_PACK, "blockstates"); - modelPath = generator.createPathProvider(DataGenerator.Target.RESOURCE_PACK, "models"); + public ModelProvider(PackOutput output, Consumer blocks, Consumer items) { + blockStatePath = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "blockstates"); + modelPath = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "models"); this.blocks = blocks; this.items = items; } @Override - public void run(CachedOutput output) { + public CompletableFuture run(CachedOutput output) { Map blockStates = new HashMap<>(); Consumer addBlockState = generator -> { var block = generator.getBlock(); @@ -73,7 +68,7 @@ public void run(CachedOutput output) { blocks.accept(new BlockModelGenerators(addBlockState, addModel, explicitItems::add)); items.accept(new ItemModelGenerators(addModel)); - for (var block : Registries.BLOCKS) { + for (var block : RegistryWrappers.BLOCKS) { if (!blockStates.containsKey(block)) continue; var item = Item.BY_BLOCK.get(block); @@ -85,18 +80,17 @@ public void run(CachedOutput output) { } } - saveCollection(output, blockStates, x -> blockStatePath.json(Registries.BLOCKS.getKey(x))); - saveCollection(output, models, modelPath::json); + List> futures = new ArrayList<>(); + saveCollection(output, futures, blockStates, x -> blockStatePath.json(RegistryWrappers.BLOCKS.getKey(x))); + saveCollection(output, futures, models, modelPath::json); + return Util.sequenceFailFast(futures); } - private void saveCollection(CachedOutput output, Map> items, Function getLocation) { + private void saveCollection(CachedOutput output, List> futures, Map> items, Function getLocation) { for (Map.Entry> entry : items.entrySet()) { var path = getLocation.apply(entry.getKey()); - try { - DataProvider.saveStable(output, entry.getValue().get(), path); - } catch (Exception exception) { - LOG.error("Couldn't save {}", path, exception); - } + + futures.add(DataProvider.saveStable(output, entry.getValue().get(), path)); } } diff --git a/projects/common/src/main/java/dan200/computercraft/data/PocketUpgradeProvider.java b/projects/common/src/main/java/dan200/computercraft/data/PocketUpgradeProvider.java index 37a38439f..b18d41461 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/PocketUpgradeProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/PocketUpgradeProvider.java @@ -8,7 +8,7 @@ import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.pocket.PocketUpgradeDataProvider; import dan200.computercraft.api.pocket.PocketUpgradeSerialiser; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import java.util.function.Consumer; @@ -17,8 +17,8 @@ import static dan200.computercraft.shared.ModRegistry.PocketUpgradeSerialisers; class PocketUpgradeProvider extends PocketUpgradeDataProvider { - PocketUpgradeProvider(DataGenerator generator) { - super(generator); + PocketUpgradeProvider(PackOutput output) { + super(output); } @Override diff --git a/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java b/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java index 2d5fa4b28..ae6ba2d49 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java @@ -15,16 +15,14 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.platform.PlatformHelper; import dan200.computercraft.shared.platform.RecipeIngredients; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; import dan200.computercraft.shared.turtle.items.TurtleItemFactory; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.core.Registry; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.data.recipes.ShapedRecipeBuilder; -import net.minecraft.data.recipes.ShapelessRecipeBuilder; -import net.minecraft.data.recipes.SpecialRecipeBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; @@ -36,7 +34,7 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.ShapedRecipe; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Blocks; @@ -46,17 +44,19 @@ import static dan200.computercraft.api.ComputerCraftTags.Items.COMPUTER; import static dan200.computercraft.api.ComputerCraftTags.Items.WIRED_MODEM; -class RecipeProvider { +class RecipeProvider extends net.minecraft.data.recipes.RecipeProvider { private final RecipeIngredients ingredients = PlatformHelper.get().getRecipeIngredients(); private final TurtleUpgradeDataProvider turtleUpgrades; private final PocketUpgradeDataProvider pocketUpgrades; - RecipeProvider(TurtleUpgradeDataProvider turtleUpgrades, PocketUpgradeDataProvider pocketUpgrades) { + RecipeProvider(PackOutput output, TurtleUpgradeDataProvider turtleUpgrades, PocketUpgradeDataProvider pocketUpgrades) { + super(output); this.turtleUpgrades = turtleUpgrades; this.pocketUpgrades = pocketUpgrades; } - public void addRecipes(Consumer add) { + @Override + public void buildRecipes(Consumer add) { basicRecipes(add); diskColours(add); pocketUpgrades(add); @@ -77,7 +77,7 @@ public void addRecipes(Consumer add) { private void diskColours(Consumer add) { for (var colour : Colour.VALUES) { ShapelessRecipeBuilder - .shapeless(ModRegistry.Items.DISK.get()) + .shapeless(RecipeCategory.REDSTONE, ModRegistry.Items.DISK.get()) .requires(ingredients.redstone()) .requires(Items.PAPER) .requires(DyeItem.byColor(ofColour(colour))) @@ -106,7 +106,7 @@ private void turtleUpgrades(Consumer add) { for (var upgrade : turtleUpgrades.getGeneratedUpgrades()) { var result = TurtleItemFactory.create(-1, null, -1, family, null, upgrade, -1, null); ShapedRecipeBuilder - .shaped(result.getItem()) + .shaped(RecipeCategory.REDSTONE, result.getItem()) .group(String.format("%s:turtle_%s", ComputerCraftAPI.MOD_ID, nameId)) .pattern("#T") .define('T', base.getItem()) @@ -138,7 +138,7 @@ private void pocketUpgrades(Consumer add) { for (var upgrade : pocketUpgrades.getGeneratedUpgrades()) { var result = PocketComputerItemFactory.create(-1, null, -1, family, upgrade); ShapedRecipeBuilder - .shaped(result.getItem()) + .shaped(RecipeCategory.REDSTONE, result.getItem()) .group(String.format("%s:pocket_%s", ComputerCraftAPI.MOD_ID, nameId)) .pattern("#") .pattern("P") @@ -158,7 +158,7 @@ private void pocketUpgrades(Consumer add) { private void basicRecipes(Consumer add) { ShapedRecipeBuilder - .shaped(ModRegistry.Items.CABLE.get(), 6) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.CABLE.get(), 6) .pattern(" # ") .pattern("#R#") .pattern(" # ") @@ -169,7 +169,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.COMPUTER_NORMAL.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.COMPUTER_NORMAL.get()) .pattern("###") .pattern("#R#") .pattern("#G#") @@ -180,7 +180,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.COMPUTER_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.COMPUTER_ADVANCED.get()) .pattern("###") .pattern("#R#") .pattern("#G#") @@ -191,7 +191,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Items.COMPUTER_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.COMPUTER_ADVANCED.get()) .pattern("###") .pattern("#C#") .pattern("# #") @@ -204,7 +204,7 @@ private void basicRecipes(Consumer add) { ); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.COMPUTER_COMMAND.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.COMPUTER_COMMAND.get()) .pattern("###") .pattern("#R#") .pattern("#G#") @@ -215,7 +215,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.TURTLE_NORMAL.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.TURTLE_NORMAL.get()) .pattern("###") .pattern("#C#") .pattern("#I#") @@ -226,7 +226,7 @@ private void basicRecipes(Consumer add) { .save(RecipeWrapper.wrap(ModRegistry.RecipeSerializers.TURTLE.get(), add).withExtraData(family(ComputerFamily.NORMAL))); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.TURTLE_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.TURTLE_ADVANCED.get()) .pattern("###") .pattern("#C#") .pattern("#I#") @@ -237,7 +237,7 @@ private void basicRecipes(Consumer add) { .save(RecipeWrapper.wrap(ModRegistry.RecipeSerializers.TURTLE.get(), add).withExtraData(family(ComputerFamily.ADVANCED))); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.TURTLE_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.TURTLE_ADVANCED.get()) .pattern("###") .pattern("#C#") .pattern(" B ") @@ -251,7 +251,7 @@ private void basicRecipes(Consumer add) { ); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.DISK_DRIVE.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.DISK_DRIVE.get()) .pattern("###") .pattern("#R#") .pattern("#R#") @@ -261,7 +261,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.MONITOR_NORMAL.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.MONITOR_NORMAL.get()) .pattern("###") .pattern("#G#") .pattern("###") @@ -271,7 +271,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.MONITOR_ADVANCED.get(), 4) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.MONITOR_ADVANCED.get(), 4) .pattern("###") .pattern("#G#") .pattern("###") @@ -281,7 +281,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Items.POCKET_COMPUTER_NORMAL.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.POCKET_COMPUTER_NORMAL.get()) .pattern("###") .pattern("#A#") .pattern("#G#") @@ -293,7 +293,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get()) .pattern("###") .pattern("#A#") .pattern("#G#") @@ -305,7 +305,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get()) .pattern("###") .pattern("#C#") .pattern("# #") @@ -318,7 +318,7 @@ private void basicRecipes(Consumer add) { ); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.PRINTER.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.PRINTER.get()) .pattern("###") .pattern("#R#") .pattern("#D#") @@ -329,7 +329,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.SPEAKER.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.SPEAKER.get()) .pattern("###") .pattern("#N#") .pattern("#R#") @@ -340,7 +340,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Items.WIRED_MODEM.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.WIRED_MODEM.get()) .pattern("###") .pattern("#R#") .pattern("###") @@ -351,18 +351,18 @@ private void basicRecipes(Consumer add) { .save(add); ShapelessRecipeBuilder - .shapeless(ModRegistry.Blocks.WIRED_MODEM_FULL.get()) + .shapeless(RecipeCategory.REDSTONE, ModRegistry.Blocks.WIRED_MODEM_FULL.get()) .requires(ModRegistry.Items.WIRED_MODEM.get()) .unlockedBy("has_modem", inventoryChange(WIRED_MODEM)) .save(add, new ResourceLocation(ComputerCraftAPI.MOD_ID, "wired_modem_full_from")); ShapelessRecipeBuilder - .shapeless(ModRegistry.Items.WIRED_MODEM.get()) + .shapeless(RecipeCategory.REDSTONE, ModRegistry.Items.WIRED_MODEM.get()) .requires(ModRegistry.Blocks.WIRED_MODEM_FULL.get()) .unlockedBy("has_modem", inventoryChange(WIRED_MODEM)) .save(add, new ResourceLocation(ComputerCraftAPI.MOD_ID, "wired_modem_full_to")); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.WIRELESS_MODEM_NORMAL.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.WIRELESS_MODEM_NORMAL.get()) .pattern("###") .pattern("#E#") .pattern("###") @@ -372,7 +372,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapedRecipeBuilder - .shaped(ModRegistry.Blocks.WIRELESS_MODEM_ADVANCED.get()) + .shaped(RecipeCategory.REDSTONE, ModRegistry.Blocks.WIRELESS_MODEM_ADVANCED.get()) .pattern("###") .pattern("#E#") .pattern("###") @@ -383,7 +383,7 @@ private void basicRecipes(Consumer add) { .save(add); ShapelessRecipeBuilder - .shapeless(Items.PLAYER_HEAD) + .shapeless(RecipeCategory.DECORATIONS, Items.PLAYER_HEAD) .requires(ingredients.head()) .requires(ModRegistry.Items.MONITOR_NORMAL.get()) .unlockedBy("has_monitor", inventoryChange(ModRegistry.Items.MONITOR_NORMAL.get())) @@ -394,7 +394,7 @@ private void basicRecipes(Consumer add) { ); ShapelessRecipeBuilder - .shapeless(Items.PLAYER_HEAD) + .shapeless(RecipeCategory.DECORATIONS, Items.PLAYER_HEAD) .requires(ingredients.head()) .requires(ModRegistry.Items.COMPUTER_ADVANCED.get()) .unlockedBy("has_computer", inventoryChange(ModRegistry.Items.COMPUTER_ADVANCED.get())) @@ -405,14 +405,14 @@ private void basicRecipes(Consumer add) { ); ShapelessRecipeBuilder - .shapeless(ModRegistry.Items.PRINTED_PAGES.get()) + .shapeless(RecipeCategory.REDSTONE, ModRegistry.Items.PRINTED_PAGES.get()) .requires(ModRegistry.Items.PRINTED_PAGE.get(), 2) .requires(ingredients.string()) .unlockedBy("has_printer", inventoryChange(ModRegistry.Blocks.PRINTER.get())) .save(RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPELESS.get(), add)); ShapelessRecipeBuilder - .shapeless(ModRegistry.Items.PRINTED_BOOK.get()) + .shapeless(RecipeCategory.REDSTONE, ModRegistry.Items.PRINTED_BOOK.get()) .requires(ingredients.leather()) .requires(ModRegistry.Items.PRINTED_PAGE.get(), 1) .requires(ingredients.string()) @@ -451,7 +451,7 @@ private static ItemPredicate itemPredicate(Ingredient ingredient) { if (object.has("item")) { return itemPredicate(ShapedRecipe.itemFromJson(object)); } else if (object.has("tag")) { - return itemPredicate(TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(GsonHelper.getAsString(object, "tag")))); + return itemPredicate(TagKey.create(Registries.ITEM, new ResourceLocation(GsonHelper.getAsString(object, "tag")))); } else { throw new IllegalArgumentException("Unknown ingredient " + json); } @@ -471,7 +471,7 @@ private static Consumer family(ComputerFamily family) { return json -> json.addProperty("family", family.toString()); } - private static void addSpecial(Consumer add, SimpleRecipeSerializer special) { - SpecialRecipeBuilder.special(special).save(add, Registries.RECIPE_SERIALIZERS.getKey(special).toString()); + private static void addSpecial(Consumer add, SimpleCraftingRecipeSerializer special) { + SpecialRecipeBuilder.special(special).save(add, RegistryWrappers.RECIPE_SERIALIZERS.getKey(special).toString()); } } diff --git a/projects/common/src/main/java/dan200/computercraft/data/TagProvider.java b/projects/common/src/main/java/dan200/computercraft/data/TagProvider.java index 23f5094af..3a86af0af 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/TagProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/TagProvider.java @@ -7,10 +7,12 @@ import dan200.computercraft.api.ComputerCraftTags; import dan200.computercraft.shared.ModRegistry; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.TagsProvider; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagBuilder; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -91,7 +93,25 @@ public static void itemTags(ItemTagConsumer tags) { * @param The type of object we're providing tags for. */ public interface TagConsumer { - TagsProvider.TagAppender tag(TagKey tag); + TagAppender tag(TagKey tag); + } + + public record TagAppender(RegistryWrappers.RegistryWrapper registry, TagBuilder builder) { + public TagAppender add(T object) { + builder.addElement(registry.getKey(object)); + return this; + } + + @SafeVarargs + public final TagAppender add(T... objects) { + for (var object : objects) add(object); + return this; + } + + public TagAppender addTag(TagKey tag) { + builder.addTag(tag.location()); + return this; + } } /** diff --git a/projects/common/src/main/java/dan200/computercraft/data/TurtleUpgradeProvider.java b/projects/common/src/main/java/dan200/computercraft/data/TurtleUpgradeProvider.java index 89054d7b8..0425b5a0d 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/TurtleUpgradeProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/TurtleUpgradeProvider.java @@ -9,7 +9,7 @@ import dan200.computercraft.api.ComputerCraftTags.Blocks; import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider; import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import java.util.function.Consumer; @@ -18,8 +18,8 @@ import static dan200.computercraft.shared.ModRegistry.TurtleSerialisers; class TurtleUpgradeProvider extends TurtleUpgradeDataProvider { - TurtleUpgradeProvider(DataGenerator generator) { - super(generator); + TurtleUpgradeProvider(PackOutput output) { + super(output); } @Override diff --git a/projects/common/src/main/java/dan200/computercraft/mixin/CreativeModeTabAccessor.java b/projects/common/src/main/java/dan200/computercraft/mixin/CreativeModeTabAccessor.java deleted file mode 100644 index e49bb4f7b..000000000 --- a/projects/common/src/main/java/dan200/computercraft/mixin/CreativeModeTabAccessor.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ -package dan200.computercraft.mixin; - -import net.minecraft.world.item.CreativeModeTab; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(CreativeModeTab.class) -public interface CreativeModeTabAccessor { - @Accessor("langId") - String computercraft$langId(); - - @Final - @Mutable - @Accessor("TABS") - static void computercraft$setTabs(CreativeModeTab[] tabs) { - } -} diff --git a/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java b/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java index 2cdef53db..cbf0d8c28 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java @@ -12,6 +12,9 @@ import dan200.computercraft.api.media.IMedia; import dan200.computercraft.api.pocket.PocketUpgradeSerialiser; import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser; +import dan200.computercraft.core.util.Colour; +import dan200.computercraft.impl.PocketUpgrades; +import dan200.computercraft.impl.TurtleUpgrades; import dan200.computercraft.shared.command.arguments.ComputerArgumentType; import dan200.computercraft.shared.command.arguments.ComputersArgumentType; import dan200.computercraft.shared.command.arguments.RepeatArgumentType; @@ -75,16 +78,14 @@ import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.commands.synchronization.SingletonArgumentInfo; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.RecordItem; +import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -94,7 +95,6 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType; import java.util.function.BiFunction; -import java.util.function.Function; /** * Registers ComputerCraft's registry entries and additional objects, such as {@link CauldronInteraction}s and @@ -107,7 +107,7 @@ private ModRegistry() { } public static final class Blocks { - static final RegistrationHelper REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.BLOCK_REGISTRY); + static final RegistrationHelper REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.BLOCK); private static BlockBehaviour.Properties properties() { return BlockBehaviour.Properties.of(Material.STONE).strength(2); @@ -162,7 +162,7 @@ private static BlockBehaviour.Properties modemProperties() { } public static class BlockEntities { - static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.BLOCK_ENTITY_TYPE_REGISTRY); + static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.BLOCK_ENTITY_TYPE); private static RegistryEntry> ofBlock(RegistryEntry block, BiFunction factory) { return REGISTRY.register(block.id().getPath(), () -> PlatformHelper.get().createBlockEntityType(factory, block.get())); @@ -203,10 +203,10 @@ private static RegistryEntry> ofBlock } public static final class Items { - static final RegistrationHelper REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.ITEM_REGISTRY); + static final RegistrationHelper REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.ITEM); private static Item.Properties properties() { - return new Item.Properties().tab(PlatformHelper.get().getCreativeTab()); + return new Item.Properties(); } private static RegistryEntry ofBlock(RegistryEntry parent, BiFunction supplier) { @@ -279,7 +279,7 @@ public static class PocketUpgradeSerialisers { } public static class Menus { - static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.MENU_REGISTRY); + static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.MENU); public static final RegistryEntry> COMPUTER = REGISTRY.register("computer", () -> ContainerData.toType(ComputerContainerData::new, (id, inv, data) -> new ComputerMenuWithoutInventory(Menus.COMPUTER.get(), id, inv, data))); @@ -307,7 +307,7 @@ public static class Menus { } static class ArgumentTypes { - static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.COMMAND_ARGUMENT_TYPE_REGISTRY); + static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.COMMAND_ARGUMENT_TYPE); @SuppressWarnings("unchecked") private static > void registerUnsafe(String name, Class type, ArgumentTypeInfo serializer) { @@ -331,7 +331,7 @@ private static > void register(String name, Class t } public static class LootItemConditionTypes { - static final RegistrationHelper REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.LOOT_ITEM_REGISTRY); + static final RegistrationHelper REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.LOOT_CONDITION_TYPE); public static final RegistryEntry BLOCK_NAMED = REGISTRY.register("block_named", () -> ConstantLootConditionSerializer.type(BlockNamedEntityLootCondition.INSTANCE)); @@ -344,18 +344,18 @@ public static class LootItemConditionTypes { } public static class RecipeSerializers { - static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registry.RECIPE_SERIALIZER_REGISTRY); + static final RegistrationHelper> REGISTRY = PlatformHelper.get().createRegistrationHelper(Registries.RECIPE_SERIALIZER); - private static RegistryEntry> simple(String name, Function factory) { - return REGISTRY.register(name, () -> new SimpleRecipeSerializer<>(factory)); + private static RegistryEntry> simple(String name, SimpleCraftingRecipeSerializer.Factory factory) { + return REGISTRY.register(name, () -> new SimpleCraftingRecipeSerializer<>(factory)); } - public static final RegistryEntry> DYEABLE_ITEM = simple("colour", ColourableRecipe::new); + public static final RegistryEntry> DYEABLE_ITEM = simple("colour", ColourableRecipe::new); public static final RegistryEntry TURTLE = REGISTRY.register("turtle", TurtleRecipe.Serializer::new); - public static final RegistryEntry> TURTLE_UPGRADE = simple("turtle_upgrade", TurtleUpgradeRecipe::new); - public static final RegistryEntry> POCKET_COMPUTER_UPGRADE = simple("pocket_computer_upgrade", PocketComputerUpgradeRecipe::new); - public static final RegistryEntry> PRINTOUT = simple("printout", PrintoutRecipe::new); - public static final RegistryEntry> DISK = simple("disk", DiskRecipe::new); + public static final RegistryEntry> TURTLE_UPGRADE = simple("turtle_upgrade", TurtleUpgradeRecipe::new); + public static final RegistryEntry> POCKET_COMPUTER_UPGRADE = simple("pocket_computer_upgrade", PocketComputerUpgradeRecipe::new); + public static final RegistryEntry> PRINTOUT = simple("printout", PrintoutRecipe::new); + public static final RegistryEntry> DISK = simple("disk", DiskRecipe::new); public static final RegistryEntry COMPUTER_UPGRADE = REGISTRY.register("computer_upgrade", ComputerUpgradeRecipe.Serializer::new); public static final RegistryEntry IMPOSTOR_SHAPED = REGISTRY.register("impostor_shaped", ImpostorRecipe.Serializer::new); public static final RegistryEntry IMPOSTOR_SHAPELESS = REGISTRY.register("impostor_shapeless", ImpostorShapelessRecipe.Serializer::new); @@ -396,4 +396,58 @@ public static void registerMainThread() { CauldronInteraction.WATER.put(ModRegistry.Items.TURTLE_NORMAL.get(), TurtleItem.CAULDRON_INTERACTION); CauldronInteraction.WATER.put(ModRegistry.Items.TURTLE_ADVANCED.get(), TurtleItem.CAULDRON_INTERACTION); } + + /** + * Configure a {@link CreativeModeTab.Builder} to contain all of ComputerCraft's items. + * + * @param builder The builder to configure. + * @return The same building, for calling {@link CreativeModeTab.Builder#build()} on. + */ + public static CreativeModeTab.Builder registerCreativeTab(CreativeModeTab.Builder builder) { + return builder + .icon(() -> new ItemStack(Items.COMPUTER_NORMAL.get())) + .title(Component.translatable("itemGroup.computercraft")) + .displayItems((flags, out, isOp) -> { + out.accept(new ItemStack(Items.COMPUTER_NORMAL.get())); + out.accept(new ItemStack(Items.COMPUTER_ADVANCED.get())); + if (isOp) out.accept(new ItemStack(Items.COMPUTER_COMMAND.get())); + addTurtle(out, Items.TURTLE_NORMAL.get()); + addTurtle(out, Items.TURTLE_ADVANCED.get()); + addPocket(out, Items.POCKET_COMPUTER_NORMAL.get()); + addPocket(out, Items.POCKET_COMPUTER_ADVANCED.get()); + + out.accept(Items.WIRELESS_MODEM_NORMAL.get()); + out.accept(Items.WIRELESS_MODEM_ADVANCED.get()); + out.accept(Items.CABLE.get()); + out.accept(Items.WIRED_MODEM.get()); + out.accept(Items.WIRED_MODEM_FULL.get()); + + out.accept(Items.MONITOR_NORMAL.get()); + out.accept(Items.MONITOR_ADVANCED.get()); + + out.accept(Items.SPEAKER.get()); + + out.accept(Items.PRINTER.get()); + out.accept(Items.PRINTED_PAGE.get()); + out.accept(Items.PRINTED_PAGES.get()); + out.accept(Items.PRINTED_BOOK.get()); + + out.accept(Items.DISK_DRIVE.get()); + for (var colour = 0; colour < 16; colour++) { + out.accept(DiskItem.createFromIDAndColour(-1, null, Colour.VALUES[colour].getHex())); + } + }); + } + + private static void addTurtle(CreativeModeTab.Output out, TurtleItem turtle) { + out.accept(turtle.create(-1, null, -1, null, null, 0, null)); + TurtleUpgrades.getVanillaUpgrades() + .map(x -> turtle.create(-1, null, -1, null, x, 0, null)) + .forEach(out::accept); + } + + private static void addPocket(CreativeModeTab.Output out, PocketComputerItem pocket) { + out.accept(pocket.create(-1, null, -1, null)); + PocketUpgrades.getVanillaUpgrades().map(x -> pocket.create(-1, null, -1, x)).forEach(out::accept); + } } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java b/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java index f1b4e4ac6..5a53c0feb 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java @@ -9,7 +9,7 @@ import com.mojang.brigadier.Message; import com.mojang.brigadier.arguments.ArgumentType; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; @@ -25,7 +25,7 @@ public class ArgumentUtils { public static > JsonObject serializeToJson(ArgumentTypeInfo.Template template) { var object = new JsonObject(); object.addProperty("type", "argument"); - object.addProperty("parser", Registries.COMMAND_ARGUMENT_TYPES.getKey(template.type()).toString()); + object.addProperty("parser", RegistryWrappers.COMMAND_ARGUMENT_TYPES.getKey(template.type()).toString()); var properties = new JsonObject(); serializeToJson(properties, template.type(), template); @@ -45,12 +45,12 @@ public static > void serializeToNetwork(FriendlyByteBu @SuppressWarnings("unchecked") private static , T extends ArgumentTypeInfo.Template> void serializeToNetwork(FriendlyByteBuf buffer, ArgumentTypeInfo type, ArgumentTypeInfo.Template template) { - Registries.writeId(buffer, Registries.COMMAND_ARGUMENT_TYPES, type); + RegistryWrappers.writeId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES, type); type.serializeToNetwork((T) template, buffer); } public static ArgumentTypeInfo.Template deserialize(FriendlyByteBuf buffer) { - var type = Registries.readId(buffer, Registries.COMMAND_ARGUMENT_TYPES); + var type = RegistryWrappers.readId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES); Objects.requireNonNull(type, "Unknown argument type"); return type.deserializeFromNetwork(buffer); } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java index 453498752..c4a8b36d8 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java @@ -11,13 +11,14 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.Level; public final class ColourableRecipe extends CustomRecipe { - public ColourableRecipe(ResourceLocation id) { - super(id); + public ColourableRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override diff --git a/projects/common/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/projects/common/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index 7888d8d8c..180ae8dfb 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -15,7 +15,7 @@ import dan200.computercraft.shared.util.NBTUtil; import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -255,7 +255,7 @@ private Level getLevel(Optional id) throws LuaException { var dimensionId = ResourceLocation.tryParse(id.get()); if (dimensionId == null) throw new LuaException("Invalid dimension name"); - Level level = currentLevel.getServer().getLevel(ResourceKey.create(Registry.DIMENSION_REGISTRY, dimensionId)); + Level level = currentLevel.getServer().getLevel(ResourceKey.create(Registries.DIMENSION, dimensionId)); if (level == null) throw new LuaException("Unknown dimension"); return level; diff --git a/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerConvertRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerConvertRecipe.java index 1175e53c6..cc9719ffb 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerConvertRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerConvertRecipe.java @@ -10,6 +10,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.ShapedRecipe; import net.minecraft.world.level.Level; @@ -20,8 +21,8 @@ public abstract class ComputerConvertRecipe extends ShapedRecipe { private final String group; - public ComputerConvertRecipe(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result) { - super(identifier, group, width, height, ingredients, result); + public ComputerConvertRecipe(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result) { + super(identifier, group, category, width, height, ingredients, result); this.group = group; } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerFamilyRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerFamilyRecipe.java index a53724b4a..efa6d2425 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerFamilyRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerFamilyRecipe.java @@ -13,14 +13,15 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; public abstract class ComputerFamilyRecipe extends ComputerConvertRecipe { private final ComputerFamily family; - public ComputerFamilyRecipe(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { - super(identifier, group, width, height, ingredients, result); + public ComputerFamilyRecipe(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { + super(identifier, group, category, width, height, ingredients, result); this.family = family; } @@ -29,31 +30,33 @@ public ComputerFamily getFamily() { } public abstract static class Serializer implements RecipeSerializer { - protected abstract T create(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family); + protected abstract T create(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family); @Override public T fromJson(ResourceLocation identifier, JsonObject json) { var group = GsonHelper.getAsString(json, "group", ""); + var category = CraftingBookCategory.CODEC.byName(GsonHelper.getAsString(json, "category", null), CraftingBookCategory.MISC); var family = RecipeUtil.getFamily(json, "family"); var template = RecipeUtil.getTemplate(json); var result = itemStackFromJson(GsonHelper.getAsJsonObject(json, "result")); - return create(identifier, group, template.width(), template.height(), template.ingredients(), result, family); + return create(identifier, group, category, template.width(), template.height(), template.ingredients(), result, family); } @Override public T fromNetwork(ResourceLocation identifier, FriendlyByteBuf buf) { var width = buf.readVarInt(); var height = buf.readVarInt(); - var group = buf.readUtf(Short.MAX_VALUE); + var group = buf.readUtf(); + var category = buf.readEnum(CraftingBookCategory.class); var ingredients = NonNullList.withSize(width * height, Ingredient.EMPTY); for (var i = 0; i < ingredients.size(); i++) ingredients.set(i, Ingredient.fromNetwork(buf)); var result = buf.readItem(); var family = buf.readEnum(ComputerFamily.class); - return create(identifier, group, width, height, ingredients, result, family); + return create(identifier, group, category, width, height, ingredients, result, family); } @Override @@ -61,6 +64,7 @@ public void toNetwork(FriendlyByteBuf buf, T recipe) { buf.writeVarInt(recipe.getWidth()); buf.writeVarInt(recipe.getHeight()); buf.writeUtf(recipe.getGroup()); + buf.writeEnum(recipe.category()); for (var ingredient : recipe.getIngredients()) ingredient.toNetwork(buf); buf.writeItem(recipe.getResultItem()); buf.writeEnum(recipe.getFamily()); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerUpgradeRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerUpgradeRecipe.java index 02f0bfe49..ab9129898 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerUpgradeRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/computer/recipe/ComputerUpgradeRecipe.java @@ -11,12 +11,13 @@ import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; public final class ComputerUpgradeRecipe extends ComputerFamilyRecipe { - private ComputerUpgradeRecipe(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { - super(identifier, group, width, height, ingredients, result, family); + private ComputerUpgradeRecipe(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { + super(identifier, group, category, width, height, ingredients, result, family); } @Override @@ -31,8 +32,8 @@ public RecipeSerializer getSerializer() { public static class Serializer extends ComputerFamilyRecipe.Serializer { @Override - protected ComputerUpgradeRecipe create(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { - return new ComputerUpgradeRecipe(identifier, group, width, height, ingredients, result, family); + protected ComputerUpgradeRecipe create(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { + return new ComputerUpgradeRecipe(identifier, group, category, width, height, ingredients, result, family); } } } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/details/BlockDetails.java b/projects/common/src/main/java/dan200/computercraft/shared/details/BlockDetails.java index 5fba598ad..c9e240742 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/details/BlockDetails.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/details/BlockDetails.java @@ -6,7 +6,7 @@ package dan200.computercraft.shared.details; import dan200.computercraft.api.detail.BlockReference; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.world.level.block.state.properties.Property; import java.util.HashMap; @@ -16,7 +16,7 @@ public class BlockDetails { public static void fillBasic(Map data, BlockReference block) { var state = block.state(); - data.put("name", DetailHelpers.getId(Registries.BLOCKS, state.getBlock())); + data.put("name", DetailHelpers.getId(RegistryWrappers.BLOCKS, state.getBlock())); Map stateTable = new HashMap<>(); for (Map.Entry, ? extends Comparable> entry : state.getValues().entrySet()) { diff --git a/projects/common/src/main/java/dan200/computercraft/shared/details/DetailHelpers.java b/projects/common/src/main/java/dan200/computercraft/shared/details/DetailHelpers.java index 7ee1c5686..e0869dd1c 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/details/DetailHelpers.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/details/DetailHelpers.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.shared.details; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.core.Holder; import net.minecraft.tags.TagKey; @@ -25,7 +25,7 @@ public static Map getTags(Stream> tags) { return tags.collect(Collectors.toMap(x -> x.location().toString(), x -> true)); } - public static String getId(Registries.RegistryWrapper registry, T entry) { + public static String getId(RegistryWrappers.RegistryWrapper registry, T entry) { return registry.getKey(entry).toString(); } } 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 4b28f2f75..795b5d6cd 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 @@ -6,13 +6,13 @@ package dan200.computercraft.shared.details; import com.google.gson.JsonParseException; -import dan200.computercraft.mixin.CreativeModeTabAccessor; import dan200.computercraft.shared.platform.PlatformHelper; -import dan200.computercraft.shared.platform.Registries; +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.CreativeModeTabs; import net.minecraft.world.item.EnchantedBookItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -25,7 +25,7 @@ */ public class ItemDetails { public static > T fillBasicSafe(T data, ItemStack stack) { - data.put("name", DetailHelpers.getId(Registries.ITEMS, stack.getItem())); + data.put("name", DetailHelpers.getId(RegistryWrappers.ITEMS, stack.getItem())); data.put("count", stack.getCount()); return data; } @@ -98,14 +98,15 @@ private static Component parseTextComponent(Tag x) { private static List> getItemGroups(ItemStack stack) { List> groups = new ArrayList<>(1); - for (var group : PlatformHelper.get().getCreativeTabs(stack)) { - if (group == null) continue; - + CreativeModeTabs.tabs().stream().filter(x -> x.contains(stack)).forEach(group -> { Map groupData = new HashMap<>(2); - groupData.put("id", ((CreativeModeTabAccessor) group).computercraft$langId()); + + var id = PlatformHelper.get().getCreativeTabId(group); + if (id != null) groupData.put("id", id.toString()); + groupData.put("displayName", group.getDisplayName().getString()); groups.add(groupData); - } + }); return groups; } @@ -152,7 +153,7 @@ private static void addEnchantments(ListTag rawEnchants, ArrayList(3); - enchant.put("name", DetailHelpers.getId(Registries.ENCHANTMENTS, enchantment)); + enchant.put("name", DetailHelpers.getId(RegistryWrappers.ENCHANTMENTS, enchantment)); enchant.put("level", level); enchant.put("displayName", enchantment.getFullname(level).getString()); enchants.add(enchant); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/integration/UpgradeRecipeGenerator.java b/projects/common/src/main/java/dan200/computercraft/shared/integration/UpgradeRecipeGenerator.java index fa214c15a..a7e90116f 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/integration/UpgradeRecipeGenerator.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/integration/UpgradeRecipeGenerator.java @@ -20,6 +20,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.ShapedRecipe; @@ -233,11 +234,11 @@ private static ItemStack pocketWith(ItemStack stack, @Nullable IPocketUpgrade ba } private T pocket(Ingredient upgrade, Ingredient pocketComputer, ItemStack result) { - return wrap.apply(new ShapedRecipe(POCKET_UPGRADE, "", 1, 2, NonNullList.of(Ingredient.EMPTY, upgrade, pocketComputer), result)); + return wrap.apply(new ShapedRecipe(POCKET_UPGRADE, "", CraftingBookCategory.MISC, 1, 2, NonNullList.of(Ingredient.EMPTY, upgrade, pocketComputer), result)); } private T turtle(Ingredient left, Ingredient right, ItemStack result) { - return wrap.apply(new ShapedRecipe(TURTLE_UPGRADE, "", 2, 1, NonNullList.of(Ingredient.EMPTY, left, right), result)); + return wrap.apply(new ShapedRecipe(TURTLE_UPGRADE, "", CraftingBookCategory.MISC, 2, 1, NonNullList.of(Ingredient.EMPTY, left, right), result)); } private class UpgradeInfo { diff --git a/projects/common/src/main/java/dan200/computercraft/shared/media/items/DiskItem.java b/projects/common/src/main/java/dan200/computercraft/shared/media/items/DiskItem.java index 916bc1ad4..a259f2e17 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/media/items/DiskItem.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/media/items/DiskItem.java @@ -15,11 +15,9 @@ import dan200.computercraft.shared.config.Config; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -44,14 +42,6 @@ public static ItemStack createFromIDAndColour(int id, @Nullable String label, in return stack; } - @Override - public void fillItemCategory(CreativeModeTab tabs, NonNullList list) { - if (!allowedIn(tabs)) return; - for (var colour = 0; colour < 16; colour++) { - list.add(createFromIDAndColour(-1, null, Colour.VALUES[colour].getHex())); - } - } - @Override public void appendHoverText(ItemStack stack, @Nullable Level world, List list, TooltipFlag options) { if (options.isAdvanced()) { diff --git a/projects/common/src/main/java/dan200/computercraft/shared/media/items/TreasureDiskItem.java b/projects/common/src/main/java/dan200/computercraft/shared/media/items/TreasureDiskItem.java index d47bb8df7..60486a303 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/media/items/TreasureDiskItem.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/media/items/TreasureDiskItem.java @@ -13,11 +13,9 @@ import dan200.computercraft.core.util.Colour; import dan200.computercraft.shared.ModRegistry; import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -37,10 +35,6 @@ public TreasureDiskItem(Properties settings) { super(settings); } - @Override - public void fillItemCategory(CreativeModeTab group, NonNullList stacks) { - } - @Override public void appendHoverText(ItemStack stack, @Nullable Level world, List list, TooltipFlag tooltipOptions) { var label = getTitle(stack); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java index a829a605f..d1898c7d3 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java @@ -15,6 +15,7 @@ import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; @@ -23,8 +24,8 @@ public class DiskRecipe extends CustomRecipe { private final Ingredient redstone; - public DiskRecipe(ResourceLocation id) { - super(id); + public DiskRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); redstone = PlatformHelper.get().getRecipeIngredients().redstone(); } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java index 37512a7ee..5b9c63751 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java @@ -12,6 +12,7 @@ import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; @@ -21,8 +22,8 @@ public final class PrintoutRecipe extends CustomRecipe { private final Ingredient leather; private final Ingredient string; - public PrintoutRecipe(ResourceLocation id) { - super(id); + public PrintoutRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); var ingredients = PlatformHelper.get().getRecipeIngredients(); leather = ingredients.leather(); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/network/client/PlayRecordClientMessage.java b/projects/common/src/main/java/dan200/computercraft/shared/network/client/PlayRecordClientMessage.java index 1e96d643c..516aa08ba 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/network/client/PlayRecordClientMessage.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/network/client/PlayRecordClientMessage.java @@ -7,7 +7,7 @@ import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.peripheral.diskdrive.DiskDriveBlockEntity; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.sounds.SoundEvent; @@ -41,14 +41,14 @@ public PlayRecordClientMessage(BlockPos pos) { public PlayRecordClientMessage(FriendlyByteBuf buf) { pos = buf.readBlockPos(); - soundEvent = buf.readBoolean() ? Registries.readKey(buf, Registries.SOUND_EVENTS) : null; + soundEvent = buf.readBoolean() ? RegistryWrappers.readKey(buf, RegistryWrappers.SOUND_EVENTS) : null; name = buf.readBoolean() ? buf.readUtf(Short.MAX_VALUE) : null; } @Override public void toBytes(FriendlyByteBuf buf) { buf.writeBlockPos(pos); - writeOptional(buf, soundEvent, (b, e) -> Registries.writeKey(b, Registries.SOUND_EVENTS, e)); + writeOptional(buf, soundEvent, (b, e) -> RegistryWrappers.writeKey(b, RegistryWrappers.SOUND_EVENTS, e)); writeOptional(buf, name, FriendlyByteBuf::writeUtf); } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerPlayClientMessage.java b/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerPlayClientMessage.java index 3c3047bdc..97c3f48a9 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerPlayClientMessage.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerPlayClientMessage.java @@ -27,10 +27,10 @@ public class SpeakerPlayClientMessage implements NetworkMessage methods; GenericPeripheral(BlockEntity tile, @Nullable String name, Set additionalTypes, List methods) { - var type = Registries.BLOCK_ENTITY_TYPES.getKey(tile.getType()); + var type = RegistryWrappers.BLOCK_ENTITY_TYPES.getKey(tile.getType()); this.tile = tile; this.type = name != null ? name : type.toString(); this.additionalTypes = additionalTypes; diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/CableBlockItem.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/CableBlockItem.java index f8b8e351e..271944b4f 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/CableBlockItem.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/CableBlockItem.java @@ -6,15 +6,12 @@ package dan200.computercraft.shared.peripheral.modem.wired; import dan200.computercraft.shared.ModRegistry; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.Util; import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; @@ -51,15 +48,10 @@ boolean placeAtCorrected(Level world, BlockPos pos, BlockState state) { return placeAt(world, pos, correctConnections(world, pos, state)); } - @Override - public void fillItemCategory(CreativeModeTab group, NonNullList list) { - if (allowedIn(group)) list.add(new ItemStack(this)); - } - @Override public String getDescriptionId() { if (translationKey == null) { - translationKey = Util.makeDescriptionId("block", Registries.ITEMS.getKey(this)); + translationKey = Util.makeDescriptionId("block", RegistryWrappers.ITEMS.getKey(this)); } return translationKey; } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 6dcfb6998..145e4126a 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -18,13 +18,14 @@ import dan200.computercraft.shared.network.client.SpeakerPlayClientMessage; import dan200.computercraft.shared.network.client.SpeakerStopClientMessage; import dan200.computercraft.shared.platform.PlatformHelper; -import dan200.computercraft.shared.platform.Registries; import dan200.computercraft.shared.util.PauseAwareTimer; import net.minecraft.ResourceLocationException; import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundCustomSoundPacket; +import net.minecraft.core.Holder; +import net.minecraft.network.protocol.game.ClientboundSoundPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; @@ -64,11 +65,11 @@ public abstract class SpeakerPeripheral implements IPeripheral { private long lastPlayTime; - private final List pendingNotes = new ArrayList<>(); + private final List>> pendingNotes = new ArrayList<>(); private final Object lock = new Object(); private boolean shouldStop; - private @Nullable PendingSound pendingSound = null; + private @Nullable PendingSound pendingSound = null; private @Nullable DfpwmState dfpwmState; public void update() { @@ -85,7 +86,7 @@ public void update() { lastPlayTime = clock; server.getPlayerList().broadcast( null, pos.x, pos.y, pos.z, sound.volume * 16, level.dimension(), - new ClientboundCustomSoundPacket(sound.location, SoundSource.RECORDS, pos, sound.volume, sound.pitch, level.getRandom().nextLong()) + new ClientboundSoundPacket(sound.sound, SoundSource.RECORDS, pos.x, pos.y, pos.z, sound.volume, sound.pitch, level.getRandom().nextLong()) ); } pendingNotes.clear(); @@ -96,7 +97,7 @@ public void update() { // dfpwmState will only ever transition from having a buffer to not having a buffer on the main thread (so this // method), so we don't need to bother locking that. boolean shouldStop; - PendingSound sound; + PendingSound sound; DfpwmState dfpwmState; synchronized (lock) { sound = pendingSound; @@ -122,7 +123,7 @@ public void update() { if (sound != null) { lastPlayTime = clock; PlatformHelper.get().sendToAllAround( - new SpeakerPlayClientMessage(getSource(), position, sound.location, sound.volume, sound.pitch), + new SpeakerPlayClientMessage(getSource(), position, sound.sound, sound.volume, sound.pitch), (ServerLevel) level, pos, sound.volume * 16 ); syncedPosition(position); @@ -218,7 +219,7 @@ public final boolean playNote(ILuaContext context, String instrumentA, Optional< synchronized (pendingNotes) { if (pendingNotes.size() >= Config.maxNotesPerTick) return false; - pendingNotes.add(new PendingSound(Registries.SOUND_EVENTS.getKey(instrument.getSoundEvent()), volume, (float) Math.pow(2.0, (pitch - 12.0) / 12.0))); + pendingNotes.add(new PendingSound<>(instrument.getSoundEvent(), volume, (float) Math.pow(2.0, (pitch - 12.0) / 12.0))); } return true; } @@ -260,7 +261,7 @@ public final boolean playSound(ILuaContext context, String name, Optional(identifier, volume, pitch); return true; } } @@ -360,6 +361,6 @@ public void detach(IComputerAccess computer) { } } - private record PendingSound(ResourceLocation location, float volume, float pitch) { + private record PendingSound(T sound, float volume, float pitch) { } } 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 8793f9010..f70ae4532 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 @@ -67,13 +67,6 @@ static PlatformHelper get() { return (PlatformHelper) dan200.computercraft.impl.PlatformHelper.get(); } - /** - * Get ComputerCraft's creative tab all its items should appear under. - * - * @return The creative tab. - */ - CreativeModeTab getCreativeTab(); - /** * Wrap a Minecraft registry in our own abstraction layer. * @@ -81,7 +74,7 @@ static PlatformHelper get() { * @param The type of object stored in this registry. * @return The wrapped registry. */ - Registries.RegistryWrapper wrap(ResourceKey> registry); + RegistryWrappers.RegistryWrapper wrap(ResourceKey> registry); /** * Create a registration helper for a specific registry. @@ -262,12 +255,13 @@ static PlatformHelper get() { int getBurnTime(ItemStack stack); /** - * Get the creative tabs this stack belongs to. + * Get a unique identifier for this creative tab. * - * @param stack The current item. - * @return The creative tabs the item belongs to. + * @param tab The tab to get + * @return The unique identifier, or {@code null} if not available. */ - Collection getCreativeTabs(ItemStack stack); + @Nullable + ResourceLocation getCreativeTabId(CreativeModeTab tab); /** * Get the "container" item to be returned after crafting. For instance, crafting with a lava bucket should return diff --git a/projects/common/src/main/java/dan200/computercraft/shared/platform/Registries.java b/projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java similarity index 81% rename from projects/common/src/main/java/dan200/computercraft/shared/platform/Registries.java rename to projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java index def7fc87a..25bff8880 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/platform/Registries.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java @@ -7,6 +7,7 @@ import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; @@ -25,16 +26,16 @@ /** * Mimics {@link Registry} but using {@link PlatformHelper}'s recipe abstractions. */ -public final class Registries { - public static final RegistryWrapper ITEMS = PlatformHelper.get().wrap(Registry.ITEM_REGISTRY); - public static final RegistryWrapper BLOCKS = PlatformHelper.get().wrap(Registry.BLOCK_REGISTRY); - public static final RegistryWrapper> BLOCK_ENTITY_TYPES = PlatformHelper.get().wrap(Registry.BLOCK_ENTITY_TYPE_REGISTRY); - public static final RegistryWrapper FLUIDS = PlatformHelper.get().wrap(Registry.FLUID_REGISTRY); - public static final RegistryWrapper ENCHANTMENTS = PlatformHelper.get().wrap(Registry.ENCHANTMENT_REGISTRY); - public static final RegistryWrapper> COMMAND_ARGUMENT_TYPES = PlatformHelper.get().wrap(Registry.COMMAND_ARGUMENT_TYPE_REGISTRY); - public static final RegistryWrapper SOUND_EVENTS = PlatformHelper.get().wrap(Registry.SOUND_EVENT_REGISTRY); - public static final RegistryWrapper> RECIPE_SERIALIZERS = PlatformHelper.get().wrap(Registry.RECIPE_SERIALIZER_REGISTRY); - public static final RegistryWrapper> MENU = PlatformHelper.get().wrap(Registry.MENU_REGISTRY); +public final class RegistryWrappers { + public static final RegistryWrapper ITEMS = PlatformHelper.get().wrap(Registries.ITEM); + public static final RegistryWrapper BLOCKS = PlatformHelper.get().wrap(Registries.BLOCK); + public static final RegistryWrapper> BLOCK_ENTITY_TYPES = PlatformHelper.get().wrap(Registries.BLOCK_ENTITY_TYPE); + public static final RegistryWrapper FLUIDS = PlatformHelper.get().wrap(Registries.FLUID); + public static final RegistryWrapper ENCHANTMENTS = PlatformHelper.get().wrap(Registries.ENCHANTMENT); + public static final RegistryWrapper> COMMAND_ARGUMENT_TYPES = PlatformHelper.get().wrap(Registries.COMMAND_ARGUMENT_TYPE); + public static final RegistryWrapper SOUND_EVENTS = PlatformHelper.get().wrap(Registries.SOUND_EVENT); + public static final RegistryWrapper> RECIPE_SERIALIZERS = PlatformHelper.get().wrap(Registries.RECIPE_SERIALIZER); + public static final RegistryWrapper> MENU = PlatformHelper.get().wrap(Registries.MENU); public interface RegistryWrapper extends Iterable { int getId(T object); @@ -53,7 +54,7 @@ default Stream stream() { } } - private Registries() { + private RegistryWrappers() { } public static void writeId(FriendlyByteBuf buf, RegistryWrapper registry, K object) { diff --git a/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java b/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java index 89192c2c6..7aeeb3914 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java @@ -24,7 +24,6 @@ import dan200.computercraft.shared.pocket.inventory.PocketComputerMenuProvider; import dan200.computercraft.shared.util.IDAssigner; import net.minecraft.ChatFormatting; -import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; @@ -36,7 +35,6 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -70,13 +68,6 @@ public ItemStack create(int id, @Nullable String label, int colour, @Nullable IP return result; } - @Override - public void fillItemCategory(CreativeModeTab group, NonNullList stacks) { - if (!allowedIn(group)) return; - stacks.add(create(-1, null, -1, null)); - PocketUpgrades.getVanillaUpgrades().map(x -> create(-1, null, -1, x)).forEach(stacks::add); - } - private boolean tick(ItemStack stack, Level world, Entity entity, PocketServerComputer computer) { var upgrade = getUpgrade(stack); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java index a1419cd57..bba657be1 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java @@ -14,13 +14,14 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.Level; public final class PocketComputerUpgradeRecipe extends CustomRecipe { - public PocketComputerUpgradeRecipe(ResourceLocation identifier) { - super(identifier); + public PocketComputerUpgradeRecipe(ResourceLocation identifier, CraftingBookCategory category) { + super(identifier, category); } @Override diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItem.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItem.java index 6dbc02b0d..23e96082b 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItem.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItem.java @@ -14,12 +14,10 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.AbstractComputerItem; import dan200.computercraft.shared.turtle.blocks.TurtleBlock; -import net.minecraft.core.NonNullList; import net.minecraft.core.cauldron.CauldronInteraction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.LayeredCauldronBlock; @@ -56,16 +54,6 @@ public ItemStack create( return stack; } - @Override - public void fillItemCategory(CreativeModeTab group, NonNullList list) { - if (!allowedIn(group)) return; - - list.add(create(-1, null, -1, null, null, 0, null)); - TurtleUpgrades.getVanillaUpgrades() - .map(x -> create(-1, null, -1, null, x, 0, null)) - .forEach(list::add); - } - @Override public Component getName(ItemStack stack) { var baseString = getDescriptionId(stack); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java index 61dd40dc6..4146e519a 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java @@ -13,12 +13,13 @@ import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; public final class TurtleRecipe extends ComputerFamilyRecipe { - public TurtleRecipe(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { - super(identifier, group, width, height, ingredients, result, family); + public TurtleRecipe(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { + super(identifier, group, category, width, height, ingredients, result, family); } @Override @@ -36,8 +37,8 @@ protected ItemStack convert(IComputerItem item, ItemStack stack) { public static class Serializer extends ComputerFamilyRecipe.Serializer { @Override - protected TurtleRecipe create(ResourceLocation identifier, String group, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { - return new TurtleRecipe(identifier, group, width, height, ingredients, result, family); + protected TurtleRecipe create(ResourceLocation identifier, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result, ComputerFamily family) { + return new TurtleRecipe(identifier, group, category, width, height, ingredients, result, family); } } } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java index 1f9ecc756..68548d745 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java @@ -15,13 +15,14 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.Level; public final class TurtleUpgradeRecipe extends CustomRecipe { - public TurtleUpgradeRecipe(ResourceLocation id) { - super(id); + public TurtleUpgradeRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java index e9eed2af9..49d2c45f7 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java @@ -8,8 +8,8 @@ import com.google.gson.JsonObject; import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser; import dan200.computercraft.api.upgrades.UpgradeBase; -import dan200.computercraft.shared.platform.Registries; -import net.minecraft.core.Registry; +import dan200.computercraft.shared.platform.RegistryWrappers; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; @@ -33,7 +33,7 @@ public TurtleTool fromJson(ResourceLocation id, JsonObject object) { TagKey breakable = null; if (object.has("breakable")) { var tag = new ResourceLocation(GsonHelper.getAsString(object, "breakable")); - breakable = TagKey.create(Registry.BLOCK_REGISTRY, tag); + breakable = TagKey.create(Registries.BLOCK, tag); } return new TurtleTool(id, adjective, craftingItem, new ItemStack(toolItem), damageMultiplier, breakable); @@ -42,20 +42,20 @@ public TurtleTool fromJson(ResourceLocation id, JsonObject object) { @Override public TurtleTool fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { var adjective = buffer.readUtf(); - var craftingItem = Registries.readId(buffer, Registries.ITEMS); + var craftingItem = RegistryWrappers.readId(buffer, RegistryWrappers.ITEMS); var toolItem = buffer.readItem(); // damageMultiplier and breakable aren't used by the client, but we need to construct the upgrade exactly // as otherwise syncing on an SP world will overwrite the (shared) upgrade registry with an invalid upgrade! var damageMultiplier = buffer.readFloat(); - var breakable = buffer.readBoolean() ? TagKey.create(Registry.BLOCK_REGISTRY, buffer.readResourceLocation()) : null; + var breakable = buffer.readBoolean() ? TagKey.create(Registries.BLOCK, buffer.readResourceLocation()) : null; return new TurtleTool(id, adjective, craftingItem, toolItem, damageMultiplier, breakable); } @Override public void toNetwork(FriendlyByteBuf buffer, TurtleTool upgrade) { buffer.writeUtf(upgrade.getUnlocalisedAdjective()); - Registries.writeId(buffer, Registries.ITEMS, upgrade.getCraftingItem().getItem()); + RegistryWrappers.writeId(buffer, RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem()); buffer.writeItem(upgrade.item); buffer.writeFloat(upgrade.damageMulitiplier); buffer.writeBoolean(upgrade.breakable != null); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/util/ArgumentHelpers.java b/projects/common/src/main/java/dan200/computercraft/shared/util/ArgumentHelpers.java index 0c7b645ec..3fbc9d859 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/util/ArgumentHelpers.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/util/ArgumentHelpers.java @@ -6,7 +6,7 @@ package dan200.computercraft.shared.util; import dan200.computercraft.api.lua.LuaException; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.ResourceLocationException; import net.minecraft.resources.ResourceLocation; @@ -32,7 +32,7 @@ public static void assertBetween(int value, int min, int max, String message) th } } - public static T getRegistryEntry(String name, String typeName, Registries.RegistryWrapper registry) throws LuaException { + public static T getRegistryEntry(String name, String typeName, RegistryWrappers.RegistryWrapper registry) throws LuaException { ResourceLocation id; try { id = new ResourceLocation(name); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java index b65a6a51d..ce08fd65e 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java @@ -13,6 +13,7 @@ import net.minecraft.util.GsonHelper; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.ShapedRecipe; @@ -21,8 +22,8 @@ public final class ImpostorRecipe extends ShapedRecipe { private final String group; - private ImpostorRecipe(ResourceLocation id, String group, int width, int height, NonNullList ingredients, ItemStack result) { - super(id, group, width, height, ingredients, result); + private ImpostorRecipe(ResourceLocation id, String group, CraftingBookCategory category, int width, int height, NonNullList ingredients, ItemStack result) { + super(id, group, category, width, height, ingredients, result); this.group = group; } @@ -50,9 +51,10 @@ public static class Serializer implements RecipeSerializer { @Override public ImpostorRecipe fromJson(ResourceLocation identifier, JsonObject json) { var group = GsonHelper.getAsString(json, "group", ""); + var category = CraftingBookCategory.CODEC.byName(GsonHelper.getAsString(json, "category", null), CraftingBookCategory.MISC); var recipe = RecipeSerializer.SHAPED_RECIPE.fromJson(identifier, json); var result = ShapedRecipe.itemStackFromJson(GsonHelper.getAsJsonObject(json, "result")); - return new ImpostorRecipe(identifier, group, recipe.getWidth(), recipe.getHeight(), recipe.getIngredients(), result); + return new ImpostorRecipe(identifier, group, category, recipe.getWidth(), recipe.getHeight(), recipe.getIngredients(), result); } @Override @@ -60,10 +62,11 @@ public ImpostorRecipe fromNetwork(ResourceLocation identifier, FriendlyByteBuf b var width = buf.readVarInt(); var height = buf.readVarInt(); var group = buf.readUtf(Short.MAX_VALUE); + var category = buf.readEnum(CraftingBookCategory.class); var items = NonNullList.withSize(width * height, Ingredient.EMPTY); for (var k = 0; k < items.size(); k++) items.set(k, Ingredient.fromNetwork(buf)); var result = buf.readItem(); - return new ImpostorRecipe(identifier, group, width, height, items, result); + return new ImpostorRecipe(identifier, group, category, width, height, items, result); } @Override @@ -71,6 +74,7 @@ public void toNetwork(FriendlyByteBuf buf, ImpostorRecipe recipe) { buf.writeVarInt(recipe.getWidth()); buf.writeVarInt(recipe.getHeight()); buf.writeUtf(recipe.getGroup()); + buf.writeEnum(recipe.category()); for (var ingredient : recipe.getIngredients()) ingredient.toNetwork(buf); buf.writeItem(recipe.getResultItem()); } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java index 7a99fdd52..393ebdec8 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java @@ -15,17 +15,14 @@ import net.minecraft.util.GsonHelper; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.ShapedRecipe; -import net.minecraft.world.item.crafting.ShapelessRecipe; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.Level; public final class ImpostorShapelessRecipe extends ShapelessRecipe { private final String group; - private ImpostorShapelessRecipe(ResourceLocation id, String group, ItemStack result, NonNullList ingredients) { - super(id, group, result, ingredients); + private ImpostorShapelessRecipe(ResourceLocation id, String group, CraftingBookCategory category, ItemStack result, NonNullList ingredients) { + super(id, group, category, result, ingredients); this.group = group; } @@ -52,7 +49,8 @@ public RecipeSerializer getSerializer() { public static final class Serializer implements RecipeSerializer { @Override public ImpostorShapelessRecipe fromJson(ResourceLocation id, JsonObject json) { - var s = GsonHelper.getAsString(json, "group", ""); + var group = GsonHelper.getAsString(json, "group", ""); + var category = CraftingBookCategory.CODEC.byName(GsonHelper.getAsString(json, "category", null), CraftingBookCategory.MISC); var ingredients = readIngredients(GsonHelper.getAsJsonArray(json, "ingredients")); if (ingredients.isEmpty()) throw new JsonParseException("No ingredients for shapeless recipe"); @@ -61,7 +59,7 @@ public ImpostorShapelessRecipe fromJson(ResourceLocation id, JsonObject json) { } var result = ShapedRecipe.itemStackFromJson(GsonHelper.getAsJsonObject(json, "result")); - return new ImpostorShapelessRecipe(id, s, result, ingredients); + return new ImpostorShapelessRecipe(id, group, category, result, ingredients); } private NonNullList readIngredients(JsonArray arrays) { @@ -76,19 +74,21 @@ private NonNullList readIngredients(JsonArray arrays) { @Override public ImpostorShapelessRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { - var s = buffer.readUtf(32767); - var i = buffer.readVarInt(); - var items = NonNullList.withSize(i, Ingredient.EMPTY); + var group = buffer.readUtf(); + var category = buffer.readEnum(CraftingBookCategory.class); + var count = buffer.readVarInt(); + var items = NonNullList.withSize(count, Ingredient.EMPTY); for (var j = 0; j < items.size(); j++) items.set(j, Ingredient.fromNetwork(buffer)); var result = buffer.readItem(); - return new ImpostorShapelessRecipe(id, s, result, items); + return new ImpostorShapelessRecipe(id, group, category, result, items); } @Override public void toNetwork(FriendlyByteBuf buffer, ImpostorShapelessRecipe recipe) { buffer.writeUtf(recipe.getGroup()); + buffer.writeEnum(recipe.category()); buffer.writeVarInt(recipe.getIngredients().size()); for (var ingredient : recipe.getIngredients()) ingredient.toNetwork(buffer); diff --git a/projects/common/src/main/resources/computercraft-common.accesswidener b/projects/common/src/main/resources/computercraft-common.accesswidener index d2f7451f2..c99cc480d 100644 --- a/projects/common/src/main/resources/computercraft-common.accesswidener +++ b/projects/common/src/main/resources/computercraft-common.accesswidener @@ -4,6 +4,7 @@ accessWidener v1 named # that we actually use accessible method net/minecraft/client/renderer/item/ItemProperties register (Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/client/renderer/item/ClampedItemPropertyFunction;)V +accessible class net/minecraft/world/item/CreativeModeTab$Output # Containers accessible class net/minecraft/world/inventory/MenuType$MenuSupplier @@ -12,6 +13,7 @@ accessible class net/minecraft/client/gui/screens/MenuScreens$ScreenConstructor accessible method net/minecraft/client/gui/screens/MenuScreens register (Lnet/minecraft/world/inventory/MenuType;Lnet/minecraft/client/gui/screens/MenuScreens$ScreenConstructor;)V # Data generators +accessible class net/minecraft/data/loot/LootTableProvider$SubProviderEntry accessible class net/minecraft/data/tags/TagsProvider$TagAppender accessible field net/minecraft/data/models/BlockModelGenerators blockStateOutput Ljava/util/function/Consumer; accessible field net/minecraft/data/models/BlockModelGenerators modelOutput Ljava/util/function/BiConsumer; diff --git a/projects/common/src/main/resources/computercraft.mixins.json b/projects/common/src/main/resources/computercraft.mixins.json index 444d0fda8..04205823f 100644 --- a/projects/common/src/main/resources/computercraft.mixins.json +++ b/projects/common/src/main/resources/computercraft.mixins.json @@ -8,7 +8,6 @@ }, "mixins": [ "CacheUpdaterMixin", - "CreativeModeTabAccessor", "ExplosionAccessor" ], "refmap": "computercraft.refmap.json" diff --git a/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java b/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java index a9ed46e33..9c12600f3 100644 --- a/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java +++ b/projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java @@ -59,7 +59,7 @@ @AutoService({ PlatformHelper.class, dan200.computercraft.impl.PlatformHelper.class, ComputerCraftAPIService.class }) public class TestPlatformHelper extends AbstractComputerCraftAPI implements PlatformHelper { @Override - public Registries.RegistryWrapper wrap(ResourceKey> registry) { + public RegistryWrappers.RegistryWrapper wrap(ResourceKey> registry) { throw new UnsupportedOperationException("Cannot query registry inside tests"); } @@ -113,11 +113,6 @@ public void sendToAllTracking(NetworkMessage message, Leve throw new UnsupportedOperationException("Cannot send NetworkMessages inside tests"); } - @Override - public CreativeModeTab getCreativeTab() { - throw new UnsupportedOperationException("Cannot get creative tab inside tests"); - } - @Override public List> getDyeTags() { throw new UnsupportedOperationException("Cannot query tags inside tests"); @@ -153,9 +148,11 @@ public boolean onNotifyNeighbour(Level level, BlockPos pos, BlockState block, Di throw new UnsupportedOperationException("Cannot interact with the world inside tests"); } + + @Nullable @Override - public Collection getCreativeTabs(ItemStack stack) { - throw new UnsupportedOperationException("Cannot get creative tabs inside tests"); + public ResourceLocation getCreativeTabId(CreativeModeTab tab) { + return null; } @Override diff --git a/projects/common/src/test/java/dan200/computercraft/shared/computer/core/ResourceMountTest.java b/projects/common/src/test/java/dan200/computercraft/shared/computer/core/ResourceMountTest.java index 32f7ff5fa..c060c9a85 100644 --- a/projects/common/src/test/java/dan200/computercraft/shared/computer/core/ResourceMountTest.java +++ b/projects/common/src/test/java/dan200/computercraft/shared/computer/core/ResourceMountTest.java @@ -7,15 +7,15 @@ import dan200.computercraft.api.filesystem.Mount; import net.minecraft.Util; -import net.minecraft.server.packs.FolderPackResources; import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.PathPackResources; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.Unit; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -32,7 +32,7 @@ public void before() { var manager = new ReloadableResourceManager(PackType.SERVER_DATA); var done = new CompletableFuture(); manager.createReload(Util.backgroundExecutor(), Util.backgroundExecutor(), done, List.of( - new FolderPackResources(new File("../core/src/main/resources")) + new PathPackResources("resources", Path.of("../core/src/main/resources"), false) )); mount = ResourceMount.get("computercraft", "lua/rom", manager); diff --git a/projects/common/src/testMod/java/dan200/computercraft/export/Exporter.java b/projects/common/src/testMod/java/dan200/computercraft/export/Exporter.java index d5372c16d..90d31ecca 100644 --- a/projects/common/src/testMod/java/dan200/computercraft/export/Exporter.java +++ b/projects/common/src/testMod/java/dan200/computercraft/export/Exporter.java @@ -17,7 +17,7 @@ import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.data.PrettyJsonWriter; import dan200.computercraft.gametest.core.TestHooks; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; @@ -74,14 +74,14 @@ private static void export(Path root, ImageRenderer renderer) throws IOException Set items = new HashSet<>(); // First find all CC items - for (var item : Registries.ITEMS) { - if (Registries.ITEMS.getKey(item).getNamespace().equals(ComputerCraftAPI.MOD_ID)) items.add(item); + for (var item : RegistryWrappers.ITEMS) { + if (RegistryWrappers.ITEMS.getKey(item).getNamespace().equals(ComputerCraftAPI.MOD_ID)) items.add(item); } // Now find all CC recipes. for (var recipe : Minecraft.getInstance().level.getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) { var result = recipe.getResultItem(); - if (!Registries.ITEMS.getKey(result.getItem()).getNamespace().equals(ComputerCraftAPI.MOD_ID)) { + if (!RegistryWrappers.ITEMS.getKey(result.getItem()).getNamespace().equals(ComputerCraftAPI.MOD_ID)) { continue; } if (result.hasTag()) { @@ -122,7 +122,7 @@ private static void export(Path root, ImageRenderer renderer) throws IOException renderer.setupState(); for (var item : items) { var stack = new ItemStack(item); - var location = Registries.ITEMS.getKey(item); + var location = RegistryWrappers.ITEMS.getKey(item); dump.itemNames.put(location.toString(), stack.getHoverName().getString()); renderer.captureRender(itemDir.resolve(location.getNamespace()).resolve(location.getPath() + ".png"), diff --git a/projects/common/src/testMod/java/dan200/computercraft/export/ImageRenderer.java b/projects/common/src/testMod/java/dan200/computercraft/export/ImageRenderer.java index a6abf5a00..2a83d6ff9 100644 --- a/projects/common/src/testMod/java/dan200/computercraft/export/ImageRenderer.java +++ b/projects/common/src/testMod/java/dan200/computercraft/export/ImageRenderer.java @@ -8,9 +8,9 @@ import com.mojang.blaze3d.pipeline.TextureTarget; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.math.Matrix4f; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.FogRenderer; +import org.joml.Matrix4f; import org.lwjgl.opengl.GL12; import javax.annotation.Nullable; @@ -37,7 +37,7 @@ public ImageRenderer() { public void setupState() { projectionMatrix = RenderSystem.getProjectionMatrix(); - RenderSystem.setProjectionMatrix(Matrix4f.orthographic(0, 16, 0, 16, 1000, 3000)); + RenderSystem.setProjectionMatrix(new Matrix4f().identity().ortho(0, 16, 0, 16, 1000, 3000)); var transform = RenderSystem.getModelViewStack(); transform.pushPose(); diff --git a/projects/common/src/testMod/java/dan200/computercraft/export/JsonDump.java b/projects/common/src/testMod/java/dan200/computercraft/export/JsonDump.java index e5ecd1732..ecd10ff0c 100644 --- a/projects/common/src/testMod/java/dan200/computercraft/export/JsonDump.java +++ b/projects/common/src/testMod/java/dan200/computercraft/export/JsonDump.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.export; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -23,7 +23,7 @@ public static class Recipe { public int count; public Recipe(ItemStack output) { - this.output = Registries.ITEMS.getKey(output.getItem()).toString(); + this.output = RegistryWrappers.ITEMS.getKey(output.getItem()).toString(); count = output.getCount(); } @@ -38,7 +38,7 @@ public void setInput(int pos, Ingredient ingredient, Set trackedItems) { if (!canonicalItem.contains(item)) continue; trackedItems.add(item); - inputs[pos] = new String[]{ Registries.ITEMS.getKey(item).toString() }; + inputs[pos] = new String[]{ RegistryWrappers.ITEMS.getKey(item).toString() }; return; } @@ -46,7 +46,7 @@ public void setInput(int pos, Ingredient ingredient, Set trackedItems) { for (var i = 0; i < items.length; i++) { var item = items[i].getItem(); trackedItems.add(item); - itemIds[i] = Registries.ITEMS.getKey(item).toString(); + itemIds[i] = RegistryWrappers.ITEMS.getKey(item).toString(); } Arrays.sort(itemIds); diff --git a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/Loot_Test.kt b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/Loot_Test.kt index b327df467..203c9aebe 100644 --- a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/Loot_Test.kt +++ b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/Loot_Test.kt @@ -19,7 +19,7 @@ class Loot_Test { /** * Test that the loot tables will spawn in treasure disks. */ - @GameTest(template = Structures.DEFAULT) + @GameTest(template = Structures.DEFAULT, required = false) // FIXME: We may need to inject this as a datapack instead fun Chest_contains_disk(context: GameTestHelper) = context.sequence { thenExecute { val pos = BlockPos(2, 2, 2) diff --git a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/ClientTestExtensions.kt b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/ClientTestExtensions.kt index 39cd17452..2f113bc72 100644 --- a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/ClientTestExtensions.kt +++ b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/ClientTestExtensions.kt @@ -2,7 +2,7 @@ import dan200.computercraft.gametest.core.MinecraftExtensions import dan200.computercraft.mixin.gametest.GameTestSequenceAccessor -import dan200.computercraft.shared.platform.Registries +import dan200.computercraft.shared.platform.RegistryWrappers import net.minecraft.client.Minecraft import net.minecraft.client.Screenshot import net.minecraft.client.gui.screens.inventory.MenuAccess @@ -117,7 +117,7 @@ fun screenshot(name: String, callback: () -> Unit = {}) { * Get the currently open [AbstractContainerMenu], ensuring it is of a specific type. */ fun getOpenMenu(type: MenuType): T { - fun getName(type: MenuType<*>) = Registries.MENU.getKey(type) + fun getName(type: MenuType<*>) = RegistryWrappers.MENU.getKey(type) val screen = minecraft.screen @Suppress("UNCHECKED_CAST") diff --git a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/TestExtensions.kt b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/TestExtensions.kt index 080dd8b09..add9749e7 100644 --- a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/TestExtensions.kt +++ b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/api/TestExtensions.kt @@ -10,7 +10,7 @@ import dan200.computercraft.mixin.gametest.GameTestInfoAccessor import dan200.computercraft.mixin.gametest.GameTestSequenceAccessor import dan200.computercraft.shared.platform.PlatformHelper -import dan200.computercraft.shared.platform.Registries +import dan200.computercraft.shared.platform.RegistryWrappers import dan200.computercraft.test.core.computer.LuaTaskContext import dan200.computercraft.test.shared.ItemStackMatcher.isStack import net.minecraft.commands.arguments.blocks.BlockInput @@ -154,7 +154,7 @@ override fun getMessageToShowAtBlock(): String = message!!.lineSequence().first( fun > GameTestHelper.assertBlockHas(pos: BlockPos, property: Property, value: T, message: String = "") { val state = getBlockState(pos) if (!state.hasProperty(property)) { - val id = Registries.BLOCKS.getKey(state.block) + val id = RegistryWrappers.BLOCKS.getKey(state.block) fail(message, "block $id does not have property ${property.name}", pos) } else if (state.getValue(property) != value) { fail(message, "${property.name} is ${state.getValue(property)}, expected $value", pos) @@ -227,7 +227,7 @@ Items do not match (first mismatch at slot $slot). } } -private fun getName(type: BlockEntityType<*>): ResourceLocation = Registries.BLOCK_ENTITY_TYPES.getKey(type)!! +private fun getName(type: BlockEntityType<*>): ResourceLocation = RegistryWrappers.BLOCK_ENTITY_TYPES.getKey(type)!! /** * Get a [BlockEntity] of a specific type. diff --git a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/core/ClientTestHooks.kt b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/core/ClientTestHooks.kt index 85cd2d5b4..b73355345 100644 --- a/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/core/ClientTestHooks.kt +++ b/projects/common/src/testMod/kotlin/dan200/computercraft/gametest/core/ClientTestHooks.kt @@ -10,18 +10,16 @@ import net.minecraft.client.gui.screens.TitleScreen import net.minecraft.client.tutorial.TutorialSteps import net.minecraft.core.BlockPos -import net.minecraft.core.Registry -import net.minecraft.core.RegistryAccess import net.minecraft.gametest.framework.* import net.minecraft.server.MinecraftServer import net.minecraft.sounds.SoundSource -import net.minecraft.util.RandomSource import net.minecraft.world.Difficulty -import net.minecraft.world.level.DataPackConfig import net.minecraft.world.level.GameRules import net.minecraft.world.level.GameType import net.minecraft.world.level.LevelSettings +import net.minecraft.world.level.WorldDataConfiguration import net.minecraft.world.level.block.Rotation +import net.minecraft.world.level.levelgen.WorldOptions import net.minecraft.world.level.levelgen.presets.WorldPresets import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -73,8 +71,8 @@ private fun openWorld() { minecraft.options.tutorialStep = TutorialSteps.NONE minecraft.options.renderDistance().set(6) minecraft.options.gamma().set(1.0) - minecraft.options.setSoundCategoryVolume(SoundSource.MUSIC, 0.0f) - minecraft.options.setSoundCategoryVolume(SoundSource.AMBIENT, 0.0f) + minecraft.options.getSoundSourceOptionInstance(SoundSource.MUSIC).set(0.0) + minecraft.options.getSoundSourceOptionInstance(SoundSource.AMBIENT).set(0.0) if (minecraft.levelSource.levelExists(LEVEL_NAME)) { LOG.info("World already exists, opening.") @@ -86,16 +84,11 @@ private fun openWorld() { rules.getRule(GameRules.RULE_DAYLIGHT).set(false, null) rules.getRule(GameRules.RULE_WEATHER_CYCLE).set(false, null) - val registries = RegistryAccess.builtinCopy().freeze() minecraft.createWorldOpenFlows().createFreshLevel( LEVEL_NAME, - LevelSettings("Test Level", GameType.CREATIVE, false, Difficulty.EASY, true, rules, DataPackConfig.DEFAULT), - registries, - registries - .registryOrThrow(Registry.WORLD_PRESET_REGISTRY) - .getHolderOrThrow(WorldPresets.FLAT).value() - .createWorldGenSettings(RandomSource.create().nextLong(), false, false), - ) + LevelSettings("Test Level", GameType.CREATIVE, false, Difficulty.EASY, true, rules, WorldDataConfiguration.DEFAULT), + WorldOptions(WorldOptions.randomSeed(), false, false), + ) { WorldPresets.createNormalWorldDimensions(it) } } } diff --git a/projects/fabric/build.gradle.kts b/projects/fabric/build.gradle.kts index f1ca00f89..93fceab4d 100644 --- a/projects/fabric/build.gradle.kts +++ b/projects/fabric/build.gradle.kts @@ -71,6 +71,7 @@ dependencies { testModImplementation(testFixtures(project(":core"))) testModImplementation(testFixtures(project(":fabric"))) + testImplementation(libs.byteBuddy) testImplementation(libs.byteBuddyAgent) testImplementation(libs.bundles.test) testRuntimeOnly(libs.bundles.testRuntime) diff --git a/projects/fabric/src/client/java/dan200/computercraft/client/model/TransformedBakedModel.java b/projects/fabric/src/client/java/dan200/computercraft/client/model/TransformedBakedModel.java index f73d45835..9f75f40c5 100644 --- a/projects/fabric/src/client/java/dan200/computercraft/client/model/TransformedBakedModel.java +++ b/projects/fabric/src/client/java/dan200/computercraft/client/model/TransformedBakedModel.java @@ -8,14 +8,14 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormatElement; -import com.mojang.math.Matrix4f; import com.mojang.math.Transformation; -import com.mojang.math.Vector4f; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; +import org.joml.Matrix4f; +import org.joml.Vector4f; import javax.annotation.Nullable; import java.util.ArrayList; @@ -64,8 +64,7 @@ private BakedQuad transformQuad(BakedQuad quad) { // Transform the position var pos = new Vector4f(x, y, z, 1); - pos.transform(transformation); - pos.perspectiveDivide(); + transformation.transformProject(pos); vertexData[start] = Float.floatToRawIntBits(pos.x()); vertexData[start + 1] = Float.floatToRawIntBits(pos.y()); diff --git a/projects/fabric/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java b/projects/fabric/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java index 9ed6c425f..9a10afe60 100644 --- a/projects/fabric/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java +++ b/projects/fabric/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java @@ -5,7 +5,6 @@ */ package dan200.computercraft.client.model.turtle; -import com.mojang.datafixers.util.Pair; import dan200.computercraft.api.ComputerCraftAPI; import net.fabricmc.fabric.api.client.model.ModelProviderException; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -16,7 +15,9 @@ import javax.annotation.Nullable; import java.io.IOException; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Objects; import java.util.function.Function; public final class TurtleModelLoader { @@ -57,15 +58,13 @@ public Collection getDependencies() { } @Override - public Collection getMaterials(Function modelGetter, Set> missingTextureErrors) { - Set materials = new HashSet<>(); - materials.addAll(modelGetter.apply(model).getMaterials(modelGetter, missingTextureErrors)); - materials.addAll(modelGetter.apply(COLOUR_TURTLE_MODEL).getMaterials(modelGetter, missingTextureErrors)); - return materials; + public void resolveParents(Function function) { + function.apply(model).resolveParents(function); + function.apply(COLOUR_TURTLE_MODEL).resolveParents(function); } @Override - public BakedModel bake(ModelBakery bakery, Function spriteGetter, ModelState transform, ResourceLocation location) { + public BakedModel bake(ModelBaker bakery, Function spriteGetter, ModelState transform, ResourceLocation location) { var mainModel = bakery.bake(model, transform); if (mainModel == null) throw new NullPointerException(model + " failed to bake"); diff --git a/projects/fabric/src/client/java/dan200/computercraft/mixin/client/GameRendererMixin.java b/projects/fabric/src/client/java/dan200/computercraft/mixin/client/GameRendererMixin.java index aa31a3070..4a017ac28 100644 --- a/projects/fabric/src/client/java/dan200/computercraft/mixin/client/GameRendererMixin.java +++ b/projects/fabric/src/client/java/dan200/computercraft/mixin/client/GameRendererMixin.java @@ -8,7 +8,7 @@ import dan200.computercraft.client.ClientRegistry; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.ShaderInstance; -import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.ResourceProvider; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -29,7 +29,7 @@ class GameRendererMixin { @Inject(method = "reloadShaders", at = @At(value = "TAIL")) @SuppressWarnings("UnusedMethod") - private void onReloadShaders(ResourceManager resourceManager, CallbackInfo ci) { + private void onReloadShaders(ResourceProvider resourceManager, CallbackInfo ci) { try { ClientRegistry.registerShaders(resourceManager, (shader, callback) -> { shaders.put(shader.getName(), shader); diff --git a/projects/fabric/src/client/java/dan200/computercraft/mixin/client/ItemFrameRendererMixin.java b/projects/fabric/src/client/java/dan200/computercraft/mixin/client/ItemFrameRendererMixin.java index eb4c35d40..ff2956143 100644 --- a/projects/fabric/src/client/java/dan200/computercraft/mixin/client/ItemFrameRendererMixin.java +++ b/projects/fabric/src/client/java/dan200/computercraft/mixin/client/ItemFrameRendererMixin.java @@ -20,7 +20,7 @@ class ItemFrameRendererMixin { @Inject( method = "render(Lnet/minecraft/world/entity/decoration/ItemFrame;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", - at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V", ordinal = 2, shift = At.Shift.AFTER), + at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lorg/joml/Quaternionf;)V", ordinal = 2, shift = At.Shift.AFTER), cancellable = true ) @SuppressWarnings("UnusedMethod") diff --git a/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json b/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json index 812af2951..80bcc51be 100644 --- a/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json +++ b/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json @@ -166,6 +166,7 @@ "gui.computercraft.config.upload_nag_delay": "Upload nag delay", "gui.computercraft.config.upload_nag_delay.tooltip": "The delay in seconds after which we'll notify about unhandled imports. Set to 0 to disable.\nRange: 0 ~ 60", "gui.computercraft.pocket_computer_overlay": "Pocket computer open. Press ESC to close.", + "gui.computercraft.terminal": "Computer terminal", "gui.computercraft.tooltip.computer_id": "Computer ID: %s", "gui.computercraft.tooltip.copy": "Copy to clipboard", "gui.computercraft.tooltip.disk_id": "Disk ID: %s", diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/cable.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/cable.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/cable.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/cable.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced_upgrade.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced_upgrade.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced_upgrade.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_command.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_command.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_command.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_command.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_1.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_1.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_1.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_1.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_10.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_10.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_10.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_10.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_11.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_11.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_11.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_11.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_12.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_12.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_12.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_12.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_13.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_13.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_13.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_13.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_14.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_14.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_14.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_14.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_15.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_15.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_15.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_15.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_16.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_16.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_16.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_16.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_2.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_2.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_2.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_2.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_3.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_3.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_3.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_3.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_4.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_4.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_4.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_4.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_5.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_5.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_5.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_5.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_6.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_6.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_6.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_6.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_7.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_7.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_7.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_7.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_8.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_8.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_8.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_8.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_9.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_9.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_9.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_9.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_drive.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_drive.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_drive.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_drive.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/speaker.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/speaker.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/speaker.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced_upgrade.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced_upgrade.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced_upgrade.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/speaker.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/speaker.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/speaker.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_book.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_book.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_book.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_book.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_pages.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_pages.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_pages.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_pages.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printer.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/printer.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printer.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/printer.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/speaker.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/speaker.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/speaker.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/speaker.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/speaker.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/speaker.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/crafting_table.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/crafting_table.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/crafting_table.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/crafting_table.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_axe.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_axe.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_axe.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_axe.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_hoe.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_hoe.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_hoe.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_hoe.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_pickaxe.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_pickaxe.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_pickaxe.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_pickaxe.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_shovel.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_shovel.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_shovel.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_shovel.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_sword.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_sword.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_sword.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_sword.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_upgrade.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced_upgrade.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_upgrade.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/speaker.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/speaker.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/speaker.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/crafting_table.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/crafting_table.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/crafting_table.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/crafting_table.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_axe.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_axe.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_axe.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_axe.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_hoe.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_hoe.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_hoe.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_hoe.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_pickaxe.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_pickaxe.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_pickaxe.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_pickaxe.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_shovel.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_shovel.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_shovel.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_shovel.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_sword.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_sword.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_sword.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_sword.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_from.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_from.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_from.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_from.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_to.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_to.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_to.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_to.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_advanced.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_advanced.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_advanced.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_normal.json similarity index 100% rename from projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_normal.json rename to projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_normal.json diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/cable.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/cable.json index 293f722c4..e40b77c8f 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/cable.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/cable.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "R": {"tag": "c:redstone_dusts"}}, "pattern": [" # ", "#R#", " # "], "result": {"count": 6, "item": "computercraft:cable"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/colour.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/colour.json index d1952921d..0578f3f7b 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/colour.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/colour.json @@ -1 +1 @@ -{"type": "computercraft:colour"} +{"type": "computercraft:colour", "category": "misc"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced.json index 917c864d7..0f6382b05 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "c:gold_ingots"}, "G": {"tag": "c:glass_panes"}, "R": {"tag": "c:redstone_dusts"}}, "pattern": ["###", "#R#", "#G#"], "result": {"item": "computercraft:computer_advanced"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json index 2fba08df2..e72a6759d 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json @@ -1,5 +1,6 @@ { "type": "computercraft:computer_upgrade", + "category": "redstone", "family": "ADVANCED", "key": {"#": {"tag": "c:gold_ingots"}, "C": {"item": "computercraft:computer_normal"}}, "pattern": ["###", "#C#", "# #"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_command.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_command.json index a5d87567c..580588398 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_command.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_command.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"tag": "c:gold_ingots"}, "G": {"tag": "c:glass_panes"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_normal.json index 952788bcb..569205f6c 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/computer_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "G": {"tag": "c:glass_panes"}, "R": {"tag": "c:redstone_dusts"}}, "pattern": ["###", "#R#", "#G#"], "result": {"item": "computercraft:computer_normal"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk.json index 6b973d871..1c2e811fe 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk.json @@ -1 +1 @@ -{"type": "computercraft:disk"} +{"type": "computercraft:disk", "category": "misc"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_1.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_1.json index 7af01d88e..8cbb171ba 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_1.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_1.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:black_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:1118481}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_10.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_10.json index 8be5d647a..e3af58226 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_10.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_10.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:pink_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:15905484}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_11.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_11.json index 3a3107700..ba3fd96f9 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_11.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_11.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:lime_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:8375321}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_12.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_12.json index f9880fe0e..b0897df90 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_12.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_12.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:yellow_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:14605932}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_13.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_13.json index 6c7b31b37..9e3a66f81 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_13.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_13.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "c:redstone_dusts"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_14.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_14.json index 085053050..600acafaf 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_14.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_14.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:magenta_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:15040472}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_15.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_15.json index be5a4ecbb..2da4825f1 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_15.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_15.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:orange_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:15905331}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_16.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_16.json index 2e9a19a2b..5b3b67334 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_16.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_16.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:white_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:15790320}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_2.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_2.json index 666c72951..faeee01b3 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_2.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_2.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:red_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:13388876}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_3.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_3.json index a261a4b73..41b381378 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_3.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_3.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:green_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:5744206}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_4.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_4.json index 0f9519208..085dc3e83 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_4.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_4.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:brown_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:8349260}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_5.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_5.json index 279a27970..3ce11c706 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_5.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_5.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:blue_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:3368652}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_6.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_6.json index 24a02fd17..ff2fcf2bd 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_6.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_6.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:purple_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:11691749}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_7.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_7.json index ed0d23cea..f9052f7d0 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_7.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_7.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:cyan_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:5020082}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_8.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_8.json index 6a1171ccc..53c0ca6e9 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_8.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_8.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "c:redstone_dusts"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_9.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_9.json index d36626333..9b71f9f6f 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_9.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_9.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "c:redstone_dusts"}, {"item": "minecraft:paper"}, {"item": "minecraft:gray_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:5000268}"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_drive.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_drive.json index 9a8a09876..c957cd8ef 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_drive.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/disk_drive.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "R": {"tag": "c:redstone_dusts"}}, "pattern": ["###", "#R#", "#R#"], "result": {"item": "computercraft:disk_drive"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_advanced.json index 5db16836b..f6e4ec4a8 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "c:gold_ingots"}, "G": {"tag": "c:glass_panes"}}, "pattern": ["###", "#G#", "###"], "result": {"count": 4, "item": "computercraft:monitor_advanced"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_normal.json index 038e4db69..ddbf69172 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/monitor_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "G": {"tag": "c:glass_panes"}}, "pattern": ["###", "#G#", "###"], "result": {"item": "computercraft:monitor_normal"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json index 3e9ffc667..23bf0e195 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_advanced", "key": {"#": {"item": "computercraft:speaker"}, "P": {"item": "computercraft:pocket_computer_advanced"}}, "pattern": ["#", "P"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json index c421eb36a..17ed4094a 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_advanced", "key": { "#": {"item": "computercraft:wireless_modem_advanced"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json index a649307b0..109c835a1 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_advanced", "key": { "#": {"item": "computercraft:wireless_modem_normal"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json index cc02ee60a..b1a149a98 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "c:gold_ingots"}, "A": {"item": "minecraft:golden_apple"}, "G": {"tag": "c:glass_panes"}}, "pattern": ["###", "#A#", "#G#"], "result": {"item": "computercraft:pocket_computer_advanced"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json index b7be5cc56..77c7afb31 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json @@ -1,5 +1,6 @@ { "type": "computercraft:computer_upgrade", + "category": "redstone", "family": "ADVANCED", "key": {"#": {"tag": "c:gold_ingots"}, "C": {"item": "computercraft:pocket_computer_normal"}}, "pattern": ["###", "#C#", "# #"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json index ca863e79e..b943957f8 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"item": "minecraft:stone"}, "A": {"item": "minecraft:golden_apple"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json index 5c4c023dc..0446bb4b5 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json @@ -1 +1 @@ -{"type": "computercraft:pocket_computer_upgrade"} +{"type": "computercraft:pocket_computer_upgrade", "category": "misc"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json index b3bb6806f..ca8d35068 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_normal", "key": {"#": {"item": "computercraft:speaker"}, "P": {"item": "computercraft:pocket_computer_normal"}}, "pattern": ["#", "P"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json index 96c9fb7ab..3240eba41 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_normal", "key": { "#": {"item": "computercraft:wireless_modem_advanced"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json index fdb82cf1e..a4c219499 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_normal", "key": { "#": {"item": "computercraft:wireless_modem_normal"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_book.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_book.json index 791d190f8..7d873b7f0 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_book.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_book.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "ingredients": [ {"item": "minecraft:leather"}, {"item": "computercraft:printed_page"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_pages.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_pages.json index 8413b8584..2cb9495f4 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_pages.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/printed_pages.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "ingredients": [ {"item": "computercraft:printed_page"}, {"item": "computercraft:printed_page"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/printer.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/printer.json index e762075db..c3bc2117b 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/printer.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/printer.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "D": {"tag": "c:dyes"}, "R": {"tag": "c:redstone_dusts"}}, "pattern": ["###", "#R#", "#D#"], "result": {"item": "computercraft:printer"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/printout.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/printout.json index 21e85df52..bff250bb7 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/printout.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/printout.json @@ -1 +1 @@ -{"type": "computercraft:printout"} +{"type": "computercraft:printout", "category": "misc"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_cloudy.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_cloudy.json index 1f0c24401..e5d84e4f2 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_cloudy.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_cloudy.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "ingredients": [{"tag": "c:skulls"}, {"item": "computercraft:monitor_normal"}], "result": { "item": "minecraft:player_head", diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_dan200.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_dan200.json index e92254d21..bd8a1beec 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_dan200.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/skull_dan200.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "ingredients": [{"tag": "c:skulls"}, {"item": "computercraft:computer_advanced"}], "result": { "item": "minecraft:player_head", diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/speaker.json index e2fcd278e..fd75cf240 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/speaker.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/speaker.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"item": "minecraft:stone"}, "N": {"item": "minecraft:note_block"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced.json index d54bd452e..b638412e2 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:turtle", + "category": "redstone", "family": "ADVANCED", "key": { "#": {"tag": "c:gold_ingots"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json index b03916f8e..0f0268796 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "computercraft:speaker"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json index 30fa0de1f..e1c816e4a 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "computercraft:wireless_modem_advanced"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json index 59bee9b44..8d835c01d 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "computercraft:wireless_modem_normal"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json index f4b6fd0bd..b616b0496 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:crafting_table"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json index 988e54d16..398adc40f 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json index 04ba561d6..a5d8252be 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json index ac9c03067..5a3465a68 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json index 839eea44e..1ff3bfd64 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json index 6b67bc7f6..369bf1c8d 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json index 757e15670..f82d9b83f 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json @@ -1,5 +1,6 @@ { "type": "computercraft:computer_upgrade", + "category": "redstone", "family": "ADVANCED", "key": { "#": {"tag": "c:gold_ingots"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal.json index 9aeed26a1..6f386a1f0 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:turtle", + "category": "redstone", "family": "NORMAL", "key": { "#": {"tag": "c:iron_ingots"}, diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json index 255a0c433..154d50c58 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "computercraft:speaker"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json index d031e4afa..050372d0e 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "computercraft:wireless_modem_advanced"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json index 07a32a048..ae793442d 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "computercraft:wireless_modem_normal"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json index 05365d33e..19827b032 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:crafting_table"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json index 59362e0c5..bc775bba0 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json index 7b3d28761..e0fd895ca 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json index 36f660f53..73bc7573b 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json index e9e9bf05f..847a7d74a 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json index 483b16b7d..6c3d2a307 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json index 1aa114c8b..6e2e8db35 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json @@ -1 +1 @@ -{"type": "computercraft:turtle_upgrade"} +{"type": "computercraft:turtle_upgrade", "category": "misc"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem.json index 44a2a366f..ec9e3f99c 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "R": {"tag": "c:redstone_dusts"}}, "pattern": ["###", "#R#", "###"], "result": {"item": "computercraft:wired_modem"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json index 843f6c344..39de834c4 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "redstone", "ingredients": [{"item": "computercraft:wired_modem"}], "result": {"item": "computercraft:wired_modem_full"} } diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json index aca1cc1f1..cb2123f0f 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "redstone", "ingredients": [{"item": "computercraft:wired_modem_full"}], "result": {"item": "computercraft:wired_modem"} } diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json index b922cdf86..c052f1df5 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "c:gold_ingots"}, "E": {"item": "minecraft:ender_eye"}}, "pattern": ["###", "#E#", "###"], "result": {"item": "computercraft:wireless_modem_advanced"} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json index af1116f79..0537b6178 100644 --- a/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"item": "minecraft:stone"}, "E": {"item": "minecraft:ender_pearl"}}, "pattern": ["###", "#E#", "###"], "result": {"item": "computercraft:wireless_modem_normal"} diff --git a/projects/fabric/src/main/java/dan200/computercraft/data/FabricDataGenerators.java b/projects/fabric/src/main/java/dan200/computercraft/data/FabricDataGenerators.java index 5697305f8..4ad90c1e4 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/data/FabricDataGenerators.java +++ b/projects/fabric/src/main/java/dan200/computercraft/data/FabricDataGenerators.java @@ -5,80 +5,77 @@ */ package dan200.computercraft.data; -import com.mojang.datafixers.util.Pair; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; -import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; +import net.minecraft.data.loot.LootTableProvider; import net.minecraft.data.models.BlockModelGenerators; import net.minecraft.data.models.ItemModelGenerators; -import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.tags.TagsProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; import java.util.function.Consumer; -import java.util.function.Supplier; public class FabricDataGenerators implements DataGeneratorEntrypoint { @Override public void onInitializeDataGenerator(FabricDataGenerator generator) { - DataProviders.add(generator, new PlatformGeneratorsImpl(generator), true, true); - - generator.addProvider(new MoreConventionalTagsProvider(generator)); + var pack = generator.createPack(); + DataProviders.add(new PlatformGeneratorsImpl(pack)); + pack.addProvider((out, reg) -> addName("Conventional Tags", new MoreConventionalTagsProvider(out, reg))); } - private record PlatformGeneratorsImpl(FabricDataGenerator generator) implements DataProviders.GeneratorFactory { + private record PlatformGeneratorsImpl(FabricDataGenerator.Pack generator) implements DataProviders.GeneratorSink { @Override - public DataProvider recipes(Consumer> recipes) { - return new FabricRecipeProvider(generator) { - @Override - protected void generateRecipes(Consumer exporter) { - recipes.accept(exporter); - } - }; + public T add(DataProvider.Factory factory) { + return generator.addProvider(factory); } @Override - public List lootTable(List>>, LootContextParamSet>> tables) { - return tables.stream().map(table -> new SimpleFabricLootTableProvider(generator, table.getSecond()) { - @Override - public void accept(BiConsumer exporter) { - table.getFirst().get().accept(exporter); - } - }).toList(); + public void lootTable(List tables) { + for (var table : tables) { + generator.addProvider((FabricDataOutput out) -> new SimpleFabricLootTableProvider(out, table.paramSet()) { + @Override + public void accept(BiConsumer exporter) { + table.provider().get().generate(exporter); + } + }); + } } - @Override public TagsProvider blockTags(Consumer> tags) { - return new FabricTagProvider.BlockTagProvider(generator) { + return generator.addProvider((out, registries) -> new FabricTagProvider.BlockTagProvider(out, registries) { @Override - protected void generateTags() { - tags.accept(this::tag); + protected void addTags(HolderLookup.Provider registries) { + tags.accept(x -> new TagProvider.TagAppender<>(RegistryWrappers.BLOCKS, getOrCreateRawBuilder(x))); } - }; + }); } @Override public TagsProvider itemTags(Consumer tags, TagsProvider blocks) { - return new FabricTagProvider.ItemTagProvider(generator, (FabricTagProvider.BlockTagProvider) blocks) { + return generator.addProvider((out, registries) -> new FabricTagProvider.ItemTagProvider(out, registries, (FabricTagProvider.BlockTagProvider) blocks) { @Override - protected void generateTags() { + protected void addTags(HolderLookup.Provider registries) { var self = this; tags.accept(new TagProvider.ItemTagConsumer() { @Override - public TagAppender tag(TagKey tag) { - return self.tag(tag); + public TagProvider.TagAppender tag(TagKey tag) { + return new TagProvider.TagAppender<>(RegistryWrappers.ITEMS, getOrCreateRawBuilder(tag)); } @Override @@ -87,12 +84,12 @@ public void copy(TagKey block, TagKey item) { } }); } - }; + }); } @Override - public DataProvider models(Consumer blocks, Consumer items) { - return new FabricModelProvider(generator) { + public void models(Consumer blocks, Consumer items) { + generator.addProvider((FabricDataOutput out) -> new FabricModelProvider(out) { @Override public void generateBlockStateModels(BlockModelGenerators generator) { blocks.accept(generator); @@ -102,7 +99,29 @@ public void generateBlockStateModels(BlockModelGenerators generator) { public void generateItemModels(ItemModelGenerators generator) { items.accept(generator); } - }; + }); } } + + + /** + * Add a name to a data provider to disambiguate them. + * + * @param suffix The suffix to add. + * @param provider The data provider to wrap. + * @return The wrapped data provider. + */ + private static DataProvider addName(String suffix, DataProvider provider) { + return new DataProvider() { + @Override + public CompletableFuture run(CachedOutput output) { + return provider.run(output); + } + + @Override + public String getName() { + return provider.getName() + " - " + suffix; + } + }; + } } diff --git a/projects/fabric/src/main/java/dan200/computercraft/data/MoreConventionalTagsProvider.java b/projects/fabric/src/main/java/dan200/computercraft/data/MoreConventionalTagsProvider.java index e4c3810c6..f76534164 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/data/MoreConventionalTagsProvider.java +++ b/projects/fabric/src/main/java/dan200/computercraft/data/MoreConventionalTagsProvider.java @@ -6,21 +6,24 @@ package dan200.computercraft.data; import dan200.computercraft.shared.platform.MoreConventionalTags; -import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; +import net.minecraft.core.HolderLookup; import net.minecraft.world.item.Items; +import java.util.concurrent.CompletableFuture; + public class MoreConventionalTagsProvider extends FabricTagProvider.ItemTagProvider { - public MoreConventionalTagsProvider(FabricDataGenerator dataGenerator) { - super(dataGenerator); + public MoreConventionalTagsProvider(FabricDataOutput output, CompletableFuture providers) { + super(output, providers); } @Override - protected void generateTags() { - tag(MoreConventionalTags.SKULLS).add( + protected void addTags(HolderLookup.Provider arg) { + getOrCreateTagBuilder(MoreConventionalTags.SKULLS).add( Items.CREEPER_HEAD, Items.DRAGON_HEAD, Items.PLAYER_HEAD, Items.SKELETON_SKULL, Items.WITHER_SKELETON_SKULL, Items.ZOMBIE_HEAD ); - tag(MoreConventionalTags.WOODEN_CHESTS).add(Items.CHEST, Items.TRAPPED_CHEST); + getOrCreateTagBuilder(MoreConventionalTags.WOODEN_CHESTS).add(Items.CHEST, Items.TRAPPED_CHEST); } } diff --git a/projects/fabric/src/main/java/dan200/computercraft/mixin/TagsProviderMixin.java b/projects/fabric/src/main/java/dan200/computercraft/mixin/TagsProviderMixin.java index a10b818b9..7f22296d0 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/mixin/TagsProviderMixin.java +++ b/projects/fabric/src/main/java/dan200/computercraft/mixin/TagsProviderMixin.java @@ -12,6 +12,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.function.Predicate; + /** * Don't throw when using a Minecraft tag inside {@link TagsProvider}. *

@@ -19,8 +21,8 @@ */ @Mixin(TagsProvider.class) class TagsProviderMixin { - @Inject(at = @At("HEAD"), method = "method_33130", cancellable = true) - public void onVerifyPresent(TagEntry tag, CallbackInfoReturnable cir) { + @Inject(at = @At("HEAD"), method = "method_46834", cancellable = true) + public void onVerifyPresent(Predicate predicate, TagEntry tag, CallbackInfoReturnable cir) { var element = ((TagEntryAccessor) tag).computercraft$elementOrTag(); if (element.tag() && element.id().getNamespace().equals("minecraft")) cir.setReturnValue(false); } diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/ComputerCraft.java b/projects/fabric/src/main/java/dan200/computercraft/shared/ComputerCraft.java index 10118c22e..9bbc38690 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/ComputerCraft.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/ComputerCraft.java @@ -29,6 +29,7 @@ import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder; +import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.fabricmc.fabric.api.loot.v2.LootTableEvents; import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; @@ -51,6 +52,8 @@ public static void init() { FabricRegistryBuilder.createSimple(TurtleUpgradeSerialiser.class, TurtleUpgradeSerialiser.REGISTRY_ID.location()).buildAndRegister(); FabricRegistryBuilder.createSimple(PocketUpgradeSerialiser.class, PocketUpgradeSerialiser.REGISTRY_ID.location()).buildAndRegister(); ModRegistry.register(); + ModRegistry.registerMainThread(); + ModRegistry.registerCreativeTab(FabricItemGroup.builder(new ResourceLocation(ComputerCraftAPI.MOD_ID, "tab"))).build(); // Register peripherals PeripheralLookup.get().registerForBlockEntity((b, d) -> b.peripheral(), ModRegistry.BlockEntities.COMPUTER_NORMAL.get()); diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/details/FluidDetails.java b/projects/fabric/src/main/java/dan200/computercraft/shared/details/FluidDetails.java index 3afecec1e..813f2714f 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/details/FluidDetails.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/details/FluidDetails.java @@ -7,7 +7,7 @@ import dan200.computercraft.api.detail.DetailProvider; import dan200.computercraft.api.detail.FabricDetailRegistries; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; import net.fabricmc.fabric.api.transfer.v1.storage.StorageView; @@ -20,7 +20,7 @@ */ public class FluidDetails { public static void fillBasic(Map data, StorageView fluid) { - data.put("name", DetailHelpers.getId(Registries.FLUIDS, fluid.getResource().getFluid())); + data.put("name", DetailHelpers.getId(RegistryWrappers.FLUIDS, fluid.getResource().getFluid())); data.put("amount", fluid.getAmount()); } diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakeNetHandler.java b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakeNetHandler.java index bfa8b9f78..c90b9987e 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakeNetHandler.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakeNetHandler.java @@ -170,7 +170,7 @@ public void handleChatCommand(ServerboundChatCommandPacket serverboundChatComman } @Override - public void handleChatPreview(ServerboundChatPreviewPacket serverboundChatPreviewPacket) { + public void handleChatSessionUpdate(ServerboundChatSessionUpdatePacket serverboundChatSessionUpdatePacket) { } @Override diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakePlayer.java b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakePlayer.java index 7a4dd120f..4cf054f65 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakePlayer.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/FakePlayer.java @@ -21,7 +21,7 @@ final class FakePlayer extends ServerPlayer { private FakePlayer(ServerLevel serverLevel, GameProfile gameProfile) { - super(serverLevel.getServer(), serverLevel, gameProfile, null); + super(serverLevel.getServer(), serverLevel, gameProfile); connection = new FakeNetHandler(this); } diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/MoreConventionalTags.java b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/MoreConventionalTags.java index e71a978b0..40dfc3f65 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/MoreConventionalTags.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/MoreConventionalTags.java @@ -6,7 +6,7 @@ package dan200.computercraft.shared.platform; import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -21,6 +21,6 @@ public class MoreConventionalTags { public static final TagKey WOODEN_CHESTS = item("wooden_chests"); private static TagKey item(String name) { - return TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation("c", name)); + return TagKey.create(Registries.ITEM, new ResourceLocation("c", name)); } } 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 891b7924b..72e2994ea 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 @@ -14,8 +14,6 @@ import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.peripheral.PeripheralLookup; import dan200.computercraft.mixin.ArgumentTypeInfosAccessor; -import dan200.computercraft.mixin.CreativeModeTabAccessor; -import dan200.computercraft.shared.ModRegistry; import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.network.client.ClientNetworkContext; import dan200.computercraft.shared.network.container.ContainerData; @@ -36,6 +34,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; @@ -72,7 +71,10 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; @@ -80,27 +82,9 @@ @AutoService(dan200.computercraft.impl.PlatformHelper.class) public class PlatformHelperImpl implements PlatformHelper { - private static final CreativeModeTab creativeTab; - - static { - // Fabric's API for this forces us to use "computercraft.xyz", so roll our own. - CreativeModeTabAccessor.computercraft$setTabs(Arrays.copyOf(CreativeModeTab.TABS, CreativeModeTab.TABS.length + 1)); - creativeTab = new CreativeModeTab(CreativeModeTab.TABS.length - 1, ComputerCraftAPI.MOD_ID) { - @Override - public ItemStack makeIcon() { - return new ItemStack(ModRegistry.Items.COMPUTER_NORMAL.get()); - } - }; - } - - @Override - public CreativeModeTab getCreativeTab() { - return creativeTab; - } - @SuppressWarnings("unchecked") private static Registry getRegistry(ResourceKey> id) { - var registry = (Registry) Registry.REGISTRY.get(id.location()); + var registry = (Registry) BuiltInRegistries.REGISTRY.get(id.location()); if (registry == null) throw new IllegalArgumentException("Unknown registry " + id); return registry; } @@ -120,7 +104,7 @@ public T getRegistryObject(ResourceKey> registry, ResourceLocati } @Override - public Registries.RegistryWrapper wrap(ResourceKey> registry) { + public RegistryWrappers.RegistryWrapper wrap(ResourceKey> registry) { return new RegistryWrapperImpl<>(registry.location(), getRegistry(registry)); } @@ -261,10 +245,10 @@ public int getBurnTime(ItemStack stack) { return AbstractFurnaceBlockEntity.getFuel().getOrDefault(stack.getItem(), 0); } + @Nullable @Override - public List getCreativeTabs(ItemStack stack) { - var category = stack.getItem().getItemCategory(); - return category == null ? List.of() : List.of(category); + public ResourceLocation getCreativeTabId(CreativeModeTab tab) { + return tab.getId(); } @Override @@ -320,7 +304,7 @@ public InteractionResult useOn(ServerPlayer player, ItemStack stack, BlockHitRes private record RegistryWrapperImpl( ResourceLocation name, Registry registry - ) implements Registries.RegistryWrapper { + ) implements RegistryWrappers.RegistryWrapper { @Override public int getId(T object) { var id = registry.getId(object); diff --git a/projects/fabric/src/main/resources/fabric.mod.json b/projects/fabric/src/main/resources/fabric.mod.json index 24e1bccd5..8e3c4168a 100644 --- a/projects/fabric/src/main/resources/fabric.mod.json +++ b/projects/fabric/src/main/resources/fabric.mod.json @@ -46,9 +46,9 @@ } ], "depends": { - "fabricloader": ">=0.14.10", - "fabric-api": ">=0.67.0", - "minecraft": ">=1.19.2 <1.20" + "fabricloader": ">=0.14.11", + "fabric-api": ">=0.68.1", + "minecraft": ">=1.19.3 <1.20" }, "accessWidener": "computercraft.accesswidener" } diff --git a/projects/fabric/src/test/java/dan200/computercraft/shared/FabricBootstrap.java b/projects/fabric/src/test/java/dan200/computercraft/shared/FabricBootstrap.java index ee2f5b605..0f309bd2d 100644 --- a/projects/fabric/src/test/java/dan200/computercraft/shared/FabricBootstrap.java +++ b/projects/fabric/src/test/java/dan200/computercraft/shared/FabricBootstrap.java @@ -9,6 +9,7 @@ import com.google.common.base.Splitter; import com.google.common.io.ByteStreams; import net.bytebuddy.agent.ByteBuddyAgent; +import net.bytebuddy.dynamic.loading.ClassInjector; import net.fabricmc.api.EnvType; import net.fabricmc.loader.impl.FabricLoaderImpl; import net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider; @@ -20,6 +21,9 @@ import net.fabricmc.loader.impl.util.LoaderUtil; import net.fabricmc.loader.impl.util.log.Log; import org.junit.jupiter.api.extension.Extension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.spongepowered.asm.mixin.MixinEnvironment; import org.spongepowered.asm.mixin.transformer.IMixinTransformer; import javax.annotation.Nullable; @@ -35,6 +39,7 @@ import java.security.ProtectionDomain; import java.util.*; import java.util.jar.Manifest; +import java.util.stream.Collectors; /** * Loads Fabric mods as part of this test run. @@ -46,6 +51,8 @@ */ @AutoService(Extension.class) public class FabricBootstrap implements Extension { + private static final Logger LOG = LoggerFactory.getLogger(FabricBootstrap.class); + public FabricBootstrap() throws ReflectiveOperationException, IOException { Log.init(new Slf4jLogHandler()); @@ -191,13 +198,52 @@ public List getClassPath() { } } - private record ClassTransformer(IMixinTransformer transformer) implements ClassFileTransformer { + private static final class ClassTransformer implements ClassFileTransformer { + private final IMixinTransformer transformer; + private final Set definedClasses = new HashSet<>(); + private final Set generatedClasses; + + private ClassTransformer(IMixinTransformer transformer) { + this.transformer = transformer; + + try { + // As we can't hook into classloading itself, we need to track all the classes Mixin has generated. Yes, + // this is nasty. + var syntheticRegistryField = transformer.getClass().getDeclaredField("syntheticClassRegistry"); + syntheticRegistryField.setAccessible(true); + var syntheticRegistry = syntheticRegistryField.get(transformer); + + var classesField = syntheticRegistry.getClass().getDeclaredField("classes"); + classesField.setAccessible(true); + @SuppressWarnings("unchecked") var classes = (Map) classesField.get(syntheticRegistry); + generatedClasses = classes.keySet(); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + @Override - public @Nullable byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException { + public synchronized @Nullable byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException { var name = className.replace('/', '.'); var transformed = FabricTransformer.transform(true, EnvType.CLIENT, name, bytes); transformed = transformer.transformClassBytes(name, name, transformed); + // Keep track of all generated classes that we've seen, and define any new ones. We use ByteBuddy to inject + // the new class definitions, as doing it ourselves is hard. + if (generatedClasses.size() > definedClasses.size()) { + var toDefine = generatedClasses.stream().filter(definedClasses::add).collect(Collectors.toUnmodifiableMap( + genName -> genName.replace('/', '.'), + genName -> transformer.generateClass(MixinEnvironment.getDefaultEnvironment(), genName) + )); + + LOG.info("Defining {}", toDefine.keySet()); + try { + new ClassInjector.UsingReflection(loader).injectRaw(toDefine); + } catch (Exception e) { + LOG.error("Failed to define {}", className, e); + } + } + return transformed == bytes ? null : transformed; } } diff --git a/projects/forge/src/client/java/dan200/computercraft/client/ForgeClientRegistry.java b/projects/forge/src/client/java/dan200/computercraft/client/ForgeClientRegistry.java index df4d516cb..25ffba92c 100644 --- a/projects/forge/src/client/java/dan200/computercraft/client/ForgeClientRegistry.java +++ b/projects/forge/src/client/java/dan200/computercraft/client/ForgeClientRegistry.java @@ -38,7 +38,7 @@ public static void registerModels(ModelEvent.RegisterAdditional event) { @SubscribeEvent public static void registerShaders(RegisterShadersEvent event) throws IOException { - ClientRegistry.registerShaders(event.getResourceManager(), event::registerShader); + ClientRegistry.registerShaders(event.getResourceProvider(), event::registerShader); } @SubscribeEvent diff --git a/projects/forge/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java b/projects/forge/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java index 92118041b..2ea8c73bd 100644 --- a/projects/forge/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java +++ b/projects/forge/src/client/java/dan200/computercraft/client/model/turtle/TurtleModelLoader.java @@ -7,20 +7,19 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; -import com.mojang.datafixers.util.Pair; import dan200.computercraft.api.ComputerCraftAPI; import net.minecraft.client.renderer.block.model.ItemOverrides; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.*; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; import net.minecraftforge.client.model.geometry.IGeometryBakingContext; import net.minecraftforge.client.model.geometry.IGeometryLoader; import net.minecraftforge.client.model.geometry.IUnbakedGeometry; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import java.util.function.Function; public final class TurtleModelLoader implements IGeometryLoader { @@ -45,15 +44,7 @@ private Unbaked(ResourceLocation family) { } @Override - public Collection getMaterials(IGeometryBakingContext context, Function modelGetter, Set> missingTextureErrors) { - Set materials = new HashSet<>(); - materials.addAll(modelGetter.apply(family).getMaterials(modelGetter, missingTextureErrors)); - materials.addAll(modelGetter.apply(COLOUR_TURTLE_MODEL).getMaterials(modelGetter, missingTextureErrors)); - return materials; - } - - @Override - public BakedModel bake(IGeometryBakingContext owner, ModelBakery bakery, Function spriteGetter, ModelState transform, ItemOverrides overrides, ResourceLocation modelLocation) { + public BakedModel bake(IGeometryBakingContext owner, ModelBaker bakery, Function spriteGetter, ModelState transform, ItemOverrides overrides, ResourceLocation modelLocation) { var mainModel = bakery.bake(family, transform, spriteGetter); if (mainModel == null) throw new NullPointerException(family + " failed to bake"); diff --git a/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json b/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json index 812af2951..80bcc51be 100644 --- a/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json +++ b/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json @@ -166,6 +166,7 @@ "gui.computercraft.config.upload_nag_delay": "Upload nag delay", "gui.computercraft.config.upload_nag_delay.tooltip": "The delay in seconds after which we'll notify about unhandled imports. Set to 0 to disable.\nRange: 0 ~ 60", "gui.computercraft.pocket_computer_overlay": "Pocket computer open. Press ESC to close.", + "gui.computercraft.terminal": "Computer terminal", "gui.computercraft.tooltip.computer_id": "Computer ID: %s", "gui.computercraft.tooltip.copy": "Copy to clipboard", "gui.computercraft.tooltip.disk_id": "Disk ID: %s", diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/cable.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/cable.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/cable.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/cable.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced_upgrade.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_advanced_upgrade.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_advanced_upgrade.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_command.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_command.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_command.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_command.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/computer_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/computer_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_1.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_1.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_1.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_1.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_10.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_10.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_10.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_10.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_11.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_11.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_11.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_11.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_12.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_12.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_12.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_12.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_13.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_13.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_13.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_13.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_14.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_14.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_14.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_14.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_15.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_15.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_15.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_15.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_16.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_16.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_16.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_16.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_2.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_2.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_2.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_2.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_3.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_3.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_3.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_3.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_4.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_4.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_4.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_4.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_5.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_5.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_5.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_5.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_6.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_6.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_6.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_6.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_7.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_7.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_7.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_7.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_8.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_8.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_8.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_8.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_9.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_9.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_9.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_9.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_drive.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_drive.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/disk_drive.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/disk_drive.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/monitor_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/monitor_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/speaker.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/speaker.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/speaker.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_advanced/computercraft/wireless_modem_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_advanced/computercraft/wireless_modem_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced_upgrade.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_advanced_upgrade.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_advanced_upgrade.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_computer_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_computer_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/speaker.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/speaker.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/speaker.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/pocket_normal/computercraft/wireless_modem_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/pocket_normal/computercraft/wireless_modem_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_book.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_book.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_book.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_book.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_pages.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_pages.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printed_pages.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/printed_pages.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printer.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/printer.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/printer.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/printer.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/speaker.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/speaker.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/speaker.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/speaker.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/speaker.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/speaker.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/computercraft/wireless_modem_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/computercraft/wireless_modem_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/crafting_table.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/crafting_table.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/crafting_table.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/crafting_table.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_axe.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_axe.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_axe.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_axe.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_hoe.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_hoe.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_hoe.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_hoe.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_pickaxe.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_pickaxe.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_pickaxe.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_pickaxe.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_shovel.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_shovel.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_shovel.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_shovel.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_sword.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_sword.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced/minecraft/diamond_sword.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced/minecraft/diamond_sword.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_upgrade.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_advanced_upgrade.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_upgrade.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/speaker.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/speaker.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/speaker.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/computercraft/wireless_modem_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/computercraft/wireless_modem_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/crafting_table.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/crafting_table.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/crafting_table.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/crafting_table.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_axe.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_axe.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_axe.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_axe.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_hoe.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_hoe.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_hoe.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_hoe.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_pickaxe.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_pickaxe.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_pickaxe.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_pickaxe.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_shovel.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_shovel.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_shovel.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_shovel.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_sword.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_sword.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/turtle_normal/minecraft/diamond_sword.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal/minecraft/diamond_sword.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_from.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_from.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_from.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_from.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_to.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_to.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wired_modem_full_to.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wired_modem_full_to.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_advanced.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_advanced.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_advanced.json diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_normal.json similarity index 100% rename from projects/forge/src/generated/resources/data/computercraft/advancements/recipes/computercraft/wireless_modem_normal.json rename to projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/wireless_modem_normal.json diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/cable.json b/projects/forge/src/generated/resources/data/computercraft/recipes/cable.json index 50d0e0a5a..1ff12486d 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/cable.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/cable.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "R": {"tag": "forge:dusts/redstone"}}, "pattern": [" # ", "#R#", " # "], "result": {"count": 6, "item": "computercraft:cable"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/colour.json b/projects/forge/src/generated/resources/data/computercraft/recipes/colour.json index d1952921d..0578f3f7b 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/colour.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/colour.json @@ -1 +1 @@ -{"type": "computercraft:colour"} +{"type": "computercraft:colour", "category": "misc"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced.json index b9ae58575..b48c6731f 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"tag": "forge:ingots/gold"}, "G": {"tag": "forge:glass_panes"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json index 069c834ab..af913ef01 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_advanced_upgrade.json @@ -1,5 +1,6 @@ { "type": "computercraft:computer_upgrade", + "category": "redstone", "family": "ADVANCED", "key": {"#": {"tag": "forge:ingots/gold"}, "C": {"item": "computercraft:computer_normal"}}, "pattern": ["###", "#C#", "# #"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_command.json b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_command.json index 1613f6a49..55605ab85 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_command.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_command.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"tag": "forge:ingots/gold"}, "G": {"tag": "forge:glass_panes"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_normal.json index f7b6f6833..bb558a972 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/computer_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/computer_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "G": {"tag": "forge:glass_panes"}, "R": {"tag": "forge:dusts/redstone"}}, "pattern": ["###", "#R#", "#G#"], "result": {"item": "computercraft:computer_normal"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk.json index 6b973d871..1c2e811fe 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk.json @@ -1 +1 @@ -{"type": "computercraft:disk"} +{"type": "computercraft:disk", "category": "misc"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_1.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_1.json index b7b1215e1..412557950 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_1.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_1.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:black_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:1118481}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_10.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_10.json index 1d75173be..f35198fa0 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_10.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_10.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:pink_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:15905484}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_11.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_11.json index 0e3f9e072..02ee6f69e 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_11.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_11.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:lime_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:8375321}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_12.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_12.json index 2d0e84597..b53c960d9 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_12.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_12.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "forge:dusts/redstone"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_13.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_13.json index 823177c78..e4ee7fbc0 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_13.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_13.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "forge:dusts/redstone"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_14.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_14.json index 04834024d..297802da6 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_14.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_14.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "forge:dusts/redstone"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_15.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_15.json index cf4ae159a..9c8f2a91c 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_15.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_15.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "forge:dusts/redstone"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_16.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_16.json index a557786b6..5a7acb5ba 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_16.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_16.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:white_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:15790320}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_2.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_2.json index 5eaf5171a..5cb4915a4 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_2.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_2.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:red_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:13388876}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_3.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_3.json index f3d6e3cca..82914adf3 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_3.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_3.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:green_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:5744206}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_4.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_4.json index daef5eca4..51fc295f6 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_4.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_4.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:brown_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:8349260}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_5.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_5.json index a4be889f8..399a69af0 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_5.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_5.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:blue_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:3368652}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_6.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_6.json index 3819bd0f6..6442afcab 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_6.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_6.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "forge:dusts/redstone"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_7.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_7.json index 7384128eb..ca5db20ba 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_7.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_7.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:cyan_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:5020082}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_8.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_8.json index c8c1c6502..30a8a1c71 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_8.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_8.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [ {"tag": "forge:dusts/redstone"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_9.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_9.json index 6405228b5..1cc7f652d 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_9.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_9.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "group": "computercraft:disk", "ingredients": [{"tag": "forge:dusts/redstone"}, {"item": "minecraft:paper"}, {"item": "minecraft:gray_dye"}], "result": {"item": "computercraft:disk", "nbt": "{Color:5000268}"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_drive.json b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_drive.json index 78a632f8d..395931b93 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/disk_drive.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/disk_drive.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "R": {"tag": "forge:dusts/redstone"}}, "pattern": ["###", "#R#", "#R#"], "result": {"item": "computercraft:disk_drive"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_advanced.json index fdc1f42e5..8795ae3cc 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:ingots/gold"}, "G": {"tag": "forge:glass_panes"}}, "pattern": ["###", "#G#", "###"], "result": {"count": 4, "item": "computercraft:monitor_advanced"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_normal.json index 1a82254e1..8fe53c43a 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/monitor_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "G": {"tag": "forge:glass_panes"}}, "pattern": ["###", "#G#", "###"], "result": {"item": "computercraft:monitor_normal"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json index 3e9ffc667..23bf0e195 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_advanced", "key": {"#": {"item": "computercraft:speaker"}, "P": {"item": "computercraft:pocket_computer_advanced"}}, "pattern": ["#", "P"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json index c421eb36a..17ed4094a 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_advanced", "key": { "#": {"item": "computercraft:wireless_modem_advanced"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json index a649307b0..109c835a1 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_advanced/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_advanced", "key": { "#": {"item": "computercraft:wireless_modem_normal"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json index 4e8ca64df..0a39986e8 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"tag": "forge:ingots/gold"}, "A": {"item": "minecraft:golden_apple"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json index 7c1011b9a..c8079d13c 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_advanced_upgrade.json @@ -1,5 +1,6 @@ { "type": "computercraft:computer_upgrade", + "category": "redstone", "family": "ADVANCED", "key": {"#": {"tag": "forge:ingots/gold"}, "C": {"item": "computercraft:pocket_computer_normal"}}, "pattern": ["###", "#C#", "# #"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json index 138e4ef6a..5cb92f203 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"tag": "forge:stone"}, "A": {"item": "minecraft:golden_apple"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json index 5c4c023dc..0446bb4b5 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_computer_upgrade.json @@ -1 +1 @@ -{"type": "computercraft:pocket_computer_upgrade"} +{"type": "computercraft:pocket_computer_upgrade", "category": "misc"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json index b3bb6806f..ca8d35068 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_normal", "key": {"#": {"item": "computercraft:speaker"}, "P": {"item": "computercraft:pocket_computer_normal"}}, "pattern": ["#", "P"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json index 96c9fb7ab..3240eba41 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_normal", "key": { "#": {"item": "computercraft:wireless_modem_advanced"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json index fdb82cf1e..a4c219499 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/pocket_normal/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:pocket_normal", "key": { "#": {"item": "computercraft:wireless_modem_normal"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/printed_book.json b/projects/forge/src/generated/resources/data/computercraft/recipes/printed_book.json index 687985dfe..61b236898 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/printed_book.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/printed_book.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "ingredients": [{"tag": "forge:leather"}, {"item": "computercraft:printed_page"}, {"tag": "forge:string"}], "result": {"item": "computercraft:printed_book"} } diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/printed_pages.json b/projects/forge/src/generated/resources/data/computercraft/recipes/printed_pages.json index 53eec104b..8552086c7 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/printed_pages.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/printed_pages.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shapeless", + "category": "redstone", "ingredients": [ {"item": "computercraft:printed_page"}, {"item": "computercraft:printed_page"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/printer.json b/projects/forge/src/generated/resources/data/computercraft/recipes/printer.json index 9aac27b2d..abbcb5d57 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/printer.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/printer.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "D": {"tag": "forge:dyes"}, "R": {"tag": "forge:dusts/redstone"}}, "pattern": ["###", "#R#", "#D#"], "result": {"item": "computercraft:printer"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/printout.json b/projects/forge/src/generated/resources/data/computercraft/recipes/printout.json index 21e85df52..bff250bb7 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/printout.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/printout.json @@ -1 +1 @@ -{"type": "computercraft:printout"} +{"type": "computercraft:printout", "category": "misc"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/skull_cloudy.json b/projects/forge/src/generated/resources/data/computercraft/recipes/skull_cloudy.json index a21648a2d..009e639e1 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/skull_cloudy.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/skull_cloudy.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "ingredients": [{"tag": "forge:heads"}, {"item": "computercraft:monitor_normal"}], "result": { "item": "minecraft:player_head", diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/skull_dan200.json b/projects/forge/src/generated/resources/data/computercraft/recipes/skull_dan200.json index 48f256700..2657717f6 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/skull_dan200.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/skull_dan200.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "ingredients": [{"tag": "forge:heads"}, {"item": "computercraft:computer_advanced"}], "result": { "item": "minecraft:player_head", diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/speaker.json b/projects/forge/src/generated/resources/data/computercraft/recipes/speaker.json index df8799068..a46a82b1c 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/speaker.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/speaker.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { "#": {"tag": "forge:stone"}, "N": {"item": "minecraft:note_block"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced.json index 4533b5293..6a634f753 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:turtle", + "category": "redstone", "family": "ADVANCED", "key": { "#": {"tag": "forge:ingots/gold"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json index b03916f8e..0f0268796 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "computercraft:speaker"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json index 30fa0de1f..e1c816e4a 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "computercraft:wireless_modem_advanced"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json index 59bee9b44..8d835c01d 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "computercraft:wireless_modem_normal"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json index f4b6fd0bd..b616b0496 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/crafting_table.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:crafting_table"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json index 988e54d16..398adc40f 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_axe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json index 04ba561d6..a5d8252be 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_hoe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json index ac9c03067..5a3465a68 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_pickaxe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json index 839eea44e..1ff3bfd64 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_shovel.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json index 6b67bc7f6..369bf1c8d 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced/minecraft/diamond_sword.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_advanced", "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_advanced"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json index 9ad6080f4..69a1dbadd 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_upgrade.json @@ -1,5 +1,6 @@ { "type": "computercraft:computer_upgrade", + "category": "redstone", "family": "ADVANCED", "key": { "#": {"tag": "forge:ingots/gold"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal.json index 1201100ef..de4ff53b1 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:turtle", + "category": "redstone", "family": "NORMAL", "key": { "#": {"tag": "forge:ingots/iron"}, diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json index 255a0c433..154d50c58 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/speaker.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "computercraft:speaker"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json index d031e4afa..050372d0e 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "computercraft:wireless_modem_advanced"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json index 07a32a048..ae793442d 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/computercraft/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "computercraft:wireless_modem_normal"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json index 05365d33e..19827b032 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/crafting_table.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:crafting_table"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json index 59362e0c5..bc775bba0 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_axe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json index 7b3d28761..e0fd895ca 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_hoe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json index 36f660f53..73bc7573b 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_pickaxe.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json index e9e9bf05f..847a7d74a 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_shovel.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json index 483b16b7d..6c3d2a307 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal/minecraft/diamond_sword.json @@ -1,5 +1,6 @@ { "type": "computercraft:impostor_shaped", + "category": "redstone", "group": "computercraft:turtle_normal", "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_normal"}}, "pattern": ["#T"], diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json index 1aa114c8b..6e2e8db35 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_upgrade.json @@ -1 +1 @@ -{"type": "computercraft:turtle_upgrade"} +{"type": "computercraft:turtle_upgrade", "category": "misc"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem.json b/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem.json index d1ce1ff1b..a64f26dbc 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "R": {"tag": "forge:dusts/redstone"}}, "pattern": ["###", "#R#", "###"], "result": {"item": "computercraft:wired_modem"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json b/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json index 843f6c344..39de834c4 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_from.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "redstone", "ingredients": [{"item": "computercraft:wired_modem"}], "result": {"item": "computercraft:wired_modem_full"} } diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json b/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json index aca1cc1f1..cb2123f0f 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/wired_modem_full_to.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "redstone", "ingredients": [{"item": "computercraft:wired_modem_full"}], "result": {"item": "computercraft:wired_modem"} } diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json b/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json index c5704363d..03cd78153 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_advanced.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:ingots/gold"}, "E": {"item": "minecraft:ender_eye"}}, "pattern": ["###", "#E#", "###"], "result": {"item": "computercraft:wireless_modem_advanced"} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json b/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json index a328c977c..2979bb630 100644 --- a/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/wireless_modem_normal.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": {"#": {"tag": "forge:stone"}, "E": {"tag": "forge:ender_pearls"}}, "pattern": ["###", "#E#", "###"], "result": {"item": "computercraft:wireless_modem_normal"} diff --git a/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java b/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java index 5a48557a8..89114a755 100644 --- a/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java @@ -19,8 +19,10 @@ import dan200.computercraft.shared.peripheral.generic.methods.FluidMethods; import dan200.computercraft.shared.peripheral.generic.methods.InventoryMethods; import dan200.computercraft.shared.platform.NetworkHandler; +import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.event.CreativeModeTabEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; @@ -59,6 +61,11 @@ public static void registerCapabilities(RegisterCapabilitiesEvent event) { event.register(IPeripheral.class); } + @SubscribeEvent + public static void registerCreativeTab(CreativeModeTabEvent.Register event) { + event.registerCreativeModeTab(new ResourceLocation(ComputerCraftAPI.MOD_ID, "tab"), ModRegistry::registerCreativeTab); + } + @SubscribeEvent public static void init(FMLCommonSetupEvent event) { event.enqueueWork(ModRegistry::registerMainThread); diff --git a/projects/forge/src/main/java/dan200/computercraft/data/Generators.java b/projects/forge/src/main/java/dan200/computercraft/data/Generators.java index 313de9fab..2852c2699 100644 --- a/projects/forge/src/main/java/dan200/computercraft/data/Generators.java +++ b/projects/forge/src/main/java/dan200/computercraft/data/Generators.java @@ -5,96 +5,73 @@ */ package dan200.computercraft.data; -import com.mojang.datafixers.util.Pair; import dan200.computercraft.api.ComputerCraftAPI; +import dan200.computercraft.shared.platform.RegistryWrappers; +import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; import net.minecraft.data.loot.LootTableProvider; import net.minecraft.data.models.BlockModelGenerators; import net.minecraft.data.models.ItemModelGenerators; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.data.recipes.RecipeProvider; -import net.minecraft.data.tags.BlockTagsProvider; import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.TagsProvider; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.ValidationContext; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; +import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; +import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; -import java.util.function.Supplier; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class Generators { @SubscribeEvent public static void gather(GatherDataEvent event) { var generator = event.getGenerator(); - DataProviders.add( - generator, new GeneratorFactoryImpl(generator, event.getExistingFileHelper()), - event.includeServer(), event.includeClient() - ); + DataProviders.add(new GeneratorFactoryImpl(generator.getVanillaPack(true), event.getExistingFileHelper(), event.getLookupProvider())); } private record GeneratorFactoryImpl( - DataGenerator generator, ExistingFileHelper existingFiles - ) implements DataProviders.GeneratorFactory { + DataGenerator.PackGenerator generator, + ExistingFileHelper existingFiles, + CompletableFuture registries + ) implements DataProviders.GeneratorSink { @Override - public DataProvider recipes(Consumer> recipes) { - return new RecipeProvider(generator) { - @Override - protected void buildCraftingRecipes(Consumer consumer) { - recipes.accept(consumer); - } - }; + public T add(DataProvider.Factory factory) { + return generator.addProvider(factory); } @Override - public List lootTable(List>>, LootContextParamSet>> tables) { - return List.of(new LootTableProvider(generator) { - @Override - protected List>>, LootContextParamSet>> getTables() { - return tables; - } + public void lootTable(List tables) { + add(out -> new LootTableProvider(out, Set.of(), tables)); + } + @Override + public TagsProvider blockTags(Consumer> tags) { + return add(out -> new BlockTagsProvider(out, registries, ComputerCraftAPI.MOD_ID, existingFiles) { @Override - protected void validate(Map map, ValidationContext tracker) { - map.forEach((id, table) -> LootTables.validate(tracker, id, table)); + protected void addTags(HolderLookup.Provider registries) { + tags.accept(x -> new TagProvider.TagAppender<>(RegistryWrappers.BLOCKS, getOrCreateRawBuilder(x))); } }); } - @Override - public TagsProvider blockTags(Consumer> tags) { - return new BlockTagsProvider(generator, ComputerCraftAPI.MOD_ID, existingFiles) { - @Override - protected void addTags() { - tags.accept(this::tag); - } - }; - } - @Override public TagsProvider itemTags(Consumer tags, TagsProvider blocks) { - return new ItemTagsProvider(generator, (BlockTagsProvider) blocks, ComputerCraftAPI.MOD_ID, existingFiles) { + return add(out -> new ItemTagsProvider(out, registries, blocks, ComputerCraftAPI.MOD_ID, existingFiles) { @Override - protected void addTags() { + protected void addTags(HolderLookup.Provider registries) { var self = this; tags.accept(new TagProvider.ItemTagConsumer() { @Override - public TagAppender tag(TagKey tag) { - return self.tag(tag); + public TagProvider.TagAppender tag(TagKey tag) { + return new TagProvider.TagAppender<>(RegistryWrappers.ITEMS, getOrCreateRawBuilder(tag)); } @Override @@ -103,12 +80,12 @@ public void copy(TagKey block, TagKey item) { } }); } - }; + }); } @Override - public DataProvider models(Consumer blocks, Consumer items) { - return new ModelProvider(generator, blocks, items); + public void models(Consumer blocks, Consumer items) { + add(out -> new ModelProvider(out, blocks, items)); } } } diff --git a/projects/forge/src/main/java/dan200/computercraft/shared/details/FluidData.java b/projects/forge/src/main/java/dan200/computercraft/shared/details/FluidData.java index 197bfa151..3ea8c9345 100644 --- a/projects/forge/src/main/java/dan200/computercraft/shared/details/FluidData.java +++ b/projects/forge/src/main/java/dan200/computercraft/shared/details/FluidData.java @@ -5,14 +5,14 @@ */ package dan200.computercraft.shared.details; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraftforge.fluids.FluidStack; import java.util.Map; public class FluidData { public static void fillBasic(Map data, FluidStack stack) { - data.put("name", DetailHelpers.getId(Registries.FLUIDS, stack.getFluid())); + data.put("name", DetailHelpers.getId(RegistryWrappers.FLUIDS, stack.getFluid())); data.put("amount", stack.getAmount()); } diff --git a/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/FluidMethods.java b/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/FluidMethods.java index 62c4d79d2..102f96fde 100644 --- a/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/FluidMethods.java +++ b/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/FluidMethods.java @@ -12,7 +12,7 @@ import dan200.computercraft.api.peripheral.GenericPeripheral; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.PeripheralType; -import dan200.computercraft.shared.platform.Registries; +import dan200.computercraft.shared.platform.RegistryWrappers; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ICapabilityProvider; @@ -90,7 +90,7 @@ public static int pushFluid( String toName, Optional limit, Optional fluidName ) throws LuaException { var fluid = fluidName.isPresent() - ? getRegistryEntry(fluidName.get(), "fluid", Registries.FLUIDS) + ? getRegistryEntry(fluidName.get(), "fluid", RegistryWrappers.FLUIDS) : null; // Find location to transfer to @@ -130,7 +130,7 @@ public static int pullFluid( String fromName, Optional limit, Optional fluidName ) throws LuaException { var fluid = fluidName.isPresent() - ? getRegistryEntry(fluidName.get(), "fluid", Registries.FLUIDS) + ? getRegistryEntry(fluidName.get(), "fluid", RegistryWrappers.FLUIDS) : null; // Find location to transfer to 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 35dffa5b4..08ed9cae5 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 @@ -13,7 +13,6 @@ import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.impl.Peripherals; import dan200.computercraft.shared.Capabilities; -import dan200.computercraft.shared.ModRegistry; import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.network.client.ClientNetworkContext; import dan200.computercraft.shared.network.container.ContainerData; @@ -52,6 +51,7 @@ 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; @@ -65,10 +65,9 @@ import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; import net.minecraftforge.network.NetworkHooks; -import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistry; +import net.minecraftforge.registries.RegisterEvent; import net.minecraftforge.registries.RegistryManager; -import net.minecraftforge.registries.RegistryObject; import javax.annotation.Nullable; import java.util.*; @@ -79,18 +78,6 @@ @AutoService(dan200.computercraft.impl.PlatformHelper.class) public class PlatformHelperImpl implements PlatformHelper { - private final CreativeModeTab tab = new CreativeModeTab(ComputerCraftAPI.MOD_ID) { - @Override - public ItemStack makeIcon() { - return new ItemStack(ModRegistry.Blocks.COMPUTER_NORMAL.get()); - } - }; - - @Override - public CreativeModeTab getCreativeTab() { - return tab; - } - @Override public ResourceLocation getRegistryKey(ResourceKey> registry, T object) { var key = RegistryManager.ACTIVE.getRegistry(registry).getKey(object); @@ -106,13 +93,13 @@ public T getRegistryObject(ResourceKey> registry, ResourceLocati } @Override - public Registries.RegistryWrapper wrap(ResourceKey> key) { + public RegistryWrappers.RegistryWrapper wrap(ResourceKey> key) { return new RegistryWrapperImpl<>(key.location(), RegistryManager.ACTIVE.getRegistry(key)); } @Override public RegistrationHelper createRegistrationHelper(ResourceKey> registry) { - return new RegistrationHelperImpl<>(DeferredRegister.create(registry, ComputerCraftAPI.MOD_ID)); + return new RegistrationHelperImpl<>(registry); } @Nullable @@ -261,9 +248,10 @@ public int getBurnTime(ItemStack stack) { return ForgeHooks.getBurnTime(stack, null); } + @Nullable @Override - public Collection getCreativeTabs(ItemStack stack) { - return stack.getItem().getCreativeTabs(); + public ResourceLocation getCreativeTabId(CreativeModeTab tab) { + return CreativeModeTabRegistry.getName(tab); } @Override @@ -337,7 +325,7 @@ public InteractionResult useOn(ServerPlayer player, ItemStack stack, BlockHitRes private record RegistryWrapperImpl( ResourceLocation name, ForgeRegistry registry - ) implements Registries.RegistryWrapper { + ) implements RegistryWrappers.RegistryWrapper { @Override public int getId(T object) { var id = registry.getID(object); @@ -378,27 +366,55 @@ public Iterator iterator() { } } - private record RegistrationHelperImpl(DeferredRegister registry) implements RegistrationHelper { + // TODO: Switch back to using a DeferredRegistry: Right now it's broken for some registry types. + private static final class RegistrationHelperImpl implements RegistrationHelper { + private final ResourceKey> registry; + private final List> entries = new ArrayList<>(); + + private RegistrationHelperImpl(ResourceKey> registry) { + this.registry = registry; + } + @Override public RegistryEntry register(String name, Supplier create) { - return new RegistryEntryImpl<>(registry.register(name, create)); + var entry = new RegistryEntryImpl<>(new ResourceLocation(ComputerCraftAPI.MOD_ID, name), create); + entries.add(entry); + return entry; } @Override public void register() { - registry.register(FMLJavaModLoadingContext.get().getModEventBus()); + FMLJavaModLoadingContext.get().getModEventBus().addListener((RegisterEvent event) -> { + event.register(registry, helper -> { + for (var object : entries) object.register(helper); + }); + }); } } - private record RegistryEntryImpl(RegistryObject object) implements RegistryEntry { + private static final class RegistryEntryImpl implements RegistryEntry { + private final ResourceLocation id; + private final Supplier supplier; + private @Nullable T instance; + + RegistryEntryImpl(ResourceLocation id, Supplier supplier) { + this.id = id; + this.supplier = supplier; + } + + void register(RegisterEvent.RegisterHelper registry) { + registry.register(id, instance = supplier.get()); + } + @Override public ResourceLocation id() { - return object().getId(); + return id; } @Override public T get() { - return object.get(); + if (instance == null) throw new IllegalStateException(id + " has not been constructed yet"); + return instance; } } diff --git a/projects/forge/src/main/resources/META-INF/mods.toml b/projects/forge/src/main/resources/META-INF/mods.toml index 02eebd5fc..56df7d159 100644 --- a/projects/forge/src/main/resources/META-INF/mods.toml +++ b/projects/forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" -loaderVersion="[43,44)" +loaderVersion="[44,45)" issueTrackerURL="https://github.com/cc-tweaked/CC-Tweaked/issues" logoFile="pack.png" @@ -21,6 +21,6 @@ CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles a [[dependencies.computercraft]] modId="forge" mandatory=true - versionRange="[${forgeVersion},44)" + versionRange="[${forgeVersion},45)" ordering="NONE" side="BOTH"