Update renderers, entity renderers, and models (includes: Bulbs now have their hurt overlay)

This commit is contained in:
Sollace 2024-09-30 15:17:57 +01:00
parent 8b71579539
commit db413622a1
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
32 changed files with 94 additions and 75 deletions

View file

@ -22,7 +22,7 @@ public class AnimalPoser {
.filter(eq -> eq instanceof Creature)
.map(Creature.class::cast)
.ifPresent(creature -> {
float tickDelta = MinecraftClient.getInstance().getTickDelta();
float tickDelta = MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false);
float headAngle = creature.getHeadAngle(tickDelta);
float neckAngle = 12;

View file

@ -153,7 +153,7 @@ public class DisguisedArmsFeatureRenderer<E extends LivingEntity> implements Acc
}
model.animateModel(entity, 0, 0, 0);
model.setAngles(entity, 0, 0, 0, 0, client.getTickDelta());
model.setAngles(entity, 0, 0, 0, 0, client.getRenderTickCounter().getTickDelta(false));
float signum = right ? 1 : -1;
float srtSwingProgress = MathHelper.sqrt(swingProgress);

View file

@ -55,7 +55,7 @@ public class HeldEntityFeatureRenderer<E extends LivingEntity> implements Access
@Override
public boolean beforeRenderArms(ArmRenderer sender, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, E entity, int light) {
return Pony.of(entity).flatMap(Pony::getEntityInArms).filter(passenger -> {
float swingProgress = entity.getHandSwingProgress(MinecraftClient.getInstance().getTickDelta());
float swingProgress = entity.getHandSwingProgress(MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false));
float f = -0.4f * MathHelper.sin(MathHelper.sqrt(swingProgress) * (float)Math.PI);
float g = 0.2f * MathHelper.sin(MathHelper.sqrt(swingProgress) * ((float)Math.PI * 2));
float h = -0.2f * MathHelper.sin(swingProgress * (float)Math.PI);

View file

@ -49,7 +49,7 @@ public class HornFeatureRenderer<E extends LivingEntity> implements AccessoryFea
if (canRender(entity)) {
model.setAngles(context.getModel());
model.setState(false);
model.render(stack, ItemRenderer.getArmorGlintConsumer(renderContext, RenderLayer.getArmorCutoutNoCull(TEXTURE), false), lightUv, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(stack, ItemRenderer.getArmorGlintConsumer(renderContext, RenderLayer.getArmorCutoutNoCull(TEXTURE), false), lightUv, OverlayTexture.DEFAULT_UV, Colors.WHITE);
Pony.of(entity).flatMap(pony -> {
return pony.getAbilities().getActiveStat()
@ -60,7 +60,7 @@ public class HornFeatureRenderer<E extends LivingEntity> implements AccessoryFea
.map(spell -> spell.getTypeAndTraits().type().getColor()));
}).ifPresent(color -> {
model.setState(true);
model.render(stack, ItemRenderer.getArmorGlintConsumer(renderContext, RenderLayers.getMagicColored((0x99 << 24) | color), false), lightUv, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(stack, ItemRenderer.getArmorGlintConsumer(renderContext, RenderLayers.getMagicColored((0x99 << 24) | color), false), lightUv, OverlayTexture.DEFAULT_UV, Colors.WHITE);
});
}
}

View file

@ -23,7 +23,7 @@ public final class LeavesAdditionsModel extends ForwardingBakedModel {
public static void bootstrap() {
ModelLoadingPlugin.register(ctx -> {
ctx.modifyModelAfterBake().register(ModelModifier.WRAP_PHASE, (model, context) -> {
Identifier id = context.id();
Identifier id = context.resourceId();
if (!id.getPath().endsWith("_flowering") || !(Registries.BLOCK.get(id.withPath(p -> p.replace("block/", "").replace("_flowering", ""))) instanceof FruitBearingBlock)) {
return model;
}

View file

@ -22,7 +22,6 @@ import net.minecraft.util.math.RotationAxis;
import net.minecraft.registry.Registries;
public class PolearmRenderer implements DynamicItemRenderer, ClampedModelPredicateProvider {
private static final PolearmRenderer INSTANCE = new PolearmRenderer();
private static final Identifier THROWING = Identifier.ofVanilla("throwing");

View file

@ -1,6 +1,5 @@
package com.minelittlepony.unicopia.client.render;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
@ -16,7 +15,7 @@ public interface RenderLayerUtil {
static void createUnionBuffer(Consumer<VertexConsumerProvider> action, VertexConsumerProvider vertices, Function<Identifier, RenderLayer> overlayFunction) {
Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEffectVertexConsumers();
action.accept(layer -> {
Identifier texture = RenderLayerUtil.getTexture(layer).orElse(null);
Identifier texture = com.minelittlepony.common.util.render.RenderLayerUtil.getTexture(layer).orElse(null);
if (texture == null || texture.equals(SHADOW_TEXTURE) || texture.equals(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE)) {
return vertices.getBuffer(layer);

View file

@ -16,6 +16,7 @@ import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.MathHelper;
@ -43,7 +44,7 @@ public class SmittenEyesRenderer {
float scale = 1F + (1.3F + MathHelper.sin(pony.asEntity().age / 3F) * 0.06F);
matrices.scale(scale, scale, scale);
matrices.translate(0, 0.05F, 0);
model.render(matrices, buffer, light, overlay, 1, 1, 1, 1);
model.render(matrices, buffer, light, overlay, Colors.WHITE);
if (client.getEntityRenderDispatcher().shouldRenderHitboxes()) {
VertexConsumer lines = vertices.getBuffer(RenderLayer.getLines());

View file

@ -24,6 +24,7 @@ import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
public class WingsFeatureRenderer<E extends LivingEntity> implements AccessoryFeatureRenderer.Feature<E> {
@ -48,7 +49,7 @@ public class WingsFeatureRenderer<E extends LivingEntity> implements AccessoryFe
VertexConsumer consumer = ItemRenderer.getArmorGlintConsumer(renderContext, RenderLayer.getEntityTranslucent(texture), false);
model.setAngles(entity, context.getModel());
model.render(matrices, consumer, lightUv, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(matrices, consumer, lightUv, OverlayTexture.DEFAULT_UV, Colors.WHITE);
}
}
@ -106,8 +107,8 @@ public class WingsFeatureRenderer<E extends LivingEntity> implements AccessoryFe
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int i, int j, float f, float g, float h, float k) {
root.render(matrices, vertexConsumer, i, j, f, g, h, k);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
root.render(matrices, vertexConsumer, light, overlay, color);
}
static class Wing {

View file

@ -134,7 +134,7 @@ public class AirBalloonEntityModel extends EntityModel<AirBalloonEntity> {
@Override
public void setAngles(AirBalloonEntity entity, float limbDistance, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
float tickDelta = MinecraftClient.getInstance().getTickDelta();
float tickDelta = MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false);
inflation = entity.getInflation(tickDelta);
root.yaw = MathHelper.PI;
@ -230,15 +230,15 @@ public class AirBalloonEntityModel extends EntityModel<AirBalloonEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float r, float g, float b, float a) {
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
if (isBalloon) {
matrices.push();
matrices.translate(0, 1 * (1 - inflation), 0);
matrices.scale(1, MathHelper.lerp(inflation, -0.05F, 1), 1);
root.render(matrices, vertexConsumer, light, overlay, r, g, b, a);
root.render(matrices, vertexConsumer, light, overlay, color);
matrices.pop();
} else {
root.render(matrices, vertexConsumer, light, overlay, r, g, b, a);
root.render(matrices, vertexConsumer, light, overlay, color);
}
}
}

View file

@ -17,6 +17,7 @@ import net.minecraft.client.render.entity.feature.FeatureRenderer;
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.Items;
import net.minecraft.util.Colors;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
@ -89,7 +90,7 @@ public class AirBalloonEntityRenderer extends MobEntityRenderer<AirBalloonEntity
if (texture.getPath().indexOf("sandbags") != -1) {
model = new AirBalloonEntityModel(AirBalloonEntityModel.getSandbagsModelData().createModel());
}
render(getModel(), model, texture, matrices, vertices, lightFunc.apply(light, entity), entity, limbAngle, limbDistance, 0, yaw, pitch, tickDelta, 1, 1, 1);
render(getModel(), model, texture, matrices, vertices, lightFunc.apply(light, entity), entity, limbAngle, limbDistance, 0, yaw, pitch, tickDelta, Colors.WHITE);
}
}
}

View file

@ -42,13 +42,13 @@ public class ButterflyEntityRenderer extends MobEntityRenderer<ButterflyEntity,
}
@Override
protected void setupTransforms(ButterflyEntity entity, MatrixStack matrices, float age, float yaw, float ticks) {
protected void setupTransforms(ButterflyEntity entity, MatrixStack matrices, float age, float yaw, float ticks, float scale) {
if (!entity.isResting()) {
matrices.translate(0, MathHelper.cos(age / 3F) / 10F, 0);
}
super.setupTransforms(entity, matrices, age, yaw, ticks);
super.setupTransforms(entity, matrices, age, yaw, ticks, scale);
}
@Override
@ -65,7 +65,7 @@ public class ButterflyEntityRenderer extends MobEntityRenderer<ButterflyEntity,
@Override
protected int getSkyLight(ButterflyEntity entity, BlockPos pos) {
return (int)(super.getSkyLight(entity, pos) * (entity.getWorld() instanceof ClientWorld w ? w.getSkyBrightness(MinecraftClient.getInstance().getTickDelta()) : 1));
return (int)(super.getSkyLight(entity, pos) * (entity.getWorld() instanceof ClientWorld w ? w.getSkyBrightness(MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false)) : 1));
}
public static class ButterflyEntityModel extends EntityModel<ButterflyEntity> {
@ -96,8 +96,8 @@ public class ButterflyEntityRenderer extends MobEntityRenderer<ButterflyEntity,
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
body.render(matrices, vertexConsumer, light, overlay, color);
}
@Override

View file

@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.client.render.entity;
import org.jetbrains.annotations.Nullable;
import com.minelittlepony.common.util.Color;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.ability.magic.spell.Spell;
import com.minelittlepony.unicopia.client.render.model.PlaneModel;
@ -18,6 +17,7 @@ import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.PlayerScreenHandler;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper.Argb;
import net.minecraft.util.math.RotationAxis;
public class CastSpellEntityRenderer extends EntityRenderer<CastSpellEntity> {
@ -71,10 +71,6 @@ public class CastSpellEntityRenderer extends EntityRenderer<CastSpellEntity> {
int color = spell == null ? 0 : spell.getTypeAndTraits().type().getColor();
float red = Color.r(color);
float green = Color.g(color);
float blue = Color.b(color);
@Nullable
SpellRenderer<?> renderer = spell == null ? null : SpellEffectsRenderDispatcher.INSTANCE.getRenderer(spell);
@ -91,7 +87,7 @@ public class CastSpellEntityRenderer extends EntityRenderer<CastSpellEntity> {
matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(angle * ringSpeed));
matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(angle * ringSpeed * dim));
matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(angle * ringSpeed * dim));
PlaneModel.INSTANCE.render(matrices, buffer, light, 0, 1, red, green, blue, scale / ((float)(dim * 3) + 1));
PlaneModel.INSTANCE.render(matrices, buffer, light, 0, 1, Argb.withAlpha(color, (int)(255 * (scale / ((float)(dim * 3) + 1)))));
matrices.pop();
}
}

View file

@ -57,7 +57,7 @@ public class CrystalShardsEntityModel extends EntityModel<CrystalShardsEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
part.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
part.render(matrices, vertexConsumer, light, overlay, color);
}
}

View file

@ -10,6 +10,7 @@ import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.RotationAxis;
@ -39,7 +40,7 @@ public class CrystalShardsEntityRenderer extends EntityRenderer<CrystalShardsEnt
matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(yaw));
model.setAngles(entity, 0, 0, 0, 0, 0);
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))), light, OverlayTexture.DEFAULT_UV, Colors.WHITE);
matrices.pop();
super.render(entity, yaw, tickDelta, matrices, vertices, light);
}

View file

@ -11,6 +11,8 @@ import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.PlayerScreenHandler;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper;
import net.minecraft.util.math.ColorHelper.Argb;
public class FairyEntityRenderer extends MobEntityRenderer<FairyEntity, FairyEntityRenderer.Model> {
public FairyEntityRenderer(EntityRendererFactory.Context context) {
@ -31,14 +33,15 @@ public class FairyEntityRenderer extends MobEntityRenderer<FairyEntity, FairyEnt
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
float thickness = 0.05F;
matrices.push();
matrices.translate(0, 1.5, 0);
SphereModel.SPHERE.render(matrices, vertexConsumer, light, overlay, radius - thickness, red, green, blue, 0.5F);
SphereModel.SPHERE.render(matrices, vertexConsumer, light, overlay, radius, red, green, blue, 0.3F);
SphereModel.SPHERE.render(matrices, vertexConsumer, light, overlay, radius - thickness, Argb.withAlpha(color, 127));
SphereModel.SPHERE.render(matrices, vertexConsumer, light, overlay, radius, Argb.withAlpha(color, 85));
matrices.pop();
}

View file

@ -81,8 +81,7 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer<FloatingArtef
final MatrixStack.Entry entry = matrices.peek();
final OverlayVertexConsumer destructionOverlay = new OverlayVertexConsumer(
MinecraftClient.getInstance().getBufferBuilders().getEffectVertexConsumers().getBuffer(RenderLayers.getCrumbling(MathHelper.clamp(stage, 0, ModelLoader.field_32983 - 1))),
entry.getPositionMatrix(),
entry.getNormalMatrix(),
entry,
scale
);
return layer -> layer.hasCrumbling() ? VertexConsumers.union(destructionOverlay, vertices.getBuffer(layer)) : vertices.getBuffer(layer);

View file

@ -79,7 +79,7 @@ public class IgnominiousBulbEntityModel extends EntityModel<IgnominiousBulbEntit
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
part.render(matrices, vertices, light, overlay);
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int color) {
part.render(matrices, vertices, light, overlay, color);
}
}

View file

@ -7,6 +7,7 @@ import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
public class IgnominiousBulbEntityRenderer extends EntityRenderer<IgnominiousBulbEntity> {
@ -27,7 +28,7 @@ public class IgnominiousBulbEntityRenderer extends EntityRenderer<IgnominiousBul
matrices.translate(0, -1.5F, 0);
model.setAngles(entity, 0, 0, tickDelta, 180 + yaw, entity.getPitch(tickDelta));
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))), light, OverlayTexture.getUv(0, entity.hurtTime > 0), Colors.WHITE);
matrices.pop();
super.render(entity, yaw, tickDelta, matrices, vertices, light);
}

