Jump to content

Recommended Posts

Posted

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

Posted

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.

Posted

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.

Posted

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!

Posted

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.

Posted

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

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Reach Out To Rapid Digital: What sapp Info: +1 41 4 80 7 14 85 Email INFO: rap iddi gita lrecov ery @ exe cs. com Hello, my name is Jayson, and I’m 35 years old from the United Kingdom. My family and I recently endured an incredibly challenging experience that I wouldn’t wish on anyone. We became victims of a cryptocurrency investment fraud scheme that saw us lose a staggering $807,000 in USDT and Bitcoins. The fraudsters had created a convincing facade, and we were lured into investing, only to discover later that the platform was a complete scam. We were left devastated, not just financially, but emotionally, as we had trusted these people and believed in the legitimacy of the investment. After the initial shock wore off, we desperately searched for ways to recover the lost funds. It seemed like an impossible task, and we felt as though there was no hope. That’s when, by sheer luck, we stumbled across a post about Rapid Digital Recovery, a cryptocurrency and funds recovery organization with a proven track record in cybersecurity and fraud recovery. We decided to reach out to them, and from the first interaction, we were impressed with their professionalism and transparency. They explained the recovery process in detail and reassured us that they had the skills and expertise to track down the perpetrators and recover our funds. This gave us a renewed sense of hope, something we hadn’t felt in months. What truly stood out during our experience with Rapid Digital Recovery was their dedication to the recovery process. The team went above and beyond, using sophisticated tracking tools and cyber forensics to gather critical information. Within a matter of weeks, they had successfully located the funds and traced the scam back to the fraudsters responsible. They worked with the authorities to ensure the criminals were held accountable for their actions. To our relief, the team at Rapid Digital Recovery was able to recover every single penny we had lost. The funds were returned in full, and the sense of closure we felt was invaluable. We couldn’t have imagined such a positive outcome in the early stages of our recovery journey, and we are deeply grateful for the work they did. If you ever find yourself in a similar situation, I highly recommend contacting Rapid Digital Recovery. Their expertise, transparency, and dedication to their clients make them the go-to choice for anyone seeking to recover lost cryptocurrency or funds. They truly gave us back our financial future.  
    • This is my first time modding anything, so maybe just skill issue. I'm using Forge 54.0.12 and Temurin 21.0.5+11-LTS I wanted to create a custom keybind and to check whether it works I'd like to send a chat message. I tried using Minecraft.getInstance().player.sendSystemMessage(Component.literal("test")); but IntelliJ couldnt resolve sendSystemMessage(...). Since I saw people using it in earlier versions, I tried the same thing with 1.20.6(- 50.1.0), where it works fine, now I can't figure out if this is intentional and whether there are other options for sending chat messages. On that note, is there more documentation than https://docs.minecraftforge.net/en/1.21.x/? It seems very incomplete compared to something like the Oracle Java docs
    • Hi, i'm having this error and I wanna fix it. we try: -Reload drivers -Eliminate .minecraft -Eliminate Java -Restart launcher -Verify if minecraft is using gpu -Mods  in .minecraft is empty -Install the latest and recomended version of forge idk what i have to do, help me pls. the lastest log is: https://mclo.gs/WAMao8x  
    • Read the FAQ, Rule #2. (https://forums.minecraftforge.net/topic/125488-rules-and-frequently-asked-questions-faq/)  
    • The link to your log does not work, it says it is forbidden, Error, this is a private paste or is pending moderation.
  • Topics

×
×
  • Create New...

Important Information

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