A few little optimisations for PlayerAnimator

This commit is contained in:
Electroblob77
2020-09-30 17:05:57 +01:00
parent 3cdd564228
commit ac5b3466e7
2 changed files with 8 additions and 4 deletions
@@ -35,6 +35,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Handles the setup and rendering events for custom player animations, as well as registering of animations. Addons
@@ -90,7 +91,8 @@ public class PlayerAnimator {
List<LayerRenderer<? extends EntityLivingBase>> layers = (List<LayerRenderer<? extends EntityLivingBase>>)layerRenderers.get(renderer);
playerLayers.put(renderer, layers);
// Save armour layers for lazy-loading later (ignore other layers so iteration is faster)
playerLayers.put(renderer, layers.stream().filter(l -> l instanceof LayerBipedArmor).collect(Collectors.toList()));
for(LayerRenderer<?> layer : layers){
@@ -127,11 +129,13 @@ public class PlayerAnimator {
for(EntityEquipmentSlot slot : InventoryUtils.ARMOUR_SLOTS){
ItemStack armour = player.getItemStackFromSlot(slot);
// This method could behave dynamically depending on stuff like NBT so there's not really any way to
// optimise it further, we *have* to retrieve the model every time (shouldn't be too bad though)
ModelBiped model = ForgeHooksClient.getArmorModel(player, armour, slot, ((LayerBipedArmor)layer).getModelFromSlot(slot));
List<ModelBiped> models = playerLayerModels.get(renderer);
if(!models.contains(model)){
if(!models.contains(model)){ // Ignore already-wrapped models
models.add(model);
ModelRendererExtended.wrap(model);
}
@@ -143,10 +147,10 @@ public class PlayerAnimator {
for(Animation animation : animations){
boolean autoRotateSecondLayer = animation.autoRotateSecondLayer(player, firstPerson);
if(animation.shouldDisplay(player, firstPerson)){
boolean autoRotateSecondLayer = animation.autoRotateSecondLayer(player, firstPerson);
flag = true;
for(ModelBiped model : playerLayerModels.get(renderer)){