diff --git a/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java b/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java index 677495e..704d482 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java +++ b/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java @@ -8,7 +8,6 @@ import fr.sushi.charmsnfabrics.client.util.FlowersTint; import fr.sushi.charmsnfabrics.common.CnFRegistries; import fr.sushi.charmsnfabrics.common.data.FlowerCrownContent; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.BlockElement; import net.minecraft.client.renderer.block.model.TextureSlots; @@ -20,12 +19,11 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.ClientHooks; -import net.neoforged.neoforge.client.NeoForgeRenderTypes; -import net.neoforged.neoforge.client.RenderTypeGroup; import net.neoforged.neoforge.client.model.ComposedModelState; import net.neoforged.neoforge.client.model.UnbakedElementsHelper; import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; +import org.joml.Vector2f; import org.joml.Vector3f; import java.util.ArrayList; @@ -35,39 +33,20 @@ import java.util.Map; public class FlowerCrownItemModel implements ItemModel { - private static final Map TRANSFORMS = - new HashMap<>(); + private static final Map TRANSLATIONS = new HashMap<>(); + /* + * Position the flower on the item model based on the layer (anticlockwise) + */ static { - TRANSFORMS.put(0, new Transformation( - new Vector3f(1f * 0.0625f, -4f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); - TRANSFORMS.put(1, new Transformation( - new Vector3f(5f * 0.0625f, -3f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); - TRANSFORMS.put(2, new Transformation( - new Vector3f(5f * 0.0625f, 2f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); - TRANSFORMS.put(3, new Transformation( - new Vector3f(2f * 0.0625f, 4f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); - TRANSFORMS.put(4, new Transformation( - new Vector3f(-3f * 0.0625f, 4f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); - TRANSFORMS.put(5, new Transformation( - new Vector3f(-5f * 0.0625f, 0f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); - TRANSFORMS.put(6, new Transformation( - new Vector3f(-4f * 0.0625f, -3f * 0.0625f, 0.0f), - new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f), - new Quaternionf())); + TRANSLATIONS.put(0, new Vector2f(1, -4)); + TRANSLATIONS.put(1, new Vector2f(5, -3)); + TRANSLATIONS.put(2, new Vector2f(5, 2)); + TRANSLATIONS.put(3, new Vector2f(2, 4)); + TRANSLATIONS.put(4, new Vector2f(-3, 4)); + TRANSLATIONS.put(5, new Vector2f(-5, 0)); + TRANSLATIONS.put(6, new Vector2f(-4, -3)); } private static final ModelDebugName DEBUG_NAME = @@ -83,6 +62,14 @@ public class FlowerCrownItemModel implements ItemModel this.context = context; } + private Transformation getTransform(int layer) + { + Vector2f uv = TRANSLATIONS.get(layer); + return new Transformation( + new Vector3f(uv.x * 0.0625f, uv.y * 0.0625f, 0.0f), + new Quaternionf(), new Vector3f(1.002f), new Quaternionf()); + } + private ResourceLocation getFlowerLocation(int layer) { @@ -90,13 +77,6 @@ public class FlowerCrownItemModel implements ItemModel "flower/flower_" + (layer % 2 == 0 ? "large" : "small")); } - private static RenderTypeGroup getLayerRenderTypes(boolean unlit) - { - return new RenderTypeGroup(RenderType.translucent(), unlit ? - NeoForgeRenderTypes.ITEM_UNSORTED_UNLIT_TRANSLUCENT.get() : - NeoForgeRenderTypes.ITEM_UNSORTED_TRANSLUCENT.get()); - } - /** * Bakes the base and updates the LayerRenderState quads */ @@ -126,20 +106,20 @@ public class FlowerCrownItemModel implements ItemModel List quads = UnbakedElementsHelper.bakeElements(bits, $ -> sprite, new ComposedModelState(BlockModelRotation.X0_Y0, - TRANSFORMS.get(layer))); + this.getTransform(layer))); return new BlockModelWrapper(List.of(new FlowersTint(layer)), quads, this.renderProperties); } - private ItemModel composeModel(FlowerCrownContent colors) + private ItemModel composeModel(FlowerCrownContent content) { List models = new ArrayList<>(); models.add(this.bakeBase()); - for (int i = 0; i < colors.flowers().size(); i++) + for (int i = 0; i < content.flowers().size(); i++) { - if (!colors.flowers().get(i).isEmpty()) + if (!content.flowers().get(i).isEmpty()) { - models.add(this.bakeLayer(i, colors.flowers().get(i))); + models.add(this.bakeLayer(i, content.flowers().get(i))); } } return new CompositeModel(models); @@ -151,8 +131,8 @@ public class FlowerCrownItemModel implements ItemModel ItemDisplayContext displayContext, @Nullable ClientLevel level, @Nullable LivingEntity entity, int seed) { - FlowerCrownContent comp = - stack.get(CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get()); + FlowerCrownContent comp = stack.get( + CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get()); if (comp == null) { comp = new FlowerCrownContent(List.of()); diff --git a/src/main/java/fr/sushi/charmsnfabrics/common/item/FlowerCrown.java b/src/main/java/fr/sushi/charmsnfabrics/common/item/FlowerCrown.java index 5e2c636..3dd1fdf 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/common/item/FlowerCrown.java +++ b/src/main/java/fr/sushi/charmsnfabrics/common/item/FlowerCrown.java @@ -48,6 +48,11 @@ public class FlowerCrown extends Item implements ICurioItem ItemStack stack = player.getItemInHand(hand); ItemStack offStack = player.getOffhandItem(); + if (stack.isEmpty() || offStack.isEmpty()) + { + return InteractionResult.PASS; + } + FlowerCrownContent content = stack.get( CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get()); if (content == null ||