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 704d482..89934ca 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java +++ b/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java @@ -67,7 +67,7 @@ public class FlowerCrownItemModel implements ItemModel 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()); + new Quaternionf(), new Vector3f(1.001f), new Quaternionf()); } private ResourceLocation getFlowerLocation(int layer) @@ -77,6 +77,21 @@ public class FlowerCrownItemModel implements ItemModel "flower/flower_" + (layer % 2 == 0 ? "large" : "small")); } + private ResourceLocation getOutlineLocation(int layer) + { + + return ResourceLocation.fromNamespaceAndPath(CharmsAndFabrics.MODID, + "flower/flower_outline_" + + (layer % 2 == 0 ? "large" : "small")); + } + + private TextureAtlasSprite getSprite(ResourceLocation textureLocation) + { + SpriteGetter sprites = this.context.blockModelBaker().sprites(); + Material material = ClientHooks.getBlockMaterial(textureLocation); + return sprites.get(material, DEBUG_NAME); + } + /** * Bakes the base and updates the LayerRenderState quads */ @@ -95,32 +110,48 @@ public class FlowerCrownItemModel implements ItemModel return new BlockModelWrapper(List.of(), quads, this.renderProperties); } - private ItemModel bakeLayer(int layer, ItemStack flower) + private List bakeModel(ResourceLocation textureLocation, + int layer) { - SpriteGetter sprites = this.context.blockModelBaker().sprites(); - Material material = - ClientHooks.getBlockMaterial(this.getFlowerLocation(layer)); - TextureAtlasSprite sprite = sprites.get(material, DEBUG_NAME); + TextureAtlasSprite sprite = this.getSprite(textureLocation); List bits = UnbakedElementsHelper.createUnbakedItemElements(0, sprite); + return UnbakedElementsHelper.bakeElements(bits, $ -> sprite, + new ComposedModelState(BlockModelRotation.X0_Y0, + this.getTransform(layer))); + } + + private ItemModel bakeOutline(int layer) + { List quads = - UnbakedElementsHelper.bakeElements(bits, $ -> sprite, - new ComposedModelState(BlockModelRotation.X0_Y0, - this.getTransform(layer))); + this.bakeModel(this.getOutlineLocation(layer), layer); return new BlockModelWrapper(List.of(new FlowersTint(layer)), quads, this.renderProperties); } - private ItemModel composeModel(FlowerCrownContent content) + private ItemModel bakeFlower(int layer) + { + List models = new ArrayList<>(); + models.add(this.bakeOutline(layer)); + + List quads = + this.bakeModel(this.getFlowerLocation(layer), layer); + models.add( + new BlockModelWrapper(List.of(), quads, this.renderProperties)); + return new CompositeModel(models); + } + + private ItemModel bakeFlowerCrown(FlowerCrownContent content) { List models = new ArrayList<>(); models.add(this.bakeBase()); for (int i = 0; i < content.flowers().size(); i++) { - if (!content.flowers().get(i).isEmpty()) + if (content.flowers().get(i).isEmpty()) { - models.add(this.bakeLayer(i, content.flowers().get(i))); + continue; } + models.add(this.bakeFlower(i)); } return new CompositeModel(models); } @@ -133,13 +164,12 @@ public class FlowerCrownItemModel implements ItemModel { FlowerCrownContent comp = stack.get( CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get()); - if (comp == null) + if (comp != null) { - comp = new FlowerCrownContent(List.of()); + this.bakeFlowerCrown(comp) + .update(renderState, stack, itemModelResolver, displayContext, + level, entity, seed); } - this.composeModel(comp) - .update(renderState, stack, itemModelResolver, displayContext, - level, entity, seed); } public record Unbaked(ResourceLocation base) implements ItemModel.Unbaked diff --git a/src/main/java/fr/sushi/charmsnfabrics/client/util/FlowersTint.java b/src/main/java/fr/sushi/charmsnfabrics/client/util/FlowersTint.java index 133576a..8fde5ec 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/client/util/FlowersTint.java +++ b/src/main/java/fr/sushi/charmsnfabrics/client/util/FlowersTint.java @@ -7,7 +7,6 @@ import fr.sushi.charmsnfabrics.common.CnFRegistries; import fr.sushi.charmsnfabrics.common.data.FlowerCrownContent; import net.minecraft.client.color.item.ItemTintSource; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; @@ -26,21 +25,22 @@ public record FlowersTint(int layer) implements ItemTintSource public int calculate(ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity) { - FlowerCrownContent data = - stack.get(CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get()); + FlowerCrownContent data = stack.get( + CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get()); if (data != null) { ItemStack flower = data.flowers().get(this.layer); - if (flower.is(ItemTags.FLOWERS)) { - - } - if (flower.is(Items.POPPY)) + if (flower.is(Items.BLUE_ORCHID)) { - return DyeColor.RED.getTextureDiffuseColor(); + return DyeColor.LIGHT_BLUE.getTextureDiffuseColor(); } - else if (flower.is(Items.DANDELION)) + else if (flower.is(Items.LILY_OF_THE_VALLEY)) { - return DyeColor.YELLOW.getTextureDiffuseColor(); + return DyeColor.WHITE.getTextureDiffuseColor(); + } + else if (flower.is(Items.PINK_TULIP)) + { + return DyeColor.MAGENTA.getTextureDiffuseColor(); } } return 0xFFFFFFFF; diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png index 40fa1b0..7f48c28 100644 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png and b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_outline_large.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_outline_large.png new file mode 100644 index 0000000..1bd724b Binary files /dev/null and b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_outline_large.png differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_outline_small.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_outline_small.png new file mode 100644 index 0000000..94fcf0d Binary files /dev/null and b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_outline_small.png differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_small.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_small.png index a25efa4..3f0646c 100644 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_small.png and b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_small.png differ