diff --git a/src/main/java/com/klikli_dev/occultism/client/render/entity/AfritRenderer.java b/src/main/java/com/klikli_dev/occultism/client/render/entity/AfritRenderer.java index 8c37c1c5a..f4a40cff4 100644 --- a/src/main/java/com/klikli_dev/occultism/client/render/entity/AfritRenderer.java +++ b/src/main/java/com/klikli_dev/occultism/client/render/entity/AfritRenderer.java @@ -24,9 +24,19 @@ import com.klikli_dev.occultism.client.model.entity.AfritModel; import com.klikli_dev.occultism.common.entity.spirit.AfritEntity; +import com.klikli_dev.occultism.common.entity.spirit.MaridEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.layer.AutoGlowingGeoLayer; +import software.bernie.geckolib.renderer.layer.BlockAndItemGeoLayer; + +import java.util.Objects; public class AfritRenderer extends GeoEntityRenderer { @@ -34,5 +44,24 @@ public AfritRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new AfritModel()); this.addRenderLayer(new AutoGlowingGeoLayer<>(this)); + this.addRenderLayer(new BlockAndItemGeoLayer<>(this, (bone, animatable) -> { + if (Objects.equals(bone.getName(), "bone")) //left hand + return animatable.getItemInHand(InteractionHand.MAIN_HAND); + return null; + }, (bone, animatable) -> null) { + @Override + protected ItemDisplayContext getTransformTypeForStack(GeoBone bone, ItemStack stack, AfritEntity animatable) { + return ItemDisplayContext.THIRD_PERSON_LEFT_HAND; + } + + @Override + protected void renderStackForBone(PoseStack poseStack, GeoBone bone, ItemStack stack, AfritEntity animatable, MultiBufferSource bufferSource, float partialTick, int packedLight, int packedOverlay) { + poseStack.pushPose(); + poseStack.translate(0, -0.4, 0); + + super.renderStackForBone(poseStack, bone, stack, animatable, bufferSource, partialTick, packedLight, packedOverlay); + poseStack.popPose(); + } + }); } } diff --git a/src/main/java/com/klikli_dev/occultism/client/render/entity/DjinniRenderer.java b/src/main/java/com/klikli_dev/occultism/client/render/entity/DjinniRenderer.java index bd1fe2726..701f4602e 100644 --- a/src/main/java/com/klikli_dev/occultism/client/render/entity/DjinniRenderer.java +++ b/src/main/java/com/klikli_dev/occultism/client/render/entity/DjinniRenderer.java @@ -24,13 +24,43 @@ import com.klikli_dev.occultism.client.model.entity.DjinniModel; import com.klikli_dev.occultism.common.entity.spirit.DjinniEntity; +import com.klikli_dev.occultism.common.entity.spirit.MaridEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.BlockAndItemGeoLayer; + +import java.util.Objects; public class DjinniRenderer extends GeoEntityRenderer { public DjinniRenderer(EntityRendererProvider.Context context) { super(context, new DjinniModel()); + + this.addRenderLayer(new BlockAndItemGeoLayer<>(this, (bone, animatable) -> { + if (Objects.equals(bone.getName(), "bone2")) //right hand + return animatable.getItemInHand(InteractionHand.MAIN_HAND); + return null; + }, (bone, animatable) -> null) { + @Override + protected ItemDisplayContext getTransformTypeForStack(GeoBone bone, ItemStack stack, DjinniEntity animatable) { + return ItemDisplayContext.THIRD_PERSON_RIGHT_HAND; + } + + @Override + protected void renderStackForBone(PoseStack poseStack, GeoBone bone, ItemStack stack, DjinniEntity animatable, MultiBufferSource bufferSource, float partialTick, int packedLight, int packedOverlay) { + poseStack.pushPose(); + poseStack.translate(0, -0.4, 0); + + super.renderStackForBone(poseStack, bone, stack, animatable, bufferSource, partialTick, packedLight, packedOverlay); + poseStack.popPose(); + } + }); } } diff --git a/src/main/java/com/klikli_dev/occultism/client/render/entity/FoliotRenderer.java b/src/main/java/com/klikli_dev/occultism/client/render/entity/FoliotRenderer.java index 4264d4a80..674a8eafe 100644 --- a/src/main/java/com/klikli_dev/occultism/client/render/entity/FoliotRenderer.java +++ b/src/main/java/com/klikli_dev/occultism/client/render/entity/FoliotRenderer.java @@ -24,17 +24,50 @@ import com.klikli_dev.occultism.Occultism; import com.klikli_dev.occultism.client.model.entity.FoliotModel; +import com.klikli_dev.occultism.common.entity.spirit.DjinniEntity; import com.klikli_dev.occultism.common.entity.spirit.FoliotEntity; import com.klikli_dev.occultism.registry.OccultismModelLayers; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.BlockAndItemGeoLayer; + +import java.util.Objects; public class FoliotRenderer extends GeoEntityRenderer { public FoliotRenderer(EntityRendererProvider.Context context) { super(context, new FoliotModel()); + + this.addRenderLayer(new BlockAndItemGeoLayer<>(this, (bone, animatable) -> { + if (Objects.equals(bone.getName(), "RARM")) //right hand + return animatable.getItemInHand(InteractionHand.MAIN_HAND); + return null; + }, (bone, animatable) -> null) { + @Override + protected ItemDisplayContext getTransformTypeForStack(GeoBone bone, ItemStack stack, FoliotEntity animatable) { + return ItemDisplayContext.THIRD_PERSON_RIGHT_HAND; + } + + @Override + protected void renderStackForBone(PoseStack poseStack, GeoBone bone, ItemStack stack, FoliotEntity animatable, MultiBufferSource bufferSource, float partialTick, int packedLight, int packedOverlay) { + poseStack.pushPose(); + + poseStack.translate(-0.1, -0.3, 0); + + final float scale = 0.4f; + poseStack.scale(scale, scale, scale); + + super.renderStackForBone(poseStack, bone, stack, animatable, bufferSource, partialTick, packedLight, packedOverlay); + poseStack.popPose(); + } + }); } } diff --git a/src/main/java/com/klikli_dev/occultism/client/render/entity/MaridRenderer.java b/src/main/java/com/klikli_dev/occultism/client/render/entity/MaridRenderer.java index f8562da62..4ba4f327b 100644 --- a/src/main/java/com/klikli_dev/occultism/client/render/entity/MaridRenderer.java +++ b/src/main/java/com/klikli_dev/occultism/client/render/entity/MaridRenderer.java @@ -24,13 +24,41 @@ import com.klikli_dev.occultism.client.model.entity.MaridModel; import com.klikli_dev.occultism.common.entity.spirit.MaridEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; -import software.bernie.geckolib.renderer.layer.AutoGlowingGeoLayer; +import software.bernie.geckolib.renderer.layer.BlockAndItemGeoLayer; + +import java.util.Objects; public class MaridRenderer extends GeoEntityRenderer { public MaridRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new MaridModel()); + + this.addRenderLayer(new BlockAndItemGeoLayer<>(this, (bone, animatable) -> { + if (Objects.equals(bone.getName(), "bone")) //left hand + return animatable.getItemInHand(InteractionHand.MAIN_HAND); + return null; + }, (bone, animatable) -> null) { + @Override + protected ItemDisplayContext getTransformTypeForStack(GeoBone bone, ItemStack stack, MaridEntity animatable) { + return ItemDisplayContext.THIRD_PERSON_LEFT_HAND; + } + + @Override + protected void renderStackForBone(PoseStack poseStack, GeoBone bone, ItemStack stack, MaridEntity animatable, MultiBufferSource bufferSource, float partialTick, int packedLight, int packedOverlay) { + poseStack.pushPose(); + poseStack.translate(0, -0.4, 0); + + super.renderStackForBone(poseStack, bone, stack, animatable, bufferSource, partialTick, packedLight, packedOverlay); + poseStack.popPose(); + } + }); } }