mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-25 23:53:44 +02:00 
			
		
		
		
	Compare commits
	
		
			19 Commits
		
	
	
		
			migrate-en
			...
			feature/co
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | a5c1f1a74b | ||
|   | 16a4ee835c | ||
|   | c013b92e62 | ||
|   | b00a46b286 | ||
|   | 44b1127181 | ||
|   | c7bfd48a21 | ||
|   | dc13783db8 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 0a390ab342 | ||
|   | d111740f64 | ||
|   | 28e97e8441 | ||
|   | a30cdb37d6 | ||
|   | f848162066 | ||
|   | 40c70aa98d | ||
|   | 0d2b36bac8 | ||
|   | d7e5bcdaa5 | ||
|   | fc783574a3 | ||
|   | 5f7bb784f0 | ||
|   | 26c55a318f | ||
|   | ee68bc3d9e | 
| @@ -89,6 +89,8 @@ tasks.named<ShadowJar>("shadowJar") { | ||||
|     relocate("net.jcip", "com.plotsquared.core.annotations.jcip") | ||||
|     relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs") | ||||
|     relocate("com.intellectualsites.annotations", "com.plotsquared.core.annotations.informative") | ||||
|     relocate("org.jdbi.v3", "com.plotsquared.core.jdbi") | ||||
|     relocate("com.zaxxer.hikari", "com.plotsquared.core.hikari") | ||||
|  | ||||
|     // Get rid of all the libs which are 100% unused. | ||||
|     minimize() | ||||
|   | ||||
| @@ -82,6 +82,8 @@ import com.plotsquared.core.inject.annotations.DefaultGenerator; | ||||
| import com.plotsquared.core.inject.annotations.ImpromptuPipeline; | ||||
| import com.plotsquared.core.inject.annotations.WorldConfig; | ||||
| import com.plotsquared.core.inject.annotations.WorldFile; | ||||
| import com.plotsquared.core.inject.modules.DatabaseModule; | ||||
| import com.plotsquared.core.inject.modules.JdbiModule; | ||||
| import com.plotsquared.core.inject.modules.PlotSquaredModule; | ||||
| import com.plotsquared.core.listener.PlotListener; | ||||
| import com.plotsquared.core.listener.WESubscriber; | ||||
| @@ -140,6 +142,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
| import org.incendo.serverlib.ServerLib; | ||||
|  | ||||
| import javax.xml.crypto.Data; | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.lang.reflect.Method; | ||||
| @@ -292,7 +295,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | ||||
|                         new WorldManagerModule(), | ||||
|                         new PlotSquaredModule(), | ||||
|                         new BukkitModule(this), | ||||
|                         new BackupModule() | ||||
|                         new BackupModule(), | ||||
|                         new JdbiModule(), | ||||
|                         new DatabaseModule() | ||||
|                 ); | ||||
|         this.injector.injectMembers(this); | ||||
|  | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import org.bukkit.entity.Ageable; | ||||
| import org.bukkit.entity.ArmorStand; | ||||
| import org.bukkit.entity.Bat; | ||||
| import org.bukkit.entity.Boat; | ||||
| import org.bukkit.entity.Breedable; | ||||
| import org.bukkit.entity.ChestedHorse; | ||||
| import org.bukkit.entity.EnderDragon; | ||||
| import org.bukkit.entity.Entity; | ||||
| @@ -165,7 +166,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|                 //this.horse.style = horse.getStyle(); | ||||
|                 //this.horse.color = horse.getColor(); | ||||
|                 storeTameable(horse); | ||||
|                 storeAgeable(horse); | ||||
|                 storeBreedable(horse); | ||||
|                 storeLiving(horse); | ||||
|                 storeInventory(horse); | ||||
|                 return; | ||||
| @@ -173,7 +174,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|             // END INVENTORY HOLDER // | ||||
|             case "WOLF", "OCELOT" -> { | ||||
|                 storeTameable((Tameable) entity); | ||||
|                 storeAgeable((Ageable) entity); | ||||
|                 storeBreedable((Breedable) entity); | ||||
|                 storeLiving((LivingEntity) entity); | ||||
|                 return; | ||||
|             } | ||||
| @@ -187,18 +188,18 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|                     this.dataByte = (byte) 0; | ||||
|                 } | ||||
|                 this.dataByte2 = sheep.getColor().getDyeData(); | ||||
|                 storeAgeable(sheep); | ||||
|                 storeBreedable(sheep); | ||||
|                 storeLiving(sheep); | ||||
|                 return; | ||||
|             } | ||||
|             case "VILLAGER", "CHICKEN", "COW", "MUSHROOM_COW", "PIG", "TURTLE", "POLAR_BEAR" -> { | ||||
|                 storeAgeable((Ageable) entity); | ||||
|                 storeBreedable((Breedable) entity); | ||||
|                 storeLiving((LivingEntity) entity); | ||||
|                 return; | ||||
|             } | ||||
|             case "RABBIT" -> { | ||||
|                 this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType()); | ||||
|                 storeAgeable((Ageable) entity); | ||||
|                 storeBreedable((Breedable) entity); | ||||
|                 storeLiving((LivingEntity) entity); | ||||
|                 return; | ||||
|             } | ||||
| @@ -382,6 +383,11 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated Use {@link #restoreBreedable(Breedable)} instead | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "7.1.0") | ||||
|     private void restoreAgeable(Ageable entity) { | ||||
|         if (!this.aged.adult) { | ||||
|             entity.setBaby(); | ||||
| @@ -392,6 +398,11 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated Use {@link #storeBreedable(Breedable)} instead | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "7.1.0") | ||||
|     public void storeAgeable(Ageable aged) { | ||||
|         this.aged = new AgeableStats(); | ||||
|         this.aged.age = aged.getAge(); | ||||
| @@ -399,6 +410,29 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|         this.aged.adult = aged.isAdult(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     private void restoreBreedable(Breedable entity) { | ||||
|         if (!this.aged.adult) { | ||||
|             entity.setBaby(); | ||||
|         } | ||||
|         entity.setAgeLock(this.aged.locked); | ||||
|         if (this.aged.age > 0) { | ||||
|             entity.setAge(this.aged.age); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     private void storeBreedable(Breedable breedable) { | ||||
|         this.aged = new AgeableStats(); | ||||
|         this.aged.age = breedable.getAge(); | ||||
|         this.aged.locked = breedable.getAgeLock(); | ||||
|         this.aged.adult = breedable.isAdult(); | ||||
|     } | ||||
|  | ||||
|     public void storeTameable(Tameable tamed) { | ||||
|         this.tamed = new TameableStats(); | ||||
|         this.tamed.owner = tamed.getOwner(); | ||||
| @@ -502,7 +536,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|                 //horse.setStyle(this.horse.style); | ||||
|                 //horse.setColor(this.horse.color); | ||||
|                 restoreTameable(horse); | ||||
|                 restoreAgeable(horse); | ||||
|                 restoreBreedable(horse); | ||||
|                 restoreLiving(horse); | ||||
|                 restoreInventory(horse); | ||||
|                 return entity; | ||||
| @@ -510,7 +544,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|             // END INVENTORY HOLDER // | ||||
|             case "WOLF", "OCELOT" -> { | ||||
|                 restoreTameable((Tameable) entity); | ||||
|                 restoreAgeable((Ageable) entity); | ||||
|                 restoreBreedable((Breedable) entity); | ||||
|                 restoreLiving((LivingEntity) entity); | ||||
|                 return entity; | ||||
|             } | ||||
| @@ -523,12 +557,12 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|                 if (this.dataByte2 != 0) { | ||||
|                     sheep.setColor(DyeColor.getByDyeData(this.dataByte2)); | ||||
|                 } | ||||
|                 restoreAgeable(sheep); | ||||
|                 restoreBreedable(sheep); | ||||
|                 restoreLiving(sheep); | ||||
|                 return sheep; | ||||
|             } | ||||
|             case "VILLAGER", "CHICKEN", "COW", "TURTLE", "POLAR_BEAR", "MUSHROOM_COW", "PIG" -> { | ||||
|                 restoreAgeable((Ageable) entity); | ||||
|                 restoreBreedable((Breedable) entity); | ||||
|                 restoreLiving((LivingEntity) entity); | ||||
|                 return entity; | ||||
|             } | ||||
| @@ -537,7 +571,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | ||||
|                 if (this.dataByte != 0) { | ||||
|                     ((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]); | ||||
|                 } | ||||
|                 restoreAgeable((Ageable) entity); | ||||
|                 restoreBreedable((Breedable) entity); | ||||
|                 restoreLiving((LivingEntity) entity); | ||||
|                 return entity; | ||||
|             } | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.flag.implementations.BlockBurnFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.BreakFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.ConcreteHardenFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.CoralDryFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.CropGrowFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag; | ||||
| @@ -586,6 +587,12 @@ public class BlockEventListener implements Listener { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|         } | ||||
|         if (event.getNewState().getType().toString().endsWith("CONCRETE")) { | ||||
|             if (!plot.getFlag(ConcreteHardenFlag.class)) { | ||||
|                 plot.debug("Concrete powder could not harden because concrete-harden = false"); | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) | ||||
|   | ||||
| @@ -37,6 +37,11 @@ dependencies { | ||||
|     // Logging | ||||
|     compileOnlyApi(libs.log4j) | ||||
|  | ||||
|     // Database | ||||
|     api(libs.hikaricp) | ||||
|     api(libs.jdbiCore) | ||||
|     api(libs.jdbiGuice) | ||||
|  | ||||
|     // Other libraries | ||||
|     api(libs.prtree) | ||||
|     api(libs.aopalliance) | ||||
| @@ -72,7 +77,6 @@ tasks { | ||||
|         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/") | ||||
|         opt.isLinkSource = true | ||||
|         opt.bottom(File("$rootDir/javadocfooter.html").readText()) | ||||
|         opt.isUse = true | ||||
|   | ||||
| @@ -18,6 +18,7 @@ | ||||
|  */ | ||||
| package com.plotsquared.core; | ||||
|  | ||||
| import com.google.inject.Key; | ||||
| import com.plotsquared.core.configuration.ConfigurationSection; | ||||
| import com.plotsquared.core.configuration.ConfigurationUtil; | ||||
| import com.plotsquared.core.configuration.MemorySection; | ||||
| @@ -31,14 +32,12 @@ import com.plotsquared.core.configuration.caption.load.DefaultCaptionProvider; | ||||
| import com.plotsquared.core.configuration.file.YamlConfiguration; | ||||
| import com.plotsquared.core.configuration.serialization.ConfigurationSerialization; | ||||
| import com.plotsquared.core.database.DBFunc; | ||||
| import com.plotsquared.core.database.Database; | ||||
| import com.plotsquared.core.database.MySQL; | ||||
| import com.plotsquared.core.database.SQLManager; | ||||
| import com.plotsquared.core.database.SQLite; | ||||
| import com.plotsquared.core.generator.GeneratorWrapper; | ||||
| import com.plotsquared.core.generator.HybridPlotWorld; | ||||
| import com.plotsquared.core.generator.HybridUtils; | ||||
| import com.plotsquared.core.generator.IndependentPlotGenerator; | ||||
| import com.plotsquared.core.inject.annotations.PlotDatabase; | ||||
| import com.plotsquared.core.inject.factory.HybridPlotWorldFactory; | ||||
| import com.plotsquared.core.listener.PlotListener; | ||||
| import com.plotsquared.core.location.Location; | ||||
| @@ -75,7 +74,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
|  | ||||
| import javax.sql.DataSource; | ||||
| import java.io.BufferedReader; | ||||
| import java.io.Closeable; | ||||
| import java.io.File; | ||||
| import java.io.FileInputStream; | ||||
| import java.io.FileOutputStream; | ||||
| @@ -1236,8 +1237,11 @@ public class PlotSquared { | ||||
|             DBFunc.validatePlots(plots); | ||||
|  | ||||
|             // Close the connection | ||||
|             DBFunc.close(); | ||||
|         } catch (NullPointerException throwable) { | ||||
|             final DataSource dataSource = platform().injector().getInstance(Key.get(DataSource.class, PlotDatabase.class)); | ||||
|             if (dataSource instanceof Closeable closeable) { | ||||
|                 closeable.close(); | ||||
|             } | ||||
|         } catch (IOException | NullPointerException throwable) { | ||||
|             LOGGER.error("Could not close database connection", throwable); | ||||
|             throwable.printStackTrace(); | ||||
|         } | ||||
| @@ -1289,26 +1293,7 @@ public class PlotSquared { | ||||
|             if (DBFunc.dbManager != null) { | ||||
|                 DBFunc.dbManager.close(); | ||||
|             } | ||||
|             Database database; | ||||
|             if (Storage.MySQL.USE) { | ||||
|                 database = new MySQL(Storage.MySQL.HOST, Storage.MySQL.PORT, Storage.MySQL.DATABASE, | ||||
|                         Storage.MySQL.USER, Storage.MySQL.PASSWORD | ||||
|                 ); | ||||
|             } else if (Storage.SQLite.USE) { | ||||
|                 File file = FileUtils.getFile(platform.getDirectory(), Storage.SQLite.DB + ".db"); | ||||
|                 database = new SQLite(file); | ||||
|             } else { | ||||
|                 LOGGER.error("No storage type is set. Disabling PlotSquared"); | ||||
|                 this.platform.shutdown(); //shutdown used instead of disable because no database is set | ||||
|                 return; | ||||
|             } | ||||
|             DBFunc.dbManager = new SQLManager( | ||||
|                     database, | ||||
|                     Storage.PREFIX, | ||||
|                     this.eventDispatcher, | ||||
|                     this.plotListener, | ||||
|                     this.worldConfiguration | ||||
|             ); | ||||
|             DBFunc.dbManager = platform().injector().getInstance(SQLManager.class); | ||||
|             this.plots_tmp = DBFunc.getPlots(); | ||||
|             if (getPlotAreaManager() instanceof SinglePlotAreaManager) { | ||||
|                 SinglePlotArea area = ((SinglePlotAreaManager) getPlotAreaManager()).getArea(); | ||||
| @@ -1322,13 +1307,13 @@ public class PlotSquared { | ||||
|             } | ||||
|             this.clustersTmp = DBFunc.getClusters(); | ||||
|             LOGGER.info("Connection to database established. Type: {}", Storage.MySQL.USE ? "MySQL" : "SQLite"); | ||||
|         } catch (ClassNotFoundException | SQLException e) { | ||||
|         } catch (Exception e) { | ||||
|             LOGGER.error( | ||||
|                     "Failed to open database connection ({}). Disabling PlotSquared", | ||||
|                     Storage.MySQL.USE ? "MySQL" : "SQLite" | ||||
|             ); | ||||
|             LOGGER.error("==== Here is an ugly stacktrace, if you are interested in those things ==="); | ||||
|             e.printStackTrace(); | ||||
|             LOGGER.error("", e); | ||||
|             LOGGER.error("==== End of stacktrace ===="); | ||||
|             LOGGER.error( | ||||
|                     "Please go to the {} 'storage.yml' and configure the database correctly", | ||||
|   | ||||
| @@ -19,6 +19,7 @@ | ||||
| package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.database.DBFunc; | ||||
| @@ -101,9 +102,14 @@ public class Add extends Command { | ||||
|                                 Permission.PERMISSION_ADMIN_COMMAND_TRUST))) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("errors.invalid_player"), | ||||
|                                     TagResolver.resolver("value", Tag.inserting( | ||||
|                                             PlayerManager.resolveName(uuid).toComponent(player) | ||||
|                                     )) | ||||
|                                     PlotSquared | ||||
|                                             .platform() | ||||
|                                             .playerManager() | ||||
|                                             .getUsernameCaption(uuid) | ||||
|                                             .thenApply(caption -> TagResolver.resolver( | ||||
|                                                     "value", | ||||
|                                                     Tag.inserting(caption.toComponent(player)) | ||||
|                                             )) | ||||
|                             ); | ||||
|                             iterator.remove(); | ||||
|                             continue; | ||||
| @@ -111,9 +117,11 @@ public class Add extends Command { | ||||
|                         if (plot.isOwner(uuid)) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("member.already_added"), | ||||
|                                     TagResolver.resolver("player", Tag.inserting( | ||||
|                                             PlayerManager.resolveName(uuid).toComponent(player) | ||||
|                                     )) | ||||
|                                     PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                             .thenApply(caption -> TagResolver.resolver( | ||||
|                                                     "player", | ||||
|                                                     Tag.inserting(caption.toComponent(player)) | ||||
|                                             )) | ||||
|                             ); | ||||
|                             iterator.remove(); | ||||
|                             continue; | ||||
| @@ -121,9 +129,11 @@ public class Add extends Command { | ||||
|                         if (plot.getMembers().contains(uuid)) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("member.already_added"), | ||||
|                                     TagResolver.resolver("player", Tag.inserting( | ||||
|                                             PlayerManager.resolveName(uuid).toComponent(player) | ||||
|                                     )) | ||||
|                                     PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                             .thenApply(caption -> TagResolver.resolver( | ||||
|                                                     "player", | ||||
|                                                     Tag.inserting(caption.toComponent(player)) | ||||
|                                             )) | ||||
|                             ); | ||||
|                             iterator.remove(); | ||||
|                             continue; | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import com.plotsquared.core.player.PlotPlayer; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| /** | ||||
|  * CommandCategory. | ||||
| @@ -82,7 +83,7 @@ public enum CommandCategory implements Caption { | ||||
|     // TODO this method shouldn't be invoked | ||||
|     @Deprecated | ||||
|     @Override | ||||
|     public String toString() { | ||||
|     public @NotNull String toString() { | ||||
|         return this.caption.getComponent(LocaleHolder.console()); | ||||
|     } | ||||
|  | ||||
| @@ -108,4 +109,5 @@ public enum CommandCategory implements Caption { | ||||
|         return !MainCommand.getInstance().getCommands(this, player).isEmpty(); | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -29,7 +29,6 @@ import com.plotsquared.core.util.WorldUtil; | ||||
| import com.plotsquared.core.util.entity.EntityCategories; | ||||
| import com.plotsquared.core.util.entity.EntityCategory; | ||||
| import com.plotsquared.core.util.query.PlotQuery; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.uuid.UUIDMapping; | ||||
| import com.sk89q.worldedit.world.entity.EntityType; | ||||
| import net.kyori.adventure.text.Component; | ||||
| @@ -71,7 +70,7 @@ public class Debug extends SubCommand { | ||||
|                     TranslatableCaption.of("commandconfig.command_syntax"), | ||||
|                     TagResolver.resolver( | ||||
|                             "value", | ||||
|                             Tag.inserting(Component.text("/plot debug <loadedchunks | player | debug-players | entitytypes | msg>")) | ||||
|                             Tag.inserting(Component.text("/plot debug <player | debug-players | entitytypes | msg>")) | ||||
|                     ) | ||||
|             ); | ||||
|         } | ||||
| @@ -85,16 +84,6 @@ public class Debug extends SubCommand { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         if (args.length > 0 && "loadedchunks".equalsIgnoreCase(args[0])) { | ||||
|             final long start = System.currentTimeMillis(); | ||||
|             player.sendMessage(TranslatableCaption.of("debug.fetching_loaded_chunks")); | ||||
|             TaskManager.runTaskAsync(() -> player.sendMessage(StaticCaption | ||||
|                     .of("Loaded chunks: " + this.worldUtil | ||||
|                             .getChunkChunks(player.getLocation().getWorldName()) | ||||
|                             .size() + " (" + (System.currentTimeMillis() | ||||
|                             - start) + "ms) using thread: " + Thread.currentThread().getName()))); | ||||
|             return true; | ||||
|         } | ||||
|         if (args.length > 0 && "uuids".equalsIgnoreCase(args[0])) { | ||||
|             final Collection<UUIDMapping> mappings = PlotSquared.get().getImpromptuUUIDPipeline().getAllImmediately(); | ||||
|             player.sendMessage( | ||||
| @@ -196,7 +185,7 @@ public class Debug extends SubCommand { | ||||
|  | ||||
|     @Override | ||||
|     public Collection<Command> tab(final PlotPlayer<?> player, String[] args, boolean space) { | ||||
|         return Stream.of("loadedchunks", "debug-players", "entitytypes") | ||||
|         return Stream.of("debug-players", "entitytypes") | ||||
|                 .filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH))) | ||||
|                 .map(value -> new Command(null, false, value, "plots.admin", RequiredType.NONE, null) { | ||||
|                 }).collect(Collectors.toList()); | ||||
|   | ||||
| @@ -117,10 +117,11 @@ public class Deny extends SubCommand { | ||||
|                     } else if (plot.getDenied().contains(uuid)) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("member.already_added"), | ||||
|                                 TagResolver.resolver( | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "player", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         return; | ||||
|                     } else { | ||||
|   | ||||
| @@ -517,6 +517,7 @@ public class ListCmd extends SubCommand { | ||||
|                     } | ||||
|                 } | ||||
|                 finalResolver.tag("players", Tag.inserting(builder.asComponent())); | ||||
|                 finalResolver.tag("size", Tag.inserting(Component.text(plot.getConnectedPlots().size()))); | ||||
|                 caption.set(TranslatableCaption.of("info.plot_list_item")); | ||||
|                 caption.setTagResolvers(finalResolver.build()); | ||||
|             } | ||||
|   | ||||
| @@ -31,7 +31,6 @@ import com.plotsquared.core.player.PlayerMetaDataKeys; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.PlayerManager; | ||||
| import com.plotsquared.core.util.TabCompletions; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import net.kyori.adventure.text.Component; | ||||
| @@ -136,10 +135,11 @@ public class Owner extends SetCommand { | ||||
|             if (plot.isOwner(uuid)) { | ||||
|                 player.sendMessage( | ||||
|                         TranslatableCaption.of("member.already_owner"), | ||||
|                         TagResolver.resolver( | ||||
|                         PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                 .thenApply(caption -> TagResolver.resolver( | ||||
|                                 "player", | ||||
|                                 Tag.inserting(PlayerManager.resolveName(uuid, false).toComponent(player)) | ||||
|                         ) | ||||
|                                 Tag.inserting(caption.toComponent(player)) | ||||
|                         )) | ||||
|                 ); | ||||
|                 return; | ||||
|             } | ||||
| @@ -147,10 +147,11 @@ public class Owner extends SetCommand { | ||||
|                 if (other == null) { | ||||
|                     player.sendMessage( | ||||
|                             TranslatableCaption.of("errors.invalid_player_offline"), | ||||
|                             TagResolver.resolver( | ||||
|                             PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                     .thenApply(caption -> TagResolver.resolver( | ||||
|                                     "player", | ||||
|                                     Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                             ) | ||||
|                                     Tag.inserting(caption.toComponent(player)) | ||||
|                             )) | ||||
|                     ); | ||||
|                     return; | ||||
|                 } | ||||
|   | ||||
| @@ -19,6 +19,7 @@ | ||||
| package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.database.DBFunc; | ||||
| @@ -103,10 +104,11 @@ public class Trust extends Command { | ||||
|                             player.hasPermission(Permission.PERMISSION_TRUST_EVERYONE) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST))) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("errors.invalid_player"), | ||||
|                                 TagResolver.resolver( | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "value", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         iterator.remove(); | ||||
|                         continue; | ||||
| @@ -114,10 +116,11 @@ public class Trust extends Command { | ||||
|                     if (currentPlot.isOwner(uuid)) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("member.already_added"), | ||||
|                                 TagResolver.resolver( | ||||
|                                         "value", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "player", | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         iterator.remove(); | ||||
|                         continue; | ||||
| @@ -125,10 +128,11 @@ public class Trust extends Command { | ||||
|                     if (currentPlot.getTrusted().contains(uuid)) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("member.already_added"), | ||||
|                                 TagResolver.resolver( | ||||
|                                         "value", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "player", | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         iterator.remove(); | ||||
|                         continue; | ||||
|   | ||||
| @@ -44,4 +44,6 @@ public interface Caption { | ||||
|      */ | ||||
|     @NonNull Component toComponent(@NonNull LocaleHolder localeHolder); | ||||
|  | ||||
|     @NonNull String toString(); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -51,4 +51,9 @@ public final class StaticCaption implements Caption { | ||||
|         return MiniMessage.miniMessage().deserialize(this.value); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public @NonNull String toString() { | ||||
|         return "StaticCaption(" + value + ")"; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.Locale; | ||||
| import java.util.regex.Pattern; | ||||
| @@ -132,4 +133,9 @@ public final class TranslatableCaption implements NamespacedCaption { | ||||
|         return Objects.hashCode(this.getNamespace(), this.getKey()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public @NotNull String toString() { | ||||
|         return "TranslatableCaption(" + getNamespace() + ":" + getKey() + ")"; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -29,6 +29,7 @@ import java.sql.Statement; | ||||
|  * @author -_Husky_- | ||||
|  * @author tips48 | ||||
|  */ | ||||
| @Deprecated(forRemoval = true) | ||||
| public abstract class Database { | ||||
|  | ||||
|     public abstract Connection forceConnection() throws SQLException, ClassNotFoundException; | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import java.sql.Statement; | ||||
|  * @author -_Husky_- | ||||
|  * @author tips48 | ||||
|  */ | ||||
| @Deprecated(forRemoval = true) | ||||
| public class MySQL extends Database { | ||||
|  | ||||
|     private final String user; | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -33,6 +33,7 @@ import java.sql.Statement; | ||||
| /** | ||||
|  * Connects to and uses a SQLite database. | ||||
|  */ | ||||
| @Deprecated(forRemoval = true) | ||||
| public class SQLite extends Database { | ||||
|  | ||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + SQLite.class.getSimpleName()); | ||||
|   | ||||
| @@ -0,0 +1,12 @@ | ||||
| package com.plotsquared.core.inject.annotations; | ||||
|  | ||||
| import java.lang.annotation.ElementType; | ||||
| import java.lang.annotation.Retention; | ||||
| import java.lang.annotation.RetentionPolicy; | ||||
| import java.lang.annotation.Target; | ||||
|  | ||||
| @Target({ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER}) | ||||
| @Retention(RetentionPolicy.RUNTIME) | ||||
| public @interface PlotDatabase { | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,72 @@ | ||||
| package com.plotsquared.core.inject.modules; | ||||
|  | ||||
| import com.google.inject.AbstractModule; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Storage; | ||||
| import com.plotsquared.core.inject.annotations.PlotDatabase; | ||||
| import com.plotsquared.core.util.FileUtils; | ||||
| import com.plotsquared.core.util.StringMan; | ||||
| import com.zaxxer.hikari.HikariConfig; | ||||
| import com.zaxxer.hikari.HikariDataSource; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
|  | ||||
| import javax.sql.DataSource; | ||||
| import java.io.File; | ||||
|  | ||||
| public class DatabaseModule extends AbstractModule { | ||||
|  | ||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + PlotSquared.class.getSimpleName()); | ||||
|  | ||||
|     @Override | ||||
|     protected void configure() { | ||||
|         try { | ||||
|             if (Storage.MySQL.USE) { | ||||
|                 this.configureMySQL(); | ||||
|             } else if (Storage.SQLite.USE) { | ||||
|                 this.configureSQLite(); | ||||
|             } else { | ||||
|                 LOGGER.error("No storage type is set. Disabling PlotSquared"); | ||||
|                 PlotSquared.platform().shutdown(); | ||||
|             } | ||||
|         } catch (final Exception e) { | ||||
|             LOGGER.error("Unable to initialize database", e); | ||||
|             PlotSquared.platform().shutdown(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void configureSQLite() throws Exception { | ||||
|         final File file = FileUtils.getFile(PlotSquared.platform().getDirectory(), Storage.SQLite.DB + ".db"); | ||||
|         if (!file.exists()) { | ||||
|             file.createNewFile(); | ||||
|         } | ||||
|         Class.forName("org.sqlite.JDBC"); | ||||
|  | ||||
|         final HikariConfig config = new HikariConfig(); | ||||
|         config.setJdbcUrl("jdbc:sqlite:" + file); | ||||
|         config.setDriverClassName("org.sqlite.JDBC"); | ||||
|         final DataSource dataSource = new HikariDataSource(); | ||||
|  | ||||
|         binder().bind(DataSource.class).annotatedWith(PlotDatabase.class).toInstance(dataSource); | ||||
|     } | ||||
|  | ||||
|     private void configureMySQL() { | ||||
|         final HikariConfig hikariConfig = new HikariConfig(); | ||||
|         hikariConfig.setJdbcUrl( | ||||
|                 String.format( | ||||
|                         "jdbc:mysql://%s:%s/%s?%s", | ||||
|                         Storage.MySQL.HOST, | ||||
|                         Storage.MySQL.PORT, | ||||
|                         Storage.MySQL.DATABASE, | ||||
|                         StringMan.join(Storage.MySQL.PROPERTIES, "&") | ||||
|                 )); | ||||
|         hikariConfig.setUsername(Storage.MySQL.USER); | ||||
|         hikariConfig.setPassword(Storage.MySQL.PASSWORD); | ||||
|         hikariConfig.addDataSourceProperty("cachePrepStmts", "true"); | ||||
|         hikariConfig.addDataSourceProperty("prepStmtCacheSize", "512"); | ||||
|         hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); | ||||
|         final DataSource dataSource = new HikariDataSource(hikariConfig); | ||||
|  | ||||
|         binder().bind(DataSource.class).annotatedWith(PlotDatabase.class).toInstance(dataSource); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package com.plotsquared.core.inject.modules; | ||||
|  | ||||
| import com.plotsquared.core.inject.annotations.PlotDatabase; | ||||
| import org.jdbi.v3.guice.AbstractJdbiDefinitionModule; | ||||
|  | ||||
| public class JdbiModule extends AbstractJdbiDefinitionModule { | ||||
|  | ||||
|     public JdbiModule() { | ||||
|         super(PlotDatabase.class); | ||||
|     } | ||||
|     @Override | ||||
|     public void configureJdbi() { | ||||
|  | ||||
|     } | ||||
| } | ||||
| @@ -55,7 +55,6 @@ import com.plotsquared.core.plot.flag.implementations.TitlesFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.WeatherFlag; | ||||
| import com.plotsquared.core.plot.flag.types.TimedFlag; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.PlayerManager; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.world.gamemode.GameMode; | ||||
| @@ -63,7 +62,6 @@ import com.sk89q.worldedit.world.gamemode.GameModes; | ||||
| import com.sk89q.worldedit.world.item.ItemType; | ||||
| import com.sk89q.worldedit.world.item.ItemTypes; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.ComponentLike; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| @@ -77,6 +75,7 @@ import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Optional; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
|  | ||||
| public class PlotListener { | ||||
|  | ||||
| @@ -321,22 +320,27 @@ public class PlotListener { | ||||
|                         } | ||||
|                         if ((lastPlot != null) && plot.getId().equals(lastPlot.getId()) && plot.hasOwner()) { | ||||
|                             final UUID plotOwner = plot.getOwnerAbs(); | ||||
|                             ComponentLike owner = PlayerManager.resolveName(plotOwner, true).toComponent(player); | ||||
|                             Caption header = fromFlag ? StaticCaption.of(title) : TranslatableCaption.of("titles" + | ||||
|                                     ".title_entered_plot"); | ||||
|                             Caption subHeader = fromFlag ? StaticCaption.of(subtitle) : TranslatableCaption.of("titles" + | ||||
|                                     ".title_entered_plot_sub"); | ||||
|                             TagResolver resolver = TagResolver.builder() | ||||
|                                     .tag("plot", Tag.inserting(Component.text(lastPlot.getId().toString()))) | ||||
|                                     .tag("world", Tag.inserting(Component.text(player.getLocation().getWorldName()))) | ||||
|                                     .tag("owner", Tag.inserting(owner)) | ||||
|                                     .tag("alias", Tag.inserting(Component.text(plot.getAlias()))) | ||||
|                                     .build(); | ||||
|                             if (Settings.Titles.TITLES_AS_ACTIONBAR) { | ||||
|                                 player.sendActionBar(header, resolver); | ||||
|                             } else { | ||||
|                                 player.sendTitle(header, subHeader, resolver); | ||||
|                             } | ||||
|  | ||||
|                             CompletableFuture<TagResolver> future = PlotSquared.platform().playerManager() | ||||
|                                     .getUsernameCaption(plotOwner).thenApply(caption -> TagResolver.builder() | ||||
|                                             .tag("owner", Tag.inserting(caption.toComponent(player))) | ||||
|                                             .tag("plot", Tag.inserting(Component.text(lastPlot.getId().toString()))) | ||||
|                                             .tag("world", Tag.inserting(Component.text(player.getLocation().getWorldName()))) | ||||
|                                             .tag("alias", Tag.inserting(Component.text(plot.getAlias()))) | ||||
|                                             .build() | ||||
|                                     ); | ||||
|  | ||||
|                             future.whenComplete((tagResolver, throwable) -> { | ||||
|                                 if (Settings.Titles.TITLES_AS_ACTIONBAR) { | ||||
|                                     player.sendActionBar(header, tagResolver); | ||||
|                                 } else { | ||||
|                                     player.sendTitle(header, subHeader, tagResolver); | ||||
|                                 } | ||||
|                             }); | ||||
|                         } | ||||
|                     }, TaskTime.seconds(1L)); | ||||
|                 } | ||||
|   | ||||
| @@ -80,6 +80,7 @@ import java.util.Map; | ||||
| import java.util.Queue; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.concurrent.ConcurrentHashMap; | ||||
| import java.util.concurrent.atomic.AtomicInteger; | ||||
|  | ||||
| @@ -881,7 +882,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|         final Component titleComponent = MiniMessage.miniMessage().deserialize(title.getComponent(this), replacements); | ||||
|         final Component subtitleComponent = | ||||
|                 MiniMessage.miniMessage().deserialize(subtitle.getComponent(this), replacements); | ||||
|         final Title.Times times = Title.Times.of( | ||||
|         final Title.Times times = Title.Times.times( | ||||
|                 Duration.of(Settings.Titles.TITLES_FADE_IN * 50L, ChronoUnit.MILLIS), | ||||
|                 Duration.of(Settings.Titles.TITLES_STAY * 50L, ChronoUnit.MILLIS), | ||||
|                 Duration.of(Settings.Titles.TITLES_FADE_OUT * 50L, ChronoUnit.MILLIS) | ||||
| @@ -953,6 +954,54 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sends a message to the command caller, when the future is resolved | ||||
|      * | ||||
|      * @param caption          Caption to send | ||||
|      * @param asyncReplacement Async variable replacement | ||||
|      * @return A Future to be resolved, after the message was sent | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     public final CompletableFuture<Void> sendMessage( | ||||
|             @NonNull Caption caption, | ||||
|             CompletableFuture<@NonNull TagResolver> asyncReplacement | ||||
|     ) { | ||||
|         return sendMessage(caption, new CompletableFuture[]{asyncReplacement}); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sends a message to the command caller, when all futures are resolved | ||||
|      * | ||||
|      * @param caption           Caption to send | ||||
|      * @param asyncReplacements Async variable replacements | ||||
|      * @param replacements      Sync variable replacements | ||||
|      * @return A Future to be resolved, after the message was sent | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     public final CompletableFuture<Void> sendMessage( | ||||
|             @NonNull Caption caption, | ||||
|             CompletableFuture<@NonNull TagResolver>[] asyncReplacements, | ||||
|             @NonNull TagResolver... replacements | ||||
|     ) { | ||||
|         return CompletableFuture.allOf(asyncReplacements).whenComplete((unused, throwable) -> { | ||||
|             Set<TagResolver> resolvers = new HashSet<>(Arrays.asList(replacements)); | ||||
|             if (throwable != null) { | ||||
|                 sendMessage( | ||||
|                         TranslatableCaption.of("errors.error"), | ||||
|                         TagResolver.resolver("value", Tag.inserting( | ||||
|                                 Component.text("Failed to resolve asynchronous caption replacements") | ||||
|                         )) | ||||
|                 ); | ||||
|                 LOGGER.error("Failed to resolve asynchronous tagresolver(s) for " + caption, throwable); | ||||
|             } else { | ||||
|                 for (final CompletableFuture<TagResolver> asyncReplacement : asyncReplacements) { | ||||
|                     resolvers.add(asyncReplacement.join()); | ||||
|                 } | ||||
|             } | ||||
|             sendMessage(caption, resolvers.toArray(TagResolver[]::new)); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     // Redefine from PermissionHolder as it's required from CommandCaller | ||||
|     @Override | ||||
|     public boolean hasPermission(@NonNull String permission) { | ||||
|   | ||||
| @@ -51,6 +51,8 @@ import com.plotsquared.core.util.MathMan; | ||||
| import com.plotsquared.core.util.PlotExpression; | ||||
| import com.plotsquared.core.util.RegionUtil; | ||||
| import com.plotsquared.core.util.StringMan; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.math.BlockVector2; | ||||
| import com.sk89q.worldedit.math.BlockVector3; | ||||
| import com.sk89q.worldedit.regions.CuboidRegion; | ||||
| @@ -391,6 +393,28 @@ public abstract class PlotArea implements ComponentLike { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         this.spawnEggs = config.getBoolean("event.spawn.egg"); | ||||
|         this.spawnCustom = config.getBoolean("event.spawn.custom"); | ||||
|         this.spawnBreeding = config.getBoolean("event.spawn.breeding"); | ||||
|  | ||||
|         if (PlotSquared.get().isWeInitialised()) { | ||||
|             loadFlags(config); | ||||
|         } else { | ||||
|             ConsolePlayer.getConsole().sendMessage( | ||||
|                     TranslatableCaption.of("flags.delaying_loading_area_flags"), | ||||
|                     TagResolver.resolver("area", Tag.inserting(Component.text(this.id == null ? this.worldName : this.id))) | ||||
|             ); | ||||
|             TaskManager.runTaskLater(() -> loadFlags(config), TaskTime.ticks(1)); | ||||
|         } | ||||
|  | ||||
|         loadConfiguration(config); | ||||
|     } | ||||
|  | ||||
|     private void loadFlags(ConfigurationSection config) { | ||||
|         ConsolePlayer.getConsole().sendMessage( | ||||
|                 TranslatableCaption.of("flags.loading_area_flags"), | ||||
|                 TagResolver.resolver("area", Tag.inserting(Component.text(this.id == null ? this.worldName : this.id))) | ||||
|         ); | ||||
|         List<String> flags = config.getStringList("flags.default"); | ||||
|         if (flags.isEmpty()) { | ||||
|             flags = config.getStringList("flags"); | ||||
| @@ -411,10 +435,6 @@ public abstract class PlotArea implements ComponentLike { | ||||
|                 TagResolver.resolver("flags", Tag.inserting(Component.text(flags.toString()))) | ||||
|         ); | ||||
|  | ||||
|         this.spawnEggs = config.getBoolean("event.spawn.egg"); | ||||
|         this.spawnCustom = config.getBoolean("event.spawn.custom"); | ||||
|         this.spawnBreeding = config.getBoolean("event.spawn.breeding"); | ||||
|  | ||||
|         List<String> roadflags = config.getStringList("road.flags"); | ||||
|         if (roadflags.isEmpty()) { | ||||
|             roadflags = new ArrayList<>(); | ||||
| @@ -426,14 +446,12 @@ public abstract class PlotArea implements ComponentLike { | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         this.roadFlags = roadflags.size() > 0; | ||||
|         this.roadFlags = !roadflags.isEmpty(); | ||||
|         parseFlags(this.getRoadFlagContainer(), roadflags); | ||||
|         ConsolePlayer.getConsole().sendMessage( | ||||
|                 TranslatableCaption.of("flags.road_flags"), | ||||
|                 TagResolver.resolver("flags", Tag.inserting(Component.text(roadflags.toString()))) | ||||
|         ); | ||||
|  | ||||
|         loadConfiguration(config); | ||||
|     } | ||||
|  | ||||
|     public abstract void loadConfiguration(ConfigurationSection config); | ||||
|   | ||||
| @@ -38,7 +38,6 @@ import com.plotsquared.core.location.Location; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.queue.QueueCoordinator; | ||||
| import com.plotsquared.core.util.PlayerManager; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.function.pattern.Pattern; | ||||
| @@ -59,6 +58,7 @@ import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| @@ -383,13 +383,17 @@ public final class PlotModificationManager { | ||||
|         } | ||||
|         if (createSign) { | ||||
|             queue.setCompleteTask(() -> TaskManager.runTaskAsync(() -> { | ||||
|                 for (Plot current : plots) { | ||||
|                     current.getPlotModificationManager().setSign(PlayerManager.resolveName(current.getOwnerAbs()).getComponent( | ||||
|                             LocaleHolder.console())); | ||||
|                 } | ||||
|                 if (whenDone != null) { | ||||
|                     TaskManager.runTask(whenDone); | ||||
|                 } | ||||
|                 List<CompletableFuture<Void>> tasks = plots.stream().map(current -> PlotSquared.platform().playerManager() | ||||
|                                 .getUsernameCaption(current.getOwnerAbs()) | ||||
|                                 .thenAccept(caption -> current | ||||
|                                         .getPlotModificationManager() | ||||
|                                         .setSign(caption.getComponent(LocaleHolder.console())))) | ||||
|                         .toList(); | ||||
|                 CompletableFuture.allOf(tasks.toArray(CompletableFuture[]::new)).whenComplete((unused, throwable) -> { | ||||
|                     if (whenDone != null) { | ||||
|                         TaskManager.runTask(whenDone); | ||||
|                     } | ||||
|                 }); | ||||
|             })); | ||||
|         } else if (whenDone != null) { | ||||
|             queue.setCompleteTask(whenDone); | ||||
|   | ||||
| @@ -29,6 +29,7 @@ import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.BlockedCmdsFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.BreakFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.ChatFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.ConcreteHardenFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.CoralDryFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.CropGrowFlag; | ||||
| @@ -142,6 +143,7 @@ public final class GlobalFlagContainer extends FlagContainer { | ||||
|         this.addFlag(BeaconEffectsFlag.BEACON_EFFECT_TRUE); | ||||
|         this.addFlag(BlockIgnitionFlag.BLOCK_IGNITION_TRUE); | ||||
|         this.addFlag(ChatFlag.CHAT_FLAG_TRUE); | ||||
|         this.addFlag(ConcreteHardenFlag.CONCRETE_HARDEN_TRUE); | ||||
|         this.addFlag(CopperOxideFlag.COPPER_OXIDE_FALSE); | ||||
|         this.addFlag(CoralDryFlag.CORAL_DRY_FALSE); | ||||
|         this.addFlag(CropGrowFlag.CROP_GROW_TRUE); | ||||
|   | ||||
| @@ -0,0 +1,39 @@ | ||||
| /* | ||||
|  * PlotSquared, a land and world management plugin for Minecraft. | ||||
|  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||
|  * Copyright (C) IntellectualSites team and contributors | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.plot.flag.implementations; | ||||
|  | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.plot.flag.types.BooleanFlag; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| public class ConcreteHardenFlag extends BooleanFlag<ConcreteHardenFlag> { | ||||
|  | ||||
|     public static final ConcreteHardenFlag CONCRETE_HARDEN_TRUE = new ConcreteHardenFlag(true); | ||||
|     public static final ConcreteHardenFlag CONCRETE_HARDEN_FALSE = new ConcreteHardenFlag(false); | ||||
|  | ||||
|     private ConcreteHardenFlag(boolean value) { | ||||
|         super(value, TranslatableCaption.of("flags.flag_description_concrete_harden")); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected ConcreteHardenFlag flagOf(@NonNull Boolean value) { | ||||
|         return value ? CONCRETE_HARDEN_TRUE : CONCRETE_HARDEN_FALSE; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -183,7 +183,7 @@ public class ChunkCoordinatorBuilder { | ||||
|      * Set whether the chunks should be allow to unload after being accessed. This should only be used where the chunks are read from | ||||
|      * and then written to from a separate queue where they're consequently unloaded. | ||||
|      * | ||||
|      * @param unloadAfter if to unload chuns afterwards | ||||
|      * @param unloadAfter if to unload chunks afterwards | ||||
|      * @return this ChunkCoordinatorBuilder instance | ||||
|      */ | ||||
|     public @NonNull ChunkCoordinatorBuilder unloadAfter(final boolean unloadAfter) { | ||||
|   | ||||
| @@ -42,7 +42,7 @@ public class EntityUtil { | ||||
|     } | ||||
|  | ||||
|     private static int capNumeral(final @NonNull String flagName) { | ||||
|         int i = switch (flagName) { | ||||
|         return switch (flagName) { | ||||
|             case "mob-cap" -> CAP_MOB; | ||||
|             case "hostile-cap" -> CAP_MONSTER; | ||||
|             case "animal-cap" -> CAP_ANIMAL; | ||||
| @@ -50,7 +50,6 @@ public class EntityUtil { | ||||
|             case "misc-cap" -> CAP_MISC; | ||||
|             default -> CAP_ENTITY; | ||||
|         }; | ||||
|         return i; | ||||
|     } | ||||
|  | ||||
|     @SuppressWarnings("unchecked") | ||||
|   | ||||
| @@ -28,6 +28,7 @@ import com.plotsquared.core.database.DBFunc; | ||||
| import com.plotsquared.core.player.ConsolePlayer; | ||||
| import com.plotsquared.core.player.OfflinePlotPlayer; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.uuid.UUIDMapping; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.ComponentLike; | ||||
| @@ -37,6 +38,7 @@ import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
| import org.jetbrains.annotations.Contract; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| @@ -48,6 +50,7 @@ import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.function.BiConsumer; | ||||
|  | ||||
| @@ -169,7 +172,9 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> { | ||||
|      * @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown} | ||||
|      * @see #resolveName(UUID, boolean) | ||||
|      * @since 6.4.0 | ||||
|      * @deprecated Don't unnecessarily block threads and utilize playerMap - see {@link #getUsernameCaption(UUID)} | ||||
|      */ | ||||
|     @Deprecated(since = "7.1.0") | ||||
|     public static @NonNull Caption resolveName(final @Nullable UUID owner) { | ||||
|         return resolveName(owner, true); | ||||
|     } | ||||
| @@ -181,7 +186,9 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> { | ||||
|      * @param blocking If the operation should block the current thread for {@link Settings.UUID#BLOCKING_TIMEOUT} milliseconds | ||||
|      * @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown} | ||||
|      * @since 6.4.0 | ||||
|      * @deprecated Don't unnecessarily block threads and utilize playerMap - see {@link #getUsernameCaption(UUID)} | ||||
|      */ | ||||
|     @Deprecated(since = "7.1.0") | ||||
|     public static @NonNull Caption resolveName(final @Nullable UUID owner, final boolean blocking) { | ||||
|         if (owner == null) { | ||||
|             return TranslatableCaption.of("info.none"); | ||||
| @@ -211,6 +218,50 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> { | ||||
|         return StaticCaption.of(name); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Resolves a UUID to a formatted {@link Caption} representing the player behind the UUID. | ||||
|      * Returns a {@link CompletableFuture} instead of a plain {@link UUID} as this method may query the | ||||
|      * {@link com.plotsquared.core.uuid.UUIDPipeline ImpromptuUUIDPipeline}. | ||||
|      * <br> | ||||
|      * Special Cases: | ||||
|      * <ul> | ||||
|      *     <li>{@code null}: Resolves to a {@link TranslatableCaption} with the key {@code info.none}</li> | ||||
|      *     <li>{@link DBFunc#EVERYONE}: Resolves to a {@link TranslatableCaption} with the key {@code info.everyone}</li> | ||||
|      *     <li>{@link DBFunc#SERVER}: Resolves to a {@link TranslatableCaption} with the key {@code info.server}</li> | ||||
|      * </ul> | ||||
|      * <br> | ||||
|      * Otherwise, if the UUID is a valid UUID and not reserved by PlotSquared itself, this method first attempts to query the | ||||
|      * online players ({@link #getPlayerIfExists(UUID)}) for the specific UUID. | ||||
|      * If no online player was found for that UUID, the {@link com.plotsquared.core.uuid.UUIDPipeline ImpromptuUUIDPipeline} is | ||||
|      * queried to retrieve the known username | ||||
|      * | ||||
|      * @param uuid The UUID of the player (for example provided by {@link Plot#getOwner()} | ||||
|      * @return A CompletableFuture resolving to a Caption representing the players name of the uuid | ||||
|      * @since 7.1.0 | ||||
|      */ | ||||
|     @Contract("_->!null") | ||||
|     public @NonNull CompletableFuture<Caption> getUsernameCaption(@Nullable UUID uuid) { | ||||
|         if (uuid == null) { | ||||
|             return CompletableFuture.completedFuture(TranslatableCaption.of("info.none")); | ||||
|         } | ||||
|         if (uuid.equals(DBFunc.EVERYONE)) { | ||||
|             return CompletableFuture.completedFuture(TranslatableCaption.of("info.everyone")); | ||||
|         } | ||||
|         if (uuid.equals(DBFunc.SERVER)) { | ||||
|             return CompletableFuture.completedFuture(TranslatableCaption.of("info.server")); | ||||
|         } | ||||
|         P player = getPlayerIfExists(uuid); | ||||
|         if (player != null) { | ||||
|             return CompletableFuture.completedFuture(StaticCaption.of(player.getName())); | ||||
|         } | ||||
|         return PlotSquared.get().getImpromptuUUIDPipeline().getNames(Collections.singleton(uuid)).thenApply(mapping -> { | ||||
|             if (mapping.isEmpty()) { | ||||
|                 return TranslatableCaption.of("info.unknown"); | ||||
|             } | ||||
|             return StaticCaption.of(mapping.get(0).username()); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove a player from the player map | ||||
|      * | ||||
|   | ||||
| @@ -47,6 +47,7 @@ import java.util.Locale; | ||||
| import java.util.Map; | ||||
| import java.util.TimeZone; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.function.BiFunction; | ||||
|  | ||||
| /** | ||||
| @@ -109,9 +110,9 @@ public final class PlaceholderRegistry { | ||||
|             if (plotOwner == null) { | ||||
|                 return legacyComponent(TranslatableCaption.of("generic.generic_unowned"), player); | ||||
|             } | ||||
|  | ||||
|             try { | ||||
|                 return PlayerManager.resolveName(plotOwner, false).getComponent(player); | ||||
|                 return PlotSquared.platform().playerManager().getUsernameCaption(plotOwner) | ||||
|                         .get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS).getComponent(player); | ||||
|             } catch (final Exception ignored) { | ||||
|             } | ||||
|             return legacyComponent(TranslatableCaption.of("info.unknown"), player); | ||||
| @@ -187,6 +188,7 @@ public final class PlaceholderRegistry { | ||||
|             } | ||||
|         }); | ||||
|         this.createPlaceholder("currentplot_biome", (player, plot) -> plot.getBiomeSynchronous().toString()); | ||||
|         this.createPlaceholder("currentplot_size", (player, plot) -> String.valueOf(plot.getConnectedPlots().size())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -551,6 +551,7 @@ | ||||
|   "flags.flag_description_block_burn": "<gray>Set to `true` to allow blocks to burn within the plot.</gray>", | ||||
|   "flags.flag_description_block_ignition": "<gray>Set to `false` to prevent blocks from igniting within the plot.</gray>", | ||||
|   "flags.flag_description_break": "<gray>Define a list of materials players should be able to break even when they aren't added to the plot.</gray>", | ||||
|   "flags.flag_description_concrete_harden": "<gray>Set to `false` to disable concrete powder forming to concrete with water.</gray>", | ||||
|   "flags.flag_description_device_interact": "<gray>Set to `true` to allow devices to be interacted with in the plot.</gray>", | ||||
|   "flags.flag_description_disable_physics": "<gray>Set to `true` to disable block physics in the plot.</gray>", | ||||
|   "flags.flag_description_drop_protection": "<gray>Set to `true` to prevent dropped items from being picked up by non-members of the plot.</gray>", | ||||
| @@ -631,6 +632,8 @@ | ||||
|   "flags.flag_error_double": "Flag value must be a decimal number.", | ||||
|   "flags.flag_error_music": "Flag value must be a valid music disc ID.", | ||||
|   "flags.flag_error_title": "Flag value must be in the format </red><grey>\"A title\" \"The subtitle\"</grey><red>.", | ||||
|   "flags.delaying_loading_area_flags": "<prefix><gray>Delaying loading flags for area `</gray><dark_aqua><area></dark_aqua><gray>` as WorldEdit is not initialised yet.</gray>", | ||||
|   "flags.loading_area_flags": "<prefix><gray>Loading flags for area: </gray><dark_aqua><area></dark_aqua>", | ||||
|   "flags.area_flags": "<prefix><gray>Area flags: </gray><dark_aqua><flags></dark_aqua>", | ||||
|   "flags.road_flags": "<prefix><gray>Road flags: </gray><dark_aqua><flags></dark_aqua>", | ||||
|   "commands.description.add": "<gray>Allow a user to build in a plot while the plot owner is online.</gray>", | ||||
|   | ||||
| @@ -22,7 +22,7 @@ plugins { | ||||
| } | ||||
|  | ||||
| group = "com.intellectualsites.plotsquared" | ||||
| version = "7.0.1-SNAPSHOT" | ||||
| version = "7.1.1-SNAPSHOT" | ||||
|  | ||||
| if (!File("$rootDir/.git").exists()) { | ||||
|     logger.lifecycle(""" | ||||
| @@ -150,22 +150,26 @@ subprojects { | ||||
|                             id.set("Sauilitired") | ||||
|                             name.set("Alexander Söderberg") | ||||
|                             organization.set("IntellectualSites") | ||||
|                             organizationUrl.set("https://github.com/IntellectualSites") | ||||
|                         } | ||||
|                         developer { | ||||
|                             id.set("NotMyFault") | ||||
|                             name.set("Alexander Brandes") | ||||
|                             organization.set("IntellectualSites") | ||||
|                             organizationUrl.set("https://github.com/IntellectualSites") | ||||
|                             email.set("contact(at)notmyfault.dev") | ||||
|                         } | ||||
|                         developer { | ||||
|                             id.set("SirYwell") | ||||
|                             name.set("Hannes Greule") | ||||
|                             organization.set("IntellectualSites") | ||||
|                             organizationUrl.set("https://github.com/IntellectualSites") | ||||
|                         } | ||||
|                         developer { | ||||
|                             id.set("dordsor21") | ||||
|                             name.set("dordsor21") | ||||
|                             organization.set("IntellectualSites") | ||||
|                             organizationUrl.set("https://github.com/IntellectualSites") | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
| @@ -222,20 +226,25 @@ tasks.getByName<Jar>("jar") { | ||||
|  | ||||
| val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1", "1.20.2") | ||||
| 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") } | ||||
|     register("cacheLatestFaweArtifact") { | ||||
|         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 -> it.contains("Bukkit") } | ||||
|         project.ext["faweArtifact"] = artifact | ||||
|     } | ||||
|  | ||||
|     supportedVersions.forEach { | ||||
|         register<RunServer>("runServer-$it") { | ||||
|             dependsOn(getByName("cacheLatestFaweArtifact")) | ||||
|             minecraftVersion(it) | ||||
|             pluginJars(*project(":plotsquared-bukkit").getTasksByName("shadowJar", false).map { (it as Jar).archiveFile } | ||||
|             pluginJars(*project(":plotsquared-bukkit").getTasksByName("shadowJar", false) | ||||
|                     .map { task -> (task as Jar).archiveFile } | ||||
|                     .toTypedArray()) | ||||
|             jvmArgs("-DPaper.IgnoreJavaVersion=true", "-Dcom.mojang.eula.agree=true") | ||||
|             downloadPlugins { | ||||
|                 url("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/artifact/artifacts/$artifact") | ||||
|                 url("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/artifact/artifacts/${project.ext["faweArtifact"]}") | ||||
|             } | ||||
|             group = "run paper" | ||||
|             runDirectory.set(file("run-$it")) | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
| paper = "1.20.2-R0.1-SNAPSHOT" | ||||
| guice = "7.0.0" | ||||
| spotbugs = "4.7.3" | ||||
| checkerqual = "3.38.0" | ||||
| checkerqual = "3.39.0" | ||||
| gson = "2.10" | ||||
| guava = "31.1-jre" | ||||
| snakeyaml = "2.0" | ||||
| @@ -19,6 +19,10 @@ luckperms = "5.4" | ||||
| essentialsx = "2.20.1" | ||||
| mvdwapi = "3.1.1" | ||||
|  | ||||
| # Datebase | ||||
| hikaricp = "5.0.1" | ||||
| jdbi = "3.41.3" | ||||
|  | ||||
| # Third party | ||||
| prtree = "2.0.1" | ||||
| aopalliance = "1.0" | ||||
| @@ -28,7 +32,7 @@ squirrelid = "0.3.2" | ||||
| paster = "1.1.5" | ||||
| bstats = "3.0.2" | ||||
| paperlib = "1.0.8" | ||||
| informative-annotations = "1.3" | ||||
| informative-annotations = "1.4" | ||||
| vault = "1.7.1" | ||||
| serverlib = "2.3.4" | ||||
|  | ||||
| @@ -63,6 +67,11 @@ essentialsx = { group = "net.essentialsx", name = "EssentialsX", version.ref = " | ||||
| faweCore = { group = "com.fastasyncworldedit", name = "FastAsyncWorldEdit-Core", version.ref = "fawe" } | ||||
| faweBukkit = { group = "com.fastasyncworldedit", name = "FastAsyncWorldEdit-Bukkit", version.ref = "fawe" } | ||||
|  | ||||
| # Database | ||||
| hikaricp = { group = "com.zaxxer", name = "HikariCP", version.ref = "hikaricp" } | ||||
| jdbiCore = { group = "org.jdbi", name = "jdbi3-core", version.ref = "jdbi" } | ||||
| jdbiGuice = { group = "org.jdbi", name = "jdbi3-guice", version.ref = "jdbi" } | ||||
|  | ||||
| # Third party | ||||
| prtree = { group = "com.intellectualsites.prtree", name = "PRTree", version.ref = "prtree" } | ||||
| aopalliance = { group = "aopalliance", name = "aopalliance", version.ref = "aopalliance" } | ||||
|   | ||||
							
								
								
									
										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-8.3-bin.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip | ||||
| networkTimeout=10000 | ||||
| validateDistributionUrl=true | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
|   | ||||
							
								
								
									
										14
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							| @@ -145,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | ||||
|     case $MAX_FD in #( | ||||
|       max*) | ||||
|         # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. | ||||
|         # shellcheck disable=SC3045 | ||||
|         # shellcheck disable=SC2039,SC3045 | ||||
|         MAX_FD=$( ulimit -H -n ) || | ||||
|             warn "Could not query maximum file descriptor limit" | ||||
|     esac | ||||
| @@ -153,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | ||||
|       '' | soft) :;; #( | ||||
|       *) | ||||
|         # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. | ||||
|         # shellcheck disable=SC3045 | ||||
|         # shellcheck disable=SC2039,SC3045 | ||||
|         ulimit -n "$MAX_FD" || | ||||
|             warn "Could not set maximum file descriptor limit to $MAX_FD" | ||||
|     esac | ||||
| @@ -202,11 +202,11 @@ 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 | ||||
| #     double quotes to make sure that they get re-expanded; and | ||||
| #   * put everything else in single quotes, so that it's not re-expanded. | ||||
| # Collect all arguments for the java command: | ||||
| #   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, | ||||
| #     and any embedded shellness will be escaped. | ||||
| #   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be | ||||
| #     treated as '${Hostname}' itself on the command line. | ||||
|  | ||||
| set -- \ | ||||
|         "-Dorg.gradle.appname=$APP_BASE_NAME" \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user