Jump to content

Calculate size of worldborder based on zone center and map center?


Recommended Posts

Posted (edited)

Hello everyone, I'm attempting to create shrinking zone system (like pubg and other BRs). I'm working on way to control it throught commands and in order to save it all I've made capability just for that. It all works fine.

When creating the map you have to specify the map center and map size. When you run command to start the game, center of world border is calculated based on these values. But I need to have dynamic size of the world border to prevent it blocking some parts of the map. I have tried few things, but nothing was precise. So I am asking the Minecraft community if somebody is more experienced with all this maths stuff to help me with this. I want to be able to have always 2 sides of the map inside the border (I know I can't have all on square map with offset world border - so the other 2 sides of the border will be longer than the map size, but that doesn't matter).

So what I have tried (the part of the code responsible for calculating the border size and center) :

Spoiler

	private void startGame(IGameData data, World world)
	{
		WorldBorder border = world.getWorldBorder();
		BlockPos center = data.getMapCenter();
		int size = data.getMapSize();
		
		BlockPos zoneCenter = new BlockPos(generateZoneCenterX(center, size), 256, generateZoneCenterZ(center, size));
		
		while(world.isAirBlock(zoneCenter))
		{
			zoneCenter = new BlockPos(zoneCenter.getX(), zoneCenter.getY() - 1, zoneCenter.getZ());
			if(world.getBlockState(zoneCenter).getMaterial().isLiquid())
			{
				Pubgmc.logger.info("Generating new zone center...");
				zoneCenter = new BlockPos(generateZoneCenterX(zoneCenter, size), 256, generateZoneCenterZ(zoneCenter, size));
			}
		}
		
		// ATTEMP 1
		/*int rangeX = Math.abs(center.getX() - zoneCenter.getX());
		int rangeZ = Math.abs(center.getZ() - zoneCenter.getZ());
		double totalDistance = Math.sqrt(sqr(rangeX) + sqr(rangeZ));*/
		
		//ATEMP 2
		int totalDistance = Math.abs(center.getX() - zoneCenter.getX()) + Math.abs(center.getZ() - zoneCenter.getZ());
		
		border.setCenter(zoneCenter.getX(), zoneCenter.getZ());
		border.setTransition(size + totalDistance);
	}

 

 

 

GitHub

Edited by Toma™
Posted

I would recommend writing out what you’re trying to do on paper (or in a image editor on your computer) and finding the maths you need to understand that way

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted
On 2/10/2019 at 12:36 PM, Toma™ said:

specify the map center and map size. When you run command to start the game, center of world border is calculated based on these values

So, uh, center = center and size = size? 

Not much to compute there.

On 2/10/2019 at 12:36 PM, Toma™ said:

But I need to have dynamic size of the world border to prevent it blocking some parts of the map.

So you need to move or resize the world border based on the players location? 

Well. Move the center to the player's location and set the size to some value while they're inside the unrestricted region. ..

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
47 minutes ago, Draco18s said:

So, uh, center = center and size = size? 

Not much to compute there.

So you need to move or resize the world border based on the players location? 

Well. Move the center to the player's location and set the size to some value while they're inside the unrestricted region. ..

I think you misunderstood my post a bit.

What I meant is this:

- I have map where I defined the map center (zone minimal offset) and map size (zone maximal offset). Then random zone center is calculated based on these values -> Zone center is between these 2 points.

- The default zone size is the map size multiplied by 2

- But since the map is being offset from the map center, the zone corners don't cover all maps corners (obviously). So I'm looking for a way to calculate the new zone size based on the map size*2 and the zone's offset from the map center. I've been trying some triangle math here, but that didn't work. I'm trying to always have 2 corners of the zone cover 2 corners of the map and the other 2 zone corners to stick away from the map. So far I managed to get it to work with 1 side of the zone, but now I'm completely lost.

 

I will post GitHub link to my first post with updated code & my attempts.

Posted

As I'm thinking about it, I won't be able to have 2 corners inside the map because I have 2 squares and one of them is misplaced from the center, so having making this would be impossible right?

Posted
3 hours ago, Toma™ said:

But since the map is being offset from the map

You have used this word twice with two different meanings. I cannot follow your question.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
On 2/11/2019 at 12:38 PM, Cadiboo said:

would recommend writing out what you’re trying to do on paper (or in a image editor on your computer)

I would recommend posting a visual to describe your problem

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

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.