Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

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

 

 

 

  • Author

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

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.

  • Author

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

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.