littlemonge Posted July 22, 2020 Share Posted July 22, 2020 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. Quote Link to comment Share on other sites More sharing options...
poopoodice Posted July 22, 2020 Share Posted July 22, 2020 You need a renderer for your entity Quote Link to comment Share on other sites More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 Can't use minecraft basic renderer? The entity is very simple, it is just a custom entity for an object when you throw it on the ground. Quote Link to comment Share on other sites More sharing options...
Novârch Posted July 23, 2020 Share Posted July 23, 2020 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. Quote 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 More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 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 Quote Link to comment Share on other sites More sharing options...
poopoodice Posted July 23, 2020 Share Posted July 23, 2020 The reason I said it is because I don't see you registering your renderer anywhere. Quote Link to comment Share on other sites More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 Could you send an example of a Renderer please? Quote Link to comment Share on other sites More sharing options...
poopoodice Posted July 23, 2020 Share Posted July 23, 2020 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 Quote Link to comment Share on other sites More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 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. Quote Link to comment Share on other sites More sharing options...
Novârch Posted July 23, 2020 Share Posted July 23, 2020 4 minutes ago, littlemonge said: And this line its not working for me. Please don't tell me you copied it word for word. Quote 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 More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 (edited) have I to impl "IRenderFactory"? Edited July 23, 2020 by littlemonge Quote Link to comment Share on other sites More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 31 minutes ago, littlemonge said: have I to impl "IRenderFactory"? ok no matter, I almost have it, the problem now is that the entity is invisible. Quote Link to comment Share on other sites More sharing options...
Novârch Posted July 23, 2020 Share Posted July 23, 2020 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. Quote 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 More sharing options...
littlemonge Posted July 23, 2020 Author Share Posted July 23, 2020 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? Quote Link to comment Share on other sites More sharing options...
poopoodice Posted July 23, 2020 Share Posted July 23, 2020 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) Quote Link to comment Share on other sites More sharing options...
Dzuchun Posted July 24, 2020 Share Posted July 24, 2020 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. Quote Everything said above may be absolutely wrong. No rights reserved. Link to comment Share on other sites More sharing options...
littlemonge Posted July 24, 2020 Author Share Posted July 24, 2020 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. Quote Link to comment Share on other sites More sharing options...
littlemonge Posted July 27, 2020 Author Share Posted July 27, 2020 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¿? Quote Link to comment Share on other sites More sharing options...
Dzuchun Posted July 27, 2020 Share Posted July 27, 2020 (edited) 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 July 27, 2020 by Dzuchun Quote Everything said above may be absolutely wrong. No rights reserved. Link to comment Share on other sites More sharing options...
littlemonge Posted August 14, 2020 Author Share Posted August 14, 2020 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 Quote Link to comment Share on other sites More sharing options...
Dzuchun Posted August 19, 2020 Share Posted August 19, 2020 (edited) 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 August 19, 2020 by Dzuchun Quote Everything said above may be absolutely wrong. No rights reserved. Link to comment Share on other sites More sharing options...
littlemonge Posted August 19, 2020 Author Share Posted August 19, 2020 The entity i am trying to render it just an entity like ItemEntity, it is an entity that is created when player drops an item. There is not a way to do it easy? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.