mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 11:13:45 +01:00 
			
		
		
		
	Compare commits
	
		
			32 Commits
		
	
	
		
			7.0.0
			...
			feat/mutab
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					23b371f794 | ||
| 
						 | 
					9d2c632ca8 | ||
| 
						 | 
					d4ba0f414e | ||
| 
						 | 
					a3bc3968a5 | ||
| 
						 | 
					79454da1a6 | ||
| 
						 | 
					12a4c92ad9 | ||
| 
						 | 
					167692d464 | ||
| 
						 | 
					ae26e8155c | ||
| 
						 | 
					286ea62a21 | ||
| 
						 | 
					d95c74d8c9 | ||
| 
						 | 
					c1555ddbc7 | ||
| 
						 | 
					4fe0c586d9 | ||
| 
						 | 
					aae6ea4fee | ||
| 
						 | 
					385d018504 | ||
| 
						 | 
					f4def082c1 | ||
| 
						 | 
					69c9f1df83 | ||
| 
						 | 
					e138dc0267 | ||
| 
						 | 
					ca50b53f94 | ||
| 
						 | 
					f705487055 | ||
| 
						 | 
					b7c9453a1a | ||
| 
						 | 
					1aa370d562 | ||
| 
						 | 
					d3dab0d736 | ||
| 
						 | 
					764156b267 | ||
| 
						 | 
					665f5251bf | ||
| 
						 | 
					7c328095d7 | ||
| 
						 | 
					7884c91d52 | ||
| 
						 | 
					e9a19e0821 | ||
| 
						 | 
					022847fc4b | ||
| 
						 | 
					1ee673be58 | ||
| 
						 | 
					3c2aa99e86 | ||
| 
						 | 
					11fac3f060 | ||
| 
						 | 
					3e57e524b9 | 
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							@@ -27,7 +27,7 @@ body:
 | 
				
			|||||||
      description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
 | 
					      description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
 | 
				
			||||||
      multiple: false
 | 
					      multiple: false
 | 
				
			||||||
      options:
 | 
					      options:
 | 
				
			||||||
        - '1.20.1'
 | 
					        - '1.20.2'
 | 
				
			||||||
        - '1.20'
 | 
					        - '1.20'
 | 
				
			||||||
        - '1.19.4'
 | 
					        - '1.19.4'
 | 
				
			||||||
        - '1.19.3'
 | 
					        - '1.19.3'
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/build-pr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-pr.yml
									
									
									
									
										vendored
									
									
								
							@@ -9,7 +9,7 @@ jobs:
 | 
				
			|||||||
        os: [ ubuntu-latest, windows-latest, macos-latest ]
 | 
					        os: [ ubuntu-latest, windows-latest, macos-latest ]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout Repository
 | 
					      - name: Checkout Repository
 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
      - name: Validate Gradle Wrapper
 | 
					      - name: Validate Gradle Wrapper
 | 
				
			||||||
        uses: gradle/wrapper-validation-action@v1
 | 
					        uses: gradle/wrapper-validation-action@v1
 | 
				
			||||||
      - name: Setup Java
 | 
					      - name: Setup Java
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							@@ -9,7 +9,7 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout Repository
 | 
					      - name: Checkout Repository
 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
      - name: Validate Gradle Wrapper
 | 
					      - name: Validate Gradle Wrapper
 | 
				
			||||||
        uses: gradle/wrapper-validation-action@v1
 | 
					        uses: gradle/wrapper-validation-action@v1
 | 
				
			||||||
      - name: Setup Java
 | 
					      - name: Setup Java
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							@@ -20,7 +20,7 @@ jobs:
 | 
				
			|||||||
        language: [ 'java' ]
 | 
					        language: [ 'java' ]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout repository
 | 
					      - name: Checkout repository
 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
      - name: Setup Java
 | 
					      - name: Setup Java
 | 
				
			||||||
        uses: actions/setup-java@v3
 | 
					        uses: actions/setup-java@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -138,6 +138,5 @@ build/
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.DS_Store
 | 
					.DS_Store
 | 
				
			||||||
# Ignore run folders
 | 
					# Ignore run folders
 | 
				
			||||||
run-[0-0].[0-9]/
 | 
					run-[0-9].[0-9][0-9]/
 | 
				
			||||||
