Jump to content

[1.7.10] PlayerSleepInBedEvent behaving differently on a server


Recommended Posts

Posted

I need to detect if there are mobs nearby when a user tries to access a bed and have set up an event handler for PlayerSleepInBedEvent.

 

On a single player world, if a player tries to sleep in a bed, the event is fired. Even if there are mobs nearby, or if it is day time etc.

 

When connecting to a server (which has the mod) and using the client the event will only fire if they are successful in sleeping. Is this intended or a forge bug or something else?

 

Corresponding Code:

public class PlayerBedEventHandler
{
    @SubscribeEvent
    public void onPlayerSleepInBedEvent (PlayerSleepInBedEvent event)
    {
        FMLLog.log(Reference.MOD_NAME, Level.INFO, "PlayerSleepInBedEvent");
        List<EntityMob> list = NearbyMobHelper.findNearbyMobs(event.entityPlayer, event.x, event.y, event.z);
        if (Settings.enableNearbyMobCheckAtBed && !list.isEmpty() && !event.entityPlayer.worldObj.isDaytime() && !(Math.abs(event.entityPlayer.posX - (double)event.x) > 3.0D || Math.abs(event.entityPlayer.posY - (double)event.y) > 2.0D || Math.abs(event.entityPlayer.posZ - (double)event.z) > 3.0D))
        {
            TickHandler.playerRequesting = event.entityPlayer;
            TickHandler.nearbyMobList = list;
        }
    }
}

 

The FMLLog is how I am detecting if it works and it does not log anything when trying to access a bed if there are monsters nearby. However it will fire when successfully sleeping in a bed. The FMLLog works in all cases in single player.

 

NOTE: This may be an actual forge bug so if it is, a moderator or likewise can move it to bug reports. However, I am not sure if it's a bug so here it remains.

 

EDIT: Using Forge 10.13.2.1230

Posted

I haven't actually had experience with sending packets to a client. I'll have a look. But yeah I definitely could do it on the server and send a packet to the client.

 

Reason I wanted it on the client is because I was hoping to make this a completely client side mod (no need for server) however I guess I will need to require it on a server

Posted

Don't unless it's a last resort. Like Diesieben said, the server runs separately whether you are in single player or multiplayer. If you try to do things client side in single player or multiplayer it won't work. Do everything except rendering and input server side!

Posted

I haven't actually had experience with sending packets to a client. I'll have a look. But yeah I definitely could do it on the server and send a packet to the client.

 

Reason I wanted it on the client is because I was hoping to make this a completely client side mod (no need for server) however I guess I will need to require it on a server

If you just want something cosmetic to happen on the client, like the bed makes a creaking sound when you try to sleep in it, or it changes appearance to get rumpled sheets or something, then by all means do it client only.  Otherwise you probably need the server.

 

You can check if the block the player is right-clicking by using PlayerInteractEvent

PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK

 

-TGG

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



×
×
  • Create New...

Important Information

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