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

Recommended Posts

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);
}```

Edited by Toma™
Share on other sites

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

Spoiler

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.

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

Share on other sites

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 m﻿﻿ap﻿﻿.﻿

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.

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

Share on other sites

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.

Share on other sites

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?

Share on other sites

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.

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

Share on other sites

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 compute﻿r)﻿

I would recommend posting a visual to describe your problem

Spoiler

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.

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.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.

×   Pasted as rich text.   Restore formatting

Only 75 emoji are allowed.

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements

×

• Activity

×
• Create New...