run-[0-0].[0-9].[0-9]/
 | 
					run-[0-9].[0-9][0-9].[0-9]/
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,7 +100,7 @@ tasks {
 | 
				
			|||||||
    withType<Javadoc> {
 | 
					    withType<Javadoc> {
 | 
				
			||||||
        val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
 | 
					        val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
 | 
				
			||||||
        val opt = options as StandardJavadocDocletOptions
 | 
					        val opt = options as StandardJavadocDocletOptions
 | 
				
			||||||
        opt.links("https://jd.papermc.io/paper/1.19/")
 | 
					        opt.links("https://jd.papermc.io/paper/1.20/")
 | 
				
			||||||
        opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
 | 
					        opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
 | 
				
			||||||
        opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
 | 
					        opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
 | 
				
			||||||
        opt.links("https://jd.advntr.dev/api/4.14.0/")
 | 
					        opt.links("https://jd.advntr.dev/api/4.14.0/")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -252,6 +252,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    public void onEnable() {
 | 
					    public void onEnable() {
 | 
				
			||||||
        this.pluginName = getDescription().getName();
 | 
					        this.pluginName = getDescription().getName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -550,7 +551,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
 | 
				
			|||||||
        this.startMetrics();
 | 
					        this.startMetrics();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (Settings.Enabled_Components.WORLDS) {
 | 
					        if (Settings.Enabled_Components.WORLDS) {
 | 
				
			||||||
            TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(1L));
 | 
					            TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(10L));
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                singleWorldListener = injector().getInstance(SingleWorldListener.class);
 | 
					                singleWorldListener = injector().getInstance(SingleWorldListener.class);
 | 
				
			||||||
                Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
 | 
					                Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
 | 
				
			||||||
@@ -1160,6 +1161,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
 | 
				
			|||||||
        return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
 | 
					        return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public @NonNull String pluginsFormatted() {
 | 
					    public @NonNull String pluginsFormatted() {
 | 
				
			||||||
        StringBuilder msg = new StringBuilder();
 | 
					        StringBuilder msg = new StringBuilder();
 | 
				
			||||||
@@ -1181,7 +1183,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    @SuppressWarnings("ConstantConditions")
 | 
					    @SuppressWarnings({"ConstantConditions", "deprecation"}) // Paper deprecation
 | 
				
			||||||
    public @NonNull String worldEditImplementations() {
 | 
					    public @NonNull String worldEditImplementations() {
 | 
				
			||||||
        StringBuilder msg = new StringBuilder();
 | 
					        StringBuilder msg = new StringBuilder();
 | 
				
			||||||
        if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
 | 
					        if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,6 +74,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
 | 
				
			|||||||
    private HorseStats horse;
 | 
					    private HorseStats horse;
 | 
				
			||||||
    private boolean noGravity;
 | 
					    private boolean noGravity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Deprecation exists since 1.20, while we support 1.16 onwards
 | 
				
			||||||
    public ReplicatingEntityWrapper(Entity entity, short depth) {
 | 
					    public ReplicatingEntityWrapper(Entity entity, short depth) {
 | 
				
			||||||
        super(entity);
 | 
					        super(entity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -369,6 +369,7 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
					    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    public void onConnect(PlayerJoinEvent event) {
 | 
					    public void onConnect(PlayerJoinEvent event) {
 | 
				
			||||||
        final Player player = event.getPlayer();
 | 
					        final Player player = event.getPlayer();
 | 
				
			||||||
        PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
 | 
					        PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
 | 
				
			||||||
@@ -733,6 +734,7 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @EventHandler(priority = EventPriority.LOW)
 | 
					    @EventHandler(priority = EventPriority.LOW)
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    public void onChat(AsyncPlayerChatEvent event) {
 | 
					    public void onChat(AsyncPlayerChatEvent event) {
 | 
				
			||||||
        if (event.isCancelled()) {
 | 
					        if (event.isCancelled()) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@@ -1063,6 +1065,7 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @EventHandler(priority = EventPriority.LOW)
 | 
					    @EventHandler(priority = EventPriority.LOW)
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    public void onCancelledInteract(PlayerInteractEvent event) {
 | 
					    public void onCancelledInteract(PlayerInteractEvent event) {
 | 
				
			||||||
        if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
 | 
					        if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
 | 
				
			||||||
            Player player = event.getPlayer();
 | 
					            Player player = event.getPlayer();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,6 +44,7 @@ import java.util.stream.IntStream;
 | 
				
			|||||||
@Singleton
 | 
					@Singleton
 | 
				
			||||||
public class BukkitInventoryUtil extends InventoryUtil {
 | 
					public class BukkitInventoryUtil extends InventoryUtil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    private static @Nullable ItemStack getItem(PlotItemStack item) {
 | 
					    private static @Nullable ItemStack getItem(PlotItemStack item) {
 | 
				
			||||||
        if (item == null) {
 | 
					        if (item == null) {
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,6 +67,7 @@ public class BukkitSetupUtils extends SetupUtils {
 | 
				
			|||||||
        this.worldFile = worldFile;
 | 
					        this.worldFile = worldFile;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation") // Paper deprecation
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void updateGenerators(final boolean force) {
 | 
					    public void updateGenerators(final boolean force) {
 | 
				
			||||||
        if (loaded && !SetupUtils.generators.isEmpty() && !force) {
 | 
					        if (loaded && !SetupUtils.generators.isEmpty() && !force) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ import org.bukkit.scheduler.BukkitTask;
 | 
				
			|||||||
import javax.net.ssl.HttpsURLConnection;
 | 
					import javax.net.ssl.HttpsURLConnection;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.io.InputStreamReader;
 | 
					import java.io.InputStreamReader;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.URI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class UpdateUtility implements Listener {
 | 
					public class UpdateUtility implements Listener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,8 +59,9 @@ public class UpdateUtility implements Listener {
 | 
				
			|||||||
    public void updateChecker() {
 | 
					    public void updateChecker() {
 | 
				
			||||||
        task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
 | 
					        task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                HttpsURLConnection connection = (HttpsURLConnection) new URL(
 | 
					                HttpsURLConnection connection = (HttpsURLConnection) URI.create(
 | 
				
			||||||
                        "https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
 | 
					                        "https://api.spigotmc.org/simple/0.2/index.php?action=getResource&id=77506")
 | 
				
			||||||
 | 
					                        .toURL()
 | 
				
			||||||
                        .openConnection();
 | 
					                        .openConnection();
 | 
				
			||||||
                connection.setRequestMethod("GET");
 | 
					                connection.setRequestMethod("GET");
 | 
				
			||||||
                JsonObject result = new JsonParser()
 | 
					                JsonObject result = new JsonParser()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,76 +0,0 @@
 | 
				
			|||||||
# Contributor Covenant Code of Conduct
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Our Pledge
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
In the interest of fostering an open and welcoming environment, we as
 | 
					 | 
				
			||||||
contributors and maintainers pledge to making participation in our project and
 | 
					 | 
				
			||||||
our community a harassment-free experience for everyone, regardless of age, body
 | 
					 | 
				
			||||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
 | 
					 | 
				
			||||||
level of experience, education, socio-economic status, nationality, personal
 | 
					 | 
				
			||||||
appearance, race, religion, or sexual identity and orientation.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Our Standards
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Examples of behavior that contributes to creating a positive environment
 | 
					 | 
				
			||||||
include:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Using welcoming and inclusive language
 | 
					 | 
				
			||||||
* Being respectful of differing viewpoints and experiences
 | 
					 | 
				
			||||||
* Gracefully accepting constructive criticism
 | 
					 | 
				
			||||||
* Focusing on what is best for the community
 | 
					 | 
				
			||||||
* Showing empathy towards other community members
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Examples of unacceptable behavior by participants include:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The use of sexualized language or imagery and unwelcome sexual attention or
 | 
					 | 
				
			||||||
  advances
 | 
					 | 
				
			||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
 | 
					 | 
				
			||||||
* Public or private harassment
 | 
					 | 
				
			||||||
* Publishing others' private information, such as a physical or electronic
 | 
					 | 
				
			||||||
  address, without explicit permission
 | 
					 | 
				
			||||||
* Other conduct which could reasonably be considered inappropriate in a
 | 
					 | 
				
			||||||
  professional setting
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Our Responsibilities
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Project maintainers are responsible for clarifying the standards of acceptable
 | 
					 | 
				
			||||||
behavior and are expected to take appropriate and fair corrective action in
 | 
					 | 
				
			||||||
response to any instances of unacceptable behavior.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Project maintainers have the right and responsibility to remove, edit, or
 | 
					 | 
				
			||||||
reject comments, commits, code, wiki edits, issues, and other contributions
 | 
					 | 
				
			||||||
that are not aligned to this Code of Conduct, or to ban temporarily or
 | 
					 | 
				
			||||||
permanently any contributor for other behaviors that they deem inappropriate,
 | 
					 | 
				
			||||||
threatening, offensive, or harmful.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Scope
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This Code of Conduct applies both within project spaces and in public spaces
 | 
					 | 
				
			||||||
when an individual is representing the project or its community. Examples of
 | 
					 | 
				
			||||||
representing a project or community include using an official project e-mail
 | 
					 | 
				
			||||||
address, posting via an official social media account, or acting as an appointed
 | 
					 | 
				
			||||||
representative at an online or offline event. Representation of a project may be
 | 
					 | 
				
			||||||
further defined and clarified by project maintainers.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Enforcement
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
 | 
					 | 
				
			||||||
reported by contacting the project team at contact<at>intellectualsites.com. All
 | 
					 | 
				
			||||||
complaints will be reviewed and investigated and will result in a response that
 | 
					 | 
				
			||||||
is deemed necessary and appropriate to the circumstances. The project team is
 | 
					 | 
				
			||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
 | 
					 | 
				
			||||||
Further details of specific enforcement policies may be posted separately.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Project maintainers who do not follow or enforce the Code of Conduct in good
 | 
					 | 
				
			||||||
faith may face temporary or permanent repercussions as determined by other
 | 
					 | 
				
			||||||
members of the project's leadership.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Attribution
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
 | 
					 | 
				
			||||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[homepage]: https://www.contributor-covenant.org
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For answers to common questions about this code of conduct, see
 | 
					 | 
				
			||||||
https://www.contributor-covenant.org/faq
 | 
					 | 
				
			||||||
@@ -57,8 +57,8 @@ tasks.processResources {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    doLast {
 | 
					    doLast {
 | 
				
			||||||
        copy {
 | 
					        copy {
 | 
				
			||||||
            from(File("$rootDir/LICENSE"))
 | 
					            from(layout.buildDirectory.file("$rootDir/LICENSE"))
 | 
				
			||||||
            into("$buildDir/resources/main/")
 | 
					            into(layout.buildDirectory.dir("resources/main"))
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,7 +84,7 @@ import java.io.InputStream;
 | 
				
			|||||||
import java.io.InputStreamReader;
 | 
					import java.io.InputStreamReader;
 | 
				
			||||||
import java.io.ObjectInputStream;
 | 
					import java.io.ObjectInputStream;
 | 
				
			||||||
import java.io.ObjectOutputStream;
 | 
					import java.io.ObjectOutputStream;
 | 
				
			||||||
import java.net.MalformedURLException;
 | 
					import java.net.URI;
 | 
				
			||||||
import java.net.URISyntaxException;
 | 
					import java.net.URISyntaxException;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.URL;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
@@ -210,9 +210,10 @@ public class PlotSquared {
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
 | 
					                URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
 | 
				
			||||||
                this.jarFile = new File(
 | 
					                this.jarFile = new File(
 | 
				
			||||||
                        new URL(logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
 | 
					                        URI.create(
 | 
				
			||||||
                                .toURI().getPath());
 | 
					                                logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
 | 
				
			||||||
            } catch (MalformedURLException | URISyntaxException | SecurityException e) {
 | 
					                                .getPath());
 | 
				
			||||||
 | 
					            } catch (URISyntaxException | SecurityException e) {
 | 
				
			||||||
                e.printStackTrace();
 | 
					                e.printStackTrace();
 | 
				
			||||||
                this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
 | 
					                this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
 | 
				
			||||||
                if (!this.jarFile.exists()) {
 | 
					                if (!this.jarFile.exists()) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,7 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
 | 
				
			|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
					import org.checkerframework.checker.nullness.qual.NonNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.net.MalformedURLException;
 | 
					import java.net.MalformedURLException;
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.URL;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -116,7 +117,7 @@ public class Load extends SubCommand {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    final URL url;
 | 
					                    final URL url;
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        url = new URL(Settings.Web.URL + "saves/" + player.getUUID() + '/' + schematic);
 | 
					                        url = URI.create(Settings.Web.URL + "saves/" + player.getUUID() + '/' + schematic).toURL();
 | 
				
			||||||
                    } catch (MalformedURLException e) {
 | 
					                    } catch (MalformedURLException e) {
 | 
				
			||||||
                        e.printStackTrace();
 | 
					                        e.printStackTrace();
 | 
				
			||||||
                        player.sendMessage(TranslatableCaption.of("web.load_failed"));
 | 
					                        player.sendMessage(TranslatableCaption.of("web.load_failed"));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,7 @@ import net.kyori.adventure.text.minimessage.tag.Tag;
 | 
				
			|||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
 | 
					import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
 | 
				
			||||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
					import org.checkerframework.checker.nullness.qual.NonNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.URL;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
@@ -130,8 +131,7 @@ public class SchematicCmd extends SubCommand {
 | 
				
			|||||||
                    if (location.startsWith("url:")) {
 | 
					                    if (location.startsWith("url:")) {
 | 
				
			||||||
                        try {
 | 
					                        try {
 | 
				
			||||||
                            UUID uuid = UUID.fromString(location.substring(4));
 | 
					                            UUID uuid = UUID.fromString(location.substring(4));
 | 
				
			||||||
                            URL base = new URL(Settings.Web.URL);
 | 
					                            URL url = URI.create(Settings.Web.URL + "uploads/" + uuid + ".schematic").toURL();
 | 
				
			||||||
                            URL url = new URL(base, "uploads/" + uuid + ".schematic");
 | 
					 | 
				
			||||||
                            schematic = this.schematicHandler.getSchematic(url);
 | 
					                            schematic = this.schematicHandler.getSchematic(url);
 | 
				
			||||||
                        } catch (Exception e) {
 | 
					                        } catch (Exception e) {
 | 
				
			||||||
                            e.printStackTrace();
 | 
					                            e.printStackTrace();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,21 +21,26 @@ package com.plotsquared.core.events;
 | 
				
			|||||||
import com.plotsquared.core.location.Location;
 | 
					import com.plotsquared.core.location.Location;
 | 
				
			||||||
import com.plotsquared.core.player.PlotPlayer;
 | 
					import com.plotsquared.core.player.PlotPlayer;
 | 
				
			||||||
import com.plotsquared.core.plot.Plot;
 | 
					import com.plotsquared.core.plot.Plot;
 | 
				
			||||||
 | 
					import org.checkerframework.checker.nullness.qual.Nullable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.function.UnaryOperator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Called when a player teleports to a plot
 | 
					 * Called when a player teleports to a plot
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent {
 | 
					public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Location from;
 | 
					 | 
				
			||||||
    private final TeleportCause cause;
 | 
					    private final TeleportCause cause;
 | 
				
			||||||
    private Result eventResult;
 | 
					    private Result eventResult;
 | 
				
			||||||
 | 
					    private final Location from;
 | 
				
			||||||
 | 
					    private UnaryOperator<Location> locationTransformer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * PlayerTeleportToPlotEvent: Called when a player teleports to a plot
 | 
					     * PlayerTeleportToPlotEvent: Called when a player teleports to a plot
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param player That was teleported
 | 
					     * @param player That was teleported
 | 
				
			||||||
     * @param from   Start location
 | 
					     * @param from   The origin location, from where the teleport was triggered (players location most likely)
 | 
				
			||||||
     * @param plot   Plot to which the player was teleported
 | 
					     * @param plot   Plot to which the player was teleported
 | 
				
			||||||
     * @param cause  Why the teleport is being completed
 | 
					     * @param cause  Why the teleport is being completed
 | 
				
			||||||
     * @since 6.1.0
 | 
					     * @since 6.1.0
 | 
				
			||||||
@@ -57,7 +62,8 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get the from location
 | 
					     * Get the location, from where the teleport was triggered
 | 
				
			||||||
 | 
					     * (the players current location when executing the home command for example)
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return Location
 | 
					     * @return Location
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@@ -65,6 +71,27 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
 | 
				
			|||||||
        return this.from;
 | 
					        return this.from;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the currently applied {@link UnaryOperator<Location> transformer} or null, if none was set
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return LocationTransformer
 | 
				
			||||||
 | 
					     * @since TODO
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public @Nullable UnaryOperator<Location> getLocationTransformer() {
 | 
				
			||||||
 | 
					        return this.locationTransformer;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sets the {@link UnaryOperator<Location> transformer} to mutate the location where the player will be teleported to.
 | 
				
			||||||
 | 
					     * May be {@code null}, if any previous set transformations should be discarded.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param locationTransformer The new transformer
 | 
				
			||||||
 | 
					     * @since TODO
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) {
 | 
				
			||||||
 | 
					        this.locationTransformer = locationTransformer;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Result getEventResult() {
 | 
					    public Result getEventResult() {
 | 
				
			||||||
        return eventResult;
 | 
					        return eventResult;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -189,7 +189,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                Object value;
 | 
					                Object value;
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    final boolean accessible = field.isAccessible();
 | 
					                    final boolean accessible = field.canAccess(this);
 | 
				
			||||||
                    field.setAccessible(true);
 | 
					                    field.setAccessible(true);
 | 
				
			||||||
                    value = field.get(this);
 | 
					                    value = field.get(this);
 | 
				
			||||||
                    field.setAccessible(accessible);
 | 
					                    field.setAccessible(accessible);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,9 +25,9 @@ import java.util.UUID;
 | 
				
			|||||||
public interface OfflinePlotPlayer extends PermissionHolder {
 | 
					public interface OfflinePlotPlayer extends PermissionHolder {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Gets the {@code UUID} of this player
 | 
					     * Returns the UUID of the player.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return the player {@link UUID}
 | 
					     * @return the UUID of the player
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    UUID getUUID();
 | 
					    UUID getUUID();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,9 +39,9 @@ public interface OfflinePlotPlayer extends PermissionHolder {
 | 
				
			|||||||
    long getLastPlayed();
 | 
					    long getLastPlayed();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Gets the name of this player.
 | 
					     * Returns the name of the player.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return the player name
 | 
					     * @return the name of the player
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    String getName();
 | 
					    String getName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -273,8 +273,9 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
 | 
				
			|||||||
        return this.meta == null ? null : this.meta.remove(key);
 | 
					        return this.meta == null ? null : this.meta.remove(key);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This player's name.
 | 
					     * Returns the name of the player.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return the name of the player
 | 
					     * @return the name of the player
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ import com.plotsquared.core.configuration.caption.CaptionUtility;
 | 
				
			|||||||
import com.plotsquared.core.configuration.caption.StaticCaption;
 | 
					import com.plotsquared.core.configuration.caption.StaticCaption;
 | 
				
			||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
 | 
					import com.plotsquared.core.configuration.caption.TranslatableCaption;
 | 
				
			||||||
import com.plotsquared.core.database.DBFunc;
 | 
					import com.plotsquared.core.database.DBFunc;
 | 
				
			||||||
 | 
					import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
 | 
				
			||||||
import com.plotsquared.core.events.Result;
 | 
					import com.plotsquared.core.events.Result;
 | 
				
			||||||
import com.plotsquared.core.events.TeleportCause;
 | 
					import com.plotsquared.core.events.TeleportCause;
 | 
				
			||||||
import com.plotsquared.core.generator.ClassicPlotWorld;
 | 
					import com.plotsquared.core.generator.ClassicPlotWorld;
 | 
				
			||||||
@@ -2614,8 +2615,9 @@ public class Plot {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) {
 | 
					    public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) {
 | 
				
			||||||
        Plot plot = this.getBasePlot(false);
 | 
					        Plot plot = this.getBasePlot(false);
 | 
				
			||||||
        Result result = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause).getEventResult();
 | 
					
 | 
				
			||||||
        if (result == Result.DENY) {
 | 
					        PlayerTeleportToPlotEvent event = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause);
 | 
				
			||||||
 | 
					        if (event.getEventResult() == Result.DENY) {
 | 
				
			||||||
            player.sendMessage(
 | 
					            player.sendMessage(
 | 
				
			||||||
                    TranslatableCaption.of("events.event_denied"),
 | 
					                    TranslatableCaption.of("events.event_denied"),
 | 
				
			||||||
                    TagResolver.resolver("value", Tag.inserting(Component.text("Teleport")))
 | 
					                    TagResolver.resolver("value", Tag.inserting(Component.text("Teleport")))
 | 
				
			||||||
@@ -2623,7 +2625,10 @@ public class Plot {
 | 
				
			|||||||
            resultConsumer.accept(false);
 | 
					            resultConsumer.accept(false);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        final Consumer<Location> locationConsumer = location -> {
 | 
					
 | 
				
			||||||
 | 
					        final Consumer<Location> locationConsumer = calculatedLocation -> {
 | 
				
			||||||
 | 
					            Location location = event.getLocationTransformer() == null ? calculatedLocation :
 | 
				
			||||||
 | 
					                    Objects.requireNonNullElse(event.getLocationTransformer().apply(calculatedLocation), calculatedLocation);
 | 
				
			||||||
            if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) {
 | 
					            if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) {
 | 
				
			||||||
                player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot"));
 | 
					                player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot"));
 | 
				
			||||||
                player.teleport(location, cause);
 | 
					                player.teleport(location, cause);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,8 +26,8 @@ import java.util.Iterator;
 | 
				
			|||||||
import java.util.NoSuchElementException;
 | 
					import java.util.NoSuchElementException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Plot (X,Y) tuples for plot locations
 | 
					 * The PlotId class represents a Plot's x and y coordinates within a {@link PlotArea}. PlotId x,y values do not correspond to Block locations.
 | 
				
			||||||
 * within a plot area
 | 
					 * A PlotId instance can be created using the {@link #of(int, int)} method or parsed from a string using the {@link #fromString(String)} method.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public final class PlotId {
 | 
					public final class PlotId {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,10 +36,10 @@ public final class PlotId {
 | 
				
			|||||||
    private final int hash;
 | 
					    private final int hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * PlotId class (PlotId x,y values do not correspond to Block locations)
 | 
					     * Constructs a new PlotId with the given x and y coordinates.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param x The plot x coordinate
 | 
					     * @param x the x-coordinate of the plot
 | 
				
			||||||
     * @param y The plot y coordinate
 | 
					     * @param y the y-coordinate of the plot
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private PlotId(final int x, final int y) {
 | 
					    private PlotId(final int x, final int y) {
 | 
				
			||||||
        this.x = x;
 | 
					        this.x = x;
 | 
				
			||||||
@@ -48,11 +48,11 @@ public final class PlotId {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Create a new plot ID instance
 | 
					     * Returns a new PlotId instance with the specified x and y coordinates.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param x The plot x coordinate
 | 
					     * @param x the x-coordinate of the plot
 | 
				
			||||||
     * @param y The plot y coordinate
 | 
					     * @param y the y-coordinate of the plot
 | 
				
			||||||
     * @return a new PlotId at x,y
 | 
					     * @return a new PlotId instance with the specified x and y coordinates
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static @NonNull PlotId of(final int x, final int y) {
 | 
					    public static @NonNull PlotId of(final int x, final int y) {
 | 
				
			||||||
        return new PlotId(x, y);
 | 
					        return new PlotId(x, y);
 | 
				
			||||||
@@ -74,10 +74,13 @@ public final class PlotId {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Attempt to parse a plot ID from a string
 | 
					     * Returns a PlotId object from the given string, or null if the string is invalid.
 | 
				
			||||||
 | 
					     * The string should be in the format "x;y" where x and y are integers.
 | 
				
			||||||
 | 
					     * The string can also contain any combination of the characters ";_,."
 | 
				
			||||||
 | 
					     * as delimiters.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param string ID string
 | 
					     * @param string the string to parse
 | 
				
			||||||
     * @return Plot ID, or {@code null} if none could be parsed
 | 
					     * @return a PlotId object parsed from the given string, or null if the string is invalid
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static @Nullable PlotId fromStringOrNull(final @NonNull String string) {
 | 
					    public static @Nullable PlotId fromStringOrNull(final @NonNull String string) {
 | 
				
			||||||
        final String[] parts = string.split("[;_,.]");
 | 
					        final String[] parts = string.split("[;_,.]");
 | 
				
			||||||
@@ -95,39 +98,39 @@ public final class PlotId {
 | 
				
			|||||||
        return of(x, y);
 | 
					        return of(x, y);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Gets the PlotId from the HashCode<br>
 | 
					     * Returns a new PlotId instance from the given hash.
 | 
				
			||||||
     * Note: Only accurate for small x,z values (short)
 | 
					 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param hash ID hash
 | 
					     * @param hash the hash to unpair
 | 
				
			||||||
     * @return Plot ID
 | 
					     * @return a new PlotId instance
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static @NonNull PlotId unpair(final int hash) {
 | 
					    public static @NonNull PlotId unpair(final int hash) {
 | 
				
			||||||
        return PlotId.of(hash >> 16, hash & 0xFFFF);
 | 
					        return PlotId.of(hash >> 16, hash & 0xFFFF);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get the ID X component
 | 
					     * Returns the x-coordinate of this Plot ID.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return X component
 | 
					     * @return the x-coordinate of this Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public int getX() {
 | 
					    public int getX() {
 | 
				
			||||||
        return this.x;
 | 
					        return this.x;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get the ID Y component
 | 
					     * Returns the y-coordinate of this Plot ID.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return Y component
 | 
					     * @return the y-coordinate of this Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public int getY() {
 | 
					    public int getY() {
 | 
				
			||||||
        return this.y;
 | 
					        return this.y;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get the next plot ID for claiming purposes
 | 
					     * Returns the next Plot ID for claiming purposes based on the current Plot ID.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return Next plot ID
 | 
					     * @return the next Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NonNull PlotId getNextId() {
 | 
					    public @NonNull PlotId getNextId() {
 | 
				
			||||||
        final int absX = Math.abs(x);
 | 
					        final int absX = Math.abs(x);
 | 
				
			||||||
@@ -159,10 +162,11 @@ public final class PlotId {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get the PlotId in a relative direction
 | 
					     * Returns a new Plot ID in the specified relative direction based on the
 | 
				
			||||||
 | 
					     * current Plot ID.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param direction Direction
 | 
					     * @param direction the direction in which to get the relative Plot ID
 | 
				
			||||||
     * @return Relative plot ID
 | 
					     * @return the relative Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NonNull PlotId getRelative(final @NonNull Direction direction) {
 | 
					    public @NonNull PlotId getRelative(final @NonNull Direction direction) {
 | 
				
			||||||
        return switch (direction) {
 | 
					        return switch (direction) {
 | 
				
			||||||
@@ -193,10 +197,11 @@ public final class PlotId {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get a String representation of the plot ID where the
 | 
					     * Returns a string representation of this Plot ID in the format "x;y".
 | 
				
			||||||
     * components are separated by ";"
 | 
					 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return {@code x + ";" + y}
 | 
					     * <p> The format is {@code x + ";" + y}
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return a string representation of this Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public @NonNull String toString() {
 | 
					    public @NonNull String toString() {
 | 
				
			||||||
@@ -204,41 +209,40 @@ public final class PlotId {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get a String representation of the plot ID where the
 | 
					     * Returns a string representation of this Plot ID with the specified separator.
 | 
				
			||||||
     * components are separated by a specified string
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * The format is {@code x + separator + y}
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param separator Separator
 | 
					     * @param separator the separator to use between the X and Y coordinates
 | 
				
			||||||
     * @return {@code x + separator + y}
 | 
					     * @return a string representation of this Plot ID with the specified separator
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NonNull String toSeparatedString(String separator) {
 | 
					    public @NonNull String toSeparatedString(String separator) {
 | 
				
			||||||
        return this.getX() + separator + this.getY();
 | 
					        return this.getX() + separator + this.getY();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get a String representation of the plot ID where the
 | 
					     * Returns a string representation of this Plot ID in the format "x,y".
 | 
				
			||||||
     * components are separated by ","
 | 
					 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return {@code x + "," + y}
 | 
					     * @return a string representation of this Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NonNull String toCommaSeparatedString() {
 | 
					    public @NonNull String toCommaSeparatedString() {
 | 
				
			||||||
        return this.getX() + "," + this.getY();
 | 
					        return this.getX() + "," + this.getY();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get a String representation of the plot ID where the
 | 
					     * Returns a string representation of this Plot ID in the format "x_y".
 | 
				
			||||||
     * components are separated by "_"
 | 
					 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return {@code x + "_" + y}
 | 
					     * @return a string representation of this Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public @NonNull String toUnderscoreSeparatedString() {
 | 
					    public @NonNull String toUnderscoreSeparatedString() {
 | 
				
			||||||
        return this.getX() + "_" + this.getY();
 | 
					        return this.getX() + "_" + this.getY();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get a String representation of the plot ID where the
 | 
					     * Returns a string representation of this Plot ID in the format "x-y".
 | 
				
			||||||
     * components are separated by "-"
 | 
					 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return {@code x + "-" + y}
 | 
					     * @return a string representation of this Plot ID
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NonNull String toDashSeparatedString() {
 | 
					    public @NonNull String toDashSeparatedString() {
 | 
				
			||||||
        return this.getX() + "-" + this.getY();
 | 
					        return this.getX() + "-" + this.getY();
 | 
				
			||||||
@@ -250,6 +254,10 @@ public final class PlotId {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * An iterator that iterates over a range of {@link PlotId}s.
 | 
				
			||||||
 | 
					     * The range is defined by a start and end {@link PlotId}.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public static final class PlotRangeIterator implements Iterator<PlotId>, Iterable<PlotId> {
 | 
					    public static final class PlotRangeIterator implements Iterator<PlotId>, Iterable<PlotId> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private final PlotId start;
 | 
					        private final PlotId start;
 | 
				
			||||||
@@ -265,6 +273,13 @@ public final class PlotId {
 | 
				
			|||||||
            this.y = this.start.getY();
 | 
					            this.y = this.start.getY();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Returns a new {@link PlotRangeIterator} that iterates over the range of Plots between the specified start and end Plots (inclusive).
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * @param start the starting Plot of the range
 | 
				
			||||||
 | 
					         * @param end the ending Plot of the range
 | 
				
			||||||
 | 
					         * @return a new {@link PlotRangeIterator} that iterates over the range of Plots between the specified start and end Plots (inclusive)
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        public static PlotRangeIterator range(final @NonNull PlotId start, final @NonNull PlotId end) {
 | 
					        public static PlotRangeIterator range(final @NonNull PlotId start, final @NonNull PlotId end) {
 | 
				
			||||||
            return new PlotRangeIterator(start, end);
 | 
					            return new PlotRangeIterator(start, end);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,14 +67,25 @@ public class PlotItemStack {
 | 
				
			|||||||
        return this.type;
 | 
					        return this.type;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns the number of items in this stack.
 | 
				
			||||||
 | 
					     * Valid values range from 1-255.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the amount of items in this stack
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public int getAmount() {
 | 
					    public int getAmount() {
 | 
				
			||||||
        return amount;
 | 
					        return amount;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns the given name of this stack of items. The name is displayed when
 | 
				
			||||||
 | 
					     * hovering over the item.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the given name of this stack of items
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public String getName() {
 | 
					    public String getName() {
 | 
				
			||||||
        return name;
 | 
					        return name;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public String[] getLore() {
 | 
					    public String[] getLore() {
 | 
				
			||||||
        return lore;
 | 
					        return lore;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -891,7 +891,6 @@ public final class PlotModificationManager {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * /**
 | 
					 | 
				
			||||||
     * Sets components such as border, wall, floor.
 | 
					     * Sets components such as border, wall, floor.
 | 
				
			||||||
     * (components are generator specific)
 | 
					     * (components are generator specific)
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,9 +18,25 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
package com.plotsquared.core.plot;
 | 
					package com.plotsquared.core.plot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * The different types of weather that can be set for a Plot.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public enum PlotWeather {
 | 
					public enum PlotWeather {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Rainy weather conditions
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    RAIN,
 | 
					    RAIN,
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Clear weather conditions
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    CLEAR,
 | 
					    CLEAR,
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Use the weather of the world the plot is in
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    WORLD,
 | 
					    WORLD,
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Turn off weather for the plot
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    OFF
 | 
					    OFF
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,6 +83,7 @@ import java.io.OutputStreamWriter;
 | 
				
			|||||||
import java.io.PrintWriter;
 | 
					import java.io.PrintWriter;
 | 
				
			||||||
import java.net.HttpURLConnection;
 | 
					import java.net.HttpURLConnection;
 | 
				
			||||||
import java.net.MalformedURLException;
 | 
					import java.net.MalformedURLException;
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.URL;
 | 
				
			||||||
import java.net.URLConnection;
 | 
					import java.net.URLConnection;
 | 
				
			||||||
import java.nio.channels.Channels;
 | 
					import java.nio.channels.Channels;
 | 
				
			||||||
@@ -144,7 +145,7 @@ public abstract class SchematicHandler {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        final URL url;
 | 
					        final URL url;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            url = new URL(Settings.Web.URL + "?key=" + uuid + "&type=" + extension);
 | 
					            url = URI.create(Settings.Web.URL + "?key=" + uuid + "&type=" + extension).toURL();
 | 
				
			||||||
        } catch (MalformedURLException e) {
 | 
					        } catch (MalformedURLException e) {
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
            whenDone.run();
 | 
					            whenDone.run();
 | 
				
			||||||
@@ -153,7 +154,7 @@ public abstract class SchematicHandler {
 | 
				
			|||||||
        TaskManager.runTaskAsync(() -> {
 | 
					        TaskManager.runTaskAsync(() -> {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                String boundary = Long.toHexString(System.currentTimeMillis());
 | 
					                String boundary = Long.toHexString(System.currentTimeMillis());
 | 
				
			||||||
                URLConnection con = new URL(website).openConnection();
 | 
					                URLConnection con = URI.create(website).toURL().openConnection();
 | 
				
			||||||
                con.setDoOutput(true);
 | 
					                con.setDoOutput(true);
 | 
				
			||||||
                con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
 | 
					                con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
 | 
				
			||||||
                try (OutputStream output = con.getOutputStream();
 | 
					                try (OutputStream output = con.getOutputStream();
 | 
				
			||||||
@@ -498,9 +499,10 @@ public abstract class SchematicHandler {
 | 
				
			|||||||
    public List<String> getSaves(UUID uuid) {
 | 
					    public List<String> getSaves(UUID uuid) {
 | 
				
			||||||
        String rawJSON;
 | 
					        String rawJSON;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            String website = Settings.Web.URL + "list.php?" + uuid.toString();
 | 
					            URLConnection connection = URI.create(
 | 
				
			||||||
            URL url = new URL(website);
 | 
					                    Settings.Web.URL + "list.php?" + uuid.toString())
 | 
				
			||||||
            URLConnection connection = new URL(url.toString()).openConnection();
 | 
					                    .toURL()
 | 
				
			||||||
 | 
					                    .openConnection();
 | 
				
			||||||
            connection.setRequestProperty("User-Agent", "Mozilla/5.0");
 | 
					            connection.setRequestProperty("User-Agent", "Mozilla/5.0");
 | 
				
			||||||
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
 | 
					            try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
 | 
				
			||||||
                rawJSON = reader.lines().collect(Collectors.joining());
 | 
					                rawJSON = reader.lines().collect(Collectors.joining());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
import com.diffplug.gradle.spotless.SpotlessPlugin
 | 
					import com.diffplug.gradle.spotless.SpotlessPlugin
 | 
				
			||||||
import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
 | 
					import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
 | 
				
			||||||
 | 
					import groovy.json.JsonSlurper
 | 
				
			||||||
import java.net.URI
 | 
					import java.net.URI
 | 
				
			||||||
import xyz.jpenilla.runpaper.task.RunServer
 | 
					import xyz.jpenilla.runpaper.task.RunServer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,7 +22,7 @@ plugins {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group = "com.intellectualsites.plotsquared"
 | 
					group = "com.intellectualsites.plotsquared"
 | 
				
			||||||
version = "7.0.0"
 | 
					version = "7.0.1-SNAPSHOT"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (!File("$rootDir/.git").exists()) {
 | 
					if (!File("$rootDir/.git").exists()) {
 | 
				
			||||||
    logger.lifecycle("""
 | 
					    logger.lifecycle("""
 | 
				
			||||||
@@ -170,8 +171,9 @@ subprojects {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    scm {
 | 
					                    scm {
 | 
				
			||||||
                        url.set("https://github.com/IntellectualSites/PlotSquared")
 | 
					                        url.set("https://github.com/IntellectualSites/PlotSquared")
 | 
				
			||||||
                        connection.set("scm:https://IntellectualSites@github.com/IntellectualSites/PlotSquared.git")
 | 
					                        connection.set("scm:git:https://github.com/IntellectualSites/PlotSquared.git")
 | 
				
			||||||
                        developerConnection.set("scm:git://github.com/IntellectualSites/PlotSquared.git")
 | 
					                        developerConnection.set("scm:git:git@github.com:IntellectualSites/PlotSquared.git")
 | 
				
			||||||
 | 
					                        tag.set("${project.version}")
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    issueManagement {
 | 
					                    issueManagement {
 | 
				
			||||||
@@ -218,14 +220,23 @@ tasks.getByName<Jar>("jar") {
 | 
				
			|||||||
    enabled = false
 | 
					    enabled = false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
val supportedVersions = listOf("1.16.5", "1.17", "1.17.1", "1.18.2", "1.19", "1.19.1", "1.19.2", "1.19.3", "1.19.4", "1.20")
 | 
					val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1", "1.20.2")
 | 
				
			||||||
tasks {
 | 
					tasks {
 | 
				
			||||||
 | 
					    val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
 | 
				
			||||||
 | 
					    val artifact = ((JsonSlurper().parse(lastSuccessfulBuildUrl) as Map<*, *>)["artifacts"] as List<*>)
 | 
				
			||||||
 | 
					            .map { it as Map<*, *> }
 | 
				
			||||||
 | 
					            .map { it["fileName"] as String }
 | 
				
			||||||
 | 
					            .first { it.contains("Bukkit") }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    supportedVersions.forEach {
 | 
					    supportedVersions.forEach {
 | 
				
			||||||
        register<RunServer>("runServer-$it") {
 | 
					        register<RunServer>("runServer-$it") {
 | 
				
			||||||
            minecraftVersion(it)
 | 
					            minecraftVersion(it)
 | 
				
			||||||
            pluginJars(*project(":plotsquared-bukkit").getTasksByName("shadowJar", false).map { (it as Jar).archiveFile }
 | 
					            pluginJars(*project(":plotsquared-bukkit").getTasksByName("shadowJar", false).map { (it as Jar).archiveFile }
 | 
				
			||||||
                    .toTypedArray())
 | 
					                    .toTypedArray())
 | 
				
			||||||
            jvmArgs("-DPaper.IgnoreJavaVersion=true", "-Dcom.mojang.eula.agree=true")
 | 
					            jvmArgs("-DPaper.IgnoreJavaVersion=true", "-Dcom.mojang.eula.agree=true")
 | 
				
			||||||
 | 
					            downloadPlugins {
 | 
				
			||||||
 | 
					                url("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/artifact/artifacts/$artifact")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            group = "run paper"
 | 
					            group = "run paper"
 | 
				
			||||||
            runDirectory.set(file("run-$it"))
 | 
					            runDirectory.set(file("run-$it"))
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +1,20 @@
 | 
				
			|||||||
[versions]
 | 
					[versions]
 | 
				
			||||||
# Platform expectations
 | 
					# Platform expectations
 | 
				
			||||||
paper = "1.20.1-R0.1-SNAPSHOT"
 | 
					paper = "1.20.2-R0.1-SNAPSHOT"
 | 
				
			||||||
guice = "7.0.0"
 | 
					guice = "7.0.0"
 | 
				
			||||||
spotbugs = "4.7.3"
 | 
					spotbugs = "4.7.3"
 | 
				
			||||||
checkerqual = "3.37.0"
 | 
					checkerqual = "3.38.0"
 | 
				
			||||||
gson = "2.10"
 | 
					gson = "2.10"
 | 
				
			||||||
guava = "31.1-jre"
 | 
					guava = "31.1-jre"
 | 
				
			||||||
snakeyaml = "2.0"
 | 
					snakeyaml = "2.0"
 | 
				
			||||||
adventure = "4.14.0"
 | 
					adventure = "4.14.0"
 | 
				
			||||||
adventure-bukkit = "4.3.0"
 | 
					adventure-bukkit = "4.3.1"
 | 
				
			||||||
log4j = "2.19.0"
 | 
					log4j = "2.19.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Plugins
 | 
					# Plugins
 | 
				
			||||||
worldedit = "7.2.15"
 | 
					worldedit = "7.2.16"
 | 
				
			||||||
fawe = "2.7.0"
 | 
					fawe = "2.8.0"
 | 
				
			||||||
placeholderapi = "2.11.3"
 | 
					placeholderapi = "2.11.4"
 | 
				
			||||||
luckperms = "5.4"
 | 
					luckperms = "5.4"
 | 
				
			||||||
essentialsx = "2.20.1"
 | 
					essentialsx = "2.20.1"
 | 
				
			||||||
mvdwapi = "3.1.1"
 | 
					mvdwapi = "3.1.1"
 | 
				
			||||||
@@ -22,7 +22,7 @@ mvdwapi = "3.1.1"
 | 
				
			|||||||
# Third party
 | 
					# Third party
 | 
				
			||||||
prtree = "2.0.1"
 | 
					prtree = "2.0.1"
 | 
				
			||||||
aopalliance = "1.0"
 | 
					aopalliance = "1.0"
 | 
				
			||||||
cloud-services = "1.8.3"
 | 
					cloud-services = "1.8.4"
 | 
				
			||||||
arkitektonika = "2.1.2"
 | 
					arkitektonika = "2.1.2"
 | 
				
			||||||
squirrelid = "0.3.2"
 | 
					squirrelid = "0.3.2"
 | 
				
			||||||
paster = "1.1.5"
 | 
					paster = "1.1.5"
 | 
				
			||||||
@@ -30,14 +30,14 @@ bstats = "3.0.2"
 | 
				
			|||||||
paperlib = "1.0.8"
 | 
					paperlib = "1.0.8"
 | 
				
			||||||
informative-annotations = "1.3"
 | 
					informative-annotations = "1.3"
 | 
				
			||||||
vault = "1.7.1"
 | 
					vault = "1.7.1"
 | 
				
			||||||
serverlib = "2.3.1"
 | 
					serverlib = "2.3.4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Gradle plugins
 | 
					# Gradle plugins
 | 
				
			||||||
shadow = "8.1.1"
 | 
					shadow = "8.1.1"
 | 
				
			||||||
grgit = "4.1.1"
 | 
					grgit = "4.1.1"
 | 
				
			||||||
spotless = "6.20.0"
 | 
					spotless = "6.22.0"
 | 
				
			||||||
nexus = "1.3.0"
 | 
					nexus = "1.3.0"
 | 
				
			||||||
runPaper = "2.1.0"
 | 
					runPaper = "2.2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[libraries]
 | 
					[libraries]
 | 
				
			||||||
# Platform expectations
 | 
					# Platform expectations
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user