Jump to content

Non-Living Entity Tracking Method: EntityRegistry.registerModEntity


Vertice

Recommended Posts

Heya, this is my first post! :)

 

I am finishing migrating my 1.2.5 modloader mod to the latest Forge because risugami posted this image: http://tiny.cc/PAIN and I am having problems registering my NON-living entities. I use the method called registerModEntity as well as the method registerGlobalEntityID, and my problem is that when I set SendsVelocityUpdates parameter in registerModEntity to true, my non-living entity does not render in server or in singleplayer. it only temporarily appears sometimes, then disappears. If I set it to false, it renders, but it sort of sidewinds then faces downward and keeps flying. I am using an entity with almost replicated behavior to that of an arrow, but with modified physics and different actions and reactions. The pitch and yaw handling is untouched. The code for registering my entity is right here:

    EntityRegistry.registerModEntity(EntityRocket.class, "RPGRocket", rpgrocketID, this, 250, 1, false);
    EntityRegistry.registerGlobalEntityID(EntityRocket.class, "RPGRocket", rpgrocketID);

The IDs are variables because they are written in the config file. For the rocket ID I am using 26 as a default. I believe it is not occupied, and other of my entities are using different IDs. None of my entities work as they used to, but if you help me fix one I can fix them all easily. I am also registering the renderers in my proxy by calling it in the load method like this:

if (event.getSide().isClient()) {
      ClientProxy.registerRenderInformation();
}

I use an if statement, then the class ClientProxy, because if I use proxy (a variable declared earlier with the @SidedProxy stuff) without the if statement, all my entities render as white boxes. The method in the ClientProxy contains:

RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderRocket());

as-well as my block  textures and my other entity renderers.

My render file is the arrow render file with my texture in it, the imports, and the name changes (including EntityRocket instead of EntityArrow as the parameters).

Please do not come here and call me a noob, because I actually am not. I know my java :)

 

Thanks in advance, ~Rodol

Link to comment
Share on other sites

I'll show you how I did mine. This is probably the best way to use proxies. Note: Common proxy's DayZload method is empty. Hope this helps :D

 

 

The mod file:



      @SidedProxy(clientSide = "dayz.common.ClientProxy", serverSide = "dayz.common.CommonProxy")
    public static CommonProxy proxy;
     @Init
    public void DayZload(FMLInitializationEvent event)
    {
        EntityRegistry.registerModEntity(EntityBullet.class, "Bullet", 1, this, 250, 5, true);
         proxy.DayZload();
    }

ClientProxy:

 



@Override
   public void DayZload() 
   {
        RenderingRegistry.registerEntityRenderingHandler(EntityBullet.class, new RenderBullet());
   }

 

 

 

Link to comment
Share on other sites

I have changed my code so that it is like yours. I removed

EntityRegistry.registerGlobalEntityID(EntityRocket.class, "Rocket", rpgrocketID);

and changed my

if (event.getSide().isClient())
{
      ClientProxy.registerRenderInformation();
}

to

proxy.registerRenderInformation();

with "proxy" declared like yours with the package changes. Here is how i declared mine:

@SidedProxy(clientSide = "RivalRebels.common.ClientProxy", serverSide = "RivalRebels.common.CommonProxy")
public static CommonProxy proxy;

I also have the method in the CommonProxy as well as the ClientProxy, with the ClientProxy having the render registries.

Thanks for replying, but my problem remains, and now instead of the old problem, there are white boxes that dissapear instantly. It appears that they may be colliding with the person shooting, but the if statement that prevents the entity from colliding with the shooter within the first five seconds is still left untouched. I fiddled around with it but to no prevail.

Thanks in advance, ~Rodol

Link to comment
Share on other sites

Hmm I'm not too sure about this white box problem but it seems to be a render issue. I had some problems getting my bullets to render when they extended EntityArrow/RenderArrow so I changed them to extend EntityThrowable/RenderThrowable which simplified a lot of things, especially textures. I can also suggest making sure in your EntityRocket class that the rocket spawn position is correct.

Link to comment
Share on other sites

Thanks for the help!

The problem was where I was spawning it. For some reason it was falsely colliding (which it never did this before, and it shouldn't) and it was hitting the player and not rendering any more, but still there, because it would keep flying and hit the ground and make the rocket explosion. What I did to workaround this odd glitch was I made it so that on the first tick that the rocket is spawned, I set the position to the current position, plus the object's motion*2, plus the shooter's motion if there is any. I add the shooters motion because if you are running and shoot, it will stop rendering because of a temporary collision with the shooter. I did this instead of multiplying the motion of the rocket times 3 instead of 2 because it would pass through walls if I did. Here is the code:

if (ticksInAir == 0 && shootingEntity instanceof EntityPlayer)
{
    this.setPosition(posX + motionX * 2 + shootingEntity.motionX, posY + motionY * 2 + shootingEntity.motionY, posZ + motionZ * 2 + shootingEntity.motionZ);
}

Something odd is that only the render breaks, but not the entity. It still makes the explosion, but doesn't render while it flies. Maybe the entitytracker isnt tracking it after it sort of "collides" falsely? I have no idea.

Sorry for the late post too, ~Rodol

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.

×
×
  • Create New...

Important Information

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