View file

@ -18,6 +18,7 @@ import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.PlayerScreenHandler;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
@ -61,7 +62,7 @@ public class MagicBeamEntityRenderer extends EntityRenderer<MagicBeamEntity> {
.map(RenderLayers::getMagicColored)
.orElseGet(RenderLayers::getMagicColored);
model.render(matrices, vertexConsumers.getBuffer(layer), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(matrices, vertexConsumers.getBuffer(layer), light, OverlayTexture.DEFAULT_UV, Colors.WHITE);
matrices.pop();
super.render(entity, yaw, tickDelta, matrices, vertexConsumers, light);
@ -94,8 +95,8 @@ public class MagicBeamEntityRenderer extends EntityRenderer<MagicBeamEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
part.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
part.render(matrices, vertexConsumer, light, overlay, color);
}
}
}

View file

@ -169,8 +169,8 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
part.render(matrices, vertices, light, overlay);
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int color) {
part.render(matrices, vertices, light, overlay, color);
}
}
}

View file

@ -114,7 +114,7 @@ public class SombraEntityModel extends EntityModel<SombraEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
part.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
part.render(matrices, vertexConsumer, light, overlay, color);
}
}

View file

@ -34,7 +34,7 @@ public class SpecterEntityRenderer extends BipedEntityRenderer<SpecterEntity, Sp
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int color) {
// noop
}
}

