mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 01:23:44 +01:00 
			
		
		
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			fix/missin
			...
			fix/v6/374
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | c07ac43528 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 9609990832 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 0e4319b757 | ||
|   | c8f4907f77 | ||
|   | dcf98c2298 | ||
|   | ae59c7442f | ||
|   | 98708118d8 | ||
|   | 276d8f8e1e | 
| @@ -732,6 +732,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | ||||
|         this.getServer().getPluginManager().disablePlugin(this); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void shutdownServer() { | ||||
|         getServer().shutdown(); | ||||
|     } | ||||
|  | ||||
|     private void registerCommands() { | ||||
|         final BukkitCommand bukkitCommand = new BukkitCommand(); | ||||
|         final PluginCommand plotCommand = getCommand("plots"); | ||||
|   | ||||
| @@ -75,6 +75,11 @@ public interface PlotPlatform<P> extends LocaleHolder { | ||||
|      */ | ||||
|     void shutdown(); | ||||
|  | ||||
|     /** | ||||
|      * Completely shuts down the server. | ||||
|      */ | ||||
|     void shutdownServer(); | ||||
|  | ||||
|     /** | ||||
|      * Get the name of the plugin | ||||
|      * | ||||
|   | ||||
| @@ -197,6 +197,9 @@ public class PlotSquared { | ||||
|             this.loadCaptionMap(); | ||||
|         } catch (final Exception e) { | ||||
|             LOGGER.error("Failed to load caption map", e); | ||||
|             LOGGER.error("Shutting down server to prevent further issues"); | ||||
|             this.platform.shutdownServer(); | ||||
|             throw new RuntimeException("Abort loading PlotSquared"); | ||||
|         } | ||||
|  | ||||
|         // Setup the global flag container | ||||
| @@ -267,7 +270,7 @@ public class PlotSquared { | ||||
|             captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang")); | ||||
|         } else { | ||||
|             String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json"; | ||||
|             captionMap = this.captionLoader.loadSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName)); | ||||
|             captionMap = this.captionLoader.loadOrCreateSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName)); | ||||
|         } | ||||
|         this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap); | ||||
|         LOGGER.info( | ||||
|   | ||||
| @@ -115,8 +115,8 @@ public class Remove extends SubCommand { | ||||
|             } | ||||
|             if (count == 0) { | ||||
|                 player.sendMessage( | ||||
|                         TranslatableCaption.of("errors.invalid_player"), | ||||
|                         Template.of("value", args[0]) | ||||
|                         TranslatableCaption.of("member.player_not_removed"), | ||||
|                         Template.of("player", args[0]) | ||||
|                 ); | ||||
|             } else { | ||||
|                 player.sendMessage( | ||||
|   | ||||
| @@ -174,7 +174,7 @@ public final class CaptionLoader { | ||||
|     public @NonNull CaptionMap loadAll(final @NonNull Path directory) throws IOException { | ||||
|         final Map<Locale, CaptionMap> localeMaps = new HashMap<>(); | ||||
|         try (final Stream<Path> files = Files.list(directory)) { | ||||
|             final List<Path> captionFiles = files.filter(Files::isRegularFile).collect(Collectors.toList()); | ||||
|             final List<Path> captionFiles = files.filter(Files::isRegularFile).toList(); | ||||
|             for (Path file : captionFiles) { | ||||
|                 try { | ||||
|                     final CaptionMap localeMap = loadSingle(file); | ||||
| @@ -190,13 +190,14 @@ public final class CaptionLoader { | ||||
|  | ||||
|     /** | ||||
|      * Load a message file into a new CaptionMap. The file name must match | ||||
|      * the pattern {@code messages_<locale>.json} where {@code <locale>} | ||||
|      * is a valid {@link Locale} string. | ||||
|      * the pattern expected by the {@link #localeExtractor}. | ||||
|      * Note that this method does not attempt to create a new file. | ||||
|      * | ||||
|      * @param file The file to load | ||||
|      * @return A new CaptionMap containing the loaded messages | ||||
|      * @throws IOException              if the file couldn't be accessed or read successfully. | ||||
|      * @throws IllegalArgumentException if the file name doesn't match the specified format. | ||||
|      * @see #loadOrCreateSingle(Path) | ||||
|      */ | ||||
|     public @NonNull CaptionMap loadSingle(final @NonNull Path file) throws IOException { | ||||
|         final Locale locale = this.localeExtractor.apply(file); | ||||
| @@ -205,14 +206,42 @@ public final class CaptionLoader { | ||||
|             if (patch(map, locale)) { | ||||
|                 save(file, map); // update the file using the modified map | ||||
|             } | ||||
|             return new LocalizedCaptionMap(locale, map.entrySet().stream() | ||||
|                     .collect(Collectors.toMap( | ||||
|             return new LocalizedCaptionMap(locale, mapToCaptions(map)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Load a message file into a new CaptionMap. The file name must match | ||||
|      * the pattern expected by the {@link #localeExtractor}. | ||||
|      * If no file exists at the given path, this method will | ||||
|      * attempt to create one and fill it with default values. | ||||
|      * | ||||
|      * @param file The file to load | ||||
|      * @return A new CaptionMap containing the loaded messages | ||||
|      * @throws IOException              if the file couldn't be accessed or read successfully. | ||||
|      * @throws IllegalArgumentException if the file name doesn't match the specified format. | ||||
|      * @see #loadSingle(Path) | ||||
|      * @since 6.9.3 | ||||
|      */ | ||||
|     public @NonNull CaptionMap loadOrCreateSingle(final @NonNull Path file) throws IOException { | ||||
|         final Locale locale = this.localeExtractor.apply(file); | ||||
|         if (!Files.exists(file) ) { | ||||
|             Map<String, String> map = new LinkedHashMap<>(); | ||||
|             patch(map, locale); | ||||
|             save(file, map); | ||||
|             return new LocalizedCaptionMap(locale, mapToCaptions(map)); | ||||
|         } else { | ||||
|             return loadSingle(file); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private @NonNull Map<TranslatableCaption, String> mapToCaptions(Map<String, String> map) { | ||||
|         return map.entrySet().stream().collect( | ||||
|                 Collectors.toMap( | ||||
|                         entry -> TranslatableCaption.of(this.namespace, entry.getKey()), | ||||
|                         Map.Entry::getValue | ||||
|                             ) | ||||
|                 )); | ||||
|     } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Add missing entries to the given map. | ||||
|   | ||||
| @@ -30,9 +30,18 @@ import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  * The Permissions class handles checking user permissions.<br> | ||||
|  * - This will respect * nodes and plots.admin and can be used to check permission ranges (e.g. plots.plot.5)<br> | ||||
|  * - Checking the PlotPlayer class directly will not take the above into account<br> | ||||
|  * | ||||
|  * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|  * classes | ||||
|  */ | ||||
| @Deprecated(forRemoval = true, since = "6.9.3") | ||||
| public class Permissions { | ||||
|  | ||||
|     /** | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static boolean hasPermission(PlotPlayer<?> player, Permission permission, boolean notify) { | ||||
|         return hasPermission(player, permission.toString(), notify); | ||||
|     } | ||||
| @@ -43,18 +52,25 @@ public class Permissions { | ||||
|      * @param caller     permission holder | ||||
|      * @param permission Permission | ||||
|      * @return {@code true} if the owner has the given permission, else {@code false} | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static boolean hasPermission(final @NonNull PermissionHolder caller, final @NonNull Permission permission) { | ||||
|         return caller.hasPermission(permission.toString()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check if the owner of the profile has a given (global) permission | ||||
|      * Check if the owner of the profile has a given (global) permission. There is no guarantee that per-world permissions will | ||||
|      * be checked because unmaintained crap plugins like PEX exist. | ||||
|      * | ||||
|      * @param caller     permission holder | ||||
|      * @param permission Permission | ||||
|      * @return {@code true} if the owner has the given permission, else {@code false} | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static boolean hasPermission(final @NonNull PermissionHolder caller, final @NonNull String permission) { | ||||
|         return caller.hasPermission(permission); | ||||
|     } | ||||
| @@ -68,7 +84,10 @@ public class Permissions { | ||||
|      * @param key        Permission "key" | ||||
|      * @return {@code true} if the owner has the given permission, else {@code false} | ||||
|      * @since 6.0.10 | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static boolean hasKeyedPermission( | ||||
|             final @NonNull PermissionHolder caller, final @NonNull String permission, | ||||
|             final @NonNull String key | ||||
| @@ -83,7 +102,10 @@ public class Permissions { | ||||
|      * @param permission permission | ||||
|      * @param notify     if to notify the permission holder | ||||
|      * @return if permission is had | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static boolean hasPermission(PlotPlayer<?> player, String permission, boolean notify) { | ||||
|         if (!hasPermission(player, permission)) { | ||||
|             if (notify) { | ||||
| @@ -97,6 +119,11 @@ public class Permissions { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static int hasPermissionRange(PlotPlayer<?> player, Permission Permission, int range) { | ||||
|         return hasPermissionRange(player, Permission.toString(), range); | ||||
|     } | ||||
| @@ -110,7 +137,10 @@ public class Permissions { | ||||
|      * @param stub   The permission stub to check e.g. for `plots.plot.#` the stub is `plots.plot` | ||||
|      * @param range  The range to check | ||||
|      * @return The highest permission they have within that range | ||||
|      * @deprecated all logic that may once have been in the class lives elsewhere. We also want to do away with statically-accessed | ||||
|      * classes | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.9.3") | ||||
|     public static int hasPermissionRange(PlotPlayer<?> player, String stub, int range) { | ||||
|         return player.hasPermissionRange(stub, range); | ||||
|     } | ||||
|   | ||||
| @@ -164,7 +164,7 @@ public final class PlaceholderRegistry { | ||||
|                     PlayerManager.getPlayerList(plot.getDenied(), player)); | ||||
|         }); | ||||
|         this.createPlaceholder("currentplot_creationdate", (player, plot) -> { | ||||
|             if (plot.getTimestamp() == 0) { | ||||
|             if (plot.getTimestamp() == 0 || !plot.hasOwner()) { | ||||
|                 return legacyComponent(TranslatableCaption.of("info.unknown"), player); | ||||
|             } | ||||
|             long creationDate = plot.getTimestamp(); | ||||
|   | ||||
| @@ -414,6 +414,7 @@ | ||||
|   "kick.you_got_kicked": "<prefix><dark_aqua>You got kicked from the plot!</dark_aqua>", | ||||
|   "trusted.trusted_added": "<prefix><dark_aqua>You successfully trusted a user to the plot.</dark_aqua>", | ||||
|   "trusted.plot_removed_user": "<prefix><red>Plot <plot> of which you were added to has been deleted due to owner inactivity.</red>", | ||||
|   "member.player_not_removed": "<prefix><gray><player></gray><red> is neither added, trusted or denied on the plot, thus doesn't need to be removed.</red>", | ||||
|   "member.removed_players": "<prefix><gray>Removed <amount> player(s) from this plot.</gray>", | ||||
|   "member.plot_left": "<prefix><gray><player> left the plot.</gray>", | ||||
|   "member.plot_cant_leave_owner": "<prefix><red>You are the plot owner. You cannot leave this plot.</red>", | ||||
|   | ||||
| @@ -19,7 +19,7 @@ plugins { | ||||
| } | ||||
|  | ||||
| group = "com.plotsquared" | ||||
| version = "6.9.3-SNAPSHOT" | ||||
| version = "6.9.4-SNAPSHOT" | ||||
|  | ||||
| subprojects { | ||||
|     group = rootProject.group | ||||
| @@ -65,12 +65,12 @@ subprojects { | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.11")) | ||||
|         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.12")) | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|         // Tests | ||||
|         testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") | ||||
|         testImplementation("org.junit.jupiter:junit-jupiter:5.9.0") | ||||
|     } | ||||
|  | ||||
|     plugins.withId("java") { | ||||
|   | ||||
| @@ -1,9 +1,7 @@ | ||||
| { | ||||
|   "extends": [ | ||||
|     "config:base", | ||||
|     ":disableDependencyDashboard" | ||||
|     "config:base" | ||||
|   ], | ||||
|   "labels": ["Renovate"], | ||||
|   "commitMessagePrefix": "build: ", | ||||
|   "rebaseWhen": "conflicted" | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user