Skip to content

Commit

Permalink
wip wing rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Jun 10, 2024
1 parent f6cc206 commit b53475e
Show file tree
Hide file tree
Showing 12 changed files with 127 additions and 35 deletions.
2 changes: 2 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
All rights reservered
Copyright 2024 @ Leclowndu
24 changes: 0 additions & 24 deletions TEMPLATE_LICENSE.txt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@
import com.leclowndu93150.modular_angelring.registry.CreativeTabRegistry;
import com.leclowndu93150.modular_angelring.registry.DataComponentRegistry;
import com.leclowndu93150.modular_angelring.registry.ItemRegistry;
import com.leclowndu93150.modular_angelring.render.AngelRingRendererLeft;
import com.leclowndu93150.modular_angelring.render.AngelRingRendererRight;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.resources.PlayerSkin;
import net.minecraft.world.entity.player.Player;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.common.NeoForge;

@Mod(AngelRingMain.MODID)
public class AngelRingMain {
public static final String MODID = "modular_angelring";



public AngelRingMain(IEventBus modEventBus) {
CreativeTabRegistry.CREATIVE_MODE_TABS.register(modEventBus);
ItemRegistry.ITEMS.register(modEventBus);
DataComponentRegistry.COMPONENTS.register(modEventBus);

modEventBus.addListener(AngelRingItem::registerCapabilities);
}




}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,20 @@
import com.leclowndu93150.modular_angelring.AngelRingMain;
import com.leclowndu93150.modular_angelring.registry.ItemRegistry;
import com.leclowndu93150.modular_angelring.registry.KeyBindRegistry;
import com.leclowndu93150.modular_angelring.render.AngelRingRendererLeft;
import com.leclowndu93150.modular_angelring.render.AngelRingRendererRight;
import net.minecraft.client.Minecraft;
import net.minecraft.client.Options;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.resources.PlayerSkin;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3;
import net.neoforged.bus.api.EventPriority;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
import top.theillusivec4.curios.api.CuriosApi;
Expand All @@ -22,7 +29,6 @@

