Jump to content

Recommended Posts

Posted (edited)

Entities, Renderers, and Registers, oh my!

 

So the gist of the issue right now is that I've created a custom arrow (ItemDart) that is just an ArrowItem modified to allow for setting the damage an arrows does and what item the arrow should give when picked up by the player (otherwise it would always return an arrow). This then creates a custom AbstractArrowEntity (EntityDart) which takes the reference item and returns it in getArrowStack. Then, to render that entity, I have a custom ArrowRenderer (DartRenderer) which overrides getEntityTexture and returns a ResourceLocation whose path is generated based on the item the EntityDart refers to.

 

Two problems. First, DartRenderer is being constructed as it should when registered, but isn't being called in order to render the EntityDart. Second, EntityDart no longer has a renderer, as it seems not even ArrowRenderer is being called for it.

 

As always, here are the relevant bits of code. Some of this is kind of messy simply because I'm relearning Forge (and its best practices) for the first time, so if something is blatantly wrong, please let me know.

ItemDart

  Reveal hidden contents

EntityDart (I'll do JavaDocs on this once I get it working lol):

  Reveal hidden contents

DartRenderer:

  Reveal hidden contents

This next few I'm included because the problem might be something to do with how I'm registering everything. To be frank, for the life of me I couldn't find any explanation as to how Entity/Renderer registration is done, so I lifted some code of the Web (Thanks, Cadiboo!) and modified it until it """worked""".

ModItems:

  Reveal hidden contents

 

ClientModEventSubscriber:

  Reveal hidden contents

 

ModEntityTypes:

  Reveal hidden contents

 

I'm not including them, but I am initializing the DeferredRegistries in my main mod file's constructor. Also, I'm calling ItemDart#setItemReference in my main EventSubscriber class's item register event, as according to my testing the deferred register fires before the registry event does. That being said, I have no idea if that a safe assumption to make in the wild, so I intend to test that a big more unless someone can shoot it down right here.

 

As far as I know, everything should be working properly. At the very least, Minecraft seems to know that EntityDart is using a custom renderer, but it's not properly attaching it. I haven't seen any related errors in the logs, however. I'd include debug.log, but Forge insists on generating a 3M dump of every single class it loads and I've yet to find a way to tell it to not.

Edited by Blazer Nitrox
Edit title to match question status
Posted (edited)
  On 2/5/2020 at 9:49 PM, Blazer Nitrox said:

I have no idea if that a safe assumption to make in the wild, so I intend to test that a big more unless someone can shoot it down right here.

Expand  

You can add a priority to your @SubscribeEvent annotation to ensure you run before/after other listeners.

 

One thing you may have forgotten is that Items are Singletons. I.E. there is only one (the one you register) in the game.

 

Other than that I don’t see any glaring issues, you’ve debugged and noticed that neither your renderer or the vanilla arrow renderer is being called for your entity?

Edited by Cadiboo
  • Like 1

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted (edited)

Oh :P Am big dumb. I see what you mean about singletons now, although that doesn't seem to be the cause of my current issue - it's never getting far enough to have undefined behavior. I know for a fact that my DartRenderer isn't being called from debug calls, and stepping through shows that indeed neither is ArrowRenderer. Near as I can figure, I somehow convinced Minecraft that I don't have any renderer registered for the entity, although I don't see anything in the logs that would indicate that.

 

Actually, looking back on it, I'm still treating the items as though they're singletons... where were you seeing behavior that indicates otherwise?

Edited by Blazer Nitrox
Posted
  On 2/5/2020 at 11:15 PM, Blazer Nitrox said:

Actually, looking back on it, I'm still treating the items as though they're singletons... where were you seeing behavior that indicates otherwise?

Expand  

I was in a hurry when I wrote that and I noticed your setting/getting item refs and thought it could be an issue. I’m not sure what the issue is, can you please post your code on GitHub?

  • Like 1

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted (edited)
  On 2/6/2020 at 6:52 AM, Cadiboo said:

I was in a hurry when I wrote that and I noticed your setting/getting item refs and thought it could be an issue. I’m not sure what the issue is, can you please post your code on GitHub?

Expand  

 

Sure thing :) I think you noticed the same thing I did, but near as I can tell the itemRef should be fine, since I'm instantiating ItemDart multiple times, once for each item instance.

Here's that GitHub repo. I appreciate the help!

Edited by Blazer Nitrox
Posted (edited)

So, uh... I think I discovered the problem.

 

In net.minecraft.client.renderer.WorldRenderer#func_228428_a_:

Breakpoint on line 944 shows that this line is never reach where `entity` is an EntityDart, even if one exists in the world. Problem is, the line immediately before it (943):

