From b53475ea9c68624bcbb10a35c9ff2579124d0ed6 Mon Sep 17 00:00:00 2001 From: thepigcat Date: Mon, 10 Jun 2024 17:57:15 +0200 Subject: [PATCH] wip wing rendering --- LICENSE | 2 ++ TEMPLATE_LICENSE.txt | 24 ------------- .../modular_angelring/AngelRingMain.java | 15 ++++++-- .../events/AngelRingEvents.java | 9 ++++- .../events/AngelRingModEvents.java | 32 +++++++++++++++++ .../registry/ItemRegistry.java | 2 ++ .../render/AngelRingRendererLeft.java | 30 +++++++++++++--- .../render/AngelRingRendererRight.java | 34 +++++++++++++++--- .../models/item/angel_wings_left.json | 7 ++++ .../models/item/angel_wings_right.json | 7 ++++ .../textures/item/angel_wings_left.png | Bin 0 -> 242 bytes .../textures/item/angel_wings_right.png | Bin 0 -> 207 bytes 12 files changed, 127 insertions(+), 35 deletions(-) create mode 100644 LICENSE delete mode 100644 TEMPLATE_LICENSE.txt create mode 100644 src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingModEvents.java create mode 100644 src/main/resources/assets/modular_angelring/models/item/angel_wings_left.json create mode 100644 src/main/resources/assets/modular_angelring/models/item/angel_wings_right.json create mode 100644 src/main/resources/assets/modular_angelring/textures/item/angel_wings_left.png create mode 100644 src/main/resources/assets/modular_angelring/textures/item/angel_wings_right.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..664465d --- /dev/null +++ b/LICENSE @@ -0,0 +1,2 @@ +All rights reservered +Copyright 2024 @ Leclowndu \ No newline at end of file diff --git a/TEMPLATE_LICENSE.txt b/TEMPLATE_LICENSE.txt deleted file mode 100644 index b64bc64..0000000 --- a/TEMPLATE_LICENSE.txt +++ /dev/null @@ -1,24 +0,0 @@ -MIT License - -Copyright (c) 2023 NeoForged project - -This license applies to the template files as supplied by github.com/NeoForged/MDK - - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/main/java/com/leclowndu93150/modular_angelring/AngelRingMain.java b/src/main/java/com/leclowndu93150/modular_angelring/AngelRingMain.java index 355e12f..fe42608 100644 --- a/src/main/java/com/leclowndu93150/modular_angelring/AngelRingMain.java +++ b/src/main/java/com/leclowndu93150/modular_angelring/AngelRingMain.java @@ -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); } + + + } diff --git a/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java b/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java index de3981e..31db1c7 100644 --- a/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java +++ b/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java @@ -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; @@ -22,7 +29,6 @@ @EventBusSubscriber(modid = AngelRingMain.MODID) public class AngelRingEvents { - @SubscribeEvent(priority = EventPriority.LOW) public static void setRingBreakSpeed(PlayerEvent.BreakSpeed event) { Optional slotResult = CuriosApi.getCuriosHelper().getCuriosHandler(event.getEntity()).flatMap(curiosHandler -> curiosHandler.findFirstCurio(ItemRegistry.ANGEL_RING.get())); @@ -53,4 +59,5 @@ public static void stopDrift(PlayerTickEvent.Pre event) { } } } + } diff --git a/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingModEvents.java b/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingModEvents.java new file mode 100644 index 0000000..7863830 --- /dev/null +++ b/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingModEvents.java @@ -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 def = event.getSkin(PlayerSkin.Model.WIDE); + EntityRenderer 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)); + } + } +} diff --git a/src/main/java/com/leclowndu93150/modular_angelring/registry/ItemRegistry.java b/src/main/java/com/leclowndu93150/modular_angelring/registry/ItemRegistry.java index 270ab4c..286bab0 100644 --- a/src/main/java/com/leclowndu93150/modular_angelring/registry/ItemRegistry.java +++ b/src/main/java/com/leclowndu93150/modular_angelring/registry/ItemRegistry.java @@ -22,4 +22,6 @@ public class ItemRegistry { public static final DeferredItem GOLD_RING = ITEMS.registerSimpleItem("gold_ring"); public static final DeferredItem ANGEL_WINGS = ITEMS.registerSimpleItem("angel_wings"); + public static final DeferredItem ANGEL_WINGS_LEFT = ITEMS.registerSimpleItem("angel_wings_left"); + public static final DeferredItem ANGEL_WINGS_RIGHT = ITEMS.registerSimpleItem("angel_wings_right"); } diff --git a/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererLeft.java b/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererLeft.java index 14642b7..5e5a01a 100644 --- a/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererLeft.java +++ b/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererLeft.java @@ -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; @@ -22,6 +24,10 @@ @OnlyIn(Dist.CLIENT) public class AngelRingRendererLeft extends RenderLayer> { + 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> playerModel) { super(playerModel); @@ -29,17 +35,33 @@ public AngelRingRendererLeft(RenderLayerParent= MAX_ANGLE) { + angle = MAX_ANGLE; + flappingUp = false; + } + } else { + angle -= FLAP_SPEED; + if (angle <= -MAX_ANGLE) { + angle = -MAX_ANGLE; + flappingUp = true; + } + } + } } \ No newline at end of file diff --git a/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererRight.java b/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererRight.java index d85c5e6..9fdee51 100644 --- a/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererRight.java +++ b/src/main/java/com/leclowndu93150/modular_angelring/render/AngelRingRendererRight.java @@ -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; @@ -22,26 +24,50 @@ @OnlyIn(Dist.CLIENT) public class AngelRingRendererRight extends RenderLayer> { + 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> 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; + } + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/modular_angelring/models/item/angel_wings_left.json b/src/main/resources/assets/modular_angelring/models/item/angel_wings_left.json new file mode 100644 index 0000000..fdf9d6e --- /dev/null +++ b/src/main/resources/assets/modular_angelring/models/item/angel_wings_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "modular_angelring:item/angel_wings_left" + } + } + \ No newline at end of file diff --git a/src/main/resources/assets/modular_angelring/models/item/angel_wings_right.json b/src/main/resources/assets/modular_angelring/models/item/angel_wings_right.json new file mode 100644 index 0000000..fe2a0ac --- /dev/null +++ b/src/main/resources/assets/modular_angelring/models/item/angel_wings_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "modular_angelring:item/angel_wings_right" + } + } + \ No newline at end of file diff --git a/src/main/resources/assets/modular_angelring/textures/item/angel_wings_left.png b/src/main/resources/assets/modular_angelring/textures/item/angel_wings_left.png new file mode 100644 index 0000000000000000000000000000000000000000..71a209bcb849307a7d33f33e42587ca1d798769d GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|)_A%&hFJKY zy|hs9h=Ks?g{9n5o!v`VStf}oeN@O~Jn566C?wkDu#BlBuPj|p>QJZik-yW=%S-sk znaym!&v0yp^lXdgZH{e;*}7Y<2{gRkrOz@qLn`9tPPoW?ZSm(9%+O(is>J7(rjz09L1wPNKZQ