diff --git a/Common/src/main/java/tschipp/carryon/CarryOnCommon.java b/Common/src/main/java/tschipp/carryon/CarryOnCommon.java index 2d5c0b1..5f911f4 100644 --- a/Common/src/main/java/tschipp/carryon/CarryOnCommon.java +++ b/Common/src/main/java/tschipp/carryon/CarryOnCommon.java @@ -82,7 +82,7 @@ public class CarryOnCommon if (!Constants.COMMON_CONFIG.settings.slownessInCreative && player.isCreative()) return; - player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 1, potionLevel(carry, player.level), false, false)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 1, potionLevel(carry, player.level()), false, false)); Inventory inv = player.getInventory(); inv.selected = carry.getSelected(); @@ -119,7 +119,7 @@ public class CarryOnCommon public static void onPlayerAttacked(Player player) { - if (Constants.COMMON_CONFIG.settings.dropCarriedWhenHit && !player.level.isClientSide) + if (Constants.COMMON_CONFIG.settings.dropCarriedWhenHit && !player.level().isClientSide) { CarryOnData carry = CarryOnDataManager.getCarryData(player); if (carry.isCarrying()) diff --git a/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java b/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java index 03ca74d..7e97815 100644 --- a/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java +++ b/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java @@ -274,7 +274,7 @@ public class CarryRenderHelper if(state.getRenderShape() != RenderShape.MODEL || model.isCustomRenderer() || model.getQuads(state, null, RandomSource.create()).size() <= 0) { ItemStack stack = new ItemStack(state.getBlock()); - model = renderer.getModel(stack, player.level, player, 0); + model = renderer.getModel(stack, player.level(), player, 0); } Optional ov = ModelOverrideHandler.getModelOverride(state, carry.getContentNbt()); @@ -282,7 +282,7 @@ public class CarryRenderHelper { var renderObj = ov.get().getRenderObject(); if(renderObj.left().isPresent()) - model = renderer.getModel(renderObj.left().get(), player.level, player, 0); + model = renderer.getModel(renderObj.left().get(), player.level(), player, 0); } return model; @@ -291,14 +291,14 @@ public class CarryRenderHelper public static Entity getRenderEntity(Player player) { CarryOnData carry = CarryOnDataManager.getCarryData(player); - Entity entity = carry.getEntity(player.level); + Entity entity = carry.getEntity(player.level()); if(carry.getActiveScript().isPresent()) { CarryOnScript script = carry.getActiveScript().get(); ScriptRender render = script.scriptRender(); if(render.renderNameEntity().isPresent()) - entity = BuiltInRegistries.ENTITY_TYPE.get(render.renderNameEntity().get()).create(player.level); + entity = BuiltInRegistries.ENTITY_TYPE.get(render.renderNameEntity().get()).create(player.level()); if(render.renderNBT().isPresent()) entity.load(render.renderNBT().get()); @@ -313,7 +313,7 @@ public class CarryRenderHelper if(carry.isCarrying(CarryType.BLOCK)) { BlockState state = getRenderState(player); - VoxelShape shape = state.getShape(player.level, player.blockPosition()); + VoxelShape shape = state.getShape(player.level(), player.blockPosition()); if(shape == null || shape.isEmpty()) return 1f; Optional ov = ModelOverrideHandler.getModelOverride(state, carry.getContentNbt()); @@ -341,7 +341,7 @@ public class CarryRenderHelper if(carry.isCarrying(CarryType.BLOCK)) { BlockState state = getRenderState(player); - VoxelShape shape = state.getShape(player.level, player.blockPosition()); + VoxelShape shape = state.getShape(player.level(), player.blockPosition()); if(shape == null || shape.isEmpty()) return 1f; Optional ov = ModelOverrideHandler.getModelOverride(state, carry.getContentNbt()); diff --git a/Common/src/main/java/tschipp/carryon/common/carry/PickupHandler.java b/Common/src/main/java/tschipp/carryon/common/carry/PickupHandler.java index 278218f..8d477e7 100644 --- a/Common/src/main/java/tschipp/carryon/common/carry/PickupHandler.java +++ b/Common/src/main/java/tschipp/carryon/common/carry/PickupHandler.java @@ -208,7 +208,7 @@ public class PickupHandler { Services.PLATFORM.sendPacketToPlayer(Constants.PACKET_ID_START_RIDING, new ClientboundStartRidingPacket(otherPlayer.getId(), true), player); carry.setCarryingPlayer(); player.swing(InteractionHand.MAIN_HAND, true); - player.level.playSound(null, player.getOnPos(), SoundEvents.ARMOR_EQUIP_GENERIC, SoundSource.AMBIENT, 1.0f, 0.5f); + player.level().playSound(null, player.getOnPos(), SoundEvents.ARMOR_EQUIP_GENERIC, SoundSource.AMBIENT, 1.0f, 0.5f); CarryOnDataManager.setCarryData(player, carry); return true; @@ -230,7 +230,7 @@ public class PickupHandler { carry.setEntity(entity); entity.remove(RemovalReason.UNLOADED_WITH_PLAYER); - player.level.playSound(null, player.getOnPos(), SoundEvents.ARMOR_EQUIP_GENERIC, SoundSource.AMBIENT, 1.0f, 0.5f); + player.level().playSound(null, player.getOnPos(), SoundEvents.ARMOR_EQUIP_GENERIC, SoundSource.AMBIENT, 1.0f, 0.5f); CarryOnDataManager.setCarryData(player, carry); player.swing(InteractionHand.MAIN_HAND, true); return true; diff --git a/Common/src/main/java/tschipp/carryon/common/carry/PlacementHandler.java b/Common/src/main/java/tschipp/carryon/common/carry/PlacementHandler.java index 1c41048..07e816b 100644 --- a/Common/src/main/java/tschipp/carryon/common/carry/PlacementHandler.java +++ b/Common/src/main/java/tschipp/carryon/common/carry/PlacementHandler.java @@ -45,7 +45,7 @@ public class PlacementHandler if (player.tickCount == carry.getTick()) return false; - Level level = player.getLevel(); + Level level = player.level(); BlockState state = carry.getBlock(); BlockPlaceContext context = new BlockPlaceContext(player, InteractionHand.MAIN_HAND, ItemStack.EMPTY, BlockHitResult.miss(player.position(), facing, pos)); @@ -106,7 +106,7 @@ public class PlacementHandler } } - BlockState updatedState = Block.updateFromNeighbourShapes(state, player.level, pos); + BlockState updatedState = Block.updateFromNeighbourShapes(state, player.level(), pos); if (updatedState.getBlock() == state.getBlock()) state = updatedState; @@ -132,7 +132,7 @@ public class PlacementHandler if (player.tickCount == carry.getTick()) return false; - Level level = player.getLevel(); + Level level = player.level(); BlockPlaceContext context = new BlockPlaceContext(player, InteractionHand.MAIN_HAND, ItemStack.EMPTY, BlockHitResult.miss(player.position(), facing, pos)); if (!level.getBlockState(pos).canBeReplaced(context)) @@ -185,7 +185,7 @@ public class PlacementHandler if (!carry.isCarrying(CarryType.ENTITY) && !carry.isCarrying(CarryType.PLAYER)) return; - Level level = player.level; + Level level = player.level(); Entity entityHeld; if (carry.isCarrying(CarryType.ENTITY)) entityHeld = carry.getEntity(level); @@ -250,7 +250,7 @@ public class PlacementHandler public static void placeCarriedOnDeath(ServerPlayer oldPlayer, ServerPlayer newPlayer, boolean died) { CarryOnData carry = CarryOnDataManager.getCarryData(oldPlayer); - if (oldPlayer.level.getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) || !died) { + if (oldPlayer.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) || !died) { if (!carry.isCarrying(CarryType.PLAYER)) { CarryOnDataManager.setCarryData(newPlayer, carry); newPlayer.getInventory().selected = oldPlayer.getInventory().selected; @@ -265,17 +265,17 @@ public class PlacementHandler { CarryOnData carry = CarryOnDataManager.getCarryData(player); if (carry.isCarrying(CarryType.ENTITY)) { - Entity entity = carry.getEntity(player.level); + Entity entity = carry.getEntity(player.level()); entity.setPos(player.position()); - player.level.addFreshEntity(entity); + player.level().addFreshEntity(entity); } else if (carry.isCarrying(CarryType.BLOCK)) { BlockPlaceContext context = new BlockPlaceContext(player, InteractionHand.MAIN_HAND, ItemStack.EMPTY, BlockHitResult.miss(Vec3.atCenterOf(player.blockPosition()), Direction.DOWN, player.blockPosition())); BlockState state = getPlacementState(carry.getBlock(), player, context, player.blockPosition()); BlockPos pos = getDeathPlacementPos(state, player); BlockEntity blockEntity = carry.getBlockEntity(pos); - player.level.setBlock(pos, state, 3); + player.level().setBlock(pos, state, 3); if (blockEntity != null) - player.level.setBlockEntity(blockEntity); + player.level().setBlockEntity(blockEntity); } else if (carry.isCarrying(CarryType.PLAYER)) { player.ejectPassengers(); } @@ -307,7 +307,7 @@ public class PlacementHandler for(BlockPos potential : potentialPositions) { BlockPlaceContext context = new BlockPlaceContext(player, InteractionHand.MAIN_HAND, ItemStack.EMPTY, BlockHitResult.miss(Vec3.atCenterOf(potential), Direction.DOWN, potential)); - boolean canPlace = state.canSurvive(player.level, potential) && player.level.getBlockState(potential).canBeReplaced(context) && player.level.isUnobstructed(state, potential, CollisionContext.of(player)); + boolean canPlace = state.canSurvive(player.level(), potential) && player.level().getBlockState(potential).canBeReplaced(context) && player.level().isUnobstructed(state, potential, CollisionContext.of(player)); if (canPlace) return potential; diff --git a/Common/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java b/Common/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java index dddeddf..b2bea06 100644 --- a/Common/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java +++ b/Common/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java @@ -75,7 +75,7 @@ public class CommandCarryOn } else if (carry.isCarrying(CarryType.ENTITY)) { - Entity entity = carry.getEntity(player.level); + Entity entity = carry.getEntity(player.level()); log(source,"Entity: " + entity); log(source,"Entity Name: " + entity.getType()); log(source,"NBT: " + carry.getNbt()); @@ -112,11 +112,14 @@ public class CommandCarryOn cleared++; } + int finalCleared = cleared; - if (cleared != 1) - source.sendSuccess(Component.literal("Cleared " + cleared + " Items!"), true); - else - source.sendSuccess(Component.literal("Cleared " + cleared + " Item!"), true); + if (cleared != 1) { + source.sendSuccess(() -> Component.literal("Cleared " + finalCleared + " Items!"), true); + } + else { + source.sendSuccess(() -> Component.literal("Cleared " + finalCleared + " Item!"), true); + } return 1; } @@ -129,18 +132,20 @@ public class CommandCarryOn PlacementHandler.placeCarried(player); cleared++; } + int finalCleared = cleared; - if (cleared != 1) - source.sendSuccess(Component.literal("Placed " + cleared + " Items!"), true); + if (cleared != 1) { + source.sendSuccess(() -> Component.literal("Placed " + finalCleared + " Items!"), true); + } else - source.sendSuccess(Component.literal("Placed " + cleared + " Item!"), true); + source.sendSuccess(() -> Component.literal("Placed " + finalCleared + " Item!"), true); return 1; } private static void log(CommandSourceStack source, String toLog) { - source.sendSuccess(Component.literal(toLog), true); + source.sendSuccess(() -> Component.literal(toLog), true); Constants.LOG.info(toLog); } } diff --git a/Common/src/main/java/tschipp/carryon/common/scripting/CarryOnScript.java b/Common/src/main/java/tschipp/carryon/common/scripting/CarryOnScript.java index 68ceb92..23e46a3 100644 --- a/Common/src/main/java/tschipp/carryon/common/scripting/CarryOnScript.java +++ b/Common/src/main/java/tschipp/carryon/common/scripting/CarryOnScript.java @@ -74,17 +74,15 @@ public record CarryOnScript( public record ScriptObjectBlock( Optional> typeNameBlock, - MaterialCondition typeMaterial, NumberBoundCondition typeHardness, NumberBoundCondition typeResistance, NBTCondition typeBlockTag ){ - public static final ScriptObjectBlock EMPTY = new ScriptObjectBlock(Optional.empty(), MaterialCondition.NONE, NumberBoundCondition.NONE, NumberBoundCondition.NONE, NBTCondition.NONE); + public static final ScriptObjectBlock EMPTY = new ScriptObjectBlock(Optional.empty(), NumberBoundCondition.NONE, NumberBoundCondition.NONE, NBTCondition.NONE); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourceKey.codec(Registries.BLOCK).optionalFieldOf("name").forGetter(ScriptObjectBlock::typeNameBlock), - MaterialCondition.CODEC.optionalFieldOf("material", MaterialCondition.NONE).forGetter(ScriptObjectBlock::typeMaterial), NumberBoundCondition.CODEC.optionalFieldOf("hardness", NumberBoundCondition.NONE).forGetter(ScriptObjectBlock::typeHardness), NumberBoundCondition.CODEC.optionalFieldOf("resistance", NumberBoundCondition.NONE).forGetter(ScriptObjectBlock::typeResistance), NBTCondition.CODEC.optionalFieldOf("nbt", NBTCondition.NONE).forGetter(ScriptObjectBlock::typeBlockTag) diff --git a/Common/src/main/java/tschipp/carryon/common/scripting/Matchables.java b/Common/src/main/java/tschipp/carryon/common/scripting/Matchables.java index 5bc0af9..b2a7f94 100644 --- a/Common/src/main/java/tschipp/carryon/common/scripting/Matchables.java +++ b/Common/src/main/java/tschipp/carryon/common/scripting/Matchables.java @@ -10,7 +10,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.ServerAdvancementManager; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.Objective; import net.minecraft.world.scores.Score; @@ -97,91 +96,6 @@ public final class Matchables } } - public record MaterialCondition(String material) implements Matchable - { - public static final Codec CODEC = Codec.STRING.xmap(MaterialCondition::new, MaterialCondition::material); - - public static final MaterialCondition NONE = new MaterialCondition(""); - - @Override - public boolean matches(Material material) - { - if (this.material == null || this.material.isEmpty()) - return true; - - switch (this.material) { - case "air": - return material == Material.AIR; - case "anvil": - return material == Material.HEAVY_METAL; - case "barrier": - return material == Material.BARRIER; - case "cactus": - return material == Material.CACTUS; - case "cake": - return material == Material.CAKE; - case "carpet": - return material == Material.CLOTH_DECORATION; - case "clay": - return material == Material.CLAY; - case "cloth": - return material == Material.WOOL; - case "dragon_egg": - return material == Material.EGG; - case "fire": - return material == Material.FIRE; - case "glass": - return material == Material.GLASS; - case "gourd": - return material == Material.VEGETABLE; - case "grass": - return material == Material.GRASS; - case "ground": - return material == Material.GRASS; - case "ice": - return material == Material.ICE; - case "iron": - return material == Material.METAL; - case "lava": - return material == Material.LAVA; - case "leaves": - return material == Material.LEAVES; - case "packed_ice": - return material == Material.ICE_SOLID; - case "piston": - return material == Material.PISTON; - case "plants": - return material == Material.PLANT; - case "portal": - return material == Material.PORTAL; - case "redstone_light": - return material == Material.BUILDABLE_GLASS; - case "rock": - return material == Material.STONE; - case "sand": - return material == Material.SAND; - case "snow": - return material == Material.TOP_SNOW; - case "sponge": - return material == Material.SPONGE; - case "structure_void": - return material == Material.STRUCTURAL_AIR; - case "tnt": - return material == Material.EXPLOSIVE; - case "vine": - return material == Material.PLANT; - case "water": - return material == Material.WATER; - case "web": - return material == Material.WEB; - case "wood": - return material == Material.WOOD; - default: - return false; - } - } - } - public record AdvancementCondition(String advancement) implements Matchable { public static final Codec CODEC = Codec.STRING.xmap(AdvancementCondition::new, AdvancementCondition::advancement); diff --git a/Common/src/main/java/tschipp/carryon/common/scripting/ScriptManager.java b/Common/src/main/java/tschipp/carryon/common/scripting/ScriptManager.java index dd62aa7..e82a72f 100644 --- a/Common/src/main/java/tschipp/carryon/common/scripting/ScriptManager.java +++ b/Common/src/main/java/tschipp/carryon/common/scripting/ScriptManager.java @@ -8,7 +8,6 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; import tschipp.carryon.Constants; import tschipp.carryon.common.scripting.CarryOnScript.ScriptObject.ScriptObjectBlock; import tschipp.carryon.common.scripting.CarryOnScript.ScriptObject.ScriptObjectEntity; @@ -28,13 +27,12 @@ public class ScriptManager return Optional.empty(); Block block = state.getBlock(); - Material material = state.getMaterial(); float hardness = state.getDestroySpeed(level, pos); float resistance = block.getExplosionResistance(); for (CarryOnScript script : SCRIPTS) { - if (script.isBlock() && matchesAll(script, block, material, hardness, resistance, tag)) + if (script.isBlock() && matchesAll(script, block, hardness, resistance, tag)) return Optional.of(script); } @@ -76,7 +74,7 @@ public class ScriptManager return matchname && matchheight && matchwidth && matchhealth && matchnbt; } - private static boolean matchesAll(CarryOnScript script, Block block, Material material, float hardness, float resistance, CompoundTag nbt) + private static boolean matchesAll(CarryOnScript script, Block block, float hardness, float resistance, CompoundTag nbt) { ScriptObjectBlock scBlock = script.scriptObject().block(); @@ -84,10 +82,9 @@ public class ScriptManager if(scBlock.typeNameBlock().isPresent()) matchblock = block == BuiltInRegistries.BLOCK.get(scBlock.typeNameBlock().get()); boolean matchnbt = scBlock.typeBlockTag().matches(nbt); - boolean matchmaterial = scBlock.typeMaterial().matches(material); boolean matchhardness = scBlock.typeHardness().matches(hardness); boolean matchresistance = scBlock.typeResistance().matches(resistance); - return matchnbt && matchblock && matchmaterial && matchhardness && matchresistance; + return matchnbt && matchblock && matchhardness && matchresistance; } } diff --git a/Common/src/main/java/tschipp/carryon/networking/clientbound/ClientboundStartRidingPacket.java b/Common/src/main/java/tschipp/carryon/networking/clientbound/ClientboundStartRidingPacket.java index 57434a6..604ff2c 100644 --- a/Common/src/main/java/tschipp/carryon/networking/clientbound/ClientboundStartRidingPacket.java +++ b/Common/src/main/java/tschipp/carryon/networking/clientbound/ClientboundStartRidingPacket.java @@ -32,7 +32,7 @@ public class ClientboundStartRidingPacket extends PacketBase @Override public void handle(Player player) { - Entity otherPlayer = player.level.getEntity(this.entityId); + Entity otherPlayer = player.level().getEntity(this.entityId); if(otherPlayer != null) if(ride) otherPlayer.startRiding(player); diff --git a/Fabric/src/main/java/tschipp/carryon/mixin/PlayerMixinFabric.java b/Fabric/src/main/java/tschipp/carryon/mixin/PlayerMixinFabric.java index f17be85..a816add 100644 --- a/Fabric/src/main/java/tschipp/carryon/mixin/PlayerMixinFabric.java +++ b/Fabric/src/main/java/tschipp/carryon/mixin/PlayerMixinFabric.java @@ -21,7 +21,7 @@ public class PlayerMixinFabric { Player player = ((Player)(Object)this); CarryOnData carry = CarryOnDataManager.getCarryData(player); - if(carry.isCarrying() && !player.level.isClientSide) + if(carry.isCarrying() && !player.level().isClientSide) PlacementHandler.placeCarried((ServerPlayer)player); } diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index b0bc885..a07a2ce 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ "depends": { "fabricloader": ">=0.14", "fabric-api": "*", - "minecraft": ">=1.19.3", + "minecraft": ">=1.20.1", "java": ">=17" } } diff --git a/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java b/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java index c3c5255..32f8138 100644 --- a/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java +++ b/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java @@ -159,7 +159,7 @@ public class CommonEvents @SubscribeEvent public static void onClone(Clone event) { - if (!event.getOriginal().level.isClientSide) + if (!event.getOriginal().level().isClientSide) PlacementHandler.placeCarriedOnDeath((ServerPlayer) event.getOriginal(), (ServerPlayer) event.getEntity(), event.isWasDeath()); } diff --git a/Forge/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml index bda0324..7cc7826 100644 --- a/Forge/src/main/resources/META-INF/mods.toml +++ b/Forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" #mandatory -loaderVersion="[44,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[47,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. license="GNU LGPLv3" issueTrackerURL="https://github.com/Tschipp/CarryOn/issues" @@ -19,7 +19,7 @@ issueTrackerURL="https://github.com/Tschipp/CarryOn/issues" # Does this dependency have to exist - if not, ordering below must be specified mandatory=true #mandatory # The version range of the dependency - versionRange="[44,)" #mandatory + versionRange="[47,)" #mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory ordering="NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER @@ -28,6 +28,6 @@ issueTrackerURL="https://github.com/Tschipp/CarryOn/issues" [[dependencies.carryon]] modId="minecraft" mandatory=true - versionRange="[1.19.3,1.20)" + versionRange="[1.20.1,1.21)" ordering="NONE" side="BOTH" diff --git a/gradle.properties b/gradle.properties index ab3845e..ece066d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,26 +1,22 @@ # Project -version=2.0.5 +version=2.1.0 group=tschipp.carryon # Common -minecraft_version=1.19.4 +minecraft_version=1.20.1 common_runs_enabled=false common_client_run_name=Common Client common_server_run_name=Common Server # Forge -forge_version=45.0.47 -parchment_mappings=2023.06.26-1.19.4 +forge_version=47.0.49 +parchment_mappings=2023.07.02-1.20.1 //forge_ats_enabled=true # Fabric -fabric_version=0.85.0+1.19.4 +fabric_version=0.85.0+1.20.1 fabric_loader_version=0.14.21 -parchment_mappings_fabric=1.19.4:2023.06.26 - -# Quilt -quilt_loader_version=0.16.0-beta.7 -quilt_stdlib_version=1.1.0-beta.3+1.18.2 +parchment_mappings_fabric=1.20.1:2023.07.02 # Mod options mod_name=Carry On