View file

@ -1,6 +1,5 @@
package com.minelittlepony.unicopia.client.render.entity;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import com.minelittlepony.unicopia.Unicopia;
@ -39,13 +38,14 @@ public class SpellbookEntityRenderer extends LivingEntityRenderer<SpellbookEntit
}
@Override
protected void setupTransforms(SpellbookEntity entity, MatrixStack matrices, float f, float g, float partialTicks) {
super.setupTransforms(entity, matrices, f, g + 90, partialTicks);
protected void setupTransforms(SpellbookEntity entity, MatrixStack matrices, float animationProgress, float bodyYaw, float tickDelta, float scale) {
super.setupTransforms(entity, matrices, animationProgress, bodyYaw + 90, tickDelta, scale);
if (entity.isOpen()) {
matrices.translate(-1.25F, -0.35F, 0);
// TODO: Check that this is correct for extreme scales
matrices.translate(-1.25F * scale, -0.35F * scale, 0);
float floatPosition = MathHelper.sin((entity.age + partialTicks + entity.getId()) / 20) * 0.04F;
float floatPosition = MathHelper.sin((animationProgress + entity.getId()) / 20) * 0.04F;
matrices.translate(0, floatPosition, 0);
matrices.multiply(RotationAxis.NEGATIVE_Z.rotationDegrees(60));
@ -122,16 +122,15 @@ public class SpellbookEntityRenderer extends LivingEntityRenderer<SpellbookEntit
float minU = 0;
MatrixStack.Entry entry = matrices.peek();
Matrix4f positionMat = entry.getPositionMatrix();
Matrix3f normalMat = entry.getNormalMatrix();
for (int i = 1; i <= sides; i++) {
float o = MathHelper.sin(i * MathHelper.TAU / sides) * diameter;
float p = MathHelper.cos(i * MathHelper.TAU / sides) * diameter;
float maxU = i / (float)sides;
buffer.vertex(positionMat, segmentX * 0.2F, segmentY * 0.2F, 0).color(0, 0, 0, 255).texture(minU, minV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(normalMat, 0, -1, 0).next();
buffer.vertex(positionMat, segmentX, segmentY, distance).color(r, g, b, 1).texture(minU, maxV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(normalMat, 0, -1, 0).next();
buffer.vertex(positionMat, o, p, distance).color(r, g, b, 1).texture(maxU, maxV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(normalMat, 0, -1, 0).next();
buffer.vertex(positionMat, o * 0.2F, p * 0.2F, 0).color(0, 0, 0, 255).texture(maxU, minV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(normalMat, 0, -1, 0).next();
buffer.vertex(positionMat, segmentX * 0.2F, segmentY * 0.2F, 0).color(0, 0, 0, 255).texture(minU, minV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(entry, 0, -1, 0);
buffer.vertex(positionMat, segmentX, segmentY, distance).color(r, g, b, 1).texture(minU, maxV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(entry, 0, -1, 0);
buffer.vertex(positionMat, o, p, distance).color(r, g, b, 1).texture(maxU, maxV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(entry, 0, -1, 0);
buffer.vertex(positionMat, o * 0.2F, p * 0.2F, 0).color(0, 0, 0, 255).texture(maxU, minV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(entry, 0, -1, 0);
segmentX = o;
segmentY = p;
minU = maxU;

View file

@ -24,8 +24,8 @@ public class SpellbookModel extends EntityModel<SpellbookEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
book.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
book.render(matrices, vertexConsumer, light, overlay, color);
}
@Override

View file

@ -116,11 +116,11 @@ public class StormCloudEntityModel extends EntityModel<StormCloudEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) {
matrices.push();
part.rotate(matrices);
smallPuffs.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
anvilHeads.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
smallPuffs.render(matrices, vertexConsumer, light, overlay, color);
anvilHeads.render(matrices, vertexConsumer, light, overlay, color);
int puffCount = rng.nextInt(7);
@ -131,7 +131,7 @@ public class StormCloudEntityModel extends EntityModel<StormCloudEntity> {
rng.nextGaussian(),
rng.nextGaussian()
).mul(16));
puff.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
puff.render(matrices, vertexConsumer, light, overlay, color);
}
matrices.pop();
}

View file

@ -9,11 +9,14 @@ import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper.Argb;
import net.minecraft.util.math.RotationAxis;
public class StormCloudEntityRenderer extends EntityRenderer<StormCloudEntity> {
private static final Identifier TEXTURE = Unicopia.id("textures/entity/storm_cloud.png");
private static final int DEFAULT_COLOR = Argb.withAlpha(Colors.WHITE, (int)(255 * 0.9F));
private final StormCloudEntityModel model;
@ -33,10 +36,11 @@ public class StormCloudEntityRenderer extends EntityRenderer<StormCloudEntity> {
matrices.scale(scale, scale, scale);
matrices.translate(0, -1.45F, 0);
model.setAngles(entity, 0, 0, 0, 0, 0);
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))),
entity.isStormy() ? 0 : light,
OverlayTexture.DEFAULT_UV, 1, 1, 1, 0.9F);
OverlayTexture.DEFAULT_UV, DEFAULT_COLOR);
matrices.pop();
super.render(entity, yaw, tickDelta, matrices, vertices, light);
}

View file

@ -141,7 +141,7 @@ public class TentacleEntityModel extends EntityModel<TentacleEntity> {
}
@Override
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
part.render(matrices, vertices, light, overlay);
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int color) {
part.render(matrices, vertices, light, overlay, color);
}
}

View file

@ -8,6 +8,7 @@ import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
@ -32,7 +33,7 @@ public class TentacleEntityRenderer extends EntityRenderer<TentacleEntity> {
matrices.scale(scale, scale, scale);
model.setAngles(entity, 0, 0, tickDelta, entity.getYaw(tickDelta), entity.getPitch(tickDelta));
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
model.render(matrices, vertices.getBuffer(model.getLayer(getTexture(entity))), light, OverlayTexture.getUv(0, entity.hurtTime > 0), Colors.WHITE);
matrices.pop();
super.render(entity, yaw, tickDelta, matrices, vertices, light);
}

View file

@ -32,7 +32,7 @@ public class BakedModel {
vertices.add(new RenderUtil.Vertex(x, y, z, u, v));
}
public final void render(MatrixStack matrices, VertexConsumer buffer, int light, int overlay, float scale, float r, float g, float b, float a) {
public final void render(MatrixStack matrices, VertexConsumer buffer, int light, int overlay, float scale, int color) {
scale = Math.abs(scale);
if (scale < 0.001F) {
return;
@ -44,13 +44,13 @@ public class BakedModel {
for (RenderUtil.Vertex vertex : vertices) {
Vector4f pos = vertex.position(positionmatrix);
Vector4f tex = vertex.texture(textureMatrix);
buffer.vertex(pos.x, pos.y, pos.z, r, g, b, a, tex.x, tex.y, overlay, light, 0, 0, 0);
buffer.vertex(pos.x, pos.y, pos.z, color, tex.x, tex.y, overlay, light, 0, 0, 0);
}
matrices.pop();
textureMatrix.identity();
}
public final void render(MatrixStack matrices, VertexConsumer buffer, int light, float scale, float r, float g, float b, float a) {
public final void render(MatrixStack matrices, VertexConsumer buffer, int light, float scale, int color) {
scale = Math.abs(scale);
if (scale < 0.001F) {
return;
@ -62,7 +62,7 @@ public class BakedModel {
for (RenderUtil.Vertex vertex : vertices) {
Vector4f pos = vertex.position(positionmatrix);
Vector4f tex = vertex.texture(textureMatrix);
buffer.vertex(pos.x, pos.y, pos.z).texture(tex.x, tex.y).color(r, g, b, a).light(getLightAt(pos, light)).next();
buffer.vertex(pos.x, pos.y, pos.z).texture(tex.x, tex.y).color(color).light(getLightAt(pos, light));
}
matrices.pop();
textureMatrix.identity();

View file

@ -6,7 +6,6 @@ import org.joml.Vector2f;
import org.joml.Vector3f;
import org.joml.Vector4f;
import com.minelittlepony.common.util.Color;
import com.minelittlepony.unicopia.client.render.RenderUtil;
import com.minelittlepony.unicopia.client.render.RenderUtil.Vertex;
@ -60,7 +59,6 @@ public class CubeModel {
float x0, float y0, float z0, float x1, float y1, float z1,
int color, int light, int overlay,
Direction... directions) {
float r = Color.r(color), g = Color.g(color), b = Color.b(color);
float du = u1 - u0, dv = v1 - v0;
float dx = x1 - x0, dy = y1 - y0, dz = z1 - z0;
Matrix4f position = matrices.peek().getPositionMatrix();
@ -70,7 +68,7 @@ public class CubeModel {
Vector4f pos = position.transform(RenderUtil.TEMP_VECTOR.set(vertex.position(), 1).mul(dx, dy, dz, 1).add(x0, y0, z0, 0));
Vector2f tex = TEMP_UV_VECTOR.set(vertex.texture().x, vertex.texture().y).mul(du, dv).add(u0, v0);
Vector3f norm = normal.transform(RenderUtil.TEMP_NORMAL_VECTOR.set(direction.getOffsetX(), direction.getOffsetY(), direction.getOffsetZ()));
buffer.vertex(pos.x, pos.y, pos.z, r, g, b, 1, tex.x, tex.y, overlay, light, norm.x, norm.y, norm.z);
buffer.vertex(pos.x, pos.y, pos.z, color, tex.x, tex.y, overlay, light, norm.x, norm.y, norm.z);
}
}
}

View file

@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.util.shape.Sphere;
import net.minecraft.command.argument.EntityAnchorArgumentType.EntityAnchor;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityStatuses;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.MovementType;
@ -55,6 +56,8 @@ public class TentacleEntity extends AbstractDecorationEntity {
private int ticksActive;
private int prevMotionOffset;
public int hurtTime;
@Nullable
private LivingEntity target;
private final Comparator<LivingEntity> targetSorting = Comparator.comparing(this::distanceTo);
@ -144,6 +147,10 @@ public class TentacleEntity extends AbstractDecorationEntity {
}
addActiveTicks(20 + getWorld().random.nextInt(30));
playSound(USounds.ENTITY_TENTACLE_ROAR, 5, 1);
hurtTime = 10;
getWorld().sendEntityStatus(this, EntityStatuses.PLAY_ATTACK_SOUND);
emitGameEvent(GameEvent.RESONATE_15);
return true;
}
@ -159,6 +166,11 @@ public class TentacleEntity extends AbstractDecorationEntity {
prevGrowth = growth;
super.tick();
prevAttackingTicks = attackingTicks;
if (hurtTime > 0) {
hurtTime--;
}
if (isAttacking()) {
if (--attackingTicks == 12) {
if (target != null) {
@ -271,6 +283,9 @@ public class TentacleEntity extends AbstractDecorationEntity {
case ATTACK_STATUS:
attackingTicks = 30;
break;
case EntityStatuses.PLAY_ATTACK_SOUND:
hurtTime = 10;
break;
default:
super.handleStatus(status);
}