mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-25 22:07:59 +01:00
Remove unneccessary layers when rendering villagers. Should help with #222
This commit is contained in:
parent
8c1a705b9e
commit
540f8b9f3f
2 changed files with 12 additions and 5 deletions
|
@ -3,7 +3,6 @@ package com.minelittlepony.client.render.entity.feature;
|
||||||
import net.minecraft.client.render.*;
|
import net.minecraft.client.render.*;
|
||||||
import net.minecraft.client.render.entity.model.EntityModel;
|
import net.minecraft.client.render.entity.model.EntityModel;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.util.math.random.Random;
|
import net.minecraft.util.math.random.Random;
|
||||||
|
|
||||||
|
@ -35,13 +34,13 @@ public class GearFeature<T extends LivingEntity, M extends EntityModel<T> & IPon
|
||||||
MOD_GEARS.stream().map(e -> new Entry(e.get(), Wearable.NONE))
|
MOD_GEARS.stream().map(e -> new Entry(e.get(), Wearable.NONE))
|
||||||
).collect(Collectors.toList());
|
).collect(Collectors.toList());
|
||||||
|
|
||||||
private final LoadingCache<Entity, List<Entry>> randomisedGearCache = CacheBuilder.newBuilder()
|
private final LoadingCache<UUID, List<Entry>> randomisedGearCache = CacheBuilder.newBuilder()
|
||||||
.expireAfterAccess(3, TimeUnit.MINUTES)
|
.expireAfterAccess(3, TimeUnit.MINUTES)
|
||||||
.build(CacheLoader.from(entity -> {
|
.build(CacheLoader.from(uuid -> {
|
||||||
List<Entry> randomizedOrder = new ArrayList<>();
|
List<Entry> randomizedOrder = new ArrayList<>();
|
||||||
List<Entry> pool = new ArrayList<>(gears);
|
List<Entry> pool = new ArrayList<>(gears);
|
||||||
|
|
||||||
Random rng = Random.create(entity.getUuid().getLeastSignificantBits());
|
Random rng = Random.create(uuid.getLeastSignificantBits());
|
||||||
|
|
||||||
while (!pool.isEmpty()) {
|
while (!pool.isEmpty()) {
|
||||||
randomizedOrder.add(pool.remove(rng.nextInt(pool.size() + 1) % pool.size()));
|
randomizedOrder.add(pool.remove(rng.nextInt(pool.size() + 1) % pool.size()));
|
||||||
|
@ -63,7 +62,7 @@ public class GearFeature<T extends LivingEntity, M extends EntityModel<T> & IPon
|
||||||
|
|
||||||
final Map<BodyPart, Float> renderStackingOffsets = new HashMap<>();
|
final Map<BodyPart, Float> renderStackingOffsets = new HashMap<>();
|
||||||
|
|
||||||
randomisedGearCache.getUnchecked(entity)
|
randomisedGearCache.getUnchecked(entity.getUuid())
|
||||||
.stream()
|
.stream()
|
||||||
.filter(entry -> getContext().shouldRender(model, entity, entry.wearable, entry.gear))
|
.filter(entry -> getContext().shouldRender(model, entity, entry.wearable, entry.gear))
|
||||||
.forEach(entry -> {
|
.forEach(entry -> {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import com.minelittlepony.api.pony.meta.Race;
|
||||||
import com.minelittlepony.api.pony.meta.Wearable;
|
import com.minelittlepony.api.pony.meta.Wearable;
|
||||||
import com.minelittlepony.client.model.*;
|
import com.minelittlepony.client.model.*;
|
||||||
import com.minelittlepony.client.render.entity.PonyRenderer;
|
import com.minelittlepony.client.render.entity.PonyRenderer;
|
||||||
|
import com.minelittlepony.client.render.entity.feature.*;
|
||||||
import com.minelittlepony.client.render.entity.npc.textures.*;
|
import com.minelittlepony.client.render.entity.npc.textures.*;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -36,6 +37,12 @@ abstract class AbstractNpcRenderer<T extends MobEntity & VillagerDataContainer>
|
||||||
addFeature(clothing);
|
addFeature(clothing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addLayers(EntityRendererFactory.Context context) {
|
||||||
|
addFeature(createItemHoldingLayer());
|
||||||
|
addFeature(new GearFeature<>(this));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldRender(ClientPonyModel<T> model, T entity, Wearable wearable, IGear gear) {
|
public boolean shouldRender(ClientPonyModel<T> model, T entity, Wearable wearable, IGear gear) {
|
||||||
|
|
||||||
|
@ -58,6 +65,7 @@ abstract class AbstractNpcRenderer<T extends MobEntity & VillagerDataContainer>
|
||||||
return super.shouldRender(model, entity, wearable, gear);
|
return super.shouldRender(model, entity, wearable, gear);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void render(T entity, float entityYaw, float tickDelta, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv) {
|
public void render(T entity, float entityYaw, float tickDelta, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv) {
|
||||||
model = manager.setModel(models.computeIfAbsent(getEntityPony(entity).race(), this::createModel)).body();
|
model = manager.setModel(models.computeIfAbsent(getEntityPony(entity).race(), this::createModel)).body();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue