Posted November 15, 201410 yr 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
November 15, 201410 yr 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
November 16, 201410 yr Author I've been looking into it but how else could I find whether a bed has been interacted with?
November 16, 201410 yr 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.
November 16, 201410 yr 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
November 16, 201410 yr 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!
November 16, 201410 yr 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.