mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 01:23:44 +01:00 
			
		
		
		
	Compare commits
	
		
			27 Commits
		
	
	
		
			renovate/j
			...
			fix/big-bo
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | c7795e505b | ||
|   | 9d43434e40 | ||
|   | 4f421167d1 | ||
|   | 94f4619c2c | ||
|   | 9885d3e506 | ||
|   | a54276d3b2 | ||
|   | cbb284b0fd | ||
|   | ed22b22e9c | ||
|   | 444ccda807 | ||
|   | db361cc420 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 079dc02cfe | ||
|   | e98791c865 | ||
|   | 7c3112f30f | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | c01f5f5c7d | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 95caa19505 | ||
|   | b8055201df | ||
|   | 81daefae4a | ||
|   | 02437a8c72 | ||
|   | 958c66b28f | ||
|   | c656190e14 | ||
|   | e914cb210e | ||
|   | 94c6af74d2 | ||
|   | ebb82bd66d | ||
|   | 66f907eb5d | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 9ffede2c5c | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 97172df0dc | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | c9746b182c | 
							
								
								
									
										5
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -8,7 +8,7 @@ body: | ||||
|       value: | | ||||
|         Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem. | ||||
|         Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/). | ||||
|         Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form! | ||||
|         Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://github.com/IntellectualSites/PlotSquared/security/policy) GitHub form! | ||||
|  | ||||
|   - type: dropdown | ||||
|     attributes: | ||||
| @@ -27,6 +27,9 @@ 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. | ||||
|       multiple: false | ||||
|       options: | ||||
|         - '1.20.1' | ||||
|         - '1.20' | ||||
|         - '1.19.4' | ||||
|         - '1.19.3' | ||||
|         - '1.19.2' | ||||
|         - '1.19.1' | ||||
|   | ||||
							
								
								
									
										0
									
								
								renovate.json → .github/renovate.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										0
									
								
								renovate.json → .github/renovate.json
									
									
									
									
										vendored
									
									
								
							| @@ -11,7 +11,7 @@ jobs: | ||||
