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.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<Integer, Transformation> TRANSFORMS =
|
||||
new HashMap<>();
|
||||
private static final Map<Integer, Vector2f> 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<BakedQuad> 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<ItemModel> 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());
|
||||
|
|
|
@ -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 ||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue