NaturesAura/src/main/java/de/ellpeck/naturesaura/renderers/PlayerLayerTrinkets.java

87 lines
4.4 KiB
Java
Raw Normal View History

package de.ellpeck.naturesaura.renderers;
2020-01-28 18:08:56 +01:00
import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.api.render.ITrinketItem;
import de.ellpeck.naturesaura.api.render.ITrinketItem.RenderType;
2020-01-26 19:26:50 +01:00
import de.ellpeck.naturesaura.compat.Compat;
2021-12-04 15:40:09 +01:00
import net.minecraft.client.entity.player.AbstractClientPlayer;
2020-01-28 18:08:56 +01:00
import net.minecraft.client.renderer.IRenderTypeBuffer;
2020-01-21 23:02:39 +01:00
import net.minecraft.client.renderer.entity.IEntityRenderer;
import net.minecraft.client.renderer.entity.layers.LayerRenderer;
2020-01-21 23:02:39 +01:00
import net.minecraft.client.renderer.entity.model.PlayerModel;
2020-01-29 19:04:33 +01:00
import net.minecraft.entity.Pose;
2021-12-04 15:40:09 +01:00
import net.minecraft.entity.player.Player;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
2020-01-21 23:02:39 +01:00
import net.minecraft.potion.Effects;
2020-09-22 03:17:02 +02:00
import net.minecraft.util.math.vector.Vector3f;
2019-10-20 22:30:49 +02:00
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
2020-01-26 19:26:50 +01:00
import net.minecraftforge.items.IItemHandler;
2020-09-22 16:16:25 +02:00
import top.theillusivec4.curios.api.CuriosApi;
import java.util.HashSet;
import java.util.Set;
2019-10-20 22:30:49 +02:00
@OnlyIn(Dist.CLIENT)
2021-12-04 15:40:09 +01:00
public class PlayerLayerTrinkets extends LayerRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
private final Set<Item> alreadyRendered = new HashSet<>();
2021-12-04 15:40:09 +01:00
public PlayerLayerTrinkets(IEntityRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> entityRendererIn) {
2020-01-21 23:02:39 +01:00
super(entityRendererIn);
}
@Override
2021-12-04 15:40:09 +01:00
public void render(MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn, AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) {
if (!ModConfig.instance.renderItemsOnPlayer.get())
return;
2019-10-20 22:30:49 +02:00
if (player.getActivePotionEffect(Effects.INVISIBILITY) != null)
return;
ItemStack main = player.getHeldItemMainhand();
ItemStack second = player.getHeldItemOffhand();
this.alreadyRendered.clear();
2020-01-29 19:04:33 +01:00
matrixStackIn.push();
this.render(player, RenderType.BODY, main, second, matrixStackIn, bufferIn, packedLightIn);
float yaw = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * partialTicks;
float yawOffset = player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialTicks;
float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * partialTicks;
2020-01-29 19:04:33 +01:00
matrixStackIn.rotate(Vector3f.YN.rotationDegrees(yawOffset));
matrixStackIn.rotate(Vector3f.YP.rotationDegrees(yaw - 270));
matrixStackIn.rotate(Vector3f.ZP.rotationDegrees(pitch));
this.render(player, RenderType.HEAD, main, second, matrixStackIn, bufferIn, packedLightIn);
matrixStackIn.pop();
}
2021-12-04 15:40:09 +01:00
private void render(Player player, RenderType type, ItemStack main, ItemStack second, MatrixStack matrices, IRenderTypeBuffer buffer, int packedLight) {
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
2020-01-29 19:04:33 +01:00
this.renderStack(player.inventory.getStackInSlot(i), player, type, main, second, matrices, buffer, packedLight);
}
2020-01-26 19:26:50 +01:00
if (Compat.hasCompat("curios")) {
2020-09-22 16:16:25 +02:00
IItemHandler handler = CuriosApi.getCuriosHelper().getEquippedCurios(player).orElse(null);
2020-01-26 19:26:50 +01:00
if (handler != null) {
2020-09-22 16:16:25 +02:00
for (int i = 0; i < handler.getSlots(); i++)
this.renderStack(handler.getStackInSlot(i), player, type, main, second, matrices, buffer, packedLight);
}
2020-01-26 19:26:50 +01:00
}
}
2021-12-04 15:40:09 +01:00
private void renderStack(ItemStack stack, Player player, RenderType type, ItemStack main, ItemStack second, MatrixStack matrices, IRenderTypeBuffer buffer, int packedLight) {
if (!stack.isEmpty()) {
Item item = stack.getItem();
if (item instanceof ITrinketItem && !this.alreadyRendered.contains(item)) {
2020-01-29 19:04:33 +01:00
matrices.push();
if (type == RenderType.BODY && player.getPose() == Pose.CROUCHING) {
matrices.translate(0F, 0.2F, 0F);
matrices.rotate(Vector3f.XP.rotationDegrees(90F / (float) Math.PI));
2018-10-21 14:51:07 +02:00
}
2020-01-29 19:04:33 +01:00
((ITrinketItem) item).render(stack, player, type, matrices, buffer, packedLight, stack == main || stack == second);
matrices.pop();
this.alreadyRendered.add(item);
}
}
}
}