mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-16 17:44:23 +01:00
Clean up a bit and allow for setting alpha
This commit is contained in:
parent
93a895e90e
commit
0da671b699
3 changed files with 71 additions and 38 deletions
|
@ -1 +1 @@
|
||||||
Subproject commit c4f3e09c933521749a7d349c39e212ffabd1b375
|
Subproject commit 9932af1fa278a481fe262fbd2ed95510942b5638
|
|
@ -35,32 +35,57 @@ public interface ArmourRendererPlugin {
|
||||||
return new ItemStack[] { entity.getEquippedStack(armorSlot) };
|
return new ItemStack[] { entity.getEquippedStack(armorSlot) };
|
||||||
}
|
}
|
||||||
|
|
||||||
default boolean shouldRenderGlint(EquipmentSlot slot, ItemStack stack) {
|
default float getGlintAlpha(EquipmentSlot slot, ItemStack stack) {
|
||||||
return stack.hasGlint();
|
return stack.hasGlint() ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
default int getDyeColor(EquipmentSlot slot, ItemStack stack) {
|
default int getDyeColor(EquipmentSlot slot, ItemStack stack) {
|
||||||
return stack.isIn(ItemTags.DYEABLE) ? DyedColorComponent.getColor(stack, -6265536) : Colors.WHITE;
|
return stack.isIn(ItemTags.DYEABLE) ? DyedColorComponent.getColor(stack, -6265536) : Colors.WHITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default float getArmourAlpha(EquipmentSlot slot, ArmourLayer layer) {
|
||||||
|
return 1F;
|
||||||
|
}
|
||||||
|
|
||||||
|
default float getTrimAlpha(EquipmentSlot slot, RegistryEntry<ArmorMaterial> material, ArmorTrim trim, ArmourLayer layer) {
|
||||||
|
return 1F;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
default VertexConsumer getTrimConsumer(EquipmentSlot slot, VertexConsumerProvider provider, RegistryEntry<ArmorMaterial> material, ArmorTrim trim, ArmourLayer layer) {
|
default VertexConsumer getTrimConsumer(EquipmentSlot slot, VertexConsumerProvider provider, RegistryEntry<ArmorMaterial> material, ArmorTrim trim, ArmourLayer layer) {
|
||||||
|
@Nullable RenderLayer renderLayer = getTrimLayer(slot, material, trim, layer);
|
||||||
|
if (renderLayer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
SpriteAtlasTexture armorTrimsAtlas = MinecraftClient.getInstance().getBakedModelManager().getAtlas(TexturedRenderLayers.ARMOR_TRIMS_ATLAS_TEXTURE);
|
SpriteAtlasTexture armorTrimsAtlas = MinecraftClient.getInstance().getBakedModelManager().getAtlas(TexturedRenderLayers.ARMOR_TRIMS_ATLAS_TEXTURE);
|
||||||
Sprite sprite = armorTrimsAtlas.getSprite(
|
Sprite sprite = armorTrimsAtlas.getSprite(layer == ArmourLayer.INNER ? trim.getLeggingsModelId(material) : trim.getGenericModelId(material));
|
||||||
layer == ArmourLayer.INNER ? trim.getLeggingsModelId(material) : trim.getGenericModelId(material)
|
return sprite.getTextureSpecificVertexConsumer(provider.getBuffer(renderLayer));
|
||||||
);
|
}
|
||||||
return sprite.getTextureSpecificVertexConsumer(
|
|
||||||
provider.getBuffer(TexturedRenderLayers.getArmorTrims(trim.getPattern().value().decal()))
|
@Nullable
|
||||||
);
|
default RenderLayer getTrimLayer(EquipmentSlot slot, RegistryEntry<ArmorMaterial> material, ArmorTrim trim, ArmourLayer layer) {
|
||||||
|
return TexturedRenderLayers.getArmorTrims(trim.getPattern().value().decal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
default VertexConsumer getArmourConsumer(EquipmentSlot slot, VertexConsumerProvider provider, Identifier texture, ArmourLayer layer) {
|
default VertexConsumer getArmourConsumer(EquipmentSlot slot, VertexConsumerProvider provider, Identifier texture, ArmourLayer layer) {
|
||||||
return provider.getBuffer(RenderLayer.getArmorCutoutNoCull(texture));
|
@Nullable RenderLayer renderLayer = getArmourLayer(slot, texture, layer);
|
||||||
|
return renderLayer == null ? null : provider.getBuffer(renderLayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
default RenderLayer getArmourLayer(EquipmentSlot slot, Identifier texture, ArmourLayer layer) {
|
||||||
|
return RenderLayer.getArmorCutoutNoCull(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
default VertexConsumer getGlintConsumer(EquipmentSlot slot, VertexConsumerProvider provider, ArmourLayer layer) {
|
default VertexConsumer getGlintConsumer(EquipmentSlot slot, VertexConsumerProvider provider, ArmourLayer layer) {
|
||||||
return provider.getBuffer(RenderLayer.getArmorEntityGlint());
|
@Nullable RenderLayer renderLayer = getGlintLayer(slot, layer);
|
||||||
|
return renderLayer == null ? null : provider.getBuffer(renderLayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
default RenderLayer getGlintLayer(EquipmentSlot slot, ArmourLayer layer) {
|
||||||
|
return RenderLayer.getArmorEntityGlint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,13 +56,17 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & Po
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean glint = plugin.shouldRenderGlint(armorSlot, stack);
|
float glintAlpha = plugin.getGlintAlpha(armorSlot, stack);
|
||||||
|
boolean glint = glintAlpha > 0;
|
||||||
int color = plugin.getDyeColor(armorSlot, stack);
|
int color = plugin.getDyeColor(armorSlot, stack);
|
||||||
|
|
||||||
Set<PonyArmourModel<?>> models = glint ? new HashSet<>() : null;
|
Set<PonyArmourModel<?>> models = glint ? new HashSet<>() : null;
|
||||||
|
|
||||||
ArmourTextureLookup textureLookup = plugin.getTextureLookup();
|
ArmourTextureLookup textureLookup = plugin.getTextureLookup();
|
||||||
|
|
||||||
|
float alpha = plugin.getArmourAlpha(armorSlot, layer);
|
||||||
|
|
||||||
|
if (alpha > 0) {
|
||||||
for (ArmorMaterial.Layer armorLayer : textureLookup.getArmorLayers(stack, color)) {
|
for (ArmorMaterial.Layer armorLayer : textureLookup.getArmorLayers(stack, color)) {
|
||||||
ArmourTexture layerTexture = textureLookup.getTexture(stack, layer, armorLayer);
|
ArmourTexture layerTexture = textureLookup.getTexture(stack, layer, armorLayer);
|
||||||
|
|
||||||
|
@ -82,17 +86,20 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & Po
|
||||||
green = Color.g(color);
|
green = Color.g(color);
|
||||||
blue = Color.b(color);
|
blue = Color.b(color);
|
||||||
}
|
}
|
||||||
m.render(matrices, armorConsumer, light, OverlayTexture.DEFAULT_UV, red, green, blue, 1);
|
m.render(matrices, armorConsumer, light, OverlayTexture.DEFAULT_UV, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
if (glint) {
|
if (glint) {
|
||||||
models.add(m);
|
models.add(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ArmorTrim trim = stack.get(DataComponentTypes.TRIM);
|
ArmorTrim trim = stack.get(DataComponentTypes.TRIM);
|
||||||
|
|
||||||
if (trim != null && stack.getItem() instanceof ArmorItem armor) {
|
if (trim != null && stack.getItem() instanceof ArmorItem armor) {
|
||||||
|
float trimAlpha = plugin.getTrimAlpha(armorSlot, armor.getMaterial(), trim, layer);
|
||||||
|
if (trimAlpha > 0) {
|
||||||
var m = pony.getArmourModel(stack, layer, ArmourVariant.TRIM).orElse(null);
|
var m = pony.getArmourModel(stack, layer, ArmourVariant.TRIM).orElse(null);
|
||||||
if (m != null && m.poseModel(entity, limbAngle, limbDistance, age, headYaw, headPitch, armorSlot, layer, pony.body())) {
|
if (m != null && m.poseModel(entity, limbAngle, limbDistance, age, headYaw, headPitch, armorSlot, layer, pony.body())) {
|
||||||
VertexConsumer trimConsumer = plugin.getTrimConsumer(armorSlot, provider, armor.getMaterial(), trim, layer);
|
VertexConsumer trimConsumer = plugin.getTrimConsumer(armorSlot, provider, armor.getMaterial(), trim, layer);
|
||||||
|
@ -101,12 +108,13 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & Po
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (glint) {
|
if (glint) {
|
||||||
VertexConsumer glintConsumer = plugin.getGlintConsumer(armorSlot, provider, layer);
|
VertexConsumer glintConsumer = plugin.getGlintConsumer(armorSlot, provider, layer);
|
||||||
if (glintConsumer != null) {
|
if (glintConsumer != null) {
|
||||||
for (var m : models) {
|
for (var m : models) {
|
||||||
m.render(matrices, glintConsumer, light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
|
m.render(matrices, glintConsumer, light, OverlayTexture.DEFAULT_UV, 1, 1, 1, glintAlpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue