Jump to content

[1.7.10]Checking if player leaves area


Troelsen

Recommended Posts

Hello guys!

 

I'm new to forge-modding, and I'm having some trouble figuring out how to check if a player crosses a "border".

 

So far I've tried this

public void tickPlayer(PlayerTickEvent event) {
    	double xmax = 10;
    	double xmin = -10;
    	double zmax = 10;
    	double zmin = -10;
    	
    	double bxmax = 15;
    	double bxmin = -15;
    	double bzmax = 15;
    	double bzmin = -15;
    	
    	if((event.player.posX >= xmax || event.player.posZ >= zmax) && (event.player.posX <= bxmax || event.player.posZ <= bzmax)) {
    		event.player.setGameType(GameType.SURVIVAL);
    	}
    	if((event.player.posX <= xmin || event.player.posZ <= zmin) && (event.player.posX >= bxmin || event.player.posZ >= bzmin)) {
    		event.player.setGameType(GameType.SURVIVAL);
    	}
    }

 

and this

public boolean onPlayerExitArea(EntityPlayer player) {
    	
    	double xmax = 10;
    	double xmin = -10;
    	double zmax = 10;
    	double zmin = -10;
    	
    	double bxmax = 15;
    	double bxmin = -15;
    	double bzmax = 15;
    	double bzmin = -15;
    	
    	if((player.posX >= xmax || player.posZ >= zmax) && (player.posX <= bxmax || player.posZ <= bzmax)) {
    		player.setGameType(GameType.SURVIVAL);
    	}
    	if((player.posX <= xmin || player.posZ <= zmin) && (player.posX >= bxmin || player.posZ >= bzmin)) {
    		player.setGameType(GameType.SURVIVAL);
    	}
	return false;
    	
    }

 

Neither of these seem to have any effect, but I've been searching around for about an hour now, and I can't find any reference to go by.

 

Thanks in advance

Troelsen

Link to comment
Share on other sites

Where are you calling tickPlayer resp. onPlayerExitArea?

 

Thanks for your response!

 

I'm not quite sure I understand what you mean.

 

What I'm trying to do is to set up a square, where you can move freely in creative mode, but when you leave, you'll go survival.

 

However, I'm not really sure how the PlayerTickEvent works, and if that's even the right way to go.

 

I need some sort of update, but I don't know which is the most serverfriendly one.

 

Again, I'm sorry if I come off as blank, I'm new here.

Link to comment
Share on other sites

You showed two methods. If you do not call them, the code inside them will never be executed (how would it?). So: Where do you call these methods?

 

Oh right. I'm trying to call it in my preInit, I can't seem to do so, though.

Link to comment
Share on other sites

Thanks for pointing that out.

I've now created an EventHandler class, which seems to have fixed the problem.

 

My gamemode is changed whenever I leave the 20x20 square, it is however, spammed at every tick, which I guess makes sense.

 

Is there a way to check if the player is already in survivalmode, using event.player from tickEvent?

I can't seem to find anything linked with gametype except for setGameType

 

Thanks a ton!

Link to comment
Share on other sites

If you look at the implementation of

EntityPlayer#setGameType

in

EntityPlayerMP

, you'll see that it calls

ItemInWorldManager#setGameType

.

ItemInWorldManager

actually stores the

GameType

, so get the player's current

GameType

from their

ItemInWorldManager

instance.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

If you look at the implementation of

EntityPlayer#setGameType

in

EntityPlayerMP

, you'll see that it calls

ItemInWorldManager#setGameType

.

ItemInWorldManager

actually stores the

GameType

, so get the player's current

GameType

from their

ItemInWorldManager

instance.

 

I'm sorry if I come off as a complete fool, but how would I go about grabbing that in this method?

 

@SubscribeEvent
    public void tickEvent(PlayerTickEvent event) {
    	
    	
    	
    	double xmax = 10;
    	double xmin = -10;
    	double zmax = 10;
    	double zmin = -10;
    	
    	double bxmax = 15;
    	double bxmin = -15;
    	double bzmax = 15;
    	double bzmin = -15;
    	
    	if((event.player.posX >= xmax || event.player.posZ >= zmax) && (event.player.posX <= bxmax || event.player.posZ <= bzmax)) {
    		event.player.setGameType(GameType.SURVIVAL);
    	}
    	if((event.player.posX <= xmin || event.player.posZ <= zmin) && (event.player.posX >= bxmin || event.player.posZ >= bzmin)) {
    		event.player.setGameType(GameType.SURVIVAL);
    	}
    	
    	
    }

 

 

EDIT:

 

event.player.capabilities.isCreativeMode seemed to work just fine.

 

Thanks for helping me out you two :3

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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