littlemonge Posted July 22, 2020 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
littlemonge Posted July 23, 2020 Author 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
Novârch Posted July 23, 2020 Posted July 23, 2020 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. 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".
littlemonge Posted July 23, 2020 Author Posted July 23, 2020 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 Quote
poopoodice Posted July 23, 2020 Posted July 23, 2020 The reason I said it is because I don't see you registering your renderer anywhere. Quote
littlemonge Posted July 23, 2020 Author Posted July 23, 2020 Could you send an example of a Renderer please? Quote
poopoodice Posted July 23, 2020 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
littlemonge Posted July 23, 2020 Author 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; } } 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. Quote
Novârch Posted July 23, 2020 Posted July 23, 2020 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. 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".
littlemonge Posted July 23, 2020 Author Posted July 23, 2020 (edited) have I to impl "IRenderFactory"? Edited July 23, 2020 by littlemonge Quote
littlemonge Posted July 23, 2020 Author Posted July 23, 2020 On 7/23/2020 at 1:16 PM, littlemonge said: have I to impl "IRenderFactory"? Expand ok no matter, I almost have it, the problem now is that the entity is invisible. Quote
Novârch Posted July 23, 2020 Posted July 23, 2020 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. 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".
littlemonge Posted July 23, 2020 Author 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
poopoodice Posted July 23, 2020 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) Expand Quote
Dzuchun Posted July 24, 2020 Posted July 24, 2020 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. Quote Everything said above may be absolutely wrong. No rights reserved.
littlemonge Posted July 24, 2020 Author Posted July 24, 2020 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. Quote
littlemonge Posted July 27, 2020 Author 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
Dzuchun Posted July 27, 2020 Posted July 27, 2020 (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 July 27, 2020 by Dzuchun Quote Everything said above may be absolutely wrong. No rights reserved.
littlemonge Posted August 14, 2020 Author Posted August 14, 2020 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 Quote
Dzuchun Posted August 19, 2020 Posted August 19, 2020 (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 August 19, 2020 by Dzuchun Quote Everything said above may be absolutely wrong. No rights reserved.
littlemonge Posted August 19, 2020 Author 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
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.