From d104034824cfadd477b595d665f758944dec116a Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Mon, 1 May 2023 16:42:13 +0300 Subject: [PATCH 1/7] Update Fabric Loader to latest version (#401) Fixes duplicate copies of Loader (pre-0.14 and post-0.14) ending up on the runtime classpath of API users and prevents a crash. --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f47fed14..637c3edb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,11 +13,11 @@ archives_base_name_snapshot=architectury-snapshot base_version=4.11 maven_group=dev.architectury -fabric_loader_version=0.13.3 +fabric_loader_version=0.14.19 fabric_api_version=0.58.0+1.18.2 mod_menu_version=3.0.0 forge_version=40.1.14 curseforge_id=419699 -modrinth_id=lhGA9TYQ \ No newline at end of file +modrinth_id=lhGA9TYQ From 3153b3d11b97f0b535ddbec533621de834fa47b0 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 2/7] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.BlockEvent; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(BlockItem.class) public abstract class MixinBlockItem { - @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void place(BlockPlaceContext context, CallbackInfoReturnable cir) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @Inject(method = "place", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/BlockItem;placeBlock(Lnet/minecraft/world/item/context/BlockPlaceContext;Lnet/minecraft/world/level/block/state/BlockState;)Z"), + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + private void place(BlockPlaceContext _0, CallbackInfoReturnable cir, BlockPlaceContext context, BlockState placedState) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } } From b29a2723043651c60c77a9b3b12c31d691a74a5c Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 3/7] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.BlockEvent; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(BlockItem.class) public abstract class MixinBlockItem { - @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void place(BlockPlaceContext context, CallbackInfoReturnable cir) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @Inject(method = "place", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/BlockItem;placeBlock(Lnet/minecraft/world/item/context/BlockPlaceContext;Lnet/minecraft/world/level/block/state/BlockState;)Z"), + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + private void place(BlockPlaceContext _0, CallbackInfoReturnable cir, BlockPlaceContext context, BlockState placedState) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } } From 935b06c72f7165498940423db7fcfa0daaf574e6 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 4/7] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.BlockEvent; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(BlockItem.class) public abstract class MixinBlockItem { - @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void place(BlockPlaceContext context, CallbackInfoReturnable cir) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @Inject(method = "place", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/BlockItem;placeBlock(Lnet/minecraft/world/item/context/BlockPlaceContext;Lnet/minecraft/world/level/block/state/BlockState;)Z"), + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + private void place(BlockPlaceContext _0, CallbackInfoReturnable cir, BlockPlaceContext context, BlockState placedState) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } } From 425b872c2aa74a36c4552f1096d3d102168e4174 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 5/7] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.BlockEvent; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(BlockItem.class) public abstract class MixinBlockItem { - @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void place(BlockPlaceContext context, CallbackInfoReturnable cir) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @Inject(method = "place", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/BlockItem;placeBlock(Lnet/minecraft/world/item/context/BlockPlaceContext;Lnet/minecraft/world/level/block/state/BlockState;)Z"), + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + private void place(BlockPlaceContext _0, CallbackInfoReturnable cir, BlockPlaceContext context, BlockState placedState) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } } From bac942161590da64cc94502a53a35a9e6f2f3ee2 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 9 Jul 2023 17:35:18 +0800 Subject: [PATCH 6/7] Fix tooltip color event (#412) * Fix color tooltip event * Make it final --- .../events/client/ClientTooltipEvent.java | 2 +- .../impl/TooltipEventColorContextImpl.java | 1 + .../mixin/fabric/client/MixinScreen.java | 21 +-------- .../fabric/client/MixinTooltipRenderUtil.java | 44 +++++++++++++++++++ .../main/resources/architectury.mixins.json | 1 + .../event/forge/EventHandlerImplClient.java | 5 +-- forge/src/main/resources/META-INF/mods.toml | 4 +- gradle.properties | 2 +- .../architectury/test/events/DebugEvents.java | 5 +++ 9 files changed, 59 insertions(+), 26 deletions(-) create mode 100644 fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java diff --git a/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java b/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java index cb78c17b..20723ee0 100644 --- a/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java +++ b/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java @@ -52,7 +52,7 @@ public interface ClientTooltipEvent { /** * @see RenderModifyColor#renderTooltip(PoseStack, int, int, ColorContext) */ - // Event RENDER_MODIFY_COLOR = EventFactory.createLoop(); + Event RENDER_MODIFY_COLOR = EventFactory.createLoop(); static AdditionalContexts additionalContexts() { return TooltipAdditionalContextsImpl.get(); diff --git a/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java b/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java index 009b7dfd..7de4c76f 100644 --- a/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java +++ b/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.ApiStatus; @ApiStatus.Internal public class TooltipEventColorContextImpl implements ClientTooltipEvent.ColorContext { + public static final ThreadLocal CONTEXT = ThreadLocal.withInitial(TooltipEventColorContextImpl::new); private int backgroundColor; private int outlineGradientTopColor; private int outlineGradientBottomColor; diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinScreen.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinScreen.java index 51de6d53..56e5a0d9 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinScreen.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinScreen.java @@ -46,8 +46,6 @@ public abstract class MixinScreen implements ScreenInputDelegate { @Unique private static ThreadLocal tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new); @Unique - private static ThreadLocal tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new); - @Unique private ScreenAccessImpl access; @Shadow @@ -99,14 +97,14 @@ public abstract class MixinScreen implements ScreenInputDelegate { @Inject(method = "renderTooltipInternal", at = @At("HEAD"), cancellable = true) private void renderTooltip(PoseStack poseStack, List list, int x, int y, ClientTooltipPositioner positioner, CallbackInfo ci) { if (!list.isEmpty()) { - var colorContext = tooltipColorContext.get(); + var colorContext = TooltipEventColorContextImpl.CONTEXT.get(); colorContext.reset(); var positionContext = tooltipPositionContext.get(); positionContext.reset(x, y); if (ClientTooltipEvent.RENDER_PRE.invoker().renderTooltip(poseStack, list, x, y).isFalse()) { ci.cancel(); } else { - // ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(poseStack, x, y, colorContext); + ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(poseStack, x, y, colorContext); ClientTooltipEvent.RENDER_MODIFY_POSITION.invoker().renderTooltip(poseStack, positionContext); } } @@ -123,19 +121,4 @@ public abstract class MixinScreen implements ScreenInputDelegate { private int modifyTooltipY(int original) { return tooltipPositionContext.get().getTooltipY(); } - - // @ModifyConstant(method = "renderTooltipInternal", constant = @Constant(intValue = 0xf0100010)) - // private int modifyTooltipBackgroundColor(int original) { - // return tooltipColorContext.get().getBackgroundColor(); - // } - - // @ModifyConstant(method = "renderTooltipInternal", constant = @Constant(intValue = 0x505000ff)) - // private int modifyTooltipOutlineGradientTopColor(int original) { - // return tooltipColorContext.get().getOutlineGradientTopColor(); - // } - - // @ModifyConstant(method = "renderTooltipInternal", constant = @Constant(intValue = 0x5028007f)) - // private int modifyTooltipOutlineGradientBottomColor(int original) { - // return tooltipColorContext.get().getOutlineGradientBottomColor(); - // } } diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java new file mode 100644 index 00000000..cfd04602 --- /dev/null +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java @@ -0,0 +1,44 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.mixin.fabric.client; + +import dev.architectury.impl.TooltipEventColorContextImpl; +import net.minecraft.client.gui.screens.inventory.tooltip.TooltipRenderUtil; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; + +@Mixin(TooltipRenderUtil.class) +public abstract class MixinTooltipRenderUtil { + @ModifyConstant(method = "renderTooltipBackground", constant = @Constant(intValue = 0xf0100010)) + private static int modifyTooltipBackgroundColor(int original) { + return TooltipEventColorContextImpl.CONTEXT.get().getBackgroundColor(); + } + + @ModifyConstant(method = "renderTooltipBackground", constant = @Constant(intValue = 0x505000ff)) + private static int modifyTooltipOutlineGradientTopColor(int original) { + return TooltipEventColorContextImpl.CONTEXT.get().getOutlineGradientTopColor(); + } + + @ModifyConstant(method = "renderTooltipBackground", constant = @Constant(intValue = 0x5028007f)) + private static int modifyTooltipOutlineGradientBottomColor(int original) { + return TooltipEventColorContextImpl.CONTEXT.get().getOutlineGradientBottomColor(); + } +} diff --git a/fabric/src/main/resources/architectury.mixins.json b/fabric/src/main/resources/architectury.mixins.json index 79283ec2..6d9bbc1c 100644 --- a/fabric/src/main/resources/architectury.mixins.json +++ b/fabric/src/main/resources/architectury.mixins.json @@ -19,6 +19,7 @@ "client.MixinMouseHandler", "client.MixinMultiPlayerGameMode", "client.MixinScreen", + "client.MixinTooltipRenderUtil" ], "mixins": [ "BiomeAccessor", diff --git a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java index 659283f8..61d72cf7 100644 --- a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java +++ b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java @@ -172,7 +172,6 @@ public class EventHandlerImplClient { ClientRecipeUpdateEvent.EVENT.invoker().update(event.getRecipeManager()); } - private static final ThreadLocal tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new); private static final ThreadLocal tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new); @SubscribeEvent(priority = EventPriority.HIGH) @@ -202,12 +201,12 @@ public class EventHandlerImplClient { ClientTooltipEvent.additionalContexts().setItem(event.getItemStack()); try { - TooltipEventColorContextImpl colorContext = tooltipColorContext.get(); + TooltipEventColorContextImpl colorContext = TooltipEventColorContextImpl.CONTEXT.get(); colorContext.reset(); colorContext.setBackgroundColor(event.getBackgroundStart()); colorContext.setOutlineGradientTopColor(event.getBorderStart()); colorContext.setOutlineGradientBottomColor(event.getBorderEnd()); - // ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(stack, event.getX(), event.getY(), colorContext); + ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(stack, event.getX(), event.getY(), colorContext); event.setBackground(colorContext.getBackgroundColor()); event.setBorderEnd(colorContext.getOutlineGradientBottomColor()); event.setBorderStart(colorContext.getOutlineGradientTopColor()); diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index d4086035..ae96c64b 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -17,13 +17,13 @@ license = "LGPL-3" [[dependencies.architectury]] modId = "minecraft" mandatory = true -versionRange = "[1.19.3,)" +versionRange = "[1.19.4,)" ordering = "NONE" side = "BOTH" [[dependencies.architectury]] modId = "forge" mandatory = true -versionRange = "[44.0.6,)" +versionRange = "[45.1.0,)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index ae56c1c0..23a247c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ fabric_loader_version=0.14.19 fabric_api_version=0.76.0+1.19.4 mod_menu_version=5.0.2 -forge_version=45.0.24 +forge_version=45.1.0 curseforge_id=419699 modrinth_id=lhGA9TYQ diff --git a/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java b/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java index 279e02a2..2995dd9d 100644 --- a/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java +++ b/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java @@ -350,6 +350,11 @@ public class DebugEvents { TestMod.SINK.accept("Screen has been changed to " + toSimpleName(screen)); return CompoundEventResult.pass(); }); + ClientTooltipEvent.RENDER_MODIFY_COLOR.register((matrices, x, y, context) -> { + context.setBackgroundColor(0xf0ffeded); + context.setOutlineGradientTopColor(0xf0ff5c5c); + context.setOutlineGradientBottomColor(0xf0f74d4d); + }); } private static String chunkPos(int x, int z) { From e542e2d367edfb4b1fdb788e2c65d23de43f592a Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 9 Jul 2023 17:36:46 +0800 Subject: [PATCH 7/7] Bump minor version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 23a247c0..8887a5d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ artifact_type=release archives_base_name=architectury archives_base_name_snapshot=architectury-snapshot -base_version=8.1 +base_version=8.2 maven_group=dev.architectury fabric_loader_version=0.14.19