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

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

Hi

 

I don't know the answer but I think you can find out if you place a breakpoint in BlockBed.onActivated() and see why it is different on the Single Player vs the server.

 

-TGG

  • Author

I've been looking into it but how else could I find whether a bed has been interacted with?

I think there is a block interaction even you could use, but diesieben has a great point. As a last resort, you could send a packet to the client when the event fires.

  • Author

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

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!

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

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.