This commit is contained in:
parent
67ae714c64
commit
d393812448
2 changed files with 32 additions and 47 deletions
|
@ -8,7 +8,6 @@ import fr.sushi.charmsnfabrics.client.util.FlowersTint;
|
||||||
import fr.sushi.charmsnfabrics.common.CnFRegistries;
|
import fr.sushi.charmsnfabrics.common.CnFRegistries;
|
||||||
import fr.sushi.charmsnfabrics.common.data.FlowerCrownContent;
|
import fr.sushi.charmsnfabrics.common.data.FlowerCrownContent;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
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.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.BlockElement;
|
import net.minecraft.client.renderer.block.model.BlockElement;
|
||||||
import net.minecraft.client.renderer.block.model.TextureSlots;
|
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.ItemDisplayContext;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.neoforged.neoforge.client.ClientHooks;
|
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.ComposedModelState;
|
||||||
import net.neoforged.neoforge.client.model.UnbakedElementsHelper;
|
import net.neoforged.neoforge.client.model.UnbakedElementsHelper;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.joml.Quaternionf;
|
import org.joml.Quaternionf;
|
||||||
|
import org.joml.Vector2f;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -35,39 +33,20 @@ import java.util.Map;
|
||||||
|
|
||||||
public class FlowerCrownItemModel implements ItemModel
|
public class FlowerCrownItemModel implements ItemModel
|
||||||
{
|
{
|
||||||
private static final Map<Integer, Transformation> TRANSFORMS =
|
private static final Map<Integer, Vector2f> TRANSLATIONS = new HashMap<>();
|
||||||
new HashMap<>();
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Position the flower on the item model based on the layer (anticlockwise)
|
||||||
|
*/
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
TRANSFORMS.put(0, new Transformation(
|
TRANSLATIONS.put(0, new Vector2f(1, -4));
|
||||||
new Vector3f(1f * 0.0625f, -4f * 0.0625f, 0.0f),
|
TRANSLATIONS.put(1, new Vector2f(5, -3));
|
||||||
new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f),
|
TRANSLATIONS.put(2, new Vector2f(5, 2));
|
||||||
new Quaternionf()));
|
TRANSLATIONS.put(3, new Vector2f(2, 4));
|
||||||
TRANSFORMS.put(1, new Transformation(
|
TRANSLATIONS.put(4, new Vector2f(-3, 4));
|
||||||
new Vector3f(5f * 0.0625f, -3f * 0.0625f, 0.0f),
|
TRANSLATIONS.put(5, new Vector2f(-5, 0));
|
||||||
new Quaternionf(), new Vector3f(1.01f, 1.01f, 1.0625f),
|
TRANSLATIONS.put(6, new Vector2f(-4, -3));
|
||||||
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 =
|
private static final ModelDebugName DEBUG_NAME =
|
||||||
|
@ -83,6 +62,14 @@ public class FlowerCrownItemModel implements ItemModel
|
||||||
this.context = context;
|
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)
|
private ResourceLocation getFlowerLocation(int layer)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -90,13 +77,6 @@ public class FlowerCrownItemModel implements ItemModel
|
||||||
"flower/flower_" + (layer % 2 == 0 ? "large" : "small"));
|
"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
|
* Bakes the base and updates the LayerRenderState quads
|
||||||
*/
|
*/
|
||||||
|
@ -126,20 +106,20 @@ public class FlowerCrownItemModel implements ItemModel
|
||||||
List<BakedQuad> quads =
|
List<BakedQuad> quads =
|
||||||
UnbakedElementsHelper.bakeElements(bits, $ -> sprite,
|
UnbakedElementsHelper.bakeElements(bits, $ -> sprite,
|
||||||
new ComposedModelState(BlockModelRotation.X0_Y0,
|
new ComposedModelState(BlockModelRotation.X0_Y0,
|
||||||
TRANSFORMS.get(layer)));
|
this.getTransform(layer)));
|
||||||
return new BlockModelWrapper(List.of(new FlowersTint(layer)), quads,
|
return new BlockModelWrapper(List.of(new FlowersTint(layer)), quads,
|
||||||
this.renderProperties);
|
this.renderProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemModel composeModel(FlowerCrownContent colors)
|
private ItemModel composeModel(FlowerCrownContent content)
|
||||||
{
|
{
|
||||||
List<ItemModel> models = new ArrayList<>();
|
List<ItemModel> models = new ArrayList<>();
|
||||||
models.add(this.bakeBase());
|
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);
|
return new CompositeModel(models);
|
||||||
|
@ -151,8 +131,8 @@ public class FlowerCrownItemModel implements ItemModel
|
||||||
ItemDisplayContext displayContext, @Nullable ClientLevel level,
|
ItemDisplayContext displayContext, @Nullable ClientLevel level,
|
||||||
@Nullable LivingEntity entity, int seed)
|
@Nullable LivingEntity entity, int seed)
|
||||||
{
|
{
|
||||||
FlowerCrownContent comp =
|
FlowerCrownContent comp = stack.get(
|
||||||
stack.get(CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get());
|
CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get());
|
||||||
if (comp == null)
|
if (comp == null)
|
||||||
{
|
{
|
||||||
comp = new FlowerCrownContent(List.of());
|
comp = new FlowerCrownContent(List.of());
|
||||||
|
|
|
@ -48,6 +48,11 @@ public class FlowerCrown extends Item implements ICurioItem
|
||||||
ItemStack stack = player.getItemInHand(hand);
|
ItemStack stack = player.getItemInHand(hand);
|
||||||
ItemStack offStack = player.getOffhandItem();
|
ItemStack offStack = player.getOffhandItem();
|
||||||
|
|
||||||
|
if (stack.isEmpty() || offStack.isEmpty())
|
||||||
|
{
|
||||||
|
return InteractionResult.PASS;
|
||||||
|
}
|
||||||
|
|
||||||
FlowerCrownContent content = stack.get(
|
FlowerCrownContent content = stack.get(
|
||||||
CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get());
|
CnFRegistries.DataComponents.FLOWER_CROWN_CONTENT.get());
|
||||||
if (content == null ||
|
if (content == null ||
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue