From 1232053e70adde17bc44e5d9bcea57864bb2b3ad Mon Sep 17 00:00:00 2001 From: Jamalam Date: Wed, 18 Dec 2024 17:13:11 +0000 Subject: [PATCH] feat: update to 1.21.4 --- CHANGELOG.md | 2 +- build.gradle | 17 ++++- common/build.gradle | 2 + .../compat/LambDynamicLightsCompat.java | 63 ++++++++++++++++++ .../utility_belt/client/mixin/GuiMixin.java | 7 +- .../client/render/BeltHotbarRenderer.java | 17 ++--- .../utility_belt/client/render/BeltModel.java | 13 +--- .../client/render/BeltRenderer.java | 19 +++--- .../client/screen/UtilityBeltScreen.java | 8 +-- .../utility_belt/items/utility_belt.json | 6 ++ .../utility_belt/recipe/utility_belt.json | 12 +--- .../utility_belt/UtilityBeltItem.java | 27 +++----- .../compat/LambDynamicLightsLikeCompat.java | 53 --------------- .../utility_belt/mixin/InventoryMixin.java | 4 +- .../gui/sprites/utility_belt_hotbar.png | Bin 0 -> 2346 bytes .../textures/gui/utility_belt_widget.png | Bin 3261 -> 0 bytes datagen/build.gradle | 1 + .../utility_belt/datagen/Models.java | 12 ++-- .../utility_belt/datagen/Recipes.java | 28 +++++--- fabric/build.gradle | 2 +- .../compat/LambDynamicLightsCompat.java | 38 ----------- fabric/src/main/resources/fabric.mod.json | 4 +- gradle.properties | 16 ++--- gradle/wrapper/gradle-wrapper.properties | 2 +- libs.versions.toml | 27 ++++---- .../resources/META-INF/neoforge.mods.toml | 3 + 26 files changed, 189 insertions(+), 194 deletions(-) create mode 100644 common/src/client/java/io/github/jamalam360/utility_belt/client/compat/LambDynamicLightsCompat.java create mode 100644 common/src/generated/resources/assets/utility_belt/items/utility_belt.json delete mode 100644 common/src/main/java/io/github/jamalam360/utility_belt/compat/LambDynamicLightsLikeCompat.java create mode 100644 common/src/main/resources/assets/utility_belt/textures/gui/sprites/utility_belt_hotbar.png delete mode 100644 common/src/main/resources/assets/utility_belt/textures/gui/utility_belt_widget.png delete mode 100644 fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 49640d5..cdc7898 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1 @@ -- (fix) game will no longer crash when `player.accessoriesCapability()` returns null (#59) +Update to 1.21.4 diff --git a/build.gradle b/build.gradle index 10f84b9..c770369 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.9-SNAPSHOT" apply false id "me.shedaniel.unified-publishing" version "0.1.+" apply false id "com.github.breadmoirai.github-release" version "2.4.1" } @@ -48,7 +48,10 @@ subprojects { dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - mappings loom.officialMojangMappings() + mappings loom.layered() { + officialMojangMappings() + parchment "org.parchmentmc.data:parchment-${libs.versions.parchment.minecraft.get()}:${libs.versions.parchment.asProvider().get()}@zip" + } } } @@ -88,6 +91,16 @@ allprojects { name = "Wisp Forests Maven" url = "https://maven.wispforest.io/releases" } + + maven { + name = "ParchmentMC" + url = "https://maven.parchmentmc.org" + } + + maven { + name = "Gegy" + url = "https://maven.gegy.dev" + } } tasks.withType(JavaCompile) { diff --git a/common/build.gradle b/common/build.gradle index 08d374c..5719427 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -31,4 +31,6 @@ dependencies { compileOnly libs.mixin.extras.common annotationProcessor libs.mixin.extras.common + + modCompileOnly libs.lambdynamiclights.api } diff --git a/common/src/client/java/io/github/jamalam360/utility_belt/client/compat/LambDynamicLightsCompat.java b/common/src/client/java/io/github/jamalam360/utility_belt/client/compat/LambDynamicLightsCompat.java new file mode 100644 index 0000000..f9270a1 --- /dev/null +++ b/common/src/client/java/io/github/jamalam360/utility_belt/client/compat/LambDynamicLightsCompat.java @@ -0,0 +1,63 @@ +package io.github.jamalam360.utility_belt.client.compat; + +import dev.lambdaurora.lambdynlights.api.DynamicLightsContext; +import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer; +import dev.lambdaurora.lambdynlights.api.entity.luminance.EntityLuminance; +import dev.lambdaurora.lambdynlights.api.item.ItemLightSourceManager; +import io.github.jamalam360.utility_belt.UtilityBelt; +import io.github.jamalam360.utility_belt.UtilityBeltInventory; +import io.github.jamalam360.utility_belt.UtilityBeltItem; +import io.github.jamalam360.utility_belt.state.StateManager; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Range; + +public class LambDynamicLightsCompat implements DynamicLightsInitializer { + + @Override + public void onInitializeDynamicLights(DynamicLightsContext ctx) { + UtilityBelt.LOGGER.info("Initializing LambDynamicLights compat for Utility Belt."); + ctx.entityLightSourceManager().onRegisterEvent().register((registerContext) -> { + registerContext.register(EntityType.PLAYER, UtilityBeltEntityLuminance.INSTANCE); + }); + } + + private static class UtilityBeltEntityLuminance implements EntityLuminance { + + public static final UtilityBeltEntityLuminance INSTANCE = new UtilityBeltEntityLuminance(); + + public static final EntityLuminance.Type TYPE = EntityLuminance.Type.registerSimple( + UtilityBelt.id("belt_luminance"), + INSTANCE + ); + + private UtilityBeltEntityLuminance() {} + + @Override + public @NotNull Type type() { + return TYPE; + } + + @Override + public @Range(from = 0L, to = 15L) int getLuminance(@NotNull ItemLightSourceManager itemLightSourceManager, @NotNull Entity entity) { + if (!(entity instanceof Player player)) { + return 0; + } + + int luminance = 0; + StateManager stateManager = StateManager.getStateManager(player); + if (stateManager.hasBelt(player)) { + UtilityBeltInventory inv = stateManager.getInventory(player); + + for (ItemStack stack : inv.items()) { + luminance = Math.max(luminance, itemLightSourceManager.getLuminance(stack)); + } + } + + return luminance; + } + } +} diff --git a/common/src/client/java/io/github/jamalam360/utility_belt/client/mixin/GuiMixin.java b/common/src/client/java/io/github/jamalam360/utility_belt/client/mixin/GuiMixin.java index 1e83e99..2f1db2b 100644 --- a/common/src/client/java/io/github/jamalam360/utility_belt/client/mixin/GuiMixin.java +++ b/common/src/client/java/io/github/jamalam360/utility_belt/client/mixin/GuiMixin.java @@ -6,12 +6,15 @@ import net.fabricmc.api.Environment; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import java.util.function.Function; + @Environment(EnvType.CLIENT) @Mixin(Gui.class) public abstract class GuiMixin { @@ -22,11 +25,11 @@ public abstract class GuiMixin { method = "renderItemHotbar", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lnet/minecraft/resources/ResourceLocation;IIII)V", + target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Ljava/util/function/Function;Lnet/minecraft/resources/ResourceLocation;IIII)V", ordinal = 1 ) ) - private boolean utilitybelt$disableHotbarHighlight(GuiGraphics instance, ResourceLocation arg, int i, int j, int k, int l) { + private boolean utilitybelt$disableHotbarHighlight(GuiGraphics instance, Function renderTypeGetter, ResourceLocation sprite, int x, int y, int width, int height) { return !StateManager.getStateManager(true).isInBelt(this.getCameraPlayer()); } } diff --git a/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltHotbarRenderer.java b/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltHotbarRenderer.java index f237ff6..d936309 100644 --- a/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltHotbarRenderer.java +++ b/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltHotbarRenderer.java @@ -10,7 +10,8 @@ import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.CoreShaders; +import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -18,8 +19,8 @@ @Environment(EnvType.CLIENT) public class BeltHotbarRenderer { - private static final ResourceLocation UTILITY_BELT_WIDGET_TEXTURE = UtilityBelt - .id("textures/gui/utility_belt_widget.png"); + private static final ResourceLocation UTILITY_BELT_HOTBAR_TEXTURE = UtilityBelt + .id("utility_belt_hotbar"); private static final ResourceLocation HOTBAR_SELECTION_SPRITE = ResourceLocation.withDefaultNamespace("hud/hotbar_selection"); public static void render(GuiGraphics graphics, DeltaTracker deltaTracker) { @@ -48,12 +49,12 @@ public static void render(GuiGraphics graphics, DeltaTracker deltaTracker) { y += UtilityBeltClient.CONFIG.get().hotbarOffsetY; RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShader(CoreShaders.POSITION_TEX); - graphics.blit(UTILITY_BELT_WIDGET_TEXTURE, x, y, 0, 0, 22, 88); + graphics.blitSprite(RenderType::guiTextured, UTILITY_BELT_HOTBAR_TEXTURE, x, y, 22, 88); if (stateManager.isInBelt(player)) { - graphics.blitSprite(HOTBAR_SELECTION_SPRITE, x - 1, y - 1 + stateManager.getSelectedBeltSlot(player) * 20, 0, 24, 23); + graphics.blitSprite(RenderType::guiTextured, HOTBAR_SELECTION_SPRITE, x - 1, y - 1 + stateManager.getSelectedBeltSlot(player) * 22, 24, 23); } UtilityBeltInventory inv = stateManager.getInventory(player); @@ -61,8 +62,8 @@ public static void render(GuiGraphics graphics, DeltaTracker deltaTracker) { RenderSystem.defaultBlendFunc(); int m = 1; - for (int n = 0; n < inv.getContainerSize(); ++n) { - renderHotbarItem(graphics, x, y + n * 20 + 3, deltaTracker.getGameTimeDeltaTicks(), player, inv.getItem(n), m++); + for (int n = 0; n < inv.getContainerSize(); n++) { + renderHotbarItem(graphics, x, y + n * 22 + 3, deltaTracker.getGameTimeDeltaTicks(), player, inv.getItem(n), m++); } } } diff --git a/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltModel.java b/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltModel.java index 9393d2a..f5f805d 100644 --- a/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltModel.java +++ b/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltModel.java @@ -7,10 +7,11 @@ import net.minecraft.client.model.geom.PartNames; import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.entity.state.HumanoidRenderState; import net.minecraft.world.entity.LivingEntity; @Environment(EnvType.CLIENT) -public class BeltModel extends HumanoidModel { +public class BeltModel extends HumanoidModel { public BeltModel(ModelPart root) { super(root); @@ -19,7 +20,7 @@ public BeltModel(ModelPart root) { } public static LayerDefinition createLayerDefinition() { - MeshDefinition mesh = new MeshDefinition(); + MeshDefinition mesh = HumanoidModel.createMesh(CubeDeformation.NONE, 0.0F); PartDefinition root = mesh.getRoot(); PartDefinition body = root.addOrReplaceChild( PartNames.BODY, @@ -27,14 +28,6 @@ public static LayerDefinition createLayerDefinition() { .texOffs(0, 8).addBox(-4.0F, 11.0F, -4.0F, 4.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) .texOffs(10, 8).addBox(1.0F, 11.0F, -4.0F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.rotation(0.0F, 0.0F, 0.0F)); body.addOrReplaceChild("pouch", CubeListBuilder.create().texOffs(18, 8).addBox(0.0F, -13.0F, -6.0F, 2.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 24.0F, 0.0F, 0.0F, 1.5708F, 0.0F)); - - root.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create(), PartPose.ZERO); - root.addOrReplaceChild(PartNames.HAT, CubeListBuilder.create(), PartPose.ZERO); - root.addOrReplaceChild(PartNames.RIGHT_ARM, CubeListBuilder.create(), PartPose.ZERO); - root.addOrReplaceChild(PartNames.LEFT_ARM, CubeListBuilder.create(), PartPose.ZERO); - root.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create(), PartPose.ZERO); - root.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create(), PartPose.ZERO); - return LayerDefinition.create(mesh, 64, 64); } } diff --git a/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltRenderer.java b/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltRenderer.java index da2326e..6ab9212 100644 --- a/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltRenderer.java +++ b/common/src/client/java/io/github/jamalam360/utility_belt/client/render/BeltRenderer.java @@ -17,6 +17,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.state.HumanoidRenderState; +import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.LivingEntity; @@ -26,26 +28,25 @@ public class BeltRenderer implements AccessoryRenderer { private static final ResourceLocation TEXTURE = UtilityBelt.id("textures/entity/belt.png"); - private static final Supplier> MODEL = Suppliers.memoize(() -> + private static final Supplier> MODEL = Suppliers.memoize(() -> new BeltModel(BeltModel.createLayerDefinition().bakeRoot()) ); @Override - public void render(ItemStack stack, SlotReference reference, PoseStack matrices, EntityModel model, MultiBufferSource multiBufferSource, int light, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { - HumanoidModel beltModel = MODEL.get(); - beltModel.setupAnim(reference.entity(), limbSwing, limbSwingAmount, partialTicks, ageInTicks, headPitch); - beltModel.prepareMobModel(reference.entity(), limbSwing, limbSwingAmount, partialTicks); + public void render(ItemStack stack, SlotReference reference, PoseStack matrices, EntityModel entityModel, S state, MultiBufferSource multiBufferSource, int light, float v) { + HumanoidModel beltModel = MODEL.get(); + beltModel.setupAnim((HumanoidRenderState) state); followBodyRotations(reference.entity(), beltModel); VertexConsumer vertexConsumer = multiBufferSource.getBuffer(beltModel.renderType(TEXTURE)); beltModel.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); } @SuppressWarnings("unchecked") - private static void followBodyRotations(LivingEntity entity, HumanoidModel model) { - EntityRenderer render = Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(entity); + private static void followBodyRotations(LivingEntity entity, HumanoidModel model) { + EntityRenderer render = Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(entity); - if (render instanceof LivingEntityRenderer renderer && renderer.getModel() instanceof HumanoidModel entityModel) { - ((HumanoidModel) entityModel).copyPropertiesTo(model); + if (render instanceof LivingEntityRenderer renderer && renderer.getModel() instanceof HumanoidModel entityModel) { + ((HumanoidModel) entityModel).copyPropertiesTo(model); } } } diff --git a/common/src/client/java/io/github/jamalam360/utility_belt/client/screen/UtilityBeltScreen.java b/common/src/client/java/io/github/jamalam360/utility_belt/client/screen/UtilityBeltScreen.java index 138f6cd..5f1e594 100644 --- a/common/src/client/java/io/github/jamalam360/utility_belt/client/screen/UtilityBeltScreen.java +++ b/common/src/client/java/io/github/jamalam360/utility_belt/client/screen/UtilityBeltScreen.java @@ -5,7 +5,7 @@ import io.github.jamalam360.utility_belt.screen.UtilityBeltMenu; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.*; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; @@ -26,11 +26,9 @@ protected void init() { @Override protected void renderBg(GuiGraphics graphics, float delta, int mouseX, int mouseY) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShader(CoreShaders.POSITION_TEX); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - int x = (width - this.imageWidth) / 2; - int y = (height - this.imageHeight) / 2; - graphics.blit(TEXTURE, x, y, 0, 0, this.imageWidth, this.imageHeight); + graphics.blit(RenderType::guiTextured, TEXTURE, this.leftPos, this.topPos, 0F, 0F, this.imageWidth, this.imageHeight, 256, 256); } @Override diff --git a/common/src/generated/resources/assets/utility_belt/items/utility_belt.json b/common/src/generated/resources/assets/utility_belt/items/utility_belt.json new file mode 100644 index 0000000..3f1c91b --- /dev/null +++ b/common/src/generated/resources/assets/utility_belt/items/utility_belt.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "utility_belt:item/utility_belt" + } +} \ No newline at end of file diff --git a/common/src/generated/resources/data/utility_belt/recipe/utility_belt.json b/common/src/generated/resources/data/utility_belt/recipe/utility_belt.json index b4d93d5..e2dee5c 100644 --- a/common/src/generated/resources/data/utility_belt/recipe/utility_belt.json +++ b/common/src/generated/resources/data/utility_belt/recipe/utility_belt.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "D": { - "item": "minecraft:diamond" - }, - "L": { - "item": "minecraft:leather" - }, - "S": { - "item": "minecraft:string" - } + "D": "minecraft:diamond", + "L": "minecraft:leather", + "S": "minecraft:string" }, "pattern": [ "SDS", diff --git a/common/src/main/java/io/github/jamalam360/utility_belt/UtilityBeltItem.java b/common/src/main/java/io/github/jamalam360/utility_belt/UtilityBeltItem.java index 2424ab5..76c7757 100644 --- a/common/src/main/java/io/github/jamalam360/utility_belt/UtilityBeltItem.java +++ b/common/src/main/java/io/github/jamalam360/utility_belt/UtilityBeltItem.java @@ -10,9 +10,14 @@ import io.wispforest.accessories.api.AccessoryItem; import io.wispforest.accessories.api.slot.SlotEntryReference; import io.wispforest.accessories.api.slot.SlotReference; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.ARGB; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.SlotAccess; @@ -20,25 +25,15 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ClickAction; import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.BrushItem; -import net.minecraft.world.item.FishingRodItem; -import net.minecraft.world.item.FlintAndSteelItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ProjectileWeaponItem; -import net.minecraft.world.item.ShearsItem; -import net.minecraft.world.item.SpyglassItem; -import net.minecraft.world.item.TieredItem; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.item.TridentItem; +import net.minecraft.world.item.*; import org.jetbrains.annotations.Nullable; public class UtilityBeltItem extends AccessoryItem { - private static final int BAR_COLOR = Mth.color(0.4F, 0.4F, 1.0F); + private static final int BAR_COLOR = ARGB.color((int) (0.4 * 255), (int) (0.4 * 255), (int) (1.0 * 255)); public UtilityBeltItem() { - super(new Item.Properties().stacksTo(1).component(UtilityBelt.UTILITY_BELT_INVENTORY_COMPONENT_TYPE.get(), UtilityBeltInventory.EMPTY)); + super(new Item.Properties().stacksTo(1).component(UtilityBelt.UTILITY_BELT_INVENTORY_COMPONENT_TYPE.get(), UtilityBeltInventory.EMPTY).setId(ResourceKey.create(Registries.ITEM, UtilityBelt.id("utility_belt")))); } @SuppressWarnings("BooleanMethodIsAlwaysInverted") @@ -69,7 +64,7 @@ private static void playInsertSound(Entity entity) { } public static boolean isValidItem(ItemStack stack) { - return stack.getItem() instanceof TieredItem || stack.getItem() instanceof ProjectileWeaponItem || stack.getItem() instanceof FishingRodItem || stack.getItem() instanceof SpyglassItem || stack.getItem() instanceof TridentItem || stack.getItem() instanceof FlintAndSteelItem || stack.getItem() instanceof ShearsItem || stack.getItem() instanceof BrushItem || stack.isEmpty() || stack.is(UtilityBelt.ALLOWED_IN_UTILITY_BELT); + return stack.getItem() instanceof DiggerItem || stack.getItem() instanceof MaceItem || stack.getItem() instanceof SwordItem || stack.getItem() instanceof ProjectileWeaponItem || stack.getItem() instanceof FishingRodItem || stack.getItem() instanceof FoodOnAStickItem || stack.getItem() instanceof SpyglassItem || stack.getItem() instanceof TridentItem || stack.getItem() instanceof FlintAndSteelItem || stack.getItem() instanceof ShearsItem || stack.getItem() instanceof BrushItem || stack.isEmpty() || stack.is(UtilityBelt.ALLOWED_IN_UTILITY_BELT); } public static UtilityBeltInventory getInventory(ItemStack stack) { @@ -169,8 +164,8 @@ public void onDestroyed(ItemEntity itemEntity) { UtilityBeltInventory inv = getInventory(itemEntity.getItem()); for (ItemStack stack : inv.items()) { - if (!stack.isEmpty()) { - itemEntity.spawnAtLocation(stack); + if (!stack.isEmpty() && itemEntity.level() instanceof ServerLevel server) { + itemEntity.spawnAtLocation(server, stack); } } } diff --git a/common/src/main/java/io/github/jamalam360/utility_belt/compat/LambDynamicLightsLikeCompat.java b/common/src/main/java/io/github/jamalam360/utility_belt/compat/LambDynamicLightsLikeCompat.java deleted file mode 100644 index 7b62045..0000000 --- a/common/src/main/java/io/github/jamalam360/utility_belt/compat/LambDynamicLightsLikeCompat.java +++ /dev/null @@ -1,53 +0,0 @@ -package io.github.jamalam360.utility_belt.compat; - -import io.github.jamalam360.utility_belt.UtilityBeltInventory; -import io.github.jamalam360.utility_belt.state.StateManager; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.function.Function; - -// LambDynamicLights and RyoamicLights (planned but not yet implemented) -public class LambDynamicLightsLikeCompat { - public static void init(LambDynamicLightsLike lights) { - lights.registerDynamicLightHandler(EntityType.PLAYER, (player) -> getLuminanceInBelt(player, lights)); - } - - private static int getLuminanceInBelt(Player player, LambDynamicLightsLike lights) { - boolean submerged = isEyeSubmergedInFluid(player, lights); - int luminance = 0; - - StateManager stateManager = StateManager.getStateManager(player); - if (stateManager.hasBelt(player)) { - UtilityBeltInventory inv = stateManager.getInventory(player); - - for (ItemStack stack : inv.items()) { - luminance = Math.max(luminance, lights.getLuminanceFromItemStack(stack, submerged)); - } - } - - return luminance; - } - - // From LambDynLights mod - private static boolean isEyeSubmergedInFluid(LivingEntity entity, LambDynamicLightsLike lights) { - if (!lights.isWaterSensitiveCheckEnabled()) { - return false; - } else { - BlockPos eyePos = BlockPos.containing(entity.getX(), entity.getEyeY(), entity.getZ()); - return !entity.level().getFluidState(eyePos).isEmpty(); - } - } - - public interface LambDynamicLightsLike { - void registerDynamicLightHandler(EntityType type, Function handler); - - int getLuminanceFromItemStack(@NotNull ItemStack stack, boolean submergedInWater); - - boolean isWaterSensitiveCheckEnabled(); - } -} diff --git a/common/src/main/java/io/github/jamalam360/utility_belt/mixin/InventoryMixin.java b/common/src/main/java/io/github/jamalam360/utility_belt/mixin/InventoryMixin.java index c86b769..2676895 100644 --- a/common/src/main/java/io/github/jamalam360/utility_belt/mixin/InventoryMixin.java +++ b/common/src/main/java/io/github/jamalam360/utility_belt/mixin/InventoryMixin.java @@ -7,7 +7,7 @@ import net.minecraft.tags.TagKey; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.player.StackedContents; +import net.minecraft.world.entity.player.StackedItemContents; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Final; @@ -114,7 +114,7 @@ public abstract class InventoryMixin { } @Inject(method = "fillStackedContents", at = @At("HEAD")) - private void utilitybelt$recipeFinderPatch(StackedContents contents, CallbackInfo ci) { + private void utilitybelt$recipeFinderPatch(StackedItemContents contents, CallbackInfo ci) { ItemStack belt = UtilityBeltItem.getBelt(this.player); if (belt != null) { UtilityBeltInventory inv = StateManager.getStateManager(this.player).getInventory(this.player); diff --git a/common/src/main/resources/assets/utility_belt/textures/gui/sprites/utility_belt_hotbar.png b/common/src/main/resources/assets/utility_belt/textures/gui/sprites/utility_belt_hotbar.png new file mode 100644 index 0000000000000000000000000000000000000000..a888613c04785fcdcc519ca706c1733c155e66c8 GIT binary patch literal 2346 zcmV+_3Dx$AP)Px-b~vUTqeE-<6vf&O<>+(b|FiLArSHe0WX6e z!`=*j6u*Jj-VT?*;7rEu8Bc#zt3ISG)KZnY`bk~zPt!C2D5V&NA-n$l z_ur$GqAW|Ars2ykzZ@ez91eW^@yC4g%{Sjo9ZMNLo%`RSfAQkQ^H;B4jgF%|{amE) zrqtNB3y~t(b_2B@uWO~~PSNj=RaorVzI;K#Dt9ozJMIV+J;q?Hyrk2sZd+qS&ldLZyZT}TEsb?Q^J5HbTm zOU2Kdfxf#EakSN9{Mor7VXT!(PF4O0gLkZM#>&eaS5?Jkvq=~O94zQUve|pOK1A-k zPbqlKBAm%_(=>eY$tT%OS_{^jJ|w^JIPa-SbAl_Rm_Fl}X&xtbi=2x;m8}9Z4=HC% zfo(f%*Rr~aMbc&WLymEB?40ApU%z_pPUPG7Jw*{N@ArG|@9)`ew~xZG-|sK80^s4{ zA^lm`HQVhrDTY#tw{PE~wZ=J@9K>tZTI#xH7zUm`eL6b6y}f0%S|!KE7~Z{m2f%zj zr|)~Lwds3Y$*)-fu-$HP&V|e%u+(&iuh~@pwALJtN0d@LdGcg*T$UwwcXxdI?aS|` z`X*)2yZHk4J18``Vbs7vLqB={7hinwJd3z#8v4HH^WO{X07i-|rvZ2p_`&2E1_Tay zcx|tGNTw7@bu}t$965vA-i>Cx3VnrD}E$;d&;8S(WjU0tjn11+>$g! zA&hjWEWL~gq217e-(2eHOPx)8cxN4W!D1%p zPFXW}2f|aC3UjJ~t56tY5{_}XF`a4y#uR9!&WqNpSMG* zz}Nupjy|d@iLV>fUCvp|0x-#hBg$fzSKC&q_Ky@%r`atEzE6Nlh(kUNo&WpMLu3==kpL zE&*?h353*jwC&id&F6FW`~9OYIk#dO)q1_AuIr1LZ@FA%DjuV|w!%#F;=|{2-bEB= z8V92;LYVWih#_piAOEmmbJ(Snb7vf(b>I$#OzgJVhZ*GIUp~z;nd7!?>4rATzmTQ~1tL_H(E{7GXa%!{ zqH{xtUV88{8z~}D6*}~LS;Wq{lv=T?j1L}q$Kb|k$~vE_E{+s%Wm6#}x-n)P!F<5< zLo;9$*b|)|I?uAw$O(7F&4eo$2YhYXtj>8h2bYLFMqlf|6Xy+0%#dkTWSR$IRxy7NtrpfrIOs2LYeI|Lv>i07X%x5|2}o zb1o@4jH=!=4OLZT!%^n=#~*)88dg;myWK9`l(k^Pz+$mT!WosMu4@j5Lq6x--QA6c zA!p{COA$Y2=c`GM*XuRQ<&w8=-)0x5^V?%~uGANrw_2@u`SRt3=1B=s<+K=eZmM_i zh~{-&$7i1j^p)Taoo7}+=LCx~oM}#bJb+gZc}iw&tnEV1MxKbYSZjfn3N8J`u_KIy z^e9)X=0#vHDZ(MgB=4(P&ENzIi79nC++m?&#SyI~;Hr z!hz}gZ6GAARMvf7jrgNV;d~I(C%1+HmyRQMM^D#z>LNT6516`P$c}_F$B~sHzxM5r z4LI?oiV~-rMozmykh$D6bVVF@O;2F=10hA1M8G8^2BqZgpoV(e!V^Pf$&f7LD zQ%$?0IAe>DZgv2zLOx$)MO9U)BzMg|?RK0urc-E~kYY++JHJSdo2CiuG-;>K&nluF zPltO(1?aA21e~>4%X!Sr$4>-p=h13B-i688{$nb=J9-YiLn5hW)wo<;hRsA`v`D9g z(P9r`PQ6ERJe$qv`=0yNBH$`K>+K=oXSe+a zVbc!nfV{G47b?Bm?b1O=WwKm~tj7ghzRr4Mm9#Z8@6Fn+K)U;oI`Gwot+e;iy7Bw&A)^A|{1z|Z2?~B8Z QWdHyG07*qoM6N<$f`dSl_W%F@ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/utility_belt/textures/gui/utility_belt_widget.png b/common/src/main/resources/assets/utility_belt/textures/gui/utility_belt_widget.png deleted file mode 100644 index 5ed0b39f2da1c9f3f5c60fc139675b55d161d279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3261 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 } @Override - public void buildRecipes(RecipeOutput exporter) { - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, UtilityBelt.UTILITY_BELT_ITEM.get()) - .pattern("SDS").pattern("L L").pattern("SLS") - .define('S', Items.STRING).define('D', Items.DIAMOND).define('L', Items.LEATHER) - .unlockedBy("has_diamond", has(Items.DIAMOND)) - .unlockedBy("has_leather", has(Items.LEATHER)) - .unlockedBy("has_string", has(Items.STRING)) - .save(exporter); + protected RecipeProvider createRecipeProvider(HolderLookup.Provider provider, RecipeOutput recipeOutput) { + return new RecipeProvider(provider, recipeOutput) { + @Override + public void buildRecipes() { + shaped(RecipeCategory.TOOLS, UtilityBelt.UTILITY_BELT_ITEM.get()) + .pattern("SDS").pattern("L L").pattern("SLS") + .define('S', Items.STRING).define('D', Items.DIAMOND).define('L', Items.LEATHER) + .unlockedBy("has_diamond", has(Items.DIAMOND)) + .unlockedBy("has_leather", has(Items.LEATHER)) + .unlockedBy("has_string", has(Items.STRING)) + .save(recipeOutput); + } + }; + } + + @Override + public String getName() { + return "utility_belt_recipes"; } } diff --git a/fabric/build.gradle b/fabric/build.gradle index d67f5ac..d429e2d 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -37,7 +37,7 @@ dependencies { modRuntimeOnly libs.modmenu // Compat - modImplementation libs.lambdynamiclights + modRuntimeOnly libs.lambdynamiclights modRuntimeOnly libs.sodium common(project(path: ":common", configuration: "namedElements")) { transitive false } diff --git a/fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java b/fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java deleted file mode 100644 index 9e4f2f0..0000000 --- a/fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.github.jamalam360.utility_belt.fabric.compat; - -import dev.lambdaurora.lambdynlights.LambDynLights; -import dev.lambdaurora.lambdynlights.api.DynamicLightHandler; -import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer; -import dev.lambdaurora.lambdynlights.api.item.ItemLightSourceManager; -import io.github.jamalam360.utility_belt.UtilityBelt; -import io.github.jamalam360.utility_belt.compat.LambDynamicLightsLikeCompat; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.function.Function; - -public class LambDynamicLightsCompat implements DynamicLightsInitializer { - @Override - public void onInitializeDynamicLights(ItemLightSourceManager manager) { - UtilityBelt.LOGGER.info("Initializing LambDynamicLights compat for Utility Belt."); - LambDynamicLightsLikeCompat.init(new LambDynamicLightsLikeCompat.LambDynamicLightsLike() { - @Override - public void registerDynamicLightHandler(EntityType type, Function handler) { - DynamicLightHandlers.registerDynamicLightHandler(type, DynamicLightHandler.makeHandler(handler, player -> false)); - } - - @Override - public int getLuminanceFromItemStack(@NotNull ItemStack stack, boolean submergedInWater) { - return LambDynLights.getLuminanceFromItemStack(stack, submergedInWater); - } - - @Override - public boolean isWaterSensitiveCheckEnabled() { - return LambDynLights.get().config.getWaterSensitiveCheck().get(); - } - }); - } -} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 46487f0..7c2ddf5 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -22,8 +22,8 @@ "client": [ "io.github.jamalam360.utility_belt.fabric.UtilityBeltFabricClient" ], - "dynamiclights": [ - "io.github.jamalam360.utility_belt.fabric.compat.LambDynamicLightsCompat" + "lambdynlights:initializer": [ + "io.github.jamalam360.utility_belt.client.compat.LambDynamicLightsCompat" ] }, "mixins": [ diff --git a/gradle.properties b/gradle.properties index 9954625..ddd16c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,15 +2,15 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false org.gradle.parallel=true -version=2.6.0+1.21.1 -minecraft_version=1.21.1 +version=2.6.0+1.21.4 +minecraft_version=1.21.4 -additional_minecraft_versions=1.21 -minimum_minecraft_version=1.21 -minimum_architectury_api_version=13.0.6 -minimum_fabric_api_version=0.102.0+1.21 -minimum_jamlib_version=1.2.2-build.2+1.21.1 -minimum_accessories_version=1.1.0-beta.6+1.21.1 +additional_minecraft_versions= +minimum_minecraft_version=1.21.4 +minimum_architectury_api_version=15.0.1 +minimum_fabric_api_version=0.111.0+1.21.4 +minimum_jamlib_version=1.2.2+1.21.4 +minimum_accessories_version=1.2.5-beta+1.21.4 branch=main group=io.github.jamalam360 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0d18421..e48eca5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/libs.versions.toml b/libs.versions.toml index 486a938..993e9db 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -1,36 +1,38 @@ [versions] # https://modrinth.com/mod/architectury-api/versions -architectury = "13.0.8" +architectury = "15.0.1" + +# https://parchmentmc.org/docs/getting-started +parchment-minecraft = "1.21.4" +parchment = "2024.12.07" # https://projects.neoforged.net/neoforged/neoforge -neoforge = "21.1.90" +neoforge = "21.4.13-beta" # https://fabricmc.net/develop -fabric-loader = "0.15.11" -fabric-api = "0.106.0+1.21.1" +fabric-loader = "0.16.9" +fabric-api = "0.111.0+1.21.4" # https://maven.jamalam.tech/#/releases -jamlib = "1.2.2-build.2+1.21.1" +jamlib = "1.2.2+1.21.4" # https://modrinth.com/mod/accessories/versions -accessories = "1.1.0-beta.16+1.21.1" +accessories = "1.2.5-beta+1.21.4" # https://modrinth.com/mod/owo-lib/versions -owo-lib-fabric = "0.12.15+1.21" - -endec = "0.1.9" +owo-lib-fabric = "0.12.19+1.21.4" # https://github.com/LlamaLad7/MixinExtras/releases mixin-extras = "0.4.1" # https://modrinth.com/mod/modmenu/versions -modmenu = "11.0.1" +modmenu = "13.0.0-beta.1" # https://modrinth.com/mod/lambdynamiclights/versions -lambdynamiclights = "3.1.0+1.21.1" +lambdynamiclights = "4.0.1+1.21.4" # https://modrinth.com/mod/sodium/versions -sodium = "mc1.21-0.6.0-beta.2-fabric" +sodium = "mc1.21.4-0.6.4-fabric" [libraries] architectury-common = { module = "dev.architectury:architectury", version.ref = "architectury" } @@ -57,5 +59,6 @@ mixin-extras-common = { module = "io.github.llamalad7:mixinextras-common", versi modmenu = { module = "maven.modrinth:modmenu", version.ref = "modmenu" } lambdynamiclights = { module = "dev.lambdaurora.lambdynamiclights:lambdynamiclights-runtime", version.ref = "lambdynamiclights" } +lambdynamiclights-api = { module = "dev.lambdaurora.lambdynamiclights:lambdynamiclights-api", version.ref = "lambdynamiclights" } sodium = { module = "maven.modrinth:sodium", version.ref = "sodium" } diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 7f270ec..cf4c6e0 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -54,3 +54,6 @@ config = "utility_belt.mixins.json" [[mixins]] config = "utility_belt.client.mixins.json" + +[modproperties.utility_belt] +"lambdynlights:intializer" = "io.github.jamalam360.utility_belt.client.compat.LambDynamicLightsCompat"