|           DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} | ||||
|           DISCORD_USERNAME: PlotSquared Release | ||||
|           DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png | ||||
|         uses: Ilshidur/action-discord@08d9328877d6954120eef2b07abbc79249bb6210 # ratchet:Ilshidur/action-discord@0.3.2 | ||||
|         uses: Ilshidur/action-discord@0.3.2 | ||||
|         with: | ||||
|           args: | | ||||
|             "<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>" | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/build-pr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-pr.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,7 +11,7 @@ jobs: | ||||
|       - name: Checkout Repository | ||||
|         uses: actions/checkout@v3 | ||||
|       - name: Validate Gradle Wrapper | ||||
|         uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1 | ||||
|         uses: gradle/wrapper-validation-action@v1 | ||||
|       - name: Setup Java | ||||
|         uses: actions/setup-java@v3 | ||||
|         with: | ||||
|   | ||||
							
								
								
									
										10
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,7 +11,7 @@ jobs: | ||||
|       - name: Checkout Repository | ||||
|         uses: actions/checkout@v3 | ||||
|       - name: Validate Gradle Wrapper | ||||
|         uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1 | ||||
|         uses: gradle/wrapper-validation-action@v1 | ||||
|       - name: Setup Java | ||||
|         uses: actions/setup-java@v3 | ||||
|         with: | ||||
| @@ -42,8 +42,8 @@ jobs: | ||||
|           ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }} | ||||
|           ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }} | ||||
|       - name: Publish core javadoc | ||||
|         if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}} | ||||
|         uses: cpina/github-action-push-to-another-repository@0a14457bb28b04dfa1652e0ffdfda866d2845c73 | ||||
|        # if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}} | ||||
|         uses: cpina/github-action-push-to-another-repository@main | ||||
|         env: | ||||
|           SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} | ||||
|         with: | ||||
| @@ -54,8 +54,8 @@ jobs: | ||||
|           target-branch: main | ||||
|           target-directory: v7/core | ||||
|       - name: Publish bukkit javadoc | ||||
|         if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}} | ||||
|         uses: cpina/github-action-push-to-another-repository@0a14457bb28b04dfa1652e0ffdfda866d2845c73 # main | ||||
|       #  if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}} | ||||
|         uses: cpina/github-action-push-to-another-repository@main | ||||
|         env: | ||||
|           SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} | ||||
|         with: | ||||
|   | ||||
							
								
								
									
										11
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @@ -21,11 +21,16 @@ jobs: | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v3 | ||||
|       - name: Setup Java | ||||
|         uses: actions/setup-java@v3 | ||||
|         with: | ||||
|           distribution: temurin | ||||
|           java-version: 17 | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2 | ||||
|         uses: github/codeql-action/init@v2 | ||||
|         with: | ||||
|           languages: ${{ matrix.language }} | ||||
|       - name: Autobuild | ||||
|         uses: github/codeql-action/autobuild@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2 | ||||
|         uses: github/codeql-action/autobuild@v2 | ||||
|       - name: Perform CodeQL Analysis | ||||
|         uses: github/codeql-action/analyze@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2 | ||||
|         uses: github/codeql-action/analyze@v2 | ||||
|   | ||||
| @@ -18,7 +18,7 @@ repositories { | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|     api(projects.plotSquaredCore) | ||||
|     api(projects.plotsquaredCore) | ||||
|  | ||||
|     // Metrics | ||||
|     implementation("org.bstats:bstats-bukkit") | ||||
| @@ -62,6 +62,7 @@ tasks.processResources { | ||||
| } | ||||
|  | ||||
| tasks.named<ShadowJar>("shadowJar") { | ||||
|     dependsOn(":plotsquared-core:shadowJar") | ||||
|     dependencies { | ||||
|         exclude(dependency("org.checkerframework:")) | ||||
|     } | ||||
| @@ -102,7 +103,7 @@ tasks { | ||||
|         opt.links("https://jd.papermc.io/paper/1.19/") | ||||
|         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://jd.advntr.dev/api/4.12.0/") | ||||
|         opt.links("https://jd.advntr.dev/api/4.14.0/") | ||||
|         opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/") | ||||
|         opt.links("https://checkerframework.org/api/") | ||||
|         opt.isLinkSource = true | ||||
|   | ||||
| @@ -37,6 +37,8 @@ import com.sk89q.worldedit.math.BlockVector2; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
| import org.bukkit.HeightMap; | ||||
| import org.bukkit.NamespacedKey; | ||||
| import org.bukkit.Registry; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.block.Biome; | ||||
| import org.bukkit.generator.BiomeProvider; | ||||
| @@ -48,10 +50,14 @@ import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.EnumSet; | ||||
| import java.util.List; | ||||
| import java.util.Random; | ||||
| import java.util.Set; | ||||
|  | ||||
| import static java.util.function.Predicate.not; | ||||
|  | ||||
| public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> { | ||||
|  | ||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName()); | ||||
| @@ -284,7 +290,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap | ||||
|      */ | ||||
|     @SuppressWarnings("deprecation") // The entire method is deprecated, but kept for compatibility with <=1.16.2 | ||||
|     @Override | ||||
|     @Deprecated(since = "TODO") | ||||
|     @Deprecated(since = "7.0.0") | ||||
|     public @NonNull ChunkData generateChunkData( | ||||
|             @NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome | ||||
|     ) { | ||||
| @@ -434,9 +440,16 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap | ||||
|         private static final List<Biome> BIOMES; | ||||
|  | ||||
|         static { | ||||
|             ArrayList<Biome> biomes = new ArrayList<>(List.of(Biome.values())); | ||||
|             biomes.remove(Biome.CUSTOM); | ||||
|             BIOMES = List.copyOf(biomes); | ||||
|             Set<Biome> disabledBiomes = EnumSet.of(Biome.CUSTOM); | ||||
|             if (PlotSquared.platform().serverVersion()[1] <= 19) { | ||||
|                 final Biome cherryGrove = Registry.BIOME.get(NamespacedKey.minecraft("cherry_grove")); | ||||
|                 if (cherryGrove != null) { | ||||
|                     disabledBiomes.add(cherryGrove); | ||||
|                 } | ||||
|             } | ||||
|             BIOMES = Arrays.stream(Biome.values()) | ||||
|                     .filter(not(disabledBiomes::contains)) | ||||
|                     .toList(); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|   | ||||
| @@ -1116,6 +1116,7 @@ public class BlockEventListener implements Listener { | ||||
|             if (plot != null) { | ||||
|                 plot.debug("Explosion was cancelled because explosion = false"); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         event.blockList().removeIf(blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation())))); | ||||
|     } | ||||
|   | ||||
| @@ -18,6 +18,8 @@ | ||||
|  */ | ||||
| package com.plotsquared.bukkit.schematic; | ||||
|  | ||||
| import com.destroystokyo.paper.profile.PlayerProfile; | ||||
| import com.destroystokyo.paper.profile.ProfileProperty; | ||||
| import com.plotsquared.bukkit.util.BukkitUtil; | ||||
| import com.sk89q.jnbt.ByteTag; | ||||
| import com.sk89q.jnbt.CompoundTag; | ||||
| @@ -28,13 +30,20 @@ import com.sk89q.jnbt.Tag; | ||||
| import com.sk89q.worldedit.blocks.BaseItemStack; | ||||
| import com.sk89q.worldedit.bukkit.BukkitAdapter; | ||||
| import com.sk89q.worldedit.world.item.ItemType; | ||||
| import io.papermc.lib.PaperLib; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.DyeColor; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.block.Banner; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.block.Container; | ||||
| import org.bukkit.block.Sign; | ||||
| import org.bukkit.block.Skull; | ||||
| import org.bukkit.block.banner.Pattern; | ||||
| import org.bukkit.block.banner.PatternType; | ||||
| import org.bukkit.enchantments.Enchantment; | ||||
| import org.bukkit.inventory.Inventory; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| @@ -45,11 +54,15 @@ import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Map.Entry; | ||||
| import java.util.Objects; | ||||
| import java.util.UUID; | ||||
|  | ||||
| public class StateWrapper { | ||||
|  | ||||
|     public org.bukkit.block.BlockState state = null; | ||||
|     public CompoundTag tag = null; | ||||
|     public CompoundTag tag; | ||||
|  | ||||
|     private boolean paperErrorTextureSent = false; | ||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + StateWrapper.class.getSimpleName()); | ||||
|  | ||||
|     public StateWrapper(CompoundTag tag) { | ||||
|         this.tag = tag; | ||||
| @@ -227,15 +240,64 @@ public class StateWrapper { | ||||
|                         return true; | ||||
|                     } | ||||
|                     String player = skullOwner.getString("Name"); | ||||
|                     if (player == null || player.isEmpty()) { | ||||
|  | ||||
|                     if (player != null && !player.isEmpty()) { | ||||
|                         try { | ||||
|                             skull.setOwningPlayer(Bukkit.getOfflinePlayer(player)); | ||||
|                             skull.update(true); | ||||
|                         } catch (Exception e) { | ||||
|                             e.printStackTrace(); | ||||
|                         } | ||||
|                         return true; | ||||
|                     } | ||||
|  | ||||
|                     final CompoundTag properties = (CompoundTag) skullOwner.getValue().get("Properties"); | ||||
|                     if (properties == null) { | ||||
|                         return false; | ||||
|                     } | ||||
|                     try { | ||||
|                         skull.setOwningPlayer(Bukkit.getOfflinePlayer(player)); | ||||
|                         skull.update(true); | ||||
|                     } catch (Exception e) { | ||||
|                         e.printStackTrace(); | ||||
|                     final ListTag textures = properties.getListTag("textures"); | ||||
|                     if (textures.getValue().isEmpty()) { | ||||
|                         return false; | ||||
|                     } | ||||
|                     final CompoundTag textureCompound = (CompoundTag) textures.getValue().get(0); | ||||
|                     if (textureCompound == null) { | ||||
|                         return false; | ||||
|                     } | ||||
|                     String textureValue = textureCompound.getString("Value"); | ||||
|                     if (textureValue == null) { | ||||
|                         return false; | ||||
|                     } | ||||
|                     if (!PaperLib.isPaper()) { | ||||
|                         if (!paperErrorTextureSent) { | ||||
|                             paperErrorTextureSent = true; | ||||
|                             LOGGER.error("Failed to populate skull data in your road schematic - This is a Spigot limitation."); | ||||
|                         } | ||||
|                         return false; | ||||
|                     } | ||||
|                     final PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID()); | ||||
|                     profile.setProperty(new ProfileProperty("textures", textureValue)); | ||||
|                     skull.setPlayerProfile(profile); | ||||
|                     skull.update(true); | ||||
|                     return true; | ||||
|  | ||||
|                 } | ||||
|                 return false; | ||||
|             } | ||||
|             case "banner" -> { | ||||
|                 if (state instanceof Banner banner) { | ||||
|                     List<Tag> patterns = this.tag.getListTag("Patterns").getValue(); | ||||
|                     if (patterns == null || patterns.isEmpty()) { | ||||
|                         return false; | ||||
|                     } | ||||
|                     banner.setPatterns(patterns.stream().map(t -> (CompoundTag) t).map(compoundTag -> { | ||||
|                         DyeColor color = DyeColor.getByWoolData((byte) compoundTag.getInt("Color")); | ||||
|                         PatternType patternType = PatternType.getByIdentifier(compoundTag.getString("Pattern")); | ||||
|                         if (color == null || patternType == null) { | ||||
|                             return null; | ||||
|                         } | ||||
|                         return new Pattern(color, patternType); | ||||
|                     }).filter(Objects::nonNull).toList()); | ||||
|                     banner.update(true); | ||||
|                     return true; | ||||
|                 } | ||||
|                 return false; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import java.util.stream.Stream; | ||||
|  * MiniMessage changed the syntax between major releases. To warrant a smooth upgrade, we attempt to replace any occurrences | ||||
|  * while loading PlotSquared. | ||||
|  * | ||||
|  * @since TODO | ||||
|  * @since 7.0.0 | ||||
|  */ | ||||
| @NotPublic | ||||
| public class TranslationUpdateManager { | ||||
|   | ||||
| @@ -68,8 +68,8 @@ tasks { | ||||
|         val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString() | ||||
|         val opt = options as StandardJavadocDocletOptions | ||||
|         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString()) | ||||
|         opt.links("https://jd.advntr.dev/api/4.12.0/") | ||||
|         opt.links("https://jd.advntr.dev/text-minimessage/4.12.0/") | ||||
|         opt.links("https://jd.advntr.dev/api/4.14.0/") | ||||
|         opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/") | ||||
|         opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/") | ||||
|         opt.links("https://checkerframework.org/api/") | ||||
|         opt.links("https://javadoc.io/doc/com.intellectualsites.informative-annotations/informative-annotations/latest/") | ||||
|   | ||||
| @@ -296,10 +296,13 @@ public class Auto extends SubCommand { | ||||
|         } | ||||
|         if (this.econHandler != null && plotarea.useEconomy()) { | ||||
|             PlotExpression costExp = plotarea.getPrices().get("claim"); | ||||
|             PlotExpression mergeCostExp = plotarea.getPrices().get("merge"); | ||||
|             int size = sizeX * sizeZ; | ||||
|             double mergeCost = size > 1 && mergeCostExp == null ? 0d : mergeCostExp.evaluate(size); | ||||
|             double cost = costExp.evaluate(Settings.Limit.GLOBAL ? | ||||
|                     player.getPlotCount() : | ||||
|                     player.getPlotCount(plotarea.getWorldName())); | ||||
|             cost = (sizeX * sizeZ) * cost; | ||||
|             cost = size * cost + mergeCost; | ||||
|             if (cost > 0d) { | ||||
|                 if (!this.econHandler.isSupported()) { | ||||
|                     player.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null")); | ||||
|   | ||||
| @@ -103,7 +103,7 @@ public class Done extends SubCommand { | ||||
|                 public void run(PlotAnalysis value) { | ||||
|                     plot.removeRunning(); | ||||
|                     boolean result = | ||||
|                             value.getComplexity(doneRequirements) <= doneRequirements.THRESHOLD; | ||||
|                             value.getComplexity(doneRequirements) >= doneRequirements.THRESHOLD; | ||||
|                     finish(plot, player, result); | ||||
|                 } | ||||
|             }); | ||||
|   | ||||
| @@ -56,7 +56,7 @@ public class Music extends SubCommand { | ||||
|             .asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp", | ||||
|                     "music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal", | ||||
|                     "music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside", | ||||
|                     "music_disc_pigstep", "music_disc_5" | ||||
|                     "music_disc_pigstep", "music_disc_5", "music_disc_relic" | ||||
|             ); | ||||
|  | ||||
|     private final InventoryUtil inventoryUtil; | ||||
|   | ||||
| @@ -40,7 +40,7 @@ public interface Caption { | ||||
|      * | ||||
|      * @param localeHolder Locale holder | ||||
|      * @return {@link ComponentLike} | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     @NonNull Component toComponent(@NonNull LocaleHolder localeHolder); | ||||
|  | ||||
|   | ||||
| @@ -51,7 +51,7 @@ public class CaptionHolder { | ||||
|      * Get the {@link TagResolver}s to use when resolving tags in the {@link Caption}. | ||||
|      * | ||||
|      * @return The tag resolvers to use. | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public TagResolver[] getTagResolvers() { | ||||
|         return this.tagResolvers; | ||||
| @@ -61,7 +61,7 @@ public class CaptionHolder { | ||||
|      * Set the {@link TagResolver}s to use when resolving tags in the {@link Caption}. | ||||
|      * | ||||
|      * @param tagResolvers The tag resolvers to use. | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public void setTagResolvers(TagResolver... tagResolvers) { | ||||
|         this.tagResolvers = tagResolvers; | ||||
|   | ||||
| @@ -28,16 +28,20 @@ import com.plotsquared.core.plot.flag.implementations.PlotTitleFlag; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.event.ClickEvent; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import net.kyori.adventure.text.minimessage.ParsingException; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
|  | ||||
| import java.util.Set; | ||||
| import java.util.regex.Pattern; | ||||
|  | ||||
| import static com.plotsquared.core.configuration.caption.ComponentTransform.nested; | ||||
| import static com.plotsquared.core.configuration.caption.ComponentTransform.stripClicks; | ||||
|  | ||||
| public class CaptionUtility { | ||||
|  | ||||
|     private static final Pattern LEGACY_FORMATTING = Pattern.compile("§[a-gklmnor0-9]"); | ||||
|  | ||||
|     // flags which values are parsed by minimessage | ||||
|     private static final Set<Class<? extends PlotFlag<?, ?>>> MINI_MESSAGE_FLAGS = Set.of( | ||||
|             GreetingFlag.class, | ||||
| @@ -100,7 +104,14 @@ public class CaptionUtility { | ||||
|      */ | ||||
|     public static String stripClickEvents(final @NonNull String miniMessageString) { | ||||
|         // parse, transform and serialize again | ||||
|         Component component = MiniMessage.miniMessage().deserialize(miniMessageString); | ||||
|         Component component; | ||||
|         try { | ||||
|             component = MiniMessage.miniMessage().deserialize(miniMessageString); | ||||
|         } catch (ParsingException e) { | ||||
|             // if the String cannot be parsed, we try stripping legacy colors | ||||
|             String legacyStripped = LEGACY_FORMATTING.matcher(miniMessageString).replaceAll(""); | ||||
|             component = MiniMessage.miniMessage().deserialize(legacyStripped); | ||||
|         } | ||||
|         component = CLICK_STRIP_TRANSFORM.transform(component); | ||||
|         return MiniMessage.miniMessage().serialize(component); | ||||
|     } | ||||
|   | ||||
| @@ -19,6 +19,7 @@ | ||||
| package com.plotsquared.core.configuration.file; | ||||
|  | ||||
| import com.plotsquared.core.configuration.serialization.ConfigurationSerialization; | ||||
| import org.yaml.snakeyaml.LoaderOptions; | ||||
| import org.yaml.snakeyaml.constructor.SafeConstructor; | ||||
| import org.yaml.snakeyaml.error.YAMLException; | ||||
| import org.yaml.snakeyaml.nodes.Node; | ||||
| @@ -30,6 +31,7 @@ import java.util.Map; | ||||
| public class YamlConstructor extends SafeConstructor { | ||||
|  | ||||
|     YamlConstructor() { | ||||
|         super(new LoaderOptions()); | ||||
|         yamlConstructors.put(Tag.MAP, new ConstructCustomObject()); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -21,6 +21,7 @@ package com.plotsquared.core.configuration.file; | ||||
| import com.plotsquared.core.configuration.ConfigurationSection; | ||||
| import com.plotsquared.core.configuration.serialization.ConfigurationSerializable; | ||||
| import com.plotsquared.core.configuration.serialization.ConfigurationSerialization; | ||||
| import org.yaml.snakeyaml.DumperOptions; | ||||
| import org.yaml.snakeyaml.nodes.Node; | ||||
| import org.yaml.snakeyaml.representer.Representer; | ||||
|  | ||||
| @@ -30,6 +31,7 @@ import java.util.Map; | ||||
| class YamlRepresenter extends Representer { | ||||
|  | ||||
|     YamlRepresenter() { | ||||
|         super(new DumperOptions()); | ||||
|         this.multiRepresenters.put(ConfigurationSection.class, new RepresentConfigurationSection()); | ||||
|         this.multiRepresenters | ||||
|                 .put(ConfigurationSerializable.class, new RepresentConfigurationSerializable()); | ||||
|   | ||||
| @@ -379,10 +379,11 @@ public class ClassicPlotManager extends SquarePlotManager { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         int yStart = classicPlotWorld.getMinBuildHeight() + (classicPlotWorld.PLOT_BEDROCK ? 1 : 0); | ||||
|         if (!plot.isMerged(Direction.NORTH)) { | ||||
|             int z = bot.getZ(); | ||||
|             for (int x = bot.getX(); x < top.getX(); x++) { | ||||
|                 for (int y = classicPlotWorld.getMinBuildHeight(); y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                 for (int y = yStart; y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                     queue.setBlock(x, y, z, blocks); | ||||
|                 } | ||||
|             } | ||||
| @@ -390,7 +391,7 @@ public class ClassicPlotManager extends SquarePlotManager { | ||||
|         if (!plot.isMerged(Direction.WEST)) { | ||||
|             int x = bot.getX(); | ||||
|             for (int z = bot.getZ(); z < top.getZ(); z++) { | ||||
|                 for (int y = classicPlotWorld.getMinBuildHeight(); y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                 for (int y = yStart; y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                     queue.setBlock(x, y, z, blocks); | ||||
|                 } | ||||
|             } | ||||
| @@ -398,7 +399,7 @@ public class ClassicPlotManager extends SquarePlotManager { | ||||
|         if (!plot.isMerged(Direction.SOUTH)) { | ||||
|             int z = top.getZ(); | ||||
|             for (int x = bot.getX(); x < top.getX() + (plot.isMerged(Direction.EAST) ? 0 : 1); x++) { | ||||
|                 for (int y = classicPlotWorld.getMinBuildHeight(); y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                 for (int y = yStart; y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                     queue.setBlock(x, y, z, blocks); | ||||
|                 } | ||||
|             } | ||||
| @@ -406,7 +407,7 @@ public class ClassicPlotManager extends SquarePlotManager { | ||||
|         if (!plot.isMerged(Direction.EAST)) { | ||||
|             int x = top.getX(); | ||||
|             for (int z = bot.getZ(); z < top.getZ() + (plot.isMerged(Direction.SOUTH) ? 0 : 1); z++) { | ||||
|                 for (int y = classicPlotWorld.getMinBuildHeight(); y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                 for (int y = yStart; y <= classicPlotWorld.WALL_HEIGHT; y++) { | ||||
|                     queue.setBlock(x, y, z, blocks); | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -46,7 +46,7 @@ public abstract class IndependentPlotGenerator { | ||||
|      * @param result   Queue to write to | ||||
|      * @param settings PlotArea (settings) | ||||
|      * @param biomes   If biomes should be generated | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public abstract void generateChunk(ZeroedDelegateScopedQueueCoordinator result, PlotArea settings, boolean biomes); | ||||
|  | ||||
| @@ -55,7 +55,7 @@ public abstract class IndependentPlotGenerator { | ||||
|      * | ||||
|      * @param result  Queue to write to | ||||
|      * @param setting PlotArea (settings) | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public void populateChunk(ZeroedDelegateScopedQueueCoordinator result, PlotArea setting) { | ||||
|     } | ||||
| @@ -108,7 +108,7 @@ public abstract class IndependentPlotGenerator { | ||||
|      * @param y        World y position | ||||
|      * @param z        World z position | ||||
|      * @return Biome type to be generated | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public abstract BiomeType getBiome(PlotArea settings, int x, int y, int z); | ||||
|  | ||||
|   | ||||
| @@ -20,7 +20,6 @@ package com.plotsquared.core.plot; | ||||
|  | ||||
| import com.google.common.collect.ImmutableSet; | ||||
| import com.google.common.collect.Lists; | ||||
| import com.google.common.collect.Sets; | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.command.Like; | ||||
| @@ -2418,7 +2417,6 @@ public class Plot { | ||||
|         if (!this.isMerged()) { | ||||
|             Location pos1 = this.getBottomAbs().withY(getArea().getMinBuildHeight()); | ||||
|             Location pos2 = this.getTopAbs().withY(getArea().getMaxBuildHeight()); | ||||
|             this.connectedCache = Sets.newHashSet(this); | ||||
|             CuboidRegion rg = new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()); | ||||
|             return Collections.singleton(rg); | ||||
|         } | ||||
|   | ||||
| @@ -88,7 +88,7 @@ public abstract class PlotFlag<T, F extends PlotFlag<T, F>> { | ||||
|      * Gets the flag name as a Kyori {@link Component} | ||||
|      * | ||||
|      * @see #getFlagName(Class) | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public static <T, F extends PlotFlag<T, F>> Component getFlagNameComponent(Class<F> flagClass) { | ||||
|         return Component.text(getFlagName(flagClass)); | ||||
|   | ||||
| @@ -111,7 +111,7 @@ public interface PlotAreaManager { | ||||
|      * | ||||
|      * @param worldName Name of the world to add | ||||
|      * @return {@code true} if successful, {@code false} if world already existed | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     boolean addWorld(@NonNull String worldName); | ||||
|  | ||||
|   | ||||
| @@ -66,7 +66,7 @@ public abstract class QueueCoordinator { | ||||
|      * @param x chunk x coordinate | ||||
|      * @param z chunk z coordinate | ||||
|      * @return a new {@link ZeroedDelegateScopedQueueCoordinator} | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public ZeroedDelegateScopedQueueCoordinator getForChunk(int x, int z, int minY, int maxY) { | ||||
|         int bx = x << 4; | ||||
|   | ||||
| @@ -32,7 +32,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; | ||||
|  * zero in the x and z directions, i.e. starting from 0,0. An offset of the minimum point of the region will then be applied to | ||||
|  * x and z. | ||||
|  * | ||||
|  * @since TODO | ||||
|  * @since 7.0.0 | ||||
|  */ | ||||
| public class ZeroedDelegateScopedQueueCoordinator extends DelegateQueueCoordinator { | ||||
|  | ||||
| @@ -50,7 +50,7 @@ public class ZeroedDelegateScopedQueueCoordinator extends DelegateQueueCoordinat | ||||
|     /** | ||||
|      * Create a new ScopedQueueCoordinator instance that delegates to a given QueueCoordinator. Locations are inclusive. | ||||
|      * | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public ZeroedDelegateScopedQueueCoordinator(@Nullable QueueCoordinator parent, @NonNull Location min, @NonNull Location max) { | ||||
|         super(parent); | ||||
|   | ||||
| @@ -36,7 +36,7 @@ public abstract class ChunkManager { | ||||
|     private static final Map<BlockVector2, RunnableVal<ZeroedDelegateScopedQueueCoordinator>> addChunks = new ConcurrentHashMap<>(); | ||||
|  | ||||
|     /** | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public static void setChunkInPlotArea( | ||||
|             RunnableVal<ZeroedDelegateScopedQueueCoordinator> force, | ||||
| @@ -76,7 +76,7 @@ public abstract class ChunkManager { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public static boolean preProcessChunk(BlockVector2 loc, ZeroedDelegateScopedQueueCoordinator queue) { | ||||
|         final RunnableVal<ZeroedDelegateScopedQueueCoordinator> forceChunk = forceChunks.get(loc); | ||||
| @@ -89,7 +89,7 @@ public abstract class ChunkManager { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public static boolean postProcessChunk(BlockVector2 loc, ZeroedDelegateScopedQueueCoordinator queue) { | ||||
|         final RunnableVal<ZeroedDelegateScopedQueueCoordinator> addChunk = forceChunks.get(loc); | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import java.util.Collection; | ||||
| /** | ||||
|  * A utility class for modifying components. | ||||
|  * | ||||
|  * @since TODO | ||||
|  * @since 7.0.0 | ||||
|  */ | ||||
| public class ComponentHelper { | ||||
|  | ||||
| @@ -37,7 +37,7 @@ public class ComponentHelper { | ||||
|      * @param components The components to join | ||||
|      * @param delimiter  The delimiter to use between the components | ||||
|      * @return The joined components | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public static ComponentLike join(Collection<? extends ComponentLike> components, Component delimiter) { | ||||
|         return join(components.toArray(ComponentLike[]::new), delimiter); | ||||
| @@ -49,7 +49,7 @@ public class ComponentHelper { | ||||
|      * @param components The components to join | ||||
|      * @param delimiter  The delimiter to use between the components | ||||
|      * @return The joined components | ||||
|      * @since TODO | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     public static Component join(ComponentLike[] components, Component delimiter) { | ||||
|         TextComponent.Builder builder = Component.text(); | ||||
|   | ||||
| @@ -17,10 +17,10 @@ plugins { | ||||
|     eclipse | ||||
|     idea | ||||
|  | ||||
|     id("xyz.jpenilla.run-paper") version "2.0.1" | ||||
|     id("xyz.jpenilla.run-paper") version "2.1.0" | ||||
| } | ||||
|  | ||||
| group = "com.plotsquared" | ||||
| group = "com.intellectualsites.plotsquared" | ||||
| version = "7.0.0-SNAPSHOT" | ||||
|  | ||||
| if (!File("$rootDir/.git").exists()) { | ||||
| @@ -77,12 +77,12 @@ subprojects { | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|         implementation(platform("com.intellectualsites.bom:bom-newest:1.25")) | ||||
|         implementation(platform("com.intellectualsites.bom:bom-newest:1.29")) | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|         // Tests | ||||
|         testImplementation("org.junit.jupiter:junit-jupiter:5.9.2") | ||||
|         testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") | ||||
|     } | ||||
|  | ||||
|     plugins.withId("java") { | ||||
| @@ -210,7 +210,7 @@ subprojects { | ||||
| } | ||||
|  | ||||
| nexusPublishing { | ||||
|     repositories { | ||||
|     this.repositories { | ||||
|         sonatype { | ||||
|             nexusUrl.set(URI.create("https://s01.oss.sonatype.org/service/local/")) | ||||
|             snapshotRepositoryUrl.set(URI.create("https://s01.oss.sonatype.org/content/repositories/snapshots/")) | ||||
| @@ -222,12 +222,12 @@ tasks.getByName<Jar>("jar") { | ||||
|     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") | ||||
| 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") | ||||
| tasks { | ||||
|     supportedVersions.forEach { | ||||
|         register<RunServer>("runServer-$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()) | ||||
|             jvmArgs("-DPaper.IgnoreJavaVersion=true", "-Dcom.mojang.eula.agree=true") | ||||
|             group = "run paper" | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| [versions] | ||||
| # Platform expectations | ||||
| guice = "5.1.0" | ||||
| guice = "7.0.0" | ||||
| spotbugs = "4.7.3" | ||||
|  | ||||
| # Plugins | ||||
| worldedit = "7.2.14" | ||||
| placeholderapi = "2.11.3" | ||||
| luckperms = "5.4" | ||||
| essentialsx = "2.19.7" | ||||
| essentialsx = "2.20.0" | ||||
| mvdwapi = "3.1.1" | ||||
|  | ||||
| # Third party | ||||
| @@ -18,9 +18,9 @@ arkitektonika = "2.1.2" | ||||
| squirrelid = "0.3.2" | ||||
|  | ||||
| # Gradle plugins | ||||
| shadow = "7.1.2" | ||||
| shadow = "8.1.1" | ||||
| grgit = "4.1.1" | ||||
| spotless = "6.18.0" | ||||
| spotless = "6.19.0" | ||||
| nexus = "1.3.0" | ||||
|  | ||||
| [libraries] | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip | ||||
| networkTimeout=10000 | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
|   | ||||
							
								
								
									
										7
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							| @@ -85,9 +85,6 @@ done | ||||
| APP_BASE_NAME=${0##*/} | ||||
| APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit | ||||
|  | ||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||
|  | ||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | ||||
| MAX_FD=maximum | ||||
|  | ||||
| @@ -197,6 +194,10 @@ if "$cygwin" || "$msys" ; then | ||||
|     done | ||||
| fi | ||||
|  | ||||
|  | ||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||
|  | ||||
| # Collect all arguments for the java command; | ||||
| #   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of | ||||
| #     shell script including quotes and variable substitutions, so put them in | ||||
|   | ||||
| @@ -2,7 +2,7 @@ rootProject.name = "PlotSquared" | ||||
|  | ||||
| include("Core", "Bukkit") | ||||
|  | ||||
| project(":Core").name = "PlotSquared-Core" | ||||
| project(":Bukkit").name = "PlotSquared-Bukkit" | ||||
| project(":Core").name = "plotsquared-core" | ||||
| project(":Bukkit").name = "plotsquared-bukkit" | ||||
|  | ||||
| enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user