diff --git a/common/src/main/java/com/lodestar/aileron/Aileron.java b/common/src/main/java/com/lodestar/aileron/Aileron.java index 1390e74..430302f 100644 --- a/common/src/main/java/com/lodestar/aileron/Aileron.java +++ b/common/src/main/java/com/lodestar/aileron/Aileron.java @@ -41,7 +41,7 @@ public static void boostPlayer(Player player) { } public static void playerDashedServer(ServerPlayer player) { - ServerLevel serverLevel = (ServerLevel) player.level; + ServerLevel serverLevel = (ServerLevel) player.level(); int stocks = player.getEntityData().get(AileronEntityData.SMOKE_STACK_CHARGES); if (stocks > 0) { diff --git a/common/src/main/java/com/lodestar/aileron/AileronGuiRender.java b/common/src/main/java/com/lodestar/aileron/AileronGuiRender.java new file mode 100644 index 0000000..2d79400 --- /dev/null +++ b/common/src/main/java/com/lodestar/aileron/AileronGuiRender.java @@ -0,0 +1,54 @@ +package com.lodestar.aileron; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.item.enchantment.EnchantmentHelper; + +public class AileronGuiRender { + + private static final ResourceLocation TEXTURE_EMPTY = new ResourceLocation("aileron:textures/gui/sprites/hud/smokestack_empty.png"); + private static final ResourceLocation TEXTURE_FULL = new ResourceLocation("aileron:textures/gui/sprites/hud/smokestack_full.png"); + + public static int moveAttackIndicator(int spriteX) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return spriteX; + if (!Aileron.canChargeSmokeStack(player)) return spriteX; + + if (player.getMainArm() == HumanoidArm.LEFT) spriteX -= 9; + else spriteX += 5; + + return spriteX; + } + + public static void renderSmokeStackBar(GuiGraphics graphics, int screenHeight, int screenWidth) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return; + if (!Aileron.canChargeSmokeStack(player)) return; + + int smokeStockLevel = EnchantmentHelper.getItemEnchantmentLevel( + BuiltInRegistries.ENCHANTMENT.get(new ResourceLocation(Aileron.MOD_ID, "smokestack")), + player.getInventory().getArmor(2) + ); + + int screenX = (screenWidth / 2); + if (player.getMainArm() == HumanoidArm.LEFT) screenX -= 102; + else screenX += 92; + + int screenY = screenHeight - 10; + + int smokeStackCharges = player.getEntityData().get(AileronEntityData.SMOKE_STACK_CHARGES); + for (int spriteIndex = 0; spriteIndex < smokeStockLevel; spriteIndex++) { + ResourceLocation texture; + if (smokeStackCharges > spriteIndex) texture = TEXTURE_FULL; + else texture = TEXTURE_EMPTY; + int spriteY = screenY - (spriteIndex * 9); + graphics.blit(texture, screenX, spriteY, 0, 0, 9, 9, 9, 9); + } + + } + +} diff --git a/common/src/main/java/com/lodestar/aileron/client/AileronClient.java b/common/src/main/java/com/lodestar/aileron/client/AileronClient.java index b09784c..25ba1f0 100644 --- a/common/src/main/java/com/lodestar/aileron/client/AileronClient.java +++ b/common/src/main/java/com/lodestar/aileron/client/AileronClient.java @@ -31,7 +31,7 @@ public static void localPlayerTick(Player self) { if (stocks > 0) { self.setDeltaMovement(self.getDeltaMovement().add(self.getLookAngle().scale(1.5))); self.getEntityData().set(AileronEntityData.SMOKE_STACK_CHARGES, stocks - 1); - self.level.playSound(null, self.blockPosition(), SoundEvents.FIRECHARGE_USE, SoundSource.PLAYERS, 0.8f, 0.4f); + self.level().playSound(null, self.blockPosition(), SoundEvents.FIRECHARGE_USE, SoundSource.PLAYERS, 0.8f, 0.4f); AileronClientNetworking.sendSmokeStackDash(); } diff --git a/common/src/main/java/com/lodestar/aileron/mixin/CampfireBlockEntityMixin.java b/common/src/main/java/com/lodestar/aileron/mixin/CampfireBlockEntityMixin.java index 05f3800..5d9a460 100644 --- a/common/src/main/java/com/lodestar/aileron/mixin/CampfireBlockEntityMixin.java +++ b/common/src/main/java/com/lodestar/aileron/mixin/CampfireBlockEntityMixin.java @@ -2,9 +2,9 @@ import com.lodestar.aileron.Aileron; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; @@ -38,7 +38,7 @@ private static void makeParticles(Level level, BlockPos blockPos, boolean bl, bo if (neighbors > 0) { RandomSource random = level.getRandom(); - SimpleParticleType particleType = (SimpleParticleType) Registry.PARTICLE_TYPE.get(new ResourceLocation(Aileron.MOD_ID, "custom_campfire_smoke")); + SimpleParticleType particleType = (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Aileron.MOD_ID, "custom_campfire_smoke")); level.addAlwaysVisibleParticle(particleType, true, (double) blockPos.getX() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1), (double) blockPos.getY() + random.nextDouble() + random.nextDouble(), (double) blockPos.getZ() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1), neighbors * 40 + (bl ? 280 : 80), 0.07D, 0.0D); if (bl2) { level.addParticle(ParticleTypes.SMOKE, (double) blockPos.getX() + 0.5D + random.nextDouble() / 4.0D * (double) (random.nextBoolean() ? 1 : -1), (double) blockPos.getY() + 0.4D, (double) blockPos.getZ() + 0.5D + random.nextDouble() / 4.0D * (double) (random.nextBoolean() ? 1 : -1), 0.0D, 0.005D, 0.0D); diff --git a/common/src/main/java/com/lodestar/aileron/mixin/GuiMixin.java b/common/src/main/java/com/lodestar/aileron/mixin/GuiMixin.java index 294a0d2..6a07fd1 100644 --- a/common/src/main/java/com/lodestar/aileron/mixin/GuiMixin.java +++ b/common/src/main/java/com/lodestar/aileron/mixin/GuiMixin.java @@ -1,61 +1,44 @@ package com.lodestar.aileron.mixin; -import com.lodestar.aileron.Aileron; -import com.lodestar.aileron.AileronEntityData; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; +import com.lodestar.aileron.AileronGuiRender; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiComponent; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.client.gui.GuiGraphics; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Gui.class) public class GuiMixin { - private static final ResourceLocation smokeStock = new ResourceLocation("aileron:textures/gui/smokestack.png"); @Shadow private int screenWidth; @Shadow private int screenHeight; - @ModifyArg(method = "renderExperienceBar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Font;draw(Lcom/mojang/blaze3d/vertex/PoseStack;Ljava/lang/String;FFI)I"), index = 3) - public float shiftUpwards(float g) { - LocalPlayer player = Minecraft.getInstance().player; - if (Aileron.canChargeSmokeStack(player)) { - return g + 4; - } else { - return g; - } + @ModifyArg( + method = "renderHotbar", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/GuiGraphics;blit(Lnet/minecraft/resources/ResourceLocation;IIIIII)V" + ), + slice = @Slice( + from = @At( + value = "INVOKE", + target = "Lcom/mojang/blaze3d/systems/RenderSystem;enableBlend()V" + ), + to = @At( + value = "INVOKE", + target = "Lcom/mojang/blaze3d/systems/RenderSystem;disableBlend()V" + ) + ), + index = 1 + ) + private int renderAttackIndicator(int x) { + return AileronGuiRender.moveAttackIndicator(x); } @Inject(method = "renderExperienceBar", at = @At(value = "TAIL")) - public void renderExperienceBar(PoseStack poseStack, int i, CallbackInfo ci) { - final Gui self = (Gui) (Object) this; - - LocalPlayer player = Minecraft.getInstance().player; - if (Aileron.canChargeSmokeStack(player)) { - int y = this.screenHeight - 40; - int smokeStockMaxLevel = EnchantmentHelper.getItemEnchantmentLevel(Registry.ENCHANTMENT.get(new ResourceLocation(Aileron.MOD_ID, "smokestack")), player.getInventory().getArmor(2)); - - RenderSystem.setShaderTexture(0, smokeStock); - int x = screenWidth / 2 - 10 + ((3 - smokeStockMaxLevel) * 3); - - for (int j = 0; j < smokeStockMaxLevel; j++) { - if (player.getEntityData().get(AileronEntityData.SMOKE_STACK_CHARGES) > j) { - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - } else { - RenderSystem.setShaderColor(0f, 0f, 0f, 0.5f); - } - GuiComponent.blit(poseStack, x + (j * 6), y, self.getBlitOffset(), 0, 0, 8, 8, 8, 8); - } - } - + public void renderSmokeStackBar(GuiGraphics g, int i, CallbackInfo ci) { + AileronGuiRender.renderSmokeStackBar(g, screenHeight, screenWidth); } + } diff --git a/common/src/main/java/com/lodestar/aileron/mixin/LivingEntityMixin.java b/common/src/main/java/com/lodestar/aileron/mixin/LivingEntityMixin.java index 7576d52..7d39f35 100644 --- a/common/src/main/java/com/lodestar/aileron/mixin/LivingEntityMixin.java +++ b/common/src/main/java/com/lodestar/aileron/mixin/LivingEntityMixin.java @@ -1,8 +1,8 @@ package com.lodestar.aileron.mixin; import com.lodestar.aileron.Aileron; -import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -29,7 +29,7 @@ public LivingEntityMixin(EntityType entityType, Level level) { private void modifyVelocity(LivingEntity instance, Vec3 vec3) { Vec3 negator = new Vec3(1.0 / 0.9900000095367432D, 1.0, 1.0 / 0.9900000095367432D); - int cloudSkipper = instance instanceof Player ? EnchantmentHelper.getItemEnchantmentLevel(Registry.ENCHANTMENT.get(new ResourceLocation(Aileron.MOD_ID, "cloudskipper")), ((Player) instance).getInventory().getArmor(2)) : 0; + int cloudSkipper = instance instanceof Player ? EnchantmentHelper.getItemEnchantmentLevel(BuiltInRegistries.ENCHANTMENT.get(new ResourceLocation(Aileron.MOD_ID, "cloudskipper")), ((Player) instance).getInventory().getArmor(2)) : 0; double fac = 0; double y = instance.position().y; @@ -43,8 +43,8 @@ else if (y < 230) fac *= 0.6; fac *= cloudSkipper / 3.0; - if (fac > 0.1 && !level.isClientSide && tickCount % ((int) (1.0 - fac) * 2 + 1) == 0) { - ServerLevel serverLevel = ((ServerLevel) level); + if (fac > 0.1 && !level().isClientSide && tickCount % ((int) (1.0 - fac) * 2 + 1) == 0) { + ServerLevel serverLevel = ((ServerLevel) level()); for (ServerPlayer player : serverLevel.players()) { Vec3 pos = instance.position().add(instance.getLookAngle().scale(-1.0)); diff --git a/common/src/main/java/com/lodestar/aileron/mixin/MixinFireworkRocketItem.java b/common/src/main/java/com/lodestar/aileron/mixin/MixinFireworkRocketItem.java index b185e1e..2d2054e 100644 --- a/common/src/main/java/com/lodestar/aileron/mixin/MixinFireworkRocketItem.java +++ b/common/src/main/java/com/lodestar/aileron/mixin/MixinFireworkRocketItem.java @@ -18,18 +18,17 @@ public class MixinFireworkRocketItem { @Inject(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/FireworkRocketEntity;(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/LivingEntity;)V"), cancellable = true) - public void use(Level level, Player player, InteractionHand interactionHand, CallbackInfoReturnable> cir) { - if (!AileronConfig.fireworkChanges()) { - ItemStack itemStack = player.getItemInHand(interactionHand); + public void use(Level level, Player player, InteractionHand hand, CallbackInfoReturnable> cir) { + if (!AileronConfig.fireworkChanges()) return; - if (!player.getAbilities().instabuild) { - itemStack.shrink(1); - } + ItemStack stack = player.getItemInHand(hand); + if (!player.getAbilities().instabuild) stack.shrink(1); - ((AileronPlayer) player).setSmokeTrailTicks(100); - player.getCooldowns().addCooldown((FireworkRocketItem) (Object) this, 100); - player.awardStat(Stats.ITEM_USED.get((FireworkRocketItem) (Object) this)); - cir.setReturnValue(InteractionResultHolder.pass(player.getItemInHand(interactionHand))); - } + ((AileronPlayer) player).setSmokeTrailTicks(100); + FireworkRocketItem item = (FireworkRocketItem) (Object) this; + player.getCooldowns().addCooldown(item, 100); + player.awardStat(Stats.ITEM_USED.get(item)); + cir.setReturnValue(InteractionResultHolder.pass(stack)); } + } diff --git a/common/src/main/java/com/lodestar/aileron/mixin/MixinGameRenderer.java b/common/src/main/java/com/lodestar/aileron/mixin/MixinGameRenderer.java index fdc81d3..702b830 100644 --- a/common/src/main/java/com/lodestar/aileron/mixin/MixinGameRenderer.java +++ b/common/src/main/java/com/lodestar/aileron/mixin/MixinGameRenderer.java @@ -4,7 +4,7 @@ import com.lodestar.aileron.AileronConfig; import com.lodestar.aileron.accessor.AileronCamera; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -30,7 +30,7 @@ public void renderLevel(float partial, long l, PoseStack poseStack, CallbackInfo float deltaMovementSpeed = (float) player.getDeltaMovement().length(); if (AileronConfig.doCameraRoll()) - poseStack.mulPose(Vector3f.ZP.rotationDegrees((float) (roll * deltaMovementSpeed * AileronConfig.cameraRollScale()))); + poseStack.mulPose(Axis.ZP.rotationDegrees((float) (roll * deltaMovementSpeed * AileronConfig.cameraRollScale()))); } } } diff --git a/common/src/main/java/com/lodestar/aileron/mixin/PlayerEntityMixin.java b/common/src/main/java/com/lodestar/aileron/mixin/PlayerEntityMixin.java index 62253ad..84a8d9d 100644 --- a/common/src/main/java/com/lodestar/aileron/mixin/PlayerEntityMixin.java +++ b/common/src/main/java/com/lodestar/aileron/mixin/PlayerEntityMixin.java @@ -7,9 +7,9 @@ import com.lodestar.aileron.accessor.AileronPlayer; import com.lodestar.aileron.client.AileronClient; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -45,7 +45,7 @@ public abstract class PlayerEntityMixin implements AileronPlayer { @Inject(method = "tick", at = @At("TAIL")) public void postTick(CallbackInfo ci) { Player self = ((Player) (Object) this); - Level level = self.level; + Level level = self.level(); if (boostTicks > 0) boostTicks--; if (!self.isFallFlying()) boostTicks = 0; @@ -84,7 +84,7 @@ public void postTick(CallbackInfo ci) { // smoke trail if (smokeTrailTicks > 0) { - if (self.tickCount == 0) { + if (self.tickCount % 3 == 0) { final ServerLevel serverLevel = ((ServerLevel) level); for (ServerPlayer player : serverLevel.players()) { @@ -115,7 +115,7 @@ public void postTick(CallbackInfo ci) { if (chargeTime % AileronConfig.smokeStackChargeTicks() == 0 && chargeTime > 0) { int stocks = self.getEntityData().get(AileronEntityData.SMOKE_STACK_CHARGES); - int smokeStockMaxLevel = EnchantmentHelper.getItemEnchantmentLevel(Registry.ENCHANTMENT.get(new ResourceLocation(Aileron.MOD_ID, "smokestack")), self.getInventory().getArmor(2)); + int smokeStockMaxLevel = EnchantmentHelper.getItemEnchantmentLevel(BuiltInRegistries.ENCHANTMENT.get(new ResourceLocation(Aileron.MOD_ID, "smokestack")), self.getInventory().getArmor(2)); if (stocks < smokeStockMaxLevel || !charged) { charged = true; @@ -163,7 +163,7 @@ public void postTick(CallbackInfo ci) { startFlyingTimer = 5; } - if (self.isFallFlying() && self.level.isClientSide && self.isLocalPlayer()) { + if (self.isFallFlying() && self.level().isClientSide && self.isLocalPlayer()) { int maxRange = 38; int depth = 0; @@ -216,7 +216,7 @@ public void postTick(CallbackInfo ci) { } } - if (self.level.isClientSide && self.isLocalPlayer()) + if (self.level().isClientSide && self.isLocalPlayer()) AileronClient.localPlayerTick(self); } diff --git a/common/src/main/resources/assets/aileron/textures/gui/smokestack.png b/common/src/main/resources/assets/aileron/textures/gui/smokestack.png deleted file mode 100644 index fabb1ef..0000000 Binary files a/common/src/main/resources/assets/aileron/textures/gui/smokestack.png and /dev/null differ diff --git a/common/src/main/resources/assets/aileron/textures/gui/sprites/hud/smokestack_empty.png b/common/src/main/resources/assets/aileron/textures/gui/sprites/hud/smokestack_empty.png new file mode 100644 index 0000000..b1fcff5 Binary files /dev/null and b/common/src/main/resources/assets/aileron/textures/gui/sprites/hud/smokestack_empty.png differ diff --git a/common/src/main/resources/assets/aileron/textures/gui/sprites/hud/smokestack_full.png b/common/src/main/resources/assets/aileron/textures/gui/sprites/hud/smokestack_full.png new file mode 100644 index 0000000..3b7d194 Binary files /dev/null and b/common/src/main/resources/assets/aileron/textures/gui/sprites/hud/smokestack_full.png differ diff --git a/fabric/src/main/java/com/lodestar/aileron/fabric/AileronEnchantmentsImpl.java b/fabric/src/main/java/com/lodestar/aileron/fabric/AileronEnchantmentsImpl.java index daf56ae..cbf7b1b 100644 --- a/fabric/src/main/java/com/lodestar/aileron/fabric/AileronEnchantmentsImpl.java +++ b/fabric/src/main/java/com/lodestar/aileron/fabric/AileronEnchantmentsImpl.java @@ -4,6 +4,7 @@ import com.lodestar.aileron.enchantment.CloudSkipperEnchantment; import com.lodestar.aileron.enchantment.SmokeStackEnchantment; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.enchantment.Enchantment; @@ -12,7 +13,7 @@ public class AileronEnchantmentsImpl { public static Enchantment CLOUDSKIPPER = new CloudSkipperEnchantment(Enchantment.Rarity.UNCOMMON); public static void register() { - Registry.register(Registry.ENCHANTMENT, new ResourceLocation(Aileron.MOD_ID, "smokestack"), SMOKESTACK); - Registry.register(Registry.ENCHANTMENT, new ResourceLocation(Aileron.MOD_ID, "cloudskipper"), CLOUDSKIPPER); + Registry.register(BuiltInRegistries.ENCHANTMENT, new ResourceLocation(Aileron.MOD_ID, "smokestack"), SMOKESTACK); + Registry.register(BuiltInRegistries.ENCHANTMENT, new ResourceLocation(Aileron.MOD_ID, "cloudskipper"), CLOUDSKIPPER); } } diff --git a/fabric/src/main/java/com/lodestar/aileron/fabric/AileronParticlesImpl.java b/fabric/src/main/java/com/lodestar/aileron/fabric/AileronParticlesImpl.java index 414adb0..a5419a8 100644 --- a/fabric/src/main/java/com/lodestar/aileron/fabric/AileronParticlesImpl.java +++ b/fabric/src/main/java/com/lodestar/aileron/fabric/AileronParticlesImpl.java @@ -4,12 +4,13 @@ import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; import net.minecraft.core.Registry; import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; public class AileronParticlesImpl { public static final SimpleParticleType CUSTOM_CAMPFIRE_SMOKE = FabricParticleTypes.simple(); public static void register() { - Registry.register(Registry.PARTICLE_TYPE, new ResourceLocation(Aileron.MOD_ID, "custom_campfire_smoke"), CUSTOM_CAMPFIRE_SMOKE); + Registry.register(BuiltInRegistries.PARTICLE_TYPE, new ResourceLocation(Aileron.MOD_ID, "custom_campfire_smoke"), CUSTOM_CAMPFIRE_SMOKE); } } diff --git a/forge/src/main/java/com/lodestar/aileron/client/forge/AileronClientParticlesImpl.java b/forge/src/main/java/com/lodestar/aileron/client/forge/AileronClientParticlesImpl.java index c5c9fe5..94c2bf8 100644 --- a/forge/src/main/java/com/lodestar/aileron/client/forge/AileronClientParticlesImpl.java +++ b/forge/src/main/java/com/lodestar/aileron/client/forge/AileronClientParticlesImpl.java @@ -13,7 +13,7 @@ public class AileronClientParticlesImpl { @SubscribeEvent public static void registerParticleFactories(RegisterParticleProvidersEvent event) { - event.register(CUSTOM_CAMPFIRE_SMOKE.get(), CustomCampfireParticle.CustomCampfireParticleProvider::new); + event.registerSpriteSet(CUSTOM_CAMPFIRE_SMOKE.get(), CustomCampfireParticle.CustomCampfireParticleProvider::new); } public static void register() { diff --git a/gradle.properties b/gradle.properties index 388c619..f40727e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,16 +1,16 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx2G # Fabric Properties -minecraft_version=1.19.2 -yarn_mappings=1.19.2+build.28 -fabric_loader_version=0.14.19 -forge_version=1.19.2-43.2.0 +minecraft_version=1.20.1 +yarn_mappings=1.20.1+build.10 +fabric_loader_version=0.14.22 +forge_version=1.20.1-47.1.0 enabled_platforms=fabric,forge # Dependencies -architectury_version=6.5.82 -midnightlib_version=1.0.0 -fabric_api_version=0.76.0+1.19.2 -mod_menu_version=4.2.0-beta.2 +architectury_version=9.1.12 +midnightlib_version=1.4.1 +fabric_api_version=0.87.0+1.20.1 +mod_menu_version=7.2.2 # Mod Properties mod_version=1.0.4 maven_group=com.lodestar