Jump to content

Recommended Posts

Posted

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.

Posted
  On 7/23/2020 at 7:38 AM, littlemonge said:

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

Expand  

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".

Posted
  On 7/23/2020 at 7:42 AM, Novârch said:

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

Expand  

 

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

Posted

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

Posted

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;
	}
}

 

  On 7/23/2020 at 9:14 AM, 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

Expand  

And this line its not working for me.

Posted
  On 7/23/2020 at 10:52 AM, littlemonge said:

And this line its not working for me.

Expand  

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".

Posted
  On 7/23/2020 at 1:47 PM, littlemonge said:

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

Expand  

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".

Posted

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)

Expand  

 

Posted
  On 7/23/2020 at 2:57 PM, 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?

Expand  

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.

Posted
  On 7/24/2020 at 10:57 AM, 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.

Expand  

Im not having any exception.

Posted

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¿?

Posted (edited)
  On 7/27/2020 at 8:54 AM, 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();

Expand  

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.

  • 3 weeks later...
Posted
  On 7/27/2020 at 12: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.

Expand  

Can you bring me an example for method 1?

Thanks a lot for answering

 

Posted (edited)
  On 8/14/2020 at 8:21 AM, littlemonge said:

Can you bring me an example for method 1?

Expand  

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.

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

    • Make a test with another Launcher like the Curseforge Launcher, MultiMC or AT Launcher
    • can anyone help me i am opening forge and add modpacks and then it says unable to update native luancher and i redownlaod java and the luancher it self?
    • The problem occurs also in 1.20.1 Forge, but with an "Error executing task on client" instead. I have "Sinytra Connector" installed. On 1.21.5 Fabric, there is no problem. When this happens, the chat message before the death screen appears gets sent, with an extra dash added.
    • Well, as usual, it was user error. Naming mismatch in sounds.json.  Please delete this post if you find it necessary. 
    • Hello Forge community.  I'm running into an issue with a mod I'm working on.  To preface, I can call /playsound modId:name music @a and I can hear the sound I registered being played in game. Great!  However, I cannot get it to trigger via my mod code.    Registration: public static final RegistryObject<SoundEvent> A_WORLD_OF_MADNESS = SOUND_EVENTS.register("a_world_of_madness", () -> new SoundEvent(new ResourceLocation("tetheredsouls", "a_world_of_madness")));   Playback: Minecraft mc = Minecraft.getInstance(); if (!(mc.player instanceof LocalPlayer) || mc.level == null) return; LocalPlayer player = (LocalPlayer) mc.player; BlockPos pos = player.blockPosition(); SoundEvent track = ModSounds.A_WORLD_OF_MADNESS.get(); System.out.println(track); System.out.println(pos); System.out.println(player); // play exactly like the tutorial: client-only, at the player's position try { mc.level.playLocalSound( player.getX(), player.getY(), player.getZ(), track, SoundSource.MUSIC, // Or MASTER if needed 1f, 1f, false ); System.out.println("[DEBUG] playSound success: " + track.getLocation()); } catch (Exception e) { System.err.println("[ERROR] Failed to play sound: " + track.getLocation()); e.printStackTrace(); } Sounds.json:   { "theme_of_laura": { "category": "music", "sounds": [ { "name": "tetheredsouls:a_world_of_madness", "stream": true } ] } } Things I have tried: - multiple .ogg files. Short .ogg files (5 seconds, <100KB).  - default minecraft sounds imported from import net.minecraft.sounds.SoundEvents; These work given my code. No idea why these are different.  - playSound() method, as well as several others in past iterations that did not work   I would be forever grateful if somebody could point me in the right direction. I've looked at several mod github repositories and found extremely similar code to what I'm doing. I've also found several threads in this forum that did not solve my issue. I just cannot figure out what I'm doing differently, and why I'm able to queue sounds manually with playsound but the code won't play it (despite confirming the code is being run with the debug statements.)
  • Topics

×
×
  • Create New...

Important Information

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