Advertisement
TBroski

ENTITY LAYER MCREATOR

Jun 19th, 2020
4,290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.12 KB | None | 0 0
  1. /**
  2.  * This mod element is always locked. Enter your code in the methods below.
  3.  * If you don't need some of these methods, you can remove them as they
  4.  * are overrides of the base class ArgonianModelModElements.ModElement.
  5.  *
  6.  * You can register new events in this class too.
  7.  *
  8.  * As this class is loaded into mod element list, it NEEDS to extend
  9.  * ModElement class. If you remove this extend statement or remove the
  10.  * constructor, the compilation will fail.
  11.  *
  12.  * If you want to make a plain independent class, create it in
  13.  * "Workspace" -> "Source" menu.
  14.  *
  15.  * If you change workspace package, modid or prefix, you will need
  16.  * to manually adapt this file to these changes or remake it.
  17. */
  18. package net.mcreator.argonianmodel;
  19.  
  20. import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
  21. import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
  22. import com.google.common.collect.ImmutableList;
  23. import com.mojang.blaze3d.matrix.MatrixStack;
  24. import com.mojang.blaze3d.vertex.IVertexBuilder;
  25. import net.minecraft.client.renderer.entity.model.AgeableModel;
  26. import net.minecraft.client.renderer.model.ModelRenderer;
  27. import net.minecraft.entity.LivingEntity;
  28. import com.mojang.blaze3d.matrix.MatrixStack;
  29. import com.mojang.blaze3d.vertex.IVertexBuilder;
  30. import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
  31. import net.minecraft.client.renderer.IRenderTypeBuffer;
  32. import net.minecraft.util.math.MathHelper;
  33. import net.minecraft.client.renderer.ItemRenderer;
  34. import net.minecraft.client.renderer.entity.IEntityRenderer;
  35. import net.minecraft.client.renderer.entity.layers.LayerRenderer;
  36. import net.minecraft.client.renderer.entity.model.EntityModel;
  37. import net.minecraft.client.renderer.texture.OverlayTexture;
  38. import net.minecraft.entity.LivingEntity;
  39. import net.minecraft.entity.player.PlayerEntity;
  40. import net.minecraft.client.renderer.entity.*;
  41. import net.minecraftforge.common.MinecraftForge;
  42. import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
  43. import net.minecraftforge.eventbus.api.SubscribeEvent;
  44. import net.minecraft.client.renderer.entity.model.PlayerModel;
  45. import net.minecraft.client.Minecraft;
  46. import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
  47. import java.util.List;
  48. import java.util.Map;
  49. import net.minecraft.util.ResourceLocation;
  50. import net.minecraftforge.fml.common.Mod;
  51. import net.minecraftforge.api.distmarker.OnlyIn;
  52. import net.minecraftforge.api.distmarker.Dist;
  53.  
  54. @Mod.EventBusSubscriber(modid = "argonian_model", bus = Mod.EventBusSubscriber.Bus.MOD)
  55. @ArgonianModelModElements.ModElement.Tag
  56. public class Argonian extends ArgonianModelModElements.ModElement {
  57.     /**
  58.      * Do not remove this constructor
  59.      */
  60.     public Argonian(ArgonianModelModElements instance) {
  61.         super(instance, 1);
  62.     }
  63.  
  64.     @Override
  65.     public void initElements() {
  66.     }
  67.  
  68.     @OnlyIn(Dist.CLIENT)
  69.     @Override
  70.     public void clientLoad(FMLClientSetupEvent event)
  71.     {
  72.         Map<String, PlayerRenderer> playerSkinMap = Minecraft.getInstance().getRenderManager().getSkinMap();
  73.         Argonian.addPlayerLayers(playerSkinMap.get("default"));
  74.         Argonian.addPlayerLayers(playerSkinMap.get("slim"));
  75.     }
  76.  
  77.     @Override
  78.     public void init(FMLCommonSetupEvent event) {
  79.     }
  80.  
  81.     @Override
  82.     public void serverLoad(FMLServerStartingEvent event) {
  83.     }
  84.  
  85. public static void addPlayerLayers(PlayerRenderer renderer)
  86.     {
  87.         List<LayerRenderer<AbstractClientPlayerEntity, PlayerModel<AbstractClientPlayerEntity>>> layers = ObfuscationReflectionHelper.getPrivateValue(LivingRenderer.class, renderer, "field_177097_h");
  88.         if(layers != null)
  89.         {
  90.         layers.add(new playerlayer<>(renderer));
  91.         }
  92.     }
  93.  
  94. public static class player<T extends LivingEntity> extends AgeableModel<T> {
  95.  
  96.     private final ModelRenderer snout;
  97.     private final ModelRenderer tail;
  98.  
  99.     public player() {
  100.         textureWidth = 64;
  101.         textureHeight = 64;
  102.  
  103.         snout = new ModelRenderer(this);
  104.         snout.setRotationPoint(0.0F, 0.0F, 0.0F);
  105.         snout.setTextureOffset(24, 2).addBox(-3.0F, -4.0F, -7.0F, 6.0F, 3.0F, 3.0F, 0.0F, false);
  106.         snout.setTextureOffset(0, 5).addBox(-1.0F, -5.0F, -6.0F, 2.0F, 1.0F, 2.0F, 0.0F, false);
  107.  
  108.         tail = new ModelRenderer(this);
  109.         tail.setRotationPoint(0.0F, 14F, 0.0F);
  110.         setRotationAngle(tail, -45.0F, 0.0F, 0.0F);
  111.         tail.setTextureOffset(56, 21).addBox(-1.0F, 7.0F, -7.0F, 2.0F, 9.0F, 2.0F, 0.0F, false);
  112.     }
  113.  
  114.     @Override
  115.     public void setRotationAngles(T entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
  116.  
  117.         this.snout.rotateAngleY = netHeadYaw * ((float) Math.PI / 180F);
  118.         this.tail.rotateAngleX = 0.7854F; //MathHelper.cos(limbSwing * 9.6662F + (float)Math.PI) * 2.0F * limbSwingAmount * 2.5F
  119.         this.tail.rotateAngleY = 0.0F;
  120.  
  121.         this.snout.rotateAngleX = headPitch * ((float) Math.PI / 180F);
  122.         if (entityIn instanceof PlayerEntity) {
  123.             if (entityIn.isCrouching()) {
  124.                 this.snout.rotationPointY = 4.2F;
  125.                 this.tail.rotateAngleX = 1.2854F;
  126.                 this.tail.rotationPointY = 3.2F;
  127.             } else {
  128.                 this.tail.rotationPointY = 0.0F;
  129.                 this.tail.rotateAngleX = 0.7854F;
  130.                 this.snout.rotationPointY = 0.0F;
  131.             }
  132.         }
  133.     }
  134.  
  135.     @Override
  136.     protected Iterable<ModelRenderer> getHeadParts() {
  137.         return ImmutableList.of(this.snout);
  138.     }
  139.  
  140.     @Override
  141.     protected Iterable<ModelRenderer> getBodyParts() {
  142.         return ImmutableList.of(this.tail);
  143.     }
  144.  
  145.     public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
  146.         modelRenderer.rotateAngleX = x;
  147.         modelRenderer.rotateAngleY = y;
  148.         modelRenderer.rotateAngleZ = z;
  149.     }
  150. }
  151. public static class playerlayer<T extends LivingEntity, M extends EntityModel<T>> extends LayerRenderer<T, M> {
  152.  
  153.     private static ResourceLocation resource = new ResourceLocation("argonian_model", "textures/steve.png");
  154.     private player model = new player();
  155.  
  156.     public playerlayer(IEntityRenderer<T, M> entityRendererIn) {
  157.         super(entityRendererIn);
  158.     }
  159.  
  160.     @Override
  161.     public void render(MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn, T entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) {
  162.          if (entitylivingbaseIn instanceof AbstractClientPlayerEntity) {
  163.              matrixStackIn.push();
  164.              this.getEntityModel().copyModelAttributesTo(this.model);
  165.              this.model.setRotationAngles(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch);
  166.              IVertexBuilder ivertexbuilder = ItemRenderer.getBuffer(bufferIn, this.model.getRenderType(((AbstractClientPlayerEntity) entitylivingbaseIn).getLocationSkin()), false, false);
  167.              this.model.render(matrixStackIn, ivertexbuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F);
  168.              matrixStackIn.pop();
  169.          }
  170.  
  171.     }
  172. }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement