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 ca42182..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower0.png and /dev/null differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower1.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower1.png deleted file mode 100644 index 07beddd..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower1.png and /dev/null differ 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 e4748c0..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower2.png and /dev/null differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower3.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower3.png deleted file mode 100644 index 0441830..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower3.png and /dev/null differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower4.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower4.png deleted file mode 100644 index f778c1f..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower4.png and /dev/null differ 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 c438b86..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower5.png and /dev/null differ 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 762765b..0000000 Binary files a/src/main/resources/assets/charmsnfabrics/textures/flower/flower6.png and /dev/null differ diff --git a/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.png new file mode 100644 index 0000000..40fa1b0 Binary files /dev/null and b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_large.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 new file mode 100644 index 0000000..a25efa4 Binary files /dev/null and b/src/main/resources/assets/charmsnfabrics/textures/flower/flower_small.png differ