From a5b6c9b857627be4b26c7858e7de355dcb4dd94e Mon Sep 17 00:00:00 2001 From: Nik77x Date: Thu, 30 Jan 2025 17:32:39 +0100 Subject: [PATCH 1/4] Account for backpack in curios slot If the backpack was in the curios slot it didn't render --- build.gradle | 4 +- .../DragonBackpackRenderLayer.java | 133 ++++++++++++++---- 2 files changed, 107 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index 32b902442..2c0226d7a 100644 --- a/build.gradle +++ b/build.gradle @@ -100,8 +100,8 @@ dependencies { implementation "curse.maven:sophisticated-core-618298:6119300" // Curios testing -// runtimeOnly "top.theillusivec4.curios:curios-neoforge:9.2.2+1.21.1" -// compileOnly "top.theillusivec4.curios:curios-neoforge:9.2.2+1.21.1:api" +// runtimeOnly "top.theillusivec4.curios:curios-neoforge:9.2.2+1.21.1" + compileOnly "top.theillusivec4.curios:curios-neoforge:9.2.2+1.21.1:api" testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' diff --git a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java index ed961a575..1b790c3bd 100644 --- a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java +++ b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java @@ -3,6 +3,7 @@ import by.dragonsurvivalteam.dragonsurvival.common.capability.DragonStateHandler; import by.dragonsurvivalteam.dragonsurvival.common.capability.DragonStateProvider; import by.dragonsurvivalteam.dragonsurvival.common.entity.DragonEntity; +import by.dragonsurvivalteam.dragonsurvival.compat.Compat; import by.dragonsurvivalteam.dragonsurvival.config.obj.ConfigOption; import by.dragonsurvivalteam.dragonsurvival.config.obj.ConfigSide; import by.dragonsurvivalteam.dragonsurvival.registry.datagen.Translation; @@ -11,9 +12,11 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; +import net.p3pp3rf1y.sophisticatedbackpacks.backpack.BackpackItem; import net.p3pp3rf1y.sophisticatedbackpacks.backpack.wrapper.BackpackWrapper; import net.p3pp3rf1y.sophisticatedbackpacks.backpack.wrapper.IBackpackWrapper; import net.p3pp3rf1y.sophisticatedbackpacks.client.render.BackpackModelManager; @@ -24,7 +27,11 @@ import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.layer.GeoRenderLayer; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotResult; +import java.util.List; +import java.util.Optional; public class DragonBackpackRenderLayer extends GeoRenderLayer { @@ -33,9 +40,13 @@ public class DragonBackpackRenderLayer extends GeoRenderLayer { @ConfigOption(side = ConfigSide.CLIENT, category = "rendering", key = "render_backpack") public static Boolean renderBackpack = true; + private boolean isCurioLoaded = false; + public DragonBackpackRenderLayer(GeoEntityRenderer renderer) { super(renderer); + + isCurioLoaded = Compat.isModLoaded("curios"); } @Override @@ -51,58 +62,124 @@ public void renderForBone(PoseStack poseStack, DragonEntity animatable, GeoBone if(player == null) return; DragonStateHandler handler = DragonStateProvider.getData(player); - - if(!handler.isDragon()) return; + Optional backpackRenderInfo = getRenderInfo(player); - PlayerInventoryProvider.get().getBackpackFromRendered(player).ifPresent(backpackRenderInfo -> { + if(backpackRenderInfo.isEmpty()) return; - poseStack.pushPose(); + poseStack.pushPose(); - ItemStack backpack = backpackRenderInfo.getBackpack(); - IBackpackWrapper wrapper = BackpackWrapper.fromStack(backpack); + ItemStack backpack = backpackRenderInfo.get().getBackpack(); + IBackpackWrapper wrapper = BackpackWrapper.fromStack(backpack); - int clothColor = wrapper.getMainColor(); - int borderColor = wrapper.getAccentColor(); - IBackpackModel model = BackpackModelManager.getBackpackModel(backpack.getItem()); + int clothColor = wrapper.getMainColor(); + int borderColor = wrapper.getAccentColor(); + IBackpackModel model = BackpackModelManager.getBackpackModel(backpack.getItem()); - Vec3 pos_offset = new Vec3(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ()); - - Vec3 rot_offset = Vec3.ZERO; + Vec3 pos_offset = new Vec3(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ()); - Vec3 scale = new Vec3(1, 1, 1); - - if(handler.body().value().backpackOffsets().isPresent()) { - DragonBody.BackpackOffsets backpackOffsets = handler.body().value().backpackOffsets().get(); + Vec3 rot_offset = Vec3.ZERO; - scale = backpackOffsets.scale(); - pos_offset = pos_offset.add(backpackOffsets.pos_offset()); - rot_offset = backpackOffsets.rot_offset(); - - } + Vec3 scale = new Vec3(1, 1, 1); + + if(handler.body().value().backpackOffsets().isPresent()) { + DragonBody.BackpackOffsets backpackOffsets = handler.body().value().backpackOffsets().get(); + + scale = backpackOffsets.scale(); + pos_offset = pos_offset.add(backpackOffsets.pos_offset()); + rot_offset = backpackOffsets.rot_offset(); - transformModel(poseStack, pos_offset, rot_offset, scale); + } + + transformModel(poseStack, pos_offset, rot_offset, scale); + + model.render(null, player, poseStack, bufferSource, packedLight, clothColor, borderColor, backpack.getItem(), wrapper.getRenderInfo()); + poseStack.popPose(); - model.render(null, player, poseStack, bufferSource, packedLight, clothColor, borderColor, backpack.getItem(), wrapper.getRenderInfo()); - poseStack.popPose(); - }); } + private Optional getRenderInfo(Player player) { + + Optional backpackStack = Optional.empty(); + boolean isArmorSlot = false; + boolean isVisible = true; + + if(isCurioLoaded) { + backpackStack = getBackpackFromCurio(player); + + + } + + if(backpackStack.isEmpty()) { + backpackStack = getBackpackFromChestSlot(player); + isArmorSlot = true; + } + + if(backpackStack.isPresent()) { + + return Optional.of(new PlayerInventoryProvider.RenderInfo(backpackStack.get(), isArmorSlot)); + + } + + return Optional.empty(); + + } private void transformModel(PoseStack poseStack, Vec3 pos_offset, Vec3 rot_offset, Vec3 scale) { - + Vec3 rot = rot_offset.add(0, 0, 180); Quaternionf quat = new Quaternionf().rotationZYX((float) Math.toRadians(rot.x), (float) Math.toRadians(rot.y), (float) Math.toRadians(rot.z)); poseStack.rotateAround(quat, 0, 1.1f, 0); - + pos_offset = pos_offset.scale(1 / 32f); // The backpack rendering is slightly offset to center the pivot in back middle poseStack.translate(pos_offset.x, -pos_offset.y + 0.5, -pos_offset.z - 0.1); - + poseStack.scale((float) scale.x, (float) scale.y, (float) scale.z); } + + + private Optional getBackpackFromCurio(Player player) { + + if(CuriosApi.getCuriosInventory(player).isPresent()) { + + List curioBackSlots = CuriosApi.getCuriosInventory(player).get().findCurios("back"); + + + for(SlotResult backpackItem : curioBackSlots) { + + if(!backpackItem.slotContext().visible()) + continue; + + ItemStack itemStack = backpackItem.stack(); + + if(itemStack.getItem() instanceof BackpackItem) { + return Optional.of(itemStack); + } + + return Optional.empty(); + } + } + return Optional.empty(); + + } + + private Optional getBackpackFromChestSlot(Player player) { + + + ItemStack armorSlot = player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()); + + if(armorSlot.getItem() instanceof BackpackItem) { + return Optional.of(armorSlot); + } + + return Optional.empty(); + + } + + } From db520eee78e8066a0a3e1bdae75a5e12f5a89cb8 Mon Sep 17 00:00:00 2001 From: Nik77x Date: Fri, 31 Jan 2025 16:11:06 +0100 Subject: [PATCH 2/4] Reformat file --- .../sophisticatedBackpacks/DragonBackpackRenderLayer.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java index 1b790c3bd..0112946e5 100644 --- a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java +++ b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java @@ -107,8 +107,6 @@ private Optional getRenderInfo(Player player if(isCurioLoaded) { backpackStack = getBackpackFromCurio(player); - - } if(backpackStack.isEmpty()) { @@ -125,6 +123,7 @@ private Optional getRenderInfo(Player player return Optional.empty(); } + private void transformModel(PoseStack poseStack, Vec3 pos_offset, Vec3 rot_offset, Vec3 scale) { Vec3 rot = rot_offset.add(0, 0, 180); @@ -154,7 +153,7 @@ private Optional getBackpackFromCurio(Player player) { if(!backpackItem.slotContext().visible()) continue; - + ItemStack itemStack = backpackItem.stack(); if(itemStack.getItem() instanceof BackpackItem) { @@ -181,5 +180,5 @@ private Optional getBackpackFromChestSlot(Player player) { } - + } From fab619412b98ccaa2215279c323b7be3f1229291 Mon Sep 17 00:00:00 2001 From: Nik77x Date: Fri, 31 Jan 2025 16:13:09 +0100 Subject: [PATCH 3/4] Cleanup --- .../sophisticatedBackpacks/DragonBackpackRenderLayer.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java index 0112946e5..03f147b3f 100644 --- a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java +++ b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java @@ -40,7 +40,7 @@ public class DragonBackpackRenderLayer extends GeoRenderLayer { @ConfigOption(side = ConfigSide.CLIENT, category = "rendering", key = "render_backpack") public static Boolean renderBackpack = true; - private boolean isCurioLoaded = false; + private final boolean isCurioLoaded; public DragonBackpackRenderLayer(GeoEntityRenderer renderer) { @@ -103,8 +103,7 @@ private Optional getRenderInfo(Player player Optional backpackStack = Optional.empty(); boolean isArmorSlot = false; - boolean isVisible = true; - + if(isCurioLoaded) { backpackStack = getBackpackFromCurio(player); } From 06491c05f4399d278c4273d537deddfa9172323e Mon Sep 17 00:00:00 2001 From: Nik77x Date: Sat, 1 Feb 2025 11:06:35 +0100 Subject: [PATCH 4/4] Merge cleanup --- .../dragonsurvival/compat/Compat.java | 1 + .../DragonBackpackRenderLayer.java | 50 +++++++------------ 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/Compat.java b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/Compat.java index d6cc67b49..25d23fcf8 100644 --- a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/Compat.java +++ b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/Compat.java @@ -12,6 +12,7 @@ public class Compat { public static final String IRIS = "iris"; public static final String COSMETIC_ARMOR_REWORKED = "cosmeticarmorreworked"; public static final String SOPHISTICATED_BACKPACKS = "sophisticatedbackpacks"; + public static final String CURIOS = "curios"; private static final Map> ALIAS = Map.of( IRIS, List.of("oculus"), diff --git a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java index eebff739f..21b147d73 100644 --- a/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java +++ b/src/main/java/by/dragonsurvivalteam/dragonsurvival/compat/sophisticatedBackpacks/DragonBackpackRenderLayer.java @@ -46,7 +46,7 @@ public DragonBackpackRenderLayer(GeoEntityRenderer renderer) { super(renderer); - isCurioLoaded = Compat.isModLoaded("curios"); + isCurioLoaded = Compat.isModLoaded(Compat.CURIOS); } @Override @@ -76,51 +76,43 @@ public void renderForBone(PoseStack poseStack, DragonEntity animatable, GeoBone int borderColor = wrapper.getAccentColor(); IBackpackModel model = BackpackModelManager.getBackpackModel(backpack.getItem()); - Vec3 posOffset = new Vec3(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ()); - - Vec3 rotOffset = Vec3.ZERO; + Vec3 posOffset = new Vec3(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ()); - Vec3 scale = new Vec3(1, 1, 1); - - - if(handler.body().value().backpackOffsets().isPresent()) { - DragonBody.BackpackOffsets backpackOffsets = handler.body().value().backpackOffsets().get(); + Vec3 rotOffset = Vec3.ZERO; - scale = backpackOffsets.scale(); - posOffset = posOffset.add(backpackOffsets.posOffset()); - rotOffset = backpackOffsets.rotOffset(); - } + Vec3 scale = new Vec3(1, 1, 1); - - transformModel(poseStack, posOffset, rotOffset, scale); - pos_offset = pos_offset.add(backpackOffsets.pos_offset()); - rot_offset = backpackOffsets.rot_offset(); + if(handler.body().value().backpackOffsets().isPresent()) { + DragonBody.BackpackOffsets backpackOffsets = handler.body().value().backpackOffsets().get(); + scale = backpackOffsets.scale(); + posOffset = posOffset.add(backpackOffsets.posOffset()); + rotOffset = backpackOffsets.rotOffset(); } - transformModel(poseStack, pos_offset, rot_offset, scale); + + transformModel(poseStack, posOffset, rotOffset, scale); model.render(null, player, poseStack, bufferSource, packedLight, clothColor, borderColor, backpack.getItem(), wrapper.getRenderInfo()); poseStack.popPose(); - } - + private void transformModel(PoseStack poseStack, Vec3 posOffset, Vec3 rotOffset, Vec3 scale) { - + Vec3 rot = rotOffset.add(0, 0, 180); Quaternionf quat = new Quaternionf().rotationZYX((float) Math.toRadians(rot.x), (float) Math.toRadians(rot.y), (float) Math.toRadians(rot.z)); poseStack.rotateAround(quat, 0, 1.1f, 0); - + posOffset = posOffset.scale(1 / 32f); // The backpack rendering is slightly offset to center the pivot in back middle poseStack.translate(posOffset.x, -posOffset.y + 0.5, -posOffset.z - 0.1); - + poseStack.scale((float) scale.x, (float) scale.y, (float) scale.z); } @@ -131,7 +123,7 @@ private Optional getRenderInfo(Player player boolean isArmorSlot = false; if(isCurioLoaded) { - backpackStack = getBackpackFromCurio(player); + backpackStack = getBackpackFromCurios(player); } if(backpackStack.isEmpty()) { @@ -140,9 +132,7 @@ private Optional getRenderInfo(Player player } if(backpackStack.isPresent()) { - return Optional.of(new PlayerInventoryProvider.RenderInfo(backpackStack.get(), isArmorSlot)); - } return Optional.empty(); @@ -150,14 +140,12 @@ private Optional getRenderInfo(Player player } - - private Optional getBackpackFromCurio(Player player) { + private Optional getBackpackFromCurios(Player player) { if(CuriosApi.getCuriosInventory(player).isPresent()) { List curioBackSlots = CuriosApi.getCuriosInventory(player).get().findCurios("back"); - for(SlotResult backpackItem : curioBackSlots) { if(!backpackItem.slotContext().visible()) @@ -172,13 +160,13 @@ private Optional getBackpackFromCurio(Player player) { return Optional.empty(); } } + return Optional.empty(); } private Optional getBackpackFromChestSlot(Player player) { - ItemStack armorSlot = player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()); if(armorSlot.getItem() instanceof BackpackItem) { @@ -188,6 +176,4 @@ private Optional getBackpackFromChestSlot(Player player) { return Optional.empty(); } - - }