Jump to content

[1.15.2] Entity error


littlemonge

Recommended Posts

Hi , 

 

Im having some troubles working with entities...

 

Here is my custom entity class :

 

package littlemonge.rpgcraft.entity;

import littlemonge.rpgcraft.entity.base.RpgCraftBaseEntity;
import littlemonge.rpgcraft.item.DiamoniteItem;
import littlemonge.rpgcraft.utils.Utils;
import net.minecraft.block.Blocks;
import net.minecraft.entity.EntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class DiamoniteEntity extends RpgCraftBaseEntity {
	
	public static EntityType<DiamoniteEntity> ENTITY_TYPE;
	
	private int driedProgress = 0;
	
	public DiamoniteEntity(EntityType<? extends DiamoniteEntity> type, World world) {
        super(type, world);
    }

    public DiamoniteEntity(final World w, final double x, final double y, final double z, final ItemStack is) {
        super(ENTITY_TYPE, w, x, y, z, is);
        this.setNoDespawn();
    }

	@Override
	public void tick() {
		super.tick();
		
		final ItemStack itemStack = this.getItem();
		final DiamoniteItem diamonite = (DiamoniteItem) itemStack.getItem();
		
      
		if(this.onGround && (Utils.findBlockUnderEntity(this).equals(Blocks.MAGMA_BLOCK))){
			if(Utils.isClient()) {
				driedProgress++;
			}else {
				driedProgress += 0.5;
			}
		}
		
		if(driedProgress % 10 == 0 ) {
			  ItemStack newItem = diamonite.triggerDry(itemStack.copy());
              this.setItem(newItem);
		}
	}

}

 

Here is where I register the entity :

 

package littlemonge.rpgcraft.init;

import littlemonge.rpgcraft.entity.DiamoniteEntity;
import littlemonge.rpgcraft.utils.Reference;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.ObjectHolder;

@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
@ObjectHolder(Reference.MODID)
public final class ModEntities {


	@SubscribeEvent
	public static void registerEntitites(RegistryEvent.Register<EntityType<?>> event) {
		init();
		event.getRegistry().registerAll(DiamoniteEntity.ENTITY_TYPE);
	}
	
	private static void init() {
		DiamoniteEntity.ENTITY_TYPE =  createEntityType(EntityType.Builder
				.<DiamoniteEntity>create(DiamoniteEntity::new, EntityClassification.MISC).size(0.25F, 0.25F)
				.setTrackingRange(64).setUpdateInterval(20).setShouldReceiveVelocityUpdates(false), Reference.DIAMONITE_ENTITY);
	}

	@SuppressWarnings("rawtypes")
	public static <T extends Entity> EntityType<T> createEntityType(EntityType.Builder builder, String name) {
		EntityType<T> type = (EntityType<T>) builder.build(Reference.MODID + '.' + name).setRegistryName(name);
		return type;
	}
}

 

And here its the crash :

 

java.lang.NullPointerException: null
	at net.minecraft.client.renderer.entity.EntityRendererManager.shouldRender(EntityRendererManager.java:232) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
	at net.minecraft.client.renderer.WorldRenderer.getViewVector(WorldRenderer.java:940) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraft.client.renderer.GameRenderer.renderWorld(GameRenderer.java:612) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
	at net.minecraft.client.renderer.GameRenderer.updateCameraAndRender(GameRenderer.java:434) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:957) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
	at net.minecraft.client.Minecraft.run(Minecraft.java:554) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
	at net.minecraft.client.main.Main.main(Main.java:177) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231] {}
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_231] {}
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_231] {}
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_231] {}
	at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:55) ~[forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?] {}
	at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-5.0.0-milestone.4.jar:?] {}
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-5.0.0-milestone.4.jar:?] {}
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-5.0.0-milestone.4.jar:?] {}
	at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-5.0.0-milestone.4.jar:?] {}
	at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-5.0.0-milestone.4.jar:?] {}
	at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:102) [forge-1.15.2-31.0.14_mapped_snapshot_20200131-1.15.1-recomp.jar:?]

 

