Hello ! I have a problem with my entity, when i use the command "/summon betterthings:sponge_sheep" my game crash :
The crash log :
---- Minecraft Crash Report ----
// I bet Cylons wouldn't have this problem.
Time: 21/11/20 16:50
Description: Unexpected error
java.lang.NullPointerException: Unexpected error
at net.minecraft.client.renderer.entity.EntityRendererManager.shouldRender(EntityRendererManager.java:239) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.WorldRenderer.updateCameraAndRender(WorldRenderer.java:1004) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.GameRenderer.renderWorld(GameRenderer.java:619) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.GameRenderer.updateCameraAndRender(GameRenderer.java:437) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:979) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.Minecraft.run(Minecraft.java:589) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.main.Main.main(Main.java:184) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_271] {}
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_271] {}
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_271] {}
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_271] {}
at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:52) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {}
at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-7.0.1.jar:?] {}
at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:105) [forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {}
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Thread: Render thread
Stacktrace:
at net.minecraft.client.renderer.entity.EntityRendererManager.shouldRender(EntityRendererManager.java:239) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.WorldRenderer.updateCameraAndRender(WorldRenderer.java:1004) ~[?:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.GameRenderer.renderWorld(GameRenderer.java:619) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
-- Affected level --
Details:
All players: 1 total; [ClientPlayerEntity['Dev'/29, l='ClientLevel', x=169.46, y=4.00, z=208.16]]
Chunk stats: Client Chunk Cache: 121, 49
Level dimension: minecraft:overworld
Level spawn location: World: (160,4,208), Chunk: (at 0,0,0 in 10,13; contains blocks 160,0,208 to 175,255,223), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Level time: 1569 game time, 1569 day time
Server brand: forge
Server type: Integrated singleplayer server
Stacktrace:
at net.minecraft.client.world.ClientWorld.fillCrashReport(ClientWorld.java:465) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2036) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.Minecraft.run(Minecraft.java:610) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.main.Main.main(Main.java:184) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_271] {}
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_271] {}
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_271] {}
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_271] {}
at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:52) ~[forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {}
at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-7.0.1.jar:?] {}
at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-7.0.1.jar:?] {}
at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:105) [forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {}
-- System Details --
Details:
Minecraft Version: 1.16.3
Minecraft Version ID: 1.16.3
Operating System: Windows 7 (amd64) version 6.1
Java Version: 1.8.0_271, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 297510080 bytes (283 MB) / 632291328 bytes (603 MB) up to 905969664 bytes (864 MB)
CPUs: 4
JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump
ModLauncher: 7.0.1+78+master.e9771d8
ModLauncher launch target: fmluserdevclient
ModLauncher naming: mcp
ModLauncher services:
/mixin-0.8.2.jar mixin PLUGINSERVICE
/eventbus-3.0.3-service.jar eventbus PLUGINSERVICE
/forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-launcher.jar object_holder_definalize PLUGINSERVICE
/forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-launcher.jar runtime_enum_extender PLUGINSERVICE
/accesstransformers-2.2.0-shadowed.jar accesstransformer PLUGINSERVICE
/forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-launcher.jar capability_inject_definalize PLUGINSERVICE
/forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-launcher.jar runtimedistcleaner PLUGINSERVICE
/mixin-0.8.2.jar mixin TRANSFORMATIONSERVICE
/forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-launcher.jar fml TRANSFORMATIONSERVICE
FML: 34.1
Forge: net.minecraftforge:34.1.25
FML Language Providers:
[email protected]
minecraft@1
Mod List:
client-extra.jar Minecraft {
[email protected] DONE}
forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar Forge {
[email protected] DONE}
main Better Things {betterthings@NONE DONE}
Crash Report UUID: 48978d83-5432-4b36-9294-32205bef98cc
Launched Version: MOD_DEV
Backend library: LWJGL version 3.2.2 build 10
Backend API: Intel(R) HD Graphics GL version 2.1.0 - Build 8.15.10.2993, Intel
GL Caps: Using framebuffer using ARB_framebuffer_object extension
Using VBOs: Yes
Is Modded: Definitely; Client brand changed to 'forge'
Type: Client (map_client.txt)
GPU Warnings: version: 2.1
Graphics mode: fast
Resource Packs:
Current Language: Français (France)
CPU: 4x Intel(R) Core(TM) i5 CPU M 450 @ 2.40GHz
This all script contain any informations about my entity :
Main :
package fr.ababoude.betterthings;
import fr.ababoude.betterthings.block.Blocks;
import fr.ababoude.betterthings.entities.ModEntityTypes;
import fr.ababoude.betterthings.entities.passive.SpongeSheepEntity;
import fr.ababoude.betterthings.item.Foods;
import fr.ababoude.betterthings.item.Items;
import net.minecraft.entity.ai.attributes.GlobalEntityTypeAttributes;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.DeferredWorkQueue;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(Main.MODID)
public class Main {
public static final String MODID = "betterthings";
public Main(){
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
bus.addListener(this::setup);
bus.addListener(this::doClientStuff);
ModEntityTypes.ENTITY_TYPES.register(bus);
Items.ITEMS.register(bus);
Foods.FOODS.register(bus);
Blocks.BLOCKS.register(bus);
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLClientSetupEvent event) {
DeferredWorkQueue.runLater(() -> {
GlobalEntityTypeAttributes.put(ModEntityTypes.SPONGE_SHEEP.get(), SpongeSheepEntity.setCustomAttributes().create());
});
}
private void doClientStuff(final FMLClientSetupEvent event) {}
}
ClientEventBusSubscriber :
package fr.ababoude.betterthings.util;
import fr.ababoude.betterthings.Main;
import fr.ababoude.betterthings.client.renderer.entity.SpongeSheepRenderer;
import fr.ababoude.betterthings.entities.ModEntityTypes;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@Mod.EventBusSubscriber(modid = Main.MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class ClientEventBusSubscriber {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
RenderingRegistry.registerEntityRenderingHandler(ModEntityTypes.SPONGE_SHEEP.get(), SpongeSheepRenderer::new);
}
}
ModEntityTypes :
package fr.ababoude.betterthings.entities;
import fr.ababoude.betterthings.Main;
import fr.ababoude.betterthings.entities.passive.SpongeSheepEntity;
import net.minecraft.entity.EntityClassification;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraft.entity.EntityType;
public class ModEntityTypes {
public static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITIES, Main.MODID);
/**
* .size = Taille de la Hitbox
*/
public static final RegistryObject<EntityType<SpongeSheepEntity>> SPONGE_SHEEP = ENTITY_TYPES.register("sponge_sheep",
() -> EntityType.Builder.create(SpongeSheepEntity::new, EntityClassification.CREATURE)
.size(0.9F, 1.3F)
.build(new ResourceLocation(Main.MODID, "sponge_sheep").toString()));
}
SpongeSheepEntity :
package fr.ababoude.betterthings.entities.passive;
import fr.ababoude.betterthings.entities.ModEntityTypes;
import net.minecraft.block.BlockState;
import net.minecraft.entity.AgeableEntity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.MobEntity;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.*;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.DamageSource;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import javax.annotation.Nullable;
public class SpongeSheepEntity extends AnimalEntity {
/**
* Ingredient : Définis par quel ingrédients l'entité vas être attiré
* IS_SHEARED : Crée un booléen qui vas servir a mettre en place le fait d'enlever la laine
*/
public static final Ingredient TEMPTATION_ITEMS = Ingredient.fromItems(Items.SPONGE, Items.WET_SPONGE);
//private static final DataParameter<Boolean> IS_SHEARED = EntityDataManager.createKey(SpongeSheepEntity.class, DataSerializers.BOOLEAN);
private int sheepTimer;
private EatGrassGoal eatGrassGoal;
public SpongeSheepEntity(EntityType<? extends SpongeSheepEntity> type, World worldIn) {
super(type, worldIn);
}
/**
* Définis ses paramètres de base (dans cette exemple, sa vie maximum et sa vitesse)
*/
//func_233666_p_ ---> registerAttributes()
public static AttributeModifierMap.MutableAttribute setCustomAttributes() {
return MobEntity.func_233666_p_()
.createMutableAttribute(Attributes.MAX_HEALTH, 10.0D)
.createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
}
//@Override
public AgeableEntity createChild(AgeableEntity ageable) {
return ModEntityTypes.SPONGE_SHEEP.get().create(this.world);
}
/**
* Définis les paramètres de cette entité, ex: sa vitesse en cas de panique est de 1,25D
*/
protected void registerGoals() {
super.registerGoals();
this.eatGrassGoal = new EatGrassGoal(this);
this.goalSelector.addGoal(0, new SwimGoal(this)); // La vitesse qu'il prend quand il nage
this.goalSelector.addGoal(1, new PanicGoal(this, 1.25D)); // La vitesse qu'il prend quand il à peur
this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D));
this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, TEMPTATION_ITEMS, false));
this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.1D));
this.goalSelector.addGoal(5, this.eatGrassGoal);
this.goalSelector.addGoal(6, new WaterAvoidingRandomWalkingGoal(this, 1.0D));
this.goalSelector.addGoal(7, new LookAtGoal(this, PlayerEntity.class, 6.0F));
this.goalSelector.addGoal(8, new LookRandomlyGoal(this));
}
/**
* Définis l'expérience que le joueur obtiens lorsque l'entité est tuée
*/
@Override
protected int getExperiencePoints(PlayerEntity player) {
return 1 + this.world.rand.nextInt(4);
}
/**
* Configure tous les sons de l'entité
*/
@Override
protected SoundEvent getAmbientSound() {
return SoundEvents.ENTITY_SHEEP_AMBIENT;
}
@Override
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
return SoundEvents.ENTITY_SHEEP_HURT;
}
@Override
protected SoundEvent getDeathSound() {
return SoundEvents.ENTITY_SHEEP_DEATH;
}
@Override
protected void playStepSound(BlockPos pos, BlockState blockIn) {
this.playSound(SoundEvents.ENTITY_SHEEP_STEP, 0.15F, 1.0F);
}
/**
* Met à jour les tâches de l'AI, exemple: eatGrassGoal
*/
@Override
protected void updateAITasks() {
this.sheepTimer = this.eatGrassGoal.getEatingGrassTimer();
super.updateAITasks();
}
@Nullable
@Override
public AgeableEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) {
return null;
}
/**
* Appelé fréquemment pour que l'entité puisse mettre à jour son état chaque fois que nécessaire. Par exemple, les zombies et les squelettes
* l'utilise pour réagir à la lumière du soleil et commencer à brûler.
*/
public void livingTick() {
if (this.world.isRemote) {
this.sheepTimer = Math.max(0, this.sheepTimer - 1);
}
super.livingTick();
}
/**
* Handler pour {@link World#setEntityState}
*/
@OnlyIn(Dist.CLIENT)
public void handleStatusUpdate(byte id) {
if (id == 10) {
this.sheepTimer = 40;
} else {
super.handleStatusUpdate(id);
}
}
/*
public ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_) {
ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);
if (false && itemstack.getItem() == Items.SHEARS) { //Forge: Moved to onSheared
if (!this.world.isRemote && this.isShearable()) {
this.shear(SoundCategory.PLAYERS);
itemstack.damageItem(1, p_230254_1_, (p_213613_1_) -> p_213613_1_.sendBreakAnimation(p_230254_2_));
return ActionResultType.SUCCESS;
} else {
return ActionResultType.CONSUME;
}
} else {
return super.func_230254_b_(p_230254_1_, p_230254_2_);
}
}
public void shear(SoundCategory category) {
this.world.playMovingSound(null, this, SoundEvents.ENTITY_SHEEP_SHEAR, category, 1.0F, 1.0F);
this.setSheared(true);
//if (SpongeMode == "Sponge") {
this.entityDropItem(Items.SPONGE);
//} else {
// this.entityDropItem(Items.WET_SPONGE);
//}
}
public boolean isShearable() {
return this.isAlive() && this.getSheared() && !this.isChild();
}
//@Override
public boolean getSheared() {
return this.dataManager.get(IS_SHEARED);
}
/**
* make a sheep sheared if set to true
*//*
public void setSheared(boolean sheared) {
//boolean bol = this.dataManager.get(IS_SHEARED);
this.dataManager.set(IS_SHEARED, sheared);
}
public void eatGrassBonus() {
//this.setSheared(false);
if (this.isChild()) {
this.addGrowth(60);
}
}
@Nullable
public ILivingEntityData onInitialSpawn(IServerWorld worldIn, DifficultyInstance difficultyIn, SpawnReason reason, @Nullable ILivingEntityData spawnDataIn, @Nullable CompoundNBT dataTag) {
return super.onInitialSpawn(worldIn, difficultyIn, reason, spawnDataIn, dataTag);
}
/*
public AgeableEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) {
return null;
}
}
protected float getStandingEyeHeight(Pose poseIn, EntitySize sizeIn) {
return 0.95F * sizeIn.height;
}
}
*/
}
SpongeSheepRenderer :
package fr.ababoude.betterthings.client.renderer.entity;
import fr.ababoude.betterthings.Main;
import fr.ababoude.betterthings.entities.passive.SpongeSheepEntity;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import fr.ababoude.betterthings.client.renderer.entity.model.SpongeSheepModel;
import net.minecraft.client.renderer.entity.MobRenderer;
import net.minecraft.util.ResourceLocation;
public class SpongeSheepRenderer extends MobRenderer<SpongeSheepEntity, SpongeSheepModel<SpongeSheepEntity>>{
protected static final ResourceLocation TEXTURE = new ResourceLocation(Main.MODID, "textures/entity/sheep/spongeSheep_base.png");
public SpongeSheepRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn, new SpongeSheepModel<>(), 0.7F);
}
@Override
public ResourceLocation getEntityTexture(SpongeSheepEntity entity) {
return TEXTURE;
}
}
SpongeSheepModel :
package fr.ababoude.betterthings.client.renderer.entity.model;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import fr.ababoude.betterthings.entities.passive.SpongeSheepEntity;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.model.ModelRenderer;
import net.minecraft.util.math.MathHelper;
public class SpongeSheepModel<T extends SpongeSheepEntity> extends EntityModel<T> {
private final ModelRenderer body;
private final ModelRenderer head;
private final ModelRenderer BackLeft;
private final ModelRenderer BackRight;
private final ModelRenderer FrontLeft;
private final ModelRenderer FrontRight;
public SpongeSheepModel() {
textureWidth = 64;
textureHeight = 32;
body = new ModelRenderer(this);
body.setRotationPoint(0.0F, 9.0F, 0.0F);
setRotationAngle(body, 1.5708F, 0.0F, 0.0F);
body.setTextureOffset(28, 8).addBox(-4.0F, -8.0F, -3.0F, 8.0F, 16.0F, 6.0F, 0.0F, true);
head = new ModelRenderer(this);
head.setRotationPoint(0.0F, 5.0F, -6.0F);
head.setTextureOffset(0, 0).addBox(-3.0F, -3.0F, -8.0F, 6.0F, 6.0F, 8.0F, 0.0F, true);
BackLeft = new ModelRenderer(this);
BackLeft.setRotationPoint(3.0F, 12.0F, 7.0F);
BackLeft.setTextureOffset(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true);
BackRight = new ModelRenderer(this);
BackRight.setRotationPoint(-3.0F, 12.0F, 7.0F);
BackRight.setTextureOffset(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true);
FrontLeft = new ModelRenderer(this);
FrontLeft.setRotationPoint(3.0F, 12.0F, -5.0F);
FrontLeft.setTextureOffset(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true);
FrontRight = new ModelRenderer(this);
FrontRight.setRotationPoint(-3.0F, 12.0F, -5.0F);
FrontRight.setTextureOffset(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true);
}
@Override
public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){
body.render(matrixStack, buffer, packedLight, packedOverlay);
head.render(matrixStack, buffer, packedLight, packedOverlay);
BackLeft.render(matrixStack, buffer, packedLight, packedOverlay);
BackRight.render(matrixStack, buffer, packedLight, packedOverlay);
FrontLeft.render(matrixStack, buffer, packedLight, packedOverlay);
FrontRight.render(matrixStack, buffer, packedLight, packedOverlay);
}
public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
modelRenderer.rotateAngleX = x;
modelRenderer.rotateAngleY = y;
modelRenderer.rotateAngleZ = z;
}
@Override
public void setRotationAngles(T entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
this.head.rotateAngleX = headPitch * ((float)Math.PI / 180F);
this.head.rotateAngleY = netHeadYaw * ((float)Math.PI / 180F);
this.body.rotateAngleX = ((float)Math.PI / 2F);
this.BackRight.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount;
this.BackLeft.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount;
this.FrontRight.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount;
this.FrontLeft.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount;
}
}
Thank you for the little look ! bye !