@EventBusSubscriber(modid = AngelRingMain.MODID)
public class AngelRingEvents {

@SubscribeEvent(priority = EventPriority.LOW)
public static void setRingBreakSpeed(PlayerEvent.BreakSpeed event) {
Optional<SlotResult> slotResult = CuriosApi.getCuriosHelper().getCuriosHandler(event.getEntity()).flatMap(curiosHandler -> curiosHandler.findFirstCurio(ItemRegistry.ANGEL_RING.get()));
Expand Down Expand Up @@ -53,4 +59,5 @@ public static void stopDrift(PlayerTickEvent.Pre event) {
}
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.leclowndu93150.modular_angelring.events;

import com.leclowndu93150.modular_angelring.AngelRingMain;
import com.leclowndu93150.modular_angelring.render.AngelRingRendererLeft;
import com.leclowndu93150.modular_angelring.render.AngelRingRendererRight;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.resources.PlayerSkin;
import net.minecraft.world.entity.player.Player;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;

@EventBusSubscriber(modid = AngelRingMain.MODID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class AngelRingModEvents {

@SubscribeEvent
public static void registerEntityLayers(EntityRenderersEvent.AddLayers event) {
EntityRenderer<? extends Player> def = event.getSkin(PlayerSkin.Model.WIDE);
EntityRenderer<? extends Player> slim = event.getSkin(PlayerSkin.Model.SLIM);

if (def instanceof PlayerRenderer playerRendererA) {
playerRendererA.addLayer(new AngelRingRendererLeft(playerRendererA));
playerRendererA.addLayer(new AngelRingRendererRight(playerRendererA));
}
if (slim instanceof PlayerRenderer playerRendererB) {
playerRendererB.addLayer(new AngelRingRendererLeft(playerRendererB));
playerRendererB.addLayer(new AngelRingRendererRight(playerRendererB));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ public class ItemRegistry {
public static final DeferredItem<Item> GOLD_RING = ITEMS.registerSimpleItem("gold_ring");

public static final DeferredItem<Item> ANGEL_WINGS = ITEMS.registerSimpleItem("angel_wings");
public static final DeferredItem<Item> ANGEL_WINGS_LEFT = ITEMS.registerSimpleItem("angel_wings_left");
public static final DeferredItem<Item> ANGEL_WINGS_RIGHT = ITEMS.registerSimpleItem("angel_wings_right");
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.leclowndu93150.modular_angelring.render;

import com.leclowndu93150.modular_angelring.registry.ItemRegistry;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer;
Expand All @@ -22,24 +24,44 @@

@OnlyIn(Dist.CLIENT)
public class AngelRingRendererLeft extends RenderLayer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
private static final double FLAP_SPEED = 3.0; // Degrees per flap
private static final double MAX_ANGLE = 25.0; // Maximum flap angle
private double angle = 0.0; // Angle of rotation
private boolean flappingUp = true; // Direction of flapping

public AngelRingRendererLeft(RenderLayerParent<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> playerModel) {
super(playerModel);
}

@Override
public void render(@NotNull PoseStack matrixStack, @NotNull MultiBufferSource buffer, int packedLight, AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) {
Item item = ItemStack.EMPTY.getItem();
if (player.isCapeLoaded() && !player.isInvisible() && player.isModelPartShown(PlayerModelPart.CAPE) && isEquipped(player)) {
if (isBaseEquipped(player)) {item = net.minecraft.world.item.ItemStack.EMPTY.getItem();}
if (Minecraft.getInstance().player.getSkin().capeTexture() == null && !player.isInvisible() && player.isModelPartShown(PlayerModelPart.CAPE) && isEquipped(player)) {
matrixStack.pushPose();
getParentModel().body.translateAndRotate(matrixStack);
matrixStack.translate(0.4, 0.2, 0.4);
matrixStack.scale(-0.9f, 0.9f, 0.9f);
matrixStack.mulPose(new Quaternionf().rotateY((float) (Math.PI / 6)));
matrixStack.scale(-1, -1, -1);
Minecraft.getInstance().getItemRenderer().renderStatic(player, new ItemStack(item), ItemDisplayContext.NONE, false, matrixStack, buffer, player.level(), 0xF000F0, OverlayTexture.NO_OVERLAY, player.getId());
updateWingAngle();
matrixStack.mulPose(Axis.YN.rotationDegrees((float) angle));
Minecraft.getInstance().getItemRenderer().renderStatic(player, new ItemStack(ItemRegistry.ANGEL_WINGS_RIGHT.get()), ItemDisplayContext.NONE, false, matrixStack, buffer, player.level(), 0xF000F0, OverlayTexture.NO_OVERLAY, player.getId());
matrixStack.popPose();
}
}

private void updateWingAngle() {
if (flappingUp) {
angle += FLAP_SPEED;
if (angle >= MAX_ANGLE) {
angle = MAX_ANGLE;
flappingUp = false;
}
} else {
angle -= FLAP_SPEED;
if (angle <= -MAX_ANGLE) {
angle = -MAX_ANGLE;
flappingUp = true;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.leclowndu93150.modular_angelring.render;

import com.leclowndu93150.modular_angelring.registry.ItemRegistry;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer;
Expand All @@ -22,26 +24,50 @@

@OnlyIn(Dist.CLIENT)
public class AngelRingRendererRight extends RenderLayer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
private static final double FLAP_SPEED = 3.0; // Degrees per flap
private static final double MAX_ANGLE = 25.0; // Maximum flap angle
private double angle = 0.0; // Angle of rotation
private boolean flappingUp = true; // Direction of flapping

public AngelRingRendererRight(RenderLayerParent<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> playerModel) {
super(playerModel);
}


@Override
public void render(@NotNull PoseStack matrixStack, @NotNull MultiBufferSource buffer, int packedLight, AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) {
Item item = net.minecraft.world.item.ItemStack.EMPTY.getItem();
if (player.isCapeLoaded() && !player.isInvisible() && player.isModelPartShown(PlayerModelPart.CAPE) && isEquipped(player)) {
if (isBaseEquipped(player)) {item = ItemStack.EMPTY.getItem();}
if (Minecraft.getInstance().player.getSkin().capeTexture() == null
&& !player.isInvisible()
&& player.isModelPartShown(PlayerModelPart.CAPE)
&& isEquipped(player)) {
matrixStack.pushPose();
getParentModel().body.translateAndRotate(matrixStack);
float zTranslate = (float) (player.getInventory().armor.get(2) == ItemStack.EMPTY ? 0.3 : 0.4);
matrixStack.translate(-0.4, 0.2, 0.4);
matrixStack.scale(0.9f, 0.9f, 0.9f);
matrixStack.mulPose(new Quaternionf().rotateY((float) (Math.PI / 6)));
matrixStack.scale(-1, -1, -1);
Minecraft.getInstance().getItemRenderer().renderStatic(player, new ItemStack(item), ItemDisplayContext.NONE, false, matrixStack, buffer, player.level(), 0xF000F0, OverlayTexture.NO_OVERLAY, player.getId());
updateWingAngle();
matrixStack.mulPose(Axis.YN.rotationDegrees((float) angle));
Minecraft.getInstance().getItemRenderer().renderStatic(player, new ItemStack(ItemRegistry.ANGEL_WINGS_RIGHT.get()), ItemDisplayContext.NONE, false, matrixStack, buffer, player.level(), 0xF000F0, OverlayTexture.NO_OVERLAY, player.getId());
matrixStack.popPose();
}

}

private void updateWingAngle() {
if (flappingUp) {
angle += FLAP_SPEED;
if (angle >= MAX_ANGLE) {
angle = MAX_ANGLE;
flappingUp = false;
}
} else {
angle -= FLAP_SPEED;
if (angle <= -MAX_ANGLE) {
angle = -MAX_ANGLE;
flappingUp = true;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "modular_angelring:item/angel_wings_left"
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "modular_angelring:item/angel_wings_right"
}
}

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit b53475e

Please sign in to comment.