for(Entity entity : this.world.getAllEntities()) {

 

So... somehow... my EntityDart doesn't exist in the client-side world.

Interesting.

And AFAIK I'm not overriding anything that would be taking care of that - it should be doing it on its own.

 

-----EDIT #2-----

Well, this rabbit hole just goes deeper and deeper. I stumbled across FMLPlayMessages.SpawnEntity, and realize "oh, hey, I can just use this!" And then I realized, "shouldn't this already be called?"

Lo and behold, it's not. I have yet to figure out what should be sending the SpawnEntity packet, but it isn't doing its job - it never trips any of the breakpoints I put in it.

In the mean time, I'm going to attempt to build my own implementation and see if that accomplishes anything at all.

 

-----EDIT #3-----

Well, I finally got something to render. I ended up implementing my own packet specific to my entity and had ItemDart send it when it constructed the entity. It's super dirty (the best I could figure for who to send the packet to was just anybody tracking the chunk the dart was in), but it works... which begs the question of why FMLPlayMessages.SpawnEntity wasn't doing its job. I dunno, but at least I got something to show up on my gorram screen.

Edited by Blazer Nitrox
Posted

Ah. Remove that hack and override getSpawnPacket or whatever it’s called in your entity and return NetworkHooks.getSpawnPacket(this) (I think)

  • Thanks 1

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted
  On 2/8/2020 at 3:14 PM, Cadiboo said:

Ah. Remove that hack and override getSpawnPacket or whatever it’s called in your entity and return NetworkHooks.getSpawnPacket(this) (I think)

Expand  

Yep, that fixed it. It's NetworkHooks.getEntitySpawningPacket(this), btw.

 

Thanks a bunch for your help. Hopefully something can be done about the official documentation once the API's settled down a bit more.

 

Posted
  On 2/8/2020 at 11:35 PM, Blazer Nitrox said:

Thanks a bunch for your help. Hopefully something can be done about the official documentation once the API's settled down a bit more.

Expand  

It’s a community project, anyone can contribute. Unfortunately they seem to be pretty slow in accepting PRs, same as in the main Forge repo.

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

  • 2 months later...
Posted

Could you explain me this ? "getSpawnpacket" i haven't found it or i'm searching at the wrong place

I'm trying to create a custom bow and arrow but my arrow isn't rendering on client.

Posted

Oh okay !
What should i do in that method ?

@Override
	public IPacket<?> createSpawnPacket(){
		
		return NetworkHooks.getEntitySpawningPacket(this);
	}

I did that but my projectile is totally black :/

Posted (edited)

Ah yes XD
Here's my renderer, the line "refitem.getRegistryName().getPath()" return "air" not the name of  the file..

But if i replace this by my file name, it works.

Where is set the "path" attribute ?

public class RenderTrainingArrow extends ArrowRenderer<EntityTrainingArrow>
{

	public RenderTrainingArrow(EntityRendererManager renderManagerIn) {
		super(renderManagerIn);
		// TODO Auto-generated constructor stub
	}
	@Override
	public ResourceLocation getEntityTexture(EntityTrainingArrow entity) 
	{	Item refItem = entity.getArrowStack().getItem();
		return new ResourceLocation(AlduinMod.MOD_ID + ":textures/entity/projectiles/"+ refItem.getRegistryName().getPath());
	}

}
Edited by Delpig
Posted

I change my entity like that

this.referenceItem = itemInit.TRAINING_ARROW.get();

And the renderer like that

return new ResourceLocation(AlduinMod.MOD_ID + ":textures/entity/projectiles/"+ refItem.getRegistryName().getPath()+ ".png");

And it works fine !

Thank you very much :D

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

    • abro el juego pero al tocar un solo jugador me tira la de   [02:23:30] [Render thread/FATAL] [ne.mi.co.ForgeMod/]: Preparing crash report with UUID c3ff08d5-d285-458d-a3b5-fbba17743dff #@!@# Game crashed! Crash report saved to: #@!@# C:\juegos\Minecraft\instances\1.20.1 forge\.minecraft\crash-reports\crash-2025-05-02_02.23.30-client.txt Process exited with code -1 (0xffffffffffffffff). ¡Por favor, ten en cuenta que normalmente ni el código de salida ni su descripción son suficientes para diagnosticar problemas! Sube siempre el registro entero y no solo el código de salida.
    • So, First of I am new to modding so bare with me I am creating a 1.20.1 forge mod that needs Oculus/Embeddium as a dependancy because later on I need to add custom shaders in for lights and such. I am using ParchmentMC as I've heard its better because of namings of things but that doesn't seem to like it when I run it alongside Oculus (Its a very barebones script adding two blocks and an item, and tested it before I did this) The 4 errors I get when I run 'runClient' is Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered Caused by: org.spongepowered.asm.mixin.throwables.MixinApplyError: Mixin [mixins.oculus.json:texture.MixinAbstractTexture] from phase [DEFAULT] in config [mixins.oculus.json] FAILED during APPLY Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @Inject annotation on iris$afterGenerateId could not find any targets matching 'Lnet/minecraft/client/renderer/texture/AbstractTexture;m_117963_()I' in net.minecraft.client.renderer.texture.AbstractTexture. Using refmap oculus-mixins-refmap.json [PREINJECT Applicator Phase -> mixins.oculus.json:texture.MixinAbstractTexture -> Prepare Injections ->  -> handler$zgm000$iris$afterGenerateId(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V -> Parse] And then a "Execution failed for task ':runClient'." error My dependancies are just these with latest forge for 1.20.1 implementation fg.deobf('curse.maven:oculus-581495:6020952') // Oculus for 1.20.1 - 1.8.0  implementation fg.deobf('curse.maven:embeddium-908741:5681725') // Embeddium for 1.20.1 - 0.3.31 I have tested these mods & forge in a different modpack alone and it works fine Any help is much appreciated!
    • Im trying to make a server for me and my friends. I have no mods on it, (yet) but i keep getting this on the terminal right before it closes out. it insist even open long enogth m=for me to log on .this is my most resent crash report thanks in advance.   ---- Minecraft Crash Report ---- // I blame Dinnerbone. Time: 2025-05-01 18:17:25 Description: Exception in server tick loop java.lang.IllegalStateException: Failed to initialize server     at TRANSFORMER/minecraft@1.21.5/net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:676) ~[server-1.21.5-20250325.162830-srg.jar%23141!/:?] {re:classloading,pl:accesstransformer:B}     at TRANSFORMER/minecraft@1.21.5/net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:276) ~[server-1.21.5-20250325.162830-srg.jar%23141!/:?] {re:classloading,pl:accesstransformer:B}     at java.base/java.lang.Thread.run(Thread.java:1583) [?:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details:     Minecraft Version: 1.21.5     Minecraft Version ID: 1.21.5     Operating System: Linux (amd64) version 6.11.0-19-generic     Java Version: 21.0.6, Ubuntu     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Ubuntu     Memory: 99161192 bytes (94 MiB) / 233832448 bytes (223 MiB) up to 1004535808 bytes (958 MiB)     CPUs: 2     Processor Vendor: GenuineIntel     Processor Name: Intel(R) Pentium(R) CPU B950 @ 2.10GHz     Identifier: Intel64 Family 6 Model 42 Stepping 7     Microarchitecture: Sandy Bridge (Client)     Frequency (GHz): 2.10     Number of physical packages: 1     Number of physical CPUs: 2     Number of logical CPUs: 2     Graphics card #0 name: 2nd Generation Core Processor Family Integrated Graphics Controller     Graphics card #0 vendor: Intel Corporation (0x8086)     Graphics card #0 VRAM (MiB): 256.00     Graphics card #0 deviceId: 0x0106     Graphics card #0 versionInfo: unknown     Virtual memory max (MiB): 5743.06     Virtual memory used (MiB): 3361.15     Swap memory total (MiB): 3828.00     Swap memory used (MiB): 811.72     Space in storage for jna.tmpdir (MiB): <path not set>     Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): <path not set>     Space in storage for io.netty.native.workdir (MiB): <path not set>     Space in storage for java.io.tmpdir (MiB): available: 421206.25, total: 467297.75     Space in storage for workdir (MiB): available: 421206.25, total: 467297.75     JVM Flags: 0 total;     Server Running: true     Active Data Packs: vanilla, mod_data, mod/neoforge     Available Data Packs: minecart_improvements, redstone_experiments, trade_rebalance, vanilla, mod/neoforge, mod_data     Enabled Feature Flags: minecraft:vanilla     World Generation: Stable     World Seed: -7131934175611965967     Suppressed Exceptions: ~~NONE~~     Is Modded: Definitely; Server brand changed to 'neoforge'     Type: Dedicated Server (map_server.txt)     ModLauncher: 11.0.4+main.d2e20e43     ModLauncher launch target: neoforgeserver     ModLauncher services:         sponge-mixin-0.15.2+mixin.0.8.7.jar mixin PLUGINSERVICE         loader-7.0.10.jar slf4jfixer PLUGINSERVICE         loader-7.0.10.jar runtime_enum_extender PLUGINSERVICE         at-modlauncher-11.0.2.jar accesstransformer PLUGINSERVICE         loader-7.0.10.jar runtimedistcleaner PLUGINSERVICE         modlauncher-11.0.4.jar mixin TRANSFORMATIONSERVICE         modlauncher-11.0.4.jar fml TRANSFORMATIONSERVICE     FML Language Providers:         javafml@7.0         minecraft@7.0     Mod List:         server-1.21.5-20250325.162830-srg.jar             |Minecraft                     |minecraft                     |1.21.5              |Manifest: NOSIGNATURE         neoforge-21.5.63-beta-universal.jar               |NeoForge                      |neoforge                      |21.5.63-beta        |Manifest: NOSIGNATURE     Crash Report UUID: 99fdd6a6-3898-4cfe-ab2c-80b1ace92081     FML: 7.0.10     NeoForge: 21.5.63-beta
    • My minecraft version is 1.20.1, I haven't had too many issues other than a mod not working sometimes, in which case I usually just delete and sift through the preexisting mods to try to find the issue, but I hit a big wall of not knowing what my issue is now. I just want to make a modpack for me and my partner!!! Here's the latest log url, https://pastebin.com/9LjctgYN 
    • i was having same problem, thanks 
  • Topics

×
×
  • Create New...

Important Information

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