Jump to content

[1.16.3] My game crash when my entity is spawned


Ababoude

Recommended Posts

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: 
		javafml@34.1
		minecraft@1
	Mod List: 
		client-extra.jar Minecraft {minecraft@1.16.3 DONE}
		forge-1.16.3-34.1.25_mapped_snapshot_20201028-1.16.3-recomp.jar Forge {forge@34.1.25 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 !

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.