Can somebody please help me to find why im having a nullpointer?

 

 

Thanks in advance.

Link to comment
Share on other sites

2 minutes ago, littlemonge said:

it is just a custom entity for an object when you throw it on the ground

An ItemEntity, Minecraft (or Forge, idk) makes one for your items automatically.

It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support".

Link to comment
Share on other sites

Just now, Novârch said:

An ItemEntity, Minecraft (or Forge, idk) makes one for your items automatically.

 

Yes, but I want to add some logic to ItemEntity, that's why I created the class. The class "DiamoniteEntity" its the custom ItemEntity for my custom DiamoniteItem

Link to comment
Share on other sites

I'm not sure if you need to create one, but it won't be hard since you said your entity is just another version of ItemEntity (just look into renderer/entity/ItemRenderer).

and use 

RenderingRegistry.registerEntityRenderingHandler(entitytype, rendererf)

to register your renderer

Link to comment
Share on other sites

Here is the renderer

package littlemonge.rpgcraft.render;

import littlemonge.rpgcraft.entity.DiamoniteEntity;
import littlemonge.rpgcraft.utils.ResourceLocationReference;
import net.minecraft.client.renderer.culling.ClippingHelperImpl;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;

public class DiamoniteEntityRenderer<T extends Entity> extends EntityRenderer<DiamoniteEntity> {

	public DiamoniteEntityRenderer(EntityRendererManager renderManager) {
		super(renderManager);
	}

	@Override
	public ResourceLocation getEntityTexture(DiamoniteEntity entity) {
		
		return new ResourceLocation(ResourceLocationReference.DIAMONITE_MODEL);
	}

	@Override
	public boolean shouldRender(DiamoniteEntity livingEntityIn, ClippingHelperImpl camera, double camX, double camY,
			double camZ) {
		return false;
	}
}

 

1 hour ago, poopoodice said:

I'm not sure if you need to create one, but it won't be hard since you said your entity is just another version of ItemEntity (just look into renderer/entity/ItemRenderer).

and use 


RenderingRegistry.registerEntityRenderingHandler(entitytype, rendererf)

to register your renderer

And this line its not working for me.

Link to comment
Share on other sites

4 minutes ago, littlemonge said:

And this line its not working for me.

Please don't tell me you copied it word for word.

It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support".

Link to comment
Share on other sites

28 minutes ago, littlemonge said:

ok no matter, I almost have it, the problem now is that the entity is invisible.

Try overriding Entity#createSpawnPacket in your entity and return NetworkHooks#getEntitySpawningPacket from it.

It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support".

Link to comment
Share on other sites

firstly:

	@Override
	public boolean shouldRender(DiamoniteEntity livingEntityIn, ClippingHelperImpl camera, double camX, double camY,
			double camZ) {
		return false;
	}

secondly, you don't have any "render" method

 

@Override
public void render(...)

but isn't your entity bsaed on the ItemEntity? See how ItemRenderer does it.

Quote

ItemEntity (just look into renderer/entity/ItemRenderer)

 

Link to comment
Share on other sites

19 hours ago, littlemonge said:

I did what you says but i can only see the hitboxes.

Could it be a problem with the path to the "png" with the texture?

To check this, search your log for "FileNotFound" string. Likely will output only FileNotFoundException's stacktraces. All you need is to check comments after each - if minecraft can't find some texture that he needs, there would be a report about it.

 

You will likely find one about version checker file, don't care about that.

Everything said above may be absolutely wrong. No rights reserved.

Link to comment
Share on other sites

54 minutes ago, Dzuchun said:

To check this, search your log for "FileNotFound" string. Likely will output only FileNotFoundException's stacktraces. All you need is to check comments after each - if minecraft can't find some texture that he needs, there would be a report about it.

 

You will likely find one about version checker file, don't care about that.

Im not having any exception.

Link to comment
Share on other sites

Here is my render Class :

 

package littlemonge.rpgcraft.render;

import com.mojang.blaze3d.matrix.MatrixStack;

import littlemonge.rpgcraft.entity.DiamoniteEntity;
import littlemonge.rpgcraft.utils.ResourceLocationReference;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.util.ResourceLocation;

public class DiamoniteEntityRenderer extends EntityRenderer<DiamoniteEntity> {

	public DiamoniteEntityRenderer(EntityRendererManager renderManagerIn) {
		super(renderManagerIn);
	}

	@Override
	public ResourceLocation getEntityTexture(DiamoniteEntity entity) {
		return new ResourceLocation(ResourceLocationReference.DIAMONITE_MODEL);
	}

	@Override
	public void render(DiamoniteEntity entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn,
			IRenderTypeBuffer bufferIn, int packedLightIn) {
		matrixStackIn.push();
		matrixStackIn.scale(1f, 1f, 1f);
		matrixStackIn.translate(0.5d, 0.5D, 0.5D);
		matrixStackIn.rotate(Vector3f.YP.rotationDegrees(360));
		matrixStackIn.pop();
		super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn);
	}

}

where is the mistake¿?

Link to comment
Share on other sites

3 hours ago, littlemonge said:

matrixStackIn.push();

matrixStackIn.scale(1f, 1f, 1f);

matrixStackIn.translate(0.5d, 0.5D, 0.5D);

matrixStackIn.rotate(Vector3f.YP.rotationDegrees(360));

matrixStackIn.pop();

This actually renders nothing. Superclass method renders name label, as I understood, so I predict your entity is not rendered at all.

There are two ways how to render things (they do the same, but differ at usage).

 

1) Create a model for your entity. Model should have a separate render method which invokes ModelRenderer#render, that actually does rendering.

Advantage: you may not perform rendering itself; drawback: you'll need to understand how this all works (but that's easy with a ton of examples from vanilla Minecraft and some experimenting).

 

2) Preform rendering with "bare hands" - using GL11 methods directly or some predefined sequences.

Advantage: you may render most mind-blowing things that could ever come to your head; drawback: you'll need to study OpenGL a bit (well, depends on rendering complexity).

 

Read sign.

Edited by Dzuchun

Everything said above may be absolutely wrong. No rights reserved.

Link to comment
Share on other sites

  • 3 weeks later...
On 7/27/2020 at 2:10 PM, Dzuchun said:

This actually renders nothing. Superclass method renders name label, as I understood, so I predict your entity is not rendered at all.

There are two ways how to render things (they do the same, but differ at usage).

 

1) Create a model for your entity. Model should have a separate render method which invokes ModelRenderer#render, that actually does rendering.

Advantage: you may not perform rendering itself; drawback: you'll need to understand how this all works (but that's easy with a ton of examples from vanilla Minecraft and some experimenting).

 

2) Preform rendering with "bare hands" - using GL11 methods directly or some predefined sequences.

Advantage: you may render most mind-blowing things that could ever come to your head; drawback: you'll need to study OpenGL a bit (well, depends on rendering complexity).

 

Read sign.

Can you bring me an example for method 1?

Thanks a lot for answering

 

Link to comment
Share on other sites

On 8/14/2020 at 9:21 AM, littlemonge said:

Can you bring me an example for method 1?

CowModel class and, I think, all the classes implementing EntityModel class (not sure)

 

Also, check blockbench.

Edited by Dzuchun

Everything said above may be absolutely wrong. No rights reserved.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
    • Update your drivers: https://www.amd.com/en/support/graphics/amd-radeon-r9-series/amd-radeon-r9-200-series/amd-radeon-r9-280x
  • Topics

×
×
  • Create New...

Important Information

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