From 9bcabeb8f751d5150bf753af50726569b85521d9 Mon Sep 17 00:00:00 2001 From: SushiCannibale Date: Tue, 12 Aug 2025 22:14:54 +0200 Subject: [PATCH] feat: flower_crown composite model --- .../client/model/FlowerCrownItemModel.java | 74 +++++++++++++++--- .../textures/flower/flower0.png | Bin 141 -> 0 bytes .../textures/flower/flower1.png | Bin 142 -> 0 bytes .../textures/flower/flower2.png | Bin 112 -> 0 bytes .../textures/flower/flower3.png | Bin 142 -> 0 bytes .../textures/flower/flower4.png | Bin 107 -> 0 bytes .../textures/flower/flower5.png | Bin 141 -> 0 bytes .../textures/flower/flower6.png | Bin 107 -> 0 bytes .../textures/flower/flower_large.png | Bin 0 -> 141 bytes .../textures/flower/flower_small.png | Bin 0 -> 112 bytes 10 files changed, 61 insertions(+), 13 deletions(-) delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower0.png delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower1.png delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower2.png delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower3.png delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower4.png delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower5.png delete mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower6.png create mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png create mode 100644 src/main/resources/assets/charmsnfabrics/textures/flower/flower_small.png 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 34192d1..d0adcc0 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java +++ b/src/main/java/fr/sushi/charmsnfabrics/client/model/FlowerCrownItemModel.java @@ -4,6 +4,8 @@ import com.mojang.math.Transformation; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import fr.sushi.charmsnfabrics.CharmsAndFabrics; +import fr.sushi.charmsnfabrics.common.CnFRegistries; +import fr.sushi.charmsnfabrics.common.data.SavedColors; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.BakedQuad; @@ -14,6 +16,7 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.model.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.ClientHooks; @@ -26,14 +29,49 @@ import org.joml.Quaternionf; import org.joml.Vector3f; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class FlowerCrownItemModel implements ItemModel { /* TODO: Center flower0&1 textures and play with transform to get them at the right place for every layer */ - private static final Transformation TRANSFORM = - new Transformation(new Vector3f(), new Quaternionf(), - new Vector3f(1.0f, 1.0f, 1.004f), new Quaternionf()); + + private static final Map TRANSFORMS = + new HashMap<>(); + + 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())); + } + private static final ModelDebugName DEBUG_NAME = () -> "FlowerCrownItemModel"; @@ -49,8 +87,9 @@ public class FlowerCrownItemModel implements ItemModel private ResourceLocation getFlowerLocation(int layer) { + return ResourceLocation.fromNamespaceAndPath(CharmsAndFabrics.MODID, - "flower/flower" + layer); + "flower/flower_" + (layer % 2 == 0 ? "large" : "small")); } private static RenderTypeGroup getLayerRenderTypes(boolean unlit) @@ -78,7 +117,7 @@ public class FlowerCrownItemModel implements ItemModel return new BlockModelWrapper(List.of(), quads, this.renderProperties); } - private ItemModel bakeLayer(int layer) + private ItemModel bakeLayer(int layer, DyeColor color) { SpriteGetter sprites = this.context.blockModelBaker().sprites(); Material material = @@ -90,15 +129,18 @@ public class FlowerCrownItemModel implements ItemModel List quads = UnbakedElementsHelper.bakeElements(bits, $ -> sprite, new ComposedModelState(BlockModelRotation.X0_Y0, - TRANSFORM)); + TRANSFORMS.get(layer))); return new BlockModelWrapper(List.of(), quads, this.renderProperties); } - private CompositeModel composeModel() + private ItemModel composeModel(SavedColors colors) { List models = new ArrayList<>(); models.add(this.bakeBase()); - models.add(this.bakeLayer(0)); + for (int i = 0; i < colors.flowers().size(); i++) + { + models.add(this.bakeLayer(i, colors.flowers().get(i))); + } return new CompositeModel(models); } @@ -108,7 +150,13 @@ public class FlowerCrownItemModel implements ItemModel ItemDisplayContext displayContext, @Nullable ClientLevel level, @Nullable LivingEntity entity, int seed) { - this.composeModel() + SavedColors comp = + stack.get(CnFRegistries.DataComponents.SAVED_FLOWERS.get()); + if (comp == null) + { + comp = new SavedColors(List.of()); + } + this.composeModel(comp) .update(renderState, stack, itemModelResolver, displayContext, level, entity, seed); } @@ -116,11 +164,11 @@ public class FlowerCrownItemModel implements ItemModel public record Unbaked(ResourceLocation base) implements ItemModel.Unbaked { - public static final MapCodec MAP_CODEC = + public static final MapCodec MAP_CODEC = RecordCodecBuilder.mapCodec(unbaked -> unbaked - .group(ResourceLocation.CODEC.fieldOf("base").forGetter( - FlowerCrownItemModel.Unbaked::base)) - .apply(unbaked, FlowerCrownItemModel.Unbaked::new)); + .group(ResourceLocation.CODEC.fieldOf("base") + .forGetter(Unbaked::base)) + .apply(unbaked, Unbaked::new)); @Override public MapCodec type() diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower0.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower0.png deleted file mode 100644 index ca421822cfc21454c37d59e61d906b5961d230cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|+&x_!Lo9le z6C_v{H{5#g`}_O<`|JPzn=fMPb7IziS+j%(Kco&ibSV}vzpMXq;s6kQ_o=L!-(C9e|9|QFIc)|HjUU`x`krTwkrU7Tb9WOe%3fMW p_9fg1{P^vEU)T00m5q7~3~X{rdS%}x`vA>k@O1TaS?83{1OV4JHR%8V diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower2.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower2.png deleted file mode 100644 index e4748c0e8dfa660f272786a7debe29498051c16e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|v^-rLLo9le z6C_v{Cny~F{{H@d<-drkY^OIC;%YU9{V6*$nTpf3V pH!CWB*SjB${$SaM^vbKn)C@u6{1-oD!M< D++QGR diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower5.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower5.png deleted file mode 100644 index c438b86719e6b7df1ae0d54604d633ac5f390d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|+&x_!Lo9le z6C_F={Qmy_|Ni>_|K>-0^?5PtzpPopgC9}{9o8snu-*CpV`3u^Jp8{pyuj?_gInF= n|JU!WaNHv9c2Gk?hJnFqj#AZ?)yKC1jb!k2^>bP0l+XkKAVoIk diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower6.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower6.png deleted file mode 100644 index 762765ba5a965881ad43063bc211794bbeec2c89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|R6SiBLo9le z6C_xhIrdome{b(P>;L|b|LZevnt$S5=hr_ozje-mg11Mxo7x_*h-AvKI&(5Ge0?Lxrgf*J9jJ@J)78&q Iol`;+0487{w*UYD literal 0 HcmV?d00001