Compare commits

..

1 Commits

Author SHA1 Message Date
c90e681aab fix: add missing spawn event reasons 2023-07-15 17:45:02 +01:00
47 changed files with 271 additions and 317 deletions

View File

@ -7,7 +7,7 @@ body:
attributes: attributes:
value: | 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. 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.gitbook.io/plotsquared/). 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://github.com/IntellectualSites/PlotSquared/security/policy) GitHub 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 - type: dropdown

View File

@ -4,5 +4,5 @@ contact_links:
url: https://discord.gg/intellectualsites url: https://discord.gg/intellectualsites
about: Our support Discord, please ask questions and seek support here. about: Our support Discord, please ask questions and seek support here.
- name: PlotSquared Wiki - name: PlotSquared Wiki
url: https://intellectualsites.gitbook.io/plotsquared/ url: https://intellectualsites.github.io/plotsquared-documentation/
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands. about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.

View File

@ -7,7 +7,7 @@ body:
attributes: attributes:
value: | value: |
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added. Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.gitbook.io/plotsquared/). For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
- type: textarea - type: textarea
attributes: attributes:

View File

@ -9,11 +9,5 @@
"dependencies" "dependencies"
], ],
"rebaseWhen": "conflicted", "rebaseWhen": "conflicted",
"schedule": ["on the first day of the month"], "schedule": ["on the first day of the month"]
"ignoreDeps": [
"com.google.code.gson:gson",
"com.google.guava:guava",
"org.yaml:snakeyaml",
"org.apache.logging.log4j:log4j-api",
]
} }

View File

@ -42,7 +42,7 @@ jobs:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }} ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }} ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
- name: Publish core javadoc - name: Publish core javadoc
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/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 uses: cpina/github-action-push-to-another-repository@main
env: env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
@ -54,7 +54,7 @@ jobs:
target-branch: main target-branch: main
target-directory: v7/core target-directory: v7/core
- name: Publish bukkit javadoc - name: Publish bukkit javadoc
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/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 uses: cpina/github-action-push-to-another-repository@main
env: env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}

5
.gitignore vendored
View File

@ -138,5 +138,6 @@ build/
.DS_Store .DS_Store
# Ignore run folders # Ignore run folders
run-[0-9].[0-9][0-9]/ run-[0-0].[0-9]/
run-[0-9].[0-9][0-9].[0-9]/ run-[0-0].[0-9].[0-9]/

View File

@ -21,20 +21,20 @@ dependencies {
api(projects.plotsquaredCore) api(projects.plotsquaredCore)
// Metrics // Metrics
implementation(libs.bstatsBukkit) implementation("org.bstats:bstats-bukkit")
// Paper // Paper
compileOnly(libs.paper) compileOnly("io.papermc.paper:paper-api")
implementation(libs.paperlib) implementation("io.papermc:paperlib")
// Plugins // Plugins
compileOnly(libs.worldeditBukkit) { compileOnly(libs.worldeditBukkit) {
exclude(group = "org.bukkit") exclude(group = "org.bukkit")
exclude(group = "org.spigotmc") exclude(group = "org.spigotmc")
} }
compileOnly(libs.faweBukkit) { isTransitive = false } compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
testImplementation(libs.faweBukkit) { isTransitive = false } testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
compileOnly(libs.vault) { compileOnly("com.github.MilkBowl:VaultAPI") {
exclude(group = "org.bukkit") exclude(group = "org.bukkit")
} }
compileOnly(libs.placeholderapi) compileOnly(libs.placeholderapi)
@ -44,15 +44,15 @@ dependencies {
// Other libraries // Other libraries
implementation(libs.squirrelid) { isTransitive = false } implementation(libs.squirrelid) { isTransitive = false }
implementation(libs.serverlib) implementation("dev.notmyfault.serverlib:ServerLib")
// Our libraries // Our libraries
implementation(libs.arkitektonika) implementation(libs.arkitektonika)
implementation(libs.paster) implementation("com.intellectualsites.paster:Paster")
implementation(libs.informativeAnnotations) implementation("com.intellectualsites.informative-annotations:informative-annotations")
// Adventure // Adventure
implementation(libs.adventureBukkit) implementation("net.kyori:adventure-platform-bukkit")
} }
tasks.processResources { tasks.processResources {

View File

@ -50,7 +50,6 @@ import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.BukkitWorld; import com.plotsquared.bukkit.util.BukkitWorld;
import com.plotsquared.bukkit.util.SetGenCB; import com.plotsquared.bukkit.util.SetGenCB;
import com.plotsquared.bukkit.util.TranslationUpdateManager; import com.plotsquared.bukkit.util.TranslationUpdateManager;
import com.plotsquared.bukkit.util.UpdateUtility;
import com.plotsquared.bukkit.util.task.BukkitTaskManager; import com.plotsquared.bukkit.util.task.BukkitTaskManager;
import com.plotsquared.bukkit.util.task.PaperTimeConverter; import com.plotsquared.bukkit.util.task.PaperTimeConverter;
import com.plotsquared.bukkit.util.task.SpigotTimeConverter; import com.plotsquared.bukkit.util.task.SpigotTimeConverter;
@ -252,7 +251,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
} }
@Override @Override
@SuppressWarnings("deprecation") // Paper deprecation
public void onEnable() { public void onEnable() {
this.pluginName = getDescription().getName(); this.pluginName = getDescription().getName();
@ -304,9 +302,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE); this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
/* TODO Enable update checker before v7 is released to GA
if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) { if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) {
injector.getInstance(UpdateUtility.class).updateChecker(); injector.getInstance(UpdateUtility.class).updateChecker();
} }
*/
if (PremiumVerification.isPremium()) { if (PremiumVerification.isPremium()) {
LOGGER.info("PlotSquared version licensed to Spigot user {}", getUserID()); LOGGER.info("PlotSquared version licensed to Spigot user {}", getUserID());
@ -551,7 +551,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.startMetrics(); this.startMetrics();
if (Settings.Enabled_Components.WORLDS) { if (Settings.Enabled_Components.WORLDS) {
TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(10L)); TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(1L));
try { try {
singleWorldListener = injector().getInstance(SingleWorldListener.class); singleWorldListener = injector().getInstance(SingleWorldListener.class);
Bukkit.getPluginManager().registerEvents(singleWorldListener, this); Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
@ -1161,7 +1161,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
return new BukkitPlotGenerator(world, generator, this.plotAreaManager); return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
} }
@SuppressWarnings("deprecation") // Paper deprecation
@Override @Override
public @NonNull String pluginsFormatted() { public @NonNull String pluginsFormatted() {
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
@ -1183,7 +1182,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
} }
@Override @Override
@SuppressWarnings({"ConstantConditions", "deprecation"}) // Paper deprecation @SuppressWarnings("ConstantConditions")
public @NonNull String worldEditImplementations() { public @NonNull String worldEditImplementations() {
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) { if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {

View File

@ -74,7 +74,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
private HorseStats horse; private HorseStats horse;
private boolean noGravity; private boolean noGravity;
@SuppressWarnings("deprecation") // Deprecation exists since 1.20, while we support 1.16 onwards
public ReplicatingEntityWrapper(Entity entity, short depth) { public ReplicatingEntityWrapper(Entity entity, short depth) {
super(entity); super(entity);

View File

@ -26,7 +26,6 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.plot.world.SinglePlotArea; import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.util.ReflectionUtils;
import com.plotsquared.core.util.ReflectionUtils.RefClass; import com.plotsquared.core.util.ReflectionUtils.RefClass;
import com.plotsquared.core.util.ReflectionUtils.RefField; import com.plotsquared.core.util.ReflectionUtils.RefField;
import com.plotsquared.core.util.ReflectionUtils.RefMethod; import com.plotsquared.core.util.ReflectionUtils.RefMethod;
@ -65,11 +64,9 @@ public class ChunkListener implements Listener {
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final int version; private final int version;
private RefMethod methodSetUnsaved;
private RefMethod methodGetHandleChunk; private RefMethod methodGetHandleChunk;
private RefMethod methodGetHandleWorld; private RefMethod methodGetHandleWorld;
private RefField mustNotSave; private RefField mustSave;
private Object objChunkStatusFull = null;
/* /*
private RefMethod methodGetFullChunk; private RefMethod methodGetFullChunk;
private RefMethod methodGetBukkitChunk; private RefMethod methodGetBukkitChunk;
@ -82,6 +79,7 @@ public class ChunkListener implements Listener {
*/ */
private Chunk lastChunk; private Chunk lastChunk;
private boolean ignoreUnload = false; private boolean ignoreUnload = false;
private boolean isTrueForNotSave = true;
@Inject @Inject
public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) { public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) {
@ -92,27 +90,22 @@ public class ChunkListener implements Listener {
} }
try { try {
RefClass classCraftWorld = getRefClass("{cb}.CraftWorld"); RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
this.methodGetHandleWorld = classCraftWorld.getMethod("getHandle");
RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
ReflectionUtils.RefClass classChunkAccess = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
this.methodSetUnsaved = classChunkAccess.getMethod("a", boolean.class);
try {
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle"); this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle");
} catch (NoSuchMethodException ignored) {
try {
RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus");
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null);
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass());
} catch (NoSuchMethodException ex) {
throw new RuntimeException(ex);
}
}
try { try {
if (version < 17) { if (version < 17) {
RefClass classChunk = getRefClass("{nms}.Chunk"); RefClass classChunk = getRefClass("{nms}.Chunk");
this.mustNotSave = classChunk.getField("mustNotSave"); if (version == 13) {
this.mustSave = classChunk.getField("mustSave");
this.isTrueForNotSave = false;
} else {
this.mustSave = classChunk.getField("mustNotSave");
}
} else { } else {
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk"); RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
this.mustNotSave = classChunk.getField("mustNotSave"); this.mustSave = classChunk.getField("mustNotSave");
} }
} catch (NoSuchFieldException e) { } catch (NoSuchFieldException e) {
e.printStackTrace(); e.printStackTrace();
@ -174,13 +167,10 @@ public class ChunkListener implements Listener {
if (safe && shouldSave(world, chunk.getX(), chunk.getZ())) { if (safe && shouldSave(world, chunk.getX(), chunk.getZ())) {
return false; return false;
} }
Object c = objChunkStatusFull != null Object c = this.methodGetHandleChunk.of(chunk).call();
? this.methodGetHandleChunk.of(chunk).call(objChunkStatusFull) RefField.RefExecutor field = this.mustSave.of(c);
: this.methodGetHandleChunk.of(chunk).call(); if ((Boolean) field.get() != isTrueForNotSave) {
RefField.RefExecutor field = this.mustNotSave.of(c); field.set(isTrueForNotSave);
methodSetUnsaved.of(c).call(false);
if (!((Boolean) field.get())) {
field.set(true);
if (chunk.isLoaded()) { if (chunk.isLoaded()) {
ignoreUnload = true; ignoreUnload = true;
chunk.unload(false); chunk.unload(false);

View File

@ -152,7 +152,7 @@ public class EntityEventListener implements Listener {
} }
} }
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL",
"TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN", "NETHER_PORTAL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN", "NETHER_PORTAL", "DEFAULT",
"DUPLICATION", "FROZEN", "SPELL" -> { "DUPLICATION", "FROZEN", "SPELL" -> {
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
event.setCancelled(true); event.setCancelled(true);

View File

@ -369,7 +369,6 @@ public class PlayerEventListener implements Listener {
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@SuppressWarnings("deprecation") // Paper deprecation
public void onConnect(PlayerJoinEvent event) { public void onConnect(PlayerJoinEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
PlotSquared.platform().playerManager().removePlayer(player.getUniqueId()); PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
@ -734,7 +733,6 @@ public class PlayerEventListener implements Listener {
} }
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
@SuppressWarnings("deprecation") // Paper deprecation
public void onChat(AsyncPlayerChatEvent event) { public void onChat(AsyncPlayerChatEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@ -1065,7 +1063,6 @@ public class PlayerEventListener implements Listener {
} }
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
@SuppressWarnings("deprecation") // Paper deprecation
public void onCancelledInteract(PlayerInteractEvent event) { public void onCancelledInteract(PlayerInteractEvent event) {
if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) { if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
Player player = event.getPlayer(); Player player = event.getPlayer();
@ -1170,7 +1167,7 @@ public class PlayerEventListener implements Listener {
} }
} }
if (type.isEdible()) { if (type.isEdible()) {
//Allow all players to eat while also allowing the block place event to be fired //Allow all players to eat while also allowing the block place event ot be fired
return; return;
} }
if (type == Material.ARMOR_STAND) { if (type == Material.ARMOR_STAND) {

View File

@ -31,39 +31,45 @@ import org.bukkit.event.Listener;
import org.bukkit.event.world.ChunkEvent; import org.bukkit.event.world.ChunkEvent;
import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.ChunkLoadEvent;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static com.plotsquared.core.util.ReflectionUtils.getRefClass; import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
public class SingleWorldListener implements Listener { public class SingleWorldListener implements Listener {
private final Method methodSetUnsaved; private final Method methodGetHandleChunk;
private Method methodGetHandleChunk; private Field shouldSave = null;
private Object objChunkStatusFull = null;
public SingleWorldListener() throws Exception { public SingleWorldListener() throws Exception {
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
ReflectionUtils.RefClass classChunkAccess = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
this.methodSetUnsaved = classChunkAccess.getMethod("a", boolean.class).getRealMethod();
try {
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod(); this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
} catch (NoSuchMethodException ignored) {
try { try {
ReflectionUtils.RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus"); if (PlotSquared.platform().serverVersion()[1] < 17) {
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null); ReflectionUtils.RefClass classChunk = getRefClass("{nms}.Chunk");
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass()).getRealMethod(); if (PlotSquared.platform().serverVersion()[1] == 13) {
} catch (NoSuchMethodException ex) { this.shouldSave = classChunk.getField("mustSave").getRealField();
throw new RuntimeException(ex); } else {
this.shouldSave = classChunk.getField("s").getRealField();
} }
} else if (PlotSquared.platform().serverVersion()[1] == 17) {
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
this.shouldSave = classChunk.getField("r").getRealField();
} else if (PlotSquared.platform().serverVersion()[1] == 18) {
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
this.shouldSave = classChunk.getField("b").getRealField();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} }
} }
public void markChunkAsClean(Chunk chunk) { public void markChunkAsClean(Chunk chunk) {
try { try {
Object nmsChunk = objChunkStatusFull != null Object nmsChunk = methodGetHandleChunk.invoke(chunk);
? this.methodGetHandleChunk.invoke(chunk, objChunkStatusFull) if (shouldSave != null) {
: this.methodGetHandleChunk.invoke(chunk); this.shouldSave.set(nmsChunk, false);
methodSetUnsaved.invoke(nmsChunk, false); }
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -79,12 +85,7 @@ public class SingleWorldListener implements Listener {
if (!SinglePlotArea.isSinglePlotWorld(name)) { if (!SinglePlotArea.isSinglePlotWorld(name)) {
return; return;
} }
int x = event.getChunk().getX();
int z = event.getChunk().getZ();
if (x < 16 && x > -16 && z < 16 && z > -16) {
// Allow spawn to generate
return;
}
markChunkAsClean(event.getChunk()); markChunkAsClean(event.getChunk());
} }

View File

@ -44,7 +44,6 @@ import java.util.stream.IntStream;
@Singleton @Singleton
public class BukkitInventoryUtil extends InventoryUtil { public class BukkitInventoryUtil extends InventoryUtil {
@SuppressWarnings("deprecation") // Paper deprecation
private static @Nullable ItemStack getItem(PlotItemStack item) { private static @Nullable ItemStack getItem(PlotItemStack item) {
if (item == null) { if (item == null) {
return null; return null;

View File

@ -67,7 +67,6 @@ public class BukkitSetupUtils extends SetupUtils {
this.worldFile = worldFile; this.worldFile = worldFile;
} }
@SuppressWarnings("deprecation") // Paper deprecation
@Override @Override
public void updateGenerators(final boolean force) { public void updateGenerators(final boolean force) {
if (loaded && !SetupUtils.generators.isEmpty() && !force) { if (loaded && !SetupUtils.generators.isEmpty() && !force) {

View File

@ -44,10 +44,6 @@ public class TranslationUpdateManager {
String minheightReplacement = "minheight"; String minheightReplacement = "minheight";
String maxHeight = "maxHeight"; String maxHeight = "maxHeight";
String maxheightReplacement = "maxheight"; String maxheightReplacement = "maxheight";
String usedGrants = "usedGrants";
String usedGrantsReplacement = "used_grants";
String remainingGrants = "remainingGrants";
String rremainingGrantsReplacement = "remaining_grants";
try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) { try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) {
paths paths
@ -57,8 +53,6 @@ public class TranslationUpdateManager {
replaceInFile(p, suggestCommand, suggestCommandReplacement); replaceInFile(p, suggestCommand, suggestCommandReplacement);
replaceInFile(p, minHeight, minheightReplacement); replaceInFile(p, minHeight, minheightReplacement);
replaceInFile(p, maxHeight, maxheightReplacement); replaceInFile(p, maxHeight, maxheightReplacement);
replaceInFile(p, usedGrants, usedGrantsReplacement);
replaceInFile(p, remainingGrants, rremainingGrantsReplacement);
}); });
} }
} }

View File

@ -60,7 +60,7 @@ public class UpdateUtility implements Listener {
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> { task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
try { try {
HttpsURLConnection connection = (HttpsURLConnection) new URL( HttpsURLConnection connection = (HttpsURLConnection) new URL(
"https://api.spigotmc.org/simple/0.2/index.php?action=getResource&id=77506") "https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
.openConnection(); .openConnection();
connection.setRequestMethod("GET"); connection.setRequestMethod("GET");
JsonObject result = new JsonParser() JsonObject result = new JsonParser()

76
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at contact<at>intellectualsites.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

View File

@ -2,18 +2,18 @@ import java.time.format.DateTimeFormatter
dependencies { dependencies {
// Expected everywhere. // Expected everywhere.
compileOnlyApi(libs.checkerqual) compileOnlyApi("org.checkerframework:checker-qual")
// Minecraft expectations // Minecraft expectations
compileOnlyApi(libs.gson) compileOnlyApi("com.google.code.gson:gson")
compileOnly(libs.guava) compileOnly("com.google.guava:guava")
// Platform expectations // Platform expectations
compileOnlyApi(libs.snakeyaml) compileOnlyApi("org.yaml:snakeyaml")
// Adventure // Adventure
api(libs.adventureApi) api("net.kyori:adventure-api")
api(libs.adventureMiniMessage) api("net.kyori:adventure-text-minimessage")
// Guice // Guice
api(libs.guice) { api(libs.guice) {
@ -31,19 +31,19 @@ dependencies {
exclude(group = "dummypermscompat") exclude(group = "dummypermscompat")
} }
testImplementation(libs.worldeditCore) testImplementation(libs.worldeditCore)
compileOnly(libs.faweBukkit) { isTransitive = false } compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
testImplementation(libs.faweCore) { isTransitive = false } testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
// Logging // Logging
compileOnlyApi(libs.log4j) compileOnlyApi("org.apache.logging.log4j:log4j-api")
// Other libraries // Other libraries
api(libs.prtree) api(libs.prtree)
api(libs.aopalliance) api(libs.aopalliance)
api(libs.cloudServices) api(libs.cloudServices)
api(libs.arkitektonika) api(libs.arkitektonika)
api(libs.paster) api("com.intellectualsites.paster:Paster")
api(libs.informativeAnnotations) api("com.intellectualsites.informative-annotations:informative-annotations")
} }
tasks.processResources { tasks.processResources {

View File

@ -1281,7 +1281,7 @@ public class PlotSquared {
} }
/** /**
* Set up the database connection. * Setup the database connection.
*/ */
public void setupDatabase() { public void setupDatabase() {
try { try {

View File

@ -131,8 +131,8 @@ public class Auto extends SubCommand {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.removed_granted_plot"), TranslatableCaption.of("economy.removed_granted_plot"),
TagResolver.builder() TagResolver.builder()
.tag("used_grants", Tag.inserting(Component.text(grantedPlots - left))) .tag("usedGrants", Tag.inserting(Component.text(grantedPlots - left)))
.tag("remaining_grants", Tag.inserting(Component.text(left))) .tag("remainingGrants", Tag.inserting(Component.text(left)))
.build() .build()
); );
} }
@ -294,7 +294,7 @@ public class Auto extends SubCommand {
return true; return true;
} }
} }
if (this.econHandler != null && plotarea.useEconomy() && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) { if (this.econHandler != null && plotarea.useEconomy()) {
PlotExpression costExp = plotarea.getPrices().get("claim"); PlotExpression costExp = plotarea.getPrices().get("claim");
PlotExpression mergeCostExp = plotarea.getPrices().get("merge"); PlotExpression mergeCostExp = plotarea.getPrices().get("merge");
int size = sizeX * sizeZ; int size = sizeX * sizeZ;

View File

@ -141,7 +141,7 @@ public class Claim extends SubCommand {
} }
} }
} }
if (this.econHandler.isEnabled(area) && !force && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) { if (this.econHandler.isEnabled(area) && !force) {
PlotExpression costExr = area.getPrices().get("claim"); PlotExpression costExr = area.getPrices().get("claim");
double cost = costExr.evaluate(currentPlots); double cost = costExr.evaluate(currentPlots);
if (cost > 0d) { if (cost > 0d) {
@ -186,8 +186,8 @@ public class Claim extends SubCommand {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.removed_granted_plot"), TranslatableCaption.of("economy.removed_granted_plot"),
TagResolver.builder() TagResolver.builder()
.tag("used_grants", Tag.inserting(Component.text(grants - 1))) .tag("usedGrants", Tag.inserting(Component.text(grants - 1)))
.tag("remaining_grants", Tag.inserting(Component.text(grants))) .tag("remainingGrants", Tag.inserting(Component.text(grants)))
.build() .build()
); );
} }

View File

@ -96,7 +96,6 @@ public class DebugRoadRegen extends SubCommand {
PlotArea area = location.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
return false;
} }
Plot plot = player.getCurrentPlot(); Plot plot = player.getCurrentPlot();
if (plot == null) { if (plot == null) {

View File

@ -183,7 +183,7 @@ public class MainCommand extends Command {
if (cmd.hasConfirmation(player)) { if (cmd.hasConfirmation(player)) {
CmdConfirm.addPending(player, cmd.getUsage(), () -> { CmdConfirm.addPending(player, cmd.getUsage(), () -> {
PlotArea area = player.getApplicablePlotArea(); PlotArea area = player.getApplicablePlotArea();
if (area != null && econHandler.isEnabled(area) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) { if (area != null && econHandler.isEnabled(area)) {
PlotExpression priceEval = PlotExpression priceEval =
area.getPrices().get(cmd.getFullId()); area.getPrices().get(cmd.getFullId());
double price = priceEval != null ? priceEval.evaluate(0d) : 0d; double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
@ -201,7 +201,7 @@ public class MainCommand extends Command {
return; return;
} }
PlotArea area = player.getApplicablePlotArea(); PlotArea area = player.getApplicablePlotArea();
if (area != null && econHandler.isEnabled(area) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) { if (area != null && econHandler.isEnabled(area)) {
PlotExpression priceEval = area.getPrices().get(cmd.getFullId()); PlotExpression priceEval = area.getPrices().get(cmd.getFullId());
double price = priceEval != null ? priceEval.evaluate(0d) : 0d; double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
if (price != 0d && econHandler.getMoney(player) < price) { if (price != 0d && econHandler.getMoney(player) < price) {

View File

@ -109,7 +109,7 @@ public class Merge extends SubCommand {
} }
} }
if (direction == null && (args[0].equalsIgnoreCase("all") || args[0] if (direction == null && (args[0].equalsIgnoreCase("all") || args[0]
.equalsIgnoreCase("auto")) && player.hasPermission(Permission.PERMISSION_MERGE_ALL)) { .equalsIgnoreCase("auto"))) {
direction = Direction.ALL; direction = Direction.ALL;
} }
} }
@ -178,7 +178,7 @@ public class Merge extends SubCommand {
return true; return true;
} }
if (plot.getPlotModificationManager().autoMerge(Direction.ALL, maxSize, uuid, player, terrain)) { if (plot.getPlotModificationManager().autoMerge(Direction.ALL, maxSize, uuid, player, terrain)) {
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) { if (this.econHandler.isEnabled(plotArea) && price > 0d) {
this.econHandler.withdrawMoney(player, price); this.econHandler.withdrawMoney(player, price);
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.removed_balance"), TranslatableCaption.of("economy.removed_balance"),
@ -196,8 +196,8 @@ public class Merge extends SubCommand {
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge")); player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
return false; return false;
} }
if (!force && this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d && this.econHandler.getMoney( if (!force && this.econHandler.isEnabled(plotArea) && price > 0d
player) < price) { && this.econHandler.getMoney(player) < price) {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"), TranslatableCaption.of("economy.cannot_afford_merge"),
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price)))) TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
@ -218,7 +218,7 @@ public class Merge extends SubCommand {
return true; return true;
} }
if (plot.getPlotModificationManager().autoMerge(direction, maxSize - size, uuid, player, terrain)) { if (plot.getPlotModificationManager().autoMerge(direction, maxSize - size, uuid, player, terrain)) {
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) { if (this.econHandler.isEnabled(plotArea) && price > 0d) {
this.econHandler.withdrawMoney(player, price); this.econHandler.withdrawMoney(player, price);
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.removed_balance"), TranslatableCaption.of("economy.removed_balance"),
@ -259,7 +259,7 @@ public class Merge extends SubCommand {
accepter.sendMessage(TranslatableCaption.of("merge.merge_not_valid")); accepter.sendMessage(TranslatableCaption.of("merge.merge_not_valid"));
return; return;
} }
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) { if (this.econHandler.isEnabled(plotArea) && price > 0d) {
if (!force && this.econHandler.getMoney(player) < price) { if (!force && this.econHandler.getMoney(player) < price) {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"), TranslatableCaption.of("economy.cannot_afford_merge"),
@ -303,7 +303,7 @@ public class Merge extends SubCommand {
player, player,
terrain terrain
)) { )) {
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) { if (this.econHandler.isEnabled(plotArea) && price > 0d) {
if (!force && this.econHandler.getMoney(player) < price) { if (!force && this.econHandler.getMoney(player) < price) {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"), TranslatableCaption.of("economy.cannot_afford_merge"),

View File

@ -46,7 +46,7 @@ public class PluginCmd extends SubCommand {
player.sendMessage(StaticCaption.of( player.sendMessage(StaticCaption.of(
"<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>")); "<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>"));
player.sendMessage(StaticCaption.of( player.sendMessage(StaticCaption.of(
"<gray>>> </gray><gold><bold>Wiki<reset><gray>: </gray><gold><click:open_url:https://intellectualsites.gitbook.io/plotsquared/>https://intellectualsites.gitbook.io/plotsquared/</gold>")); "<gray>>> </gray><gold><bold>Wiki<reset><gray>: </gray><gold><click:open_url:https://intellectualsites.github.io/plotsquared-documentation/>https://intellectualsites.github.io/plotsquared-documentation/</gold>"));
player.sendMessage(StaticCaption.of( player.sendMessage(StaticCaption.of(
"<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>")); "<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>"));
player.sendMessage( player.sendMessage(

View File

@ -206,7 +206,7 @@ public class ComponentPresetManager {
return false; return false;
} }
if (componentPreset.cost() > 0.0D && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) { if (componentPreset.cost() > 0.0D) {
if (!econHandler.isEnabled(plot.getArea())) { if (!econHandler.isEnabled(plot.getArea())) {
getPlayer().sendMessage( getPlayer().sendMessage(
TranslatableCaption.of("preset.economy_disabled"), TranslatableCaption.of("preset.economy_disabled"),

View File

@ -194,7 +194,7 @@ public class Settings extends Config {
public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*")); public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*"));
@Comment("See: https://intellectualsites.gitbook.io/plotsquared/optimization/plot-analysis for a description of each value.") @Comment("See: https://intellectualsites.github.io/plotsquared-documentation/optimization/plot-analysis for a description of each value.")
public static final class CALIBRATION { public static final class CALIBRATION {
public int VARIETY = 0; public int VARIETY = 0;
@ -214,7 +214,7 @@ public class Settings extends Config {
@Comment({"Chunk processor related settings", @Comment({"Chunk processor related settings",
"See https://intellectualsites.gitbook.io/plotsquared/optimization/chunk-processor for more information."}) "See https://intellectualsites.github.io/plotsquared-documentation/optimization/chunk-processor for more information."})
public static class Chunk_Processor { public static class Chunk_Processor {
@Comment("Auto trim will not save chunks which aren't claimed") @Comment("Auto trim will not save chunks which aren't claimed")
@ -280,7 +280,7 @@ public class Settings extends Config {
@Comment("Always show explosion Particles, even if explosion flag is set to false") @Comment("Always show explosion Particles, even if explosion flag is set to false")
public static boolean ALWAYS_SHOW_EXPLOSIONS = false; public static boolean ALWAYS_SHOW_EXPLOSIONS = false;
@Comment({"Blocks that may not be used in plot components", @Comment({"Blocks that may not be used in plot components",
"Checkout the wiki article regarding plot components before modifying: https://intellectualsites.gitbook.io/plotsquared/customization/plot-components"}) "Checkout the wiki article regarding plot components before modifying: https://intellectualsites.github.io/plotsquared-documentation/customization/plot-components"})
public static List<String> public static List<String>
INVALID_BLOCKS = Arrays.asList( INVALID_BLOCKS = Arrays.asList(
// Acacia Stuff // Acacia Stuff
@ -402,7 +402,7 @@ public class Settings extends Config {
@Comment({"Schematic Settings", @Comment({"Schematic Settings",
"See https://intellectualsites.gitbook.io/plotsquared/schematics/schematic-on-claim for more information."}) "See https://intellectualsites.github.io/plotsquared-documentation/schematics/schematic-on-claim for more information."})
public static final class Schematics { public static final class Schematics {
@Comment( @Comment(
@ -531,7 +531,7 @@ public class Settings extends Config {
@Comment({"Backup related settings", @Comment({"Backup related settings",
"See https://intellectualsites.gitbook.io/plotsquared/plot-backups for more information."}) "See https://intellectualsites.github.io/plotsquared-documentation/plot-backups for more information."})
public static final class Backup { public static final class Backup {
@Comment("Automatically backup plots when destructive commands are performed, e.g. /plot clear") @Comment("Automatically backup plots when destructive commands are performed, e.g. /plot clear")
@ -783,7 +783,7 @@ public class Settings extends Config {
public static boolean public static boolean
PERSISTENT_ROAD_REGEN = true; PERSISTENT_ROAD_REGEN = true;
@Comment({"Enable the `/plot component` preset GUI", @Comment({"Enable the `/plot component` preset GUI",
"Read more about components here: https://intellectualsites.gitbook.io/plotsquared/customization/plot-components"}) "Read more about components here: https://intellectualsites.github.io/plotsquared-documentation/customization/plot-components"})
public static boolean COMPONENT_PRESETS = true; public static boolean COMPONENT_PRESETS = true;
@Comment("Enable per user locale") @Comment("Enable per user locale")
public static boolean PER_USER_LOCALE = false; public static boolean PER_USER_LOCALE = false;

View File

@ -265,6 +265,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1; int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1;
int maxSchematicHeight = 0;
int plotSchemHeight = 0; int plotSchemHeight = 0;
// SCHEM_Y should be normalised to the plot "start" height // SCHEM_Y should be normalised to the plot "start" height
@ -274,41 +275,49 @@ public class HybridPlotWorld extends ClassicPlotWorld {
SCHEM_Y = getMinGenHeight(); SCHEM_Y = getMinGenHeight();
plotY = 0; plotY = 0;
} else if (!Settings.Schematics.PASTE_ON_TOP) { } else if (!Settings.Schematics.PASTE_ON_TOP) {
SCHEM_Y = getMinGenHeight(); SCHEM_Y = getMinBuildHeight();
plotY = 0; plotY = 0;
} }
maxSchematicHeight = plotY + plotSchemHeight;
} }
int roadSchemHeight = 0; int roadSchemHeight;
if (schematic1 != null) { if (schematic1 != null) {
roadSchemHeight = Math.max( roadSchemHeight = Math.max(
schematic1.getClipboard().getDimensions().getY(), schematic1.getClipboard().getDimensions().getY(),
schematic2.getClipboard().getDimensions().getY() schematic2.getClipboard().getDimensions().getY()
); );
if (roadSchemHeight == worldGenHeight) { maxSchematicHeight = Math.max(roadSchemHeight, maxSchematicHeight);
if (maxSchematicHeight == worldGenHeight) {
SCHEM_Y = getMinGenHeight(); SCHEM_Y = getMinGenHeight();
roadY = 0; // Road is the lowest schematic roadY = 0; // Road is the lowest schematic
if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldGenHeight) { if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldGenHeight) {
// Road is the lowest schematic. Normalize plotY to it. // Road is the lowest schematic. Normalize plotY to it.
if (Settings.Schematics.PASTE_ON_TOP) { if (Settings.Schematics.PASTE_ON_TOP) {
plotY = PLOT_HEIGHT - getMinGenHeight(); plotY = PLOT_HEIGHT - getMinGenHeight();
} else {
plotY = getMinBuildHeight() - getMinGenHeight();
} }
} }
} else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) { } else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) {
roadY = 0; if (SCHEM_Y == getMinGenHeight()) { // Only possible if plot schematic is enabled
SCHEM_Y = getMinGenHeight(); // Plot is still the lowest schematic, normalize roadY to it
if (schematic3 != null) { roadY = getMinBuildHeight() - getMinGenHeight();
} else if (schematic3 != null) {
SCHEM_Y = getMinBuildHeight();
roadY = 0;// Road is the lowest schematic
if (Settings.Schematics.PASTE_ON_TOP) { if (Settings.Schematics.PASTE_ON_TOP) {
// Road is the lowest schematic. Normalize plotY to it. // Road is the lowest schematic. Normalize plotY to it.
plotY = PLOT_HEIGHT - SCHEM_Y; plotY = PLOT_HEIGHT - getMinBuildHeight();
} }
maxSchematicHeight = Math.max(maxSchematicHeight, plotY + plotSchemHeight);
} }
} else { } else {
roadY = minRoadWall - SCHEM_Y; roadY = minRoadWall - SCHEM_Y;
maxSchematicHeight = Math.max(maxSchematicHeight, roadY + roadSchemHeight);
} }
} }
int maxSchematicHeight = Math.max(plotY + plotSchemHeight, roadY + roadSchemHeight);
if (schematic3 != null) { if (schematic3 != null) {
this.PLOT_SCHEMATIC = true; this.PLOT_SCHEMATIC = true;
@ -553,7 +562,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
* Get the y value where the plot schematic should be pasted from. * Get the y value where the plot schematic should be pasted from.
* *
* @return plot schematic y start value * @return plot schematic y start value
* @since 7.0.0 * @since TODO
*/ */
public int getPlotYStart() { public int getPlotYStart() {
return SCHEM_Y + plotY; return SCHEM_Y + plotY;
@ -563,7 +572,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
* Get the y value where the road schematic should be pasted from. * Get the y value where the road schematic should be pasted from.
* *
* @return road schematic y start value * @return road schematic y start value
* @since 7.0.0 * @since TODO
*/ */
public int getRoadYStart() { public int getRoadYStart() {
return SCHEM_Y + roadY; return SCHEM_Y + roadY;

View File

@ -77,10 +77,6 @@ public class HybridUtils {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + HybridUtils.class.getSimpleName()); private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + HybridUtils.class.getSimpleName());
private static final BlockState AIR = BlockTypes.AIR.getDefaultState(); private static final BlockState AIR = BlockTypes.AIR.getDefaultState();
/**
* Deprecated and likely to be removed in a future release.
*/
@Deprecated(forRemoval = true, since = "7.0.0")
public static HybridUtils manager; public static HybridUtils manager;
public static Set<BlockVector2> regions; public static Set<BlockVector2> regions;
public static int height; public static int height;
@ -533,7 +529,7 @@ public class HybridUtils {
Math.min(plotworld.PLOT_HEIGHT, Math.min(plotworld.WALL_HEIGHT, plotworld.ROAD_HEIGHT)) : plotworld.ROAD_HEIGHT; Math.min(plotworld.PLOT_HEIGHT, Math.min(plotworld.WALL_HEIGHT, plotworld.ROAD_HEIGHT)) : plotworld.ROAD_HEIGHT;
int sx = bot.getX() - plotworld.ROAD_WIDTH + 1; int sx = bot.getX() - plotworld.ROAD_WIDTH + 1;
int sz = bot.getZ() + 1; int sz = bot.getZ() + 1;
int sy = Settings.Schematics.PASTE_ROAD_ON_TOP ? schemY : plot.getArea().getMinGenHeight(); int sy = Settings.Schematics.PASTE_ROAD_ON_TOP ? schemY : plot.getArea().getMinBuildHeight();
int ex = bot.getX(); int ex = bot.getX();
int ez = top.getZ(); int ez = top.getZ();
int ey = get_ey(plotworld, queue, sx, ex, sz, ez, sy); int ey = get_ey(plotworld, queue, sx, ex, sz, ez, sy);

View File

@ -60,19 +60,6 @@ public final class UncheckedWorldLocation extends Location {
return new UncheckedWorldLocation(world, x, y, z); return new UncheckedWorldLocation(world, x, y, z);
} }
/**
* Construct a new location with yaw and pitch equal to 0
*
* @param world World
* @param loc Coordinates
* @return New location
* @since 7.0.0
*/
@DoNotUse
public static @NonNull UncheckedWorldLocation at(final @NonNull String world, BlockVector3 loc) {
return new UncheckedWorldLocation(world, loc.getX(), loc.getY(), loc.getZ());
}
@Override @Override
@DoNotUse @DoNotUse
public @NonNull String getWorldName() { public @NonNull String getWorldName() {

View File

@ -45,7 +45,6 @@ public enum Permission implements ComponentLike {
PERMISSION_ADMIN_ENTRY_FORCEFIELD("plots.admin.entry.forcefield"), PERMISSION_ADMIN_ENTRY_FORCEFIELD("plots.admin.entry.forcefield"),
PERMISSION_ADMIN_COMMANDS_CHATSPY("plots.admin.command.chatspy"), PERMISSION_ADMIN_COMMANDS_CHATSPY("plots.admin.command.chatspy"),
PERMISSION_MERGE("plots.merge"), PERMISSION_MERGE("plots.merge"),
PERMISSION_MERGE_ALL("plots.merge.all"),
PERMISSION_MERGE_OTHER("plots.merge.other"), PERMISSION_MERGE_OTHER("plots.merge.other"),
PERMISSION_MERGE_KEEP_ROAD("plots.merge.keeproad"), PERMISSION_MERGE_KEEP_ROAD("plots.merge.keeproad"),
PERMISSION_ADMIN_CAPS_OTHER("plots.admin.caps.other"), PERMISSION_ADMIN_CAPS_OTHER("plots.admin.caps.other"),
@ -201,8 +200,7 @@ public enum Permission implements ComponentLike {
PERMISSION_RATE("plots.rate"), PERMISSION_RATE("plots.rate"),
PERMISSION_ADMIN_FLIGHT("plots.admin.flight"), PERMISSION_ADMIN_FLIGHT("plots.admin.flight"),
PERMISSION_ADMIN_COMPONENTS_OTHER("plots.admin.component.other"), PERMISSION_ADMIN_COMPONENTS_OTHER("plots.admin.component.other"),
PERMISSION_ADMIN_BYPASS_BORDER("plots.admin.border.bypass"), PERMISSION_ADMIN_BYPASS_BORDER("plots.admin.border.bypass");
PERMISSION_ADMIN_BYPASS_ECON("plots.admin.econ.bypass");
//</editor-fold> //</editor-fold>
private final String text; private final String text;

View File

@ -25,9 +25,9 @@ import java.util.UUID;
public interface OfflinePlotPlayer extends PermissionHolder { public interface OfflinePlotPlayer extends PermissionHolder {
/** /**
* Returns the UUID of the player. * Gets the {@code UUID} of this player
* *
* @return the UUID of the player * @return the player {@link UUID}
*/ */
UUID getUUID(); UUID getUUID();
@ -39,9 +39,9 @@ public interface OfflinePlotPlayer extends PermissionHolder {
long getLastPlayed(); long getLastPlayed();
/** /**
* Returns the name of the player. * Gets the name of this player.
* *
* @return the name of the player * @return the player name
*/ */
String getName(); String getName();

View File

@ -273,9 +273,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
return this.meta == null ? null : this.meta.remove(key); return this.meta == null ? null : this.meta.remove(key);
} }
/** /**
* Returns the name of the player. * This player's name.
* *
* @return the name of the player * @return the name of the player
*/ */

View File

@ -180,7 +180,8 @@ public abstract class PlotArea implements ComponentLike {
this.worldConfiguration = worldConfiguration; this.worldConfiguration = worldConfiguration;
} }
private static void parseFlags(FlagContainer flagContainer, List<String> flagStrings) { private static Collection<PlotFlag<?, ?>> parseFlags(List<String> flagStrings) {
final Collection<PlotFlag<?, ?>> flags = new ArrayList<>();
for (final String key : flagStrings) { for (final String key : flagStrings) {
final String[] split; final String[] split;
if (key.contains(";")) { if (key.contains(";")) {
@ -192,7 +193,7 @@ public abstract class PlotArea implements ComponentLike {
GlobalFlagContainer.getInstance().getFlagFromString(split[0]); GlobalFlagContainer.getInstance().getFlagFromString(split[0]);
if (flagInstance != null) { if (flagInstance != null) {
try { try {
flagContainer.addFlag(flagInstance.parse(split[1])); flags.add(flagInstance.parse(split[1]));
} catch (final FlagParseException e) { } catch (final FlagParseException e) {
LOGGER.warn( LOGGER.warn(
"Failed to parse default flag with key '{}' and value '{}'. " "Failed to parse default flag with key '{}' and value '{}'. "
@ -203,10 +204,9 @@ public abstract class PlotArea implements ComponentLike {
); );
e.printStackTrace(); e.printStackTrace();
} }
} else {
flagContainer.addUnknownFlag(split[0], split[1]);
} }
} }
return flags;
} }
@NonNull @NonNull
@ -405,7 +405,7 @@ public abstract class PlotArea implements ComponentLike {
} }
} }
} }
parseFlags(this.getFlagContainer(), flags); this.getFlagContainer().addAll(parseFlags(flags));
ConsolePlayer.getConsole().sendMessage( ConsolePlayer.getConsole().sendMessage(
TranslatableCaption.of("flags.area_flags"), TranslatableCaption.of("flags.area_flags"),
TagResolver.resolver("flags", Tag.inserting(Component.text(flags.toString()))) TagResolver.resolver("flags", Tag.inserting(Component.text(flags.toString())))
@ -427,7 +427,7 @@ public abstract class PlotArea implements ComponentLike {
} }
} }
this.roadFlags = roadflags.size() > 0; this.roadFlags = roadflags.size() > 0;
parseFlags(this.getRoadFlagContainer(), roadflags); this.getRoadFlagContainer().addAll(parseFlags(roadflags));
ConsolePlayer.getConsole().sendMessage( ConsolePlayer.getConsole().sendMessage(
TranslatableCaption.of("flags.road_flags"), TranslatableCaption.of("flags.road_flags"),
TagResolver.resolver("flags", Tag.inserting(Component.text(roadflags.toString()))) TagResolver.resolver("flags", Tag.inserting(Component.text(roadflags.toString())))

View File

@ -26,8 +26,8 @@ import java.util.Iterator;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
/** /**
* The PlotId class represents a Plot's x and y coordinates within a {@link PlotArea}. PlotId x,y values do not correspond to Block locations. * Plot (X,Y) tuples for plot locations
* A PlotId instance can be created using the {@link #of(int, int)} method or parsed from a string using the {@link #fromString(String)} method. * within a plot area
*/ */
public final class PlotId { public final class PlotId {
@ -36,10 +36,10 @@ public final class PlotId {
private final int hash; private final int hash;
/** /**
* Constructs a new PlotId with the given x and y coordinates. * PlotId class (PlotId x,y values do not correspond to Block locations)
* *
* @param x the x-coordinate of the plot * @param x The plot x coordinate
* @param y the y-coordinate of the plot * @param y The plot y coordinate
*/ */
private PlotId(final int x, final int y) { private PlotId(final int x, final int y) {
this.x = x; this.x = x;
@ -48,11 +48,11 @@ public final class PlotId {
} }
/** /**
* Returns a new PlotId instance with the specified x and y coordinates. * Create a new plot ID instance
* *
* @param x the x-coordinate of the plot * @param x The plot x coordinate
* @param y the y-coordinate of the plot * @param y The plot y coordinate
* @return a new PlotId instance with the specified x and y coordinates * @return a new PlotId at x,y
*/ */
public static @NonNull PlotId of(final int x, final int y) { public static @NonNull PlotId of(final int x, final int y) {
return new PlotId(x, y); return new PlotId(x, y);
@ -74,13 +74,10 @@ public final class PlotId {
} }
/** /**
* Returns a PlotId object from the given string, or null if the string is invalid. * Attempt to parse a plot ID from a string
* The string should be in the format "x;y" where x and y are integers.
* The string can also contain any combination of the characters ";_,."
* as delimiters.
* *
* @param string the string to parse * @param string ID string
* @return a PlotId object parsed from the given string, or null if the string is invalid * @return Plot ID, or {@code null} if none could be parsed
*/ */
public static @Nullable PlotId fromStringOrNull(final @NonNull String string) { public static @Nullable PlotId fromStringOrNull(final @NonNull String string) {
final String[] parts = string.split("[;_,.]"); final String[] parts = string.split("[;_,.]");
@ -98,39 +95,39 @@ public final class PlotId {
return of(x, y); return of(x, y);
} }
/** /**
* Returns a new PlotId instance from the given hash. * Gets the PlotId from the HashCode<br>
* Note: Only accurate for small x,z values (short)
* *
* @param hash the hash to unpair * @param hash ID hash
* @return a new PlotId instance * @return Plot ID
*/ */
public static @NonNull PlotId unpair(final int hash) { public static @NonNull PlotId unpair(final int hash) {
return PlotId.of(hash >> 16, hash & 0xFFFF); return PlotId.of(hash >> 16, hash & 0xFFFF);
} }
/** /**
* Returns the x-coordinate of this Plot ID. * Get the ID X component
* *
* @return the x-coordinate of this Plot ID * @return X component
*/ */
public int getX() { public int getX() {
return this.x; return this.x;
} }
/** /**
* Returns the y-coordinate of this Plot ID. * Get the ID Y component
* *
* @return the y-coordinate of this Plot ID * @return Y component
*/ */
public int getY() { public int getY() {
return this.y; return this.y;
} }
/** /**
* Returns the next Plot ID for claiming purposes based on the current Plot ID. * Get the next plot ID for claiming purposes
* *
* @return the next Plot ID * @return Next plot ID
*/ */
public @NonNull PlotId getNextId() { public @NonNull PlotId getNextId() {
final int absX = Math.abs(x); final int absX = Math.abs(x);
@ -162,11 +159,10 @@ public final class PlotId {
} }
/** /**
* Returns a new Plot ID in the specified relative direction based on the * Get the PlotId in a relative direction
* current Plot ID.
* *
* @param direction the direction in which to get the relative Plot ID * @param direction Direction
* @return the relative Plot ID * @return Relative plot ID
*/ */
public @NonNull PlotId getRelative(final @NonNull Direction direction) { public @NonNull PlotId getRelative(final @NonNull Direction direction) {
return switch (direction) { return switch (direction) {
@ -197,11 +193,10 @@ public final class PlotId {
} }
/** /**
* Returns a string representation of this Plot ID in the format "x;y". * Get a String representation of the plot ID where the
* components are separated by ";"
* *
* <p> The format is {@code x + ";" + y} * @return {@code x + ";" + y}
*
* @return a string representation of this Plot ID
*/ */
@Override @Override
public @NonNull String toString() { public @NonNull String toString() {
@ -209,40 +204,41 @@ public final class PlotId {
} }
/** /**
* Returns a string representation of this Plot ID with the specified separator. * Get a String representation of the plot ID where the
* <p> * components are separated by a specified string
* The format is {@code x + separator + y}
* *
* @param separator the separator to use between the X and Y coordinates * @param separator Separator
* @return a string representation of this Plot ID with the specified separator * @return {@code x + separator + y}
*/ */
public @NonNull String toSeparatedString(String separator) { public @NonNull String toSeparatedString(String separator) {
return this.getX() + separator + this.getY(); return this.getX() + separator + this.getY();
} }
/** /**
* Returns a string representation of this Plot ID in the format "x,y". * Get a String representation of the plot ID where the
* components are separated by ","
* *
* @return a string representation of this Plot ID * @return {@code x + "," + y}
*/ */
public @NonNull String toCommaSeparatedString() { public @NonNull String toCommaSeparatedString() {
return this.getX() + "," + this.getY(); return this.getX() + "," + this.getY();
} }
/** /**
* Returns a string representation of this Plot ID in the format "x_y". * Get a String representation of the plot ID where the
* components are separated by "_"
* *
* @return a string representation of this Plot ID * @return {@code x + "_" + y}
*/ */
public @NonNull String toUnderscoreSeparatedString() { public @NonNull String toUnderscoreSeparatedString() {
return this.getX() + "_" + this.getY(); return this.getX() + "_" + this.getY();
} }
/** /**
* Returns a string representation of this Plot ID in the format "x-y". * Get a String representation of the plot ID where the
* components are separated by "-"
* *
* @return a string representation of this Plot ID * @return {@code x + "-" + y}
*/ */
public @NonNull String toDashSeparatedString() { public @NonNull String toDashSeparatedString() {
return this.getX() + "-" + this.getY(); return this.getX() + "-" + this.getY();
@ -254,10 +250,6 @@ public final class PlotId {
} }
/**
* An iterator that iterates over a range of {@link PlotId}s.
* The range is defined by a start and end {@link PlotId}.
*/
public static final class PlotRangeIterator implements Iterator<PlotId>, Iterable<PlotId> { public static final class PlotRangeIterator implements Iterator<PlotId>, Iterable<PlotId> {
private final PlotId start; private final PlotId start;
@ -273,13 +265,6 @@ public final class PlotId {
this.y = this.start.getY(); this.y = this.start.getY();
} }
/**
* Returns a new {@link PlotRangeIterator} that iterates over the range of Plots between the specified start and end Plots (inclusive).
*
* @param start the starting Plot of the range
* @param end the ending Plot of the range
* @return a new {@link PlotRangeIterator} that iterates over the range of Plots between the specified start and end Plots (inclusive)
*/
public static PlotRangeIterator range(final @NonNull PlotId start, final @NonNull PlotId end) { public static PlotRangeIterator range(final @NonNull PlotId start, final @NonNull PlotId end) {
return new PlotRangeIterator(start, end); return new PlotRangeIterator(start, end);
} }

View File

@ -67,25 +67,14 @@ public class PlotItemStack {
return this.type; return this.type;
} }
/**
* Returns the number of items in this stack.
* Valid values range from 1-255.
*
* @return the amount of items in this stack
*/
public int getAmount() { public int getAmount() {
return amount; return amount;
} }
/**
* Returns the given name of this stack of items. The name is displayed when
* hovering over the item.
*
* @return the given name of this stack of items
*/
public String getName() { public String getName() {
return name; return name;
} }
public String[] getLore() { public String[] getLore() {
return lore; return lore;
} }

View File

@ -891,6 +891,7 @@ public final class PlotModificationManager {
} }
/** /**
* /**
* Sets components such as border, wall, floor. * Sets components such as border, wall, floor.
* (components are generator specific) * (components are generator specific)
* *

View File

@ -18,25 +18,9 @@
*/ */
package com.plotsquared.core.plot; package com.plotsquared.core.plot;
/**
* The different types of weather that can be set for a Plot.
*/
public enum PlotWeather { public enum PlotWeather {
/**
* Rainy weather conditions
*/
RAIN, RAIN,
/**
* Clear weather conditions
*/
CLEAR, CLEAR,
/**
* Use the weather of the world the plot is in
*/
WORLD, WORLD,
/**
* Turn off weather for the plot
*/
OFF OFF
} }

View File

@ -124,7 +124,7 @@
"economy.cannot_afford_merge": "<prefix><red>You cannot afford to merge the plots. It costs <gold><money></gold>.</red>", "economy.cannot_afford_merge": "<prefix><red>You cannot afford to merge the plots. It costs <gold><money></gold>.</red>",
"economy.added_balance": "<prefix><gold><money> </gold><gray>has been added to your balance.</gray>", "economy.added_balance": "<prefix><gold><money> </gold><gray>has been added to your balance.</gray>",
"economy.removed_balance": "<prefix><gold><money> </gold><gray>has been taken from your balance.</gray>", "economy.removed_balance": "<prefix><gold><money> </gold><gray>has been taken from your balance.</gray>",
"economy.removed_granted_plot": "<prefix><gray>You used <used_grants> plot grant(s), you've got </gray><gold><remaining_grants></gold> <gray>left.</gray>", "economy.removed_granted_plot": "<prefix><gray>You used <usedGrants> plot grant(s), you've got </gray><gold><remainingGrants></gold> <gray>left.</gray>",
"setup.choose_generator": "<gold>What generator do you want?</gold>", "setup.choose_generator": "<gold>What generator do you want?</gold>",
"setup.setup_not_started": "<prefix><gold>No setup started.</gold>", "setup.setup_not_started": "<prefix><gold>No setup started.</gold>",
"setup.setup_init": "<prefix><gold>Usage: </gold><gray>/plot setup <value></gray>", "setup.setup_init": "<prefix><gold>Usage: </gold><gray>/plot setup <value></gray>",

View File

@ -27,16 +27,16 @@ is to provide a lag-free and smooth experience.
* [Download](https://www.spigotmc.org/resources/77506/) * [Download](https://www.spigotmc.org/resources/77506/)
* [Discord](https://discord.gg/intellectualsites) * [Discord](https://discord.gg/intellectualsites)
* [Wiki](https://intellectualsites.gitbook.io/plotsquared/) * [Wiki](https://intellectualsites.github.io/plotsquared-documentation/)
* [Issues](https://github.com/IntellectualSites/PlotSquared/issues) * [Issues](https://github.com/IntellectualSites/PlotSquared/issues)
* [Translations](https://intellectualsites.crowdin.com/plotsquared/) * [Translations](https://intellectualsites.crowdin.com/plotsquared/)
* [Contributing](https://github.com/IntellectualSites/.github/blob/main/CONTRIBUTING.md) * [Contributing](https://github.com/IntellectualSites/.github/blob/main/CONTRIBUTING.md)
### Developer Resources ### Developer Resources
* [API Documentation](https://intellectualsites.gitbook.io/plotsquared/api/api-documentation) * [API Documentation](https://intellectualsites.github.io/plotsquared-documentation/api/api-documentation)
* [Event API](https://intellectualsites.gitbook.io/plotsquared/api/event-api) * [Event API](https://intellectualsites.github.io/plotsquared-documentation/api/event-api)
* [Flag API](https://intellectualsites.gitbook.io/plotsquared/api/flag-api) * [Flag API](https://intellectualsites.github.io/plotsquared-documentation/api/flag-api)
# Official Addons # Official Addons

View File

@ -1,6 +1,5 @@
import com.diffplug.gradle.spotless.SpotlessPlugin import com.diffplug.gradle.spotless.SpotlessPlugin
import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
import groovy.json.JsonSlurper
import java.net.URI import java.net.URI
import xyz.jpenilla.runpaper.task.RunServer import xyz.jpenilla.runpaper.task.RunServer
@ -18,11 +17,11 @@ plugins {
eclipse eclipse
idea idea
alias(libs.plugins.runPaper) id("xyz.jpenilla.run-paper") version "2.1.0"
} }
group = "com.intellectualsites.plotsquared" group = "com.intellectualsites.plotsquared"
version = "7.0.1-SNAPSHOT" version = "7.0.0-SNAPSHOT"
if (!File("$rootDir/.git").exists()) { if (!File("$rootDir/.git").exists()) {
logger.lifecycle(""" logger.lifecycle("""
@ -77,9 +76,13 @@ subprojects {
plugin<IdeaPlugin>() plugin<IdeaPlugin>()
} }
dependencies {
implementation(platform("com.intellectualsites.bom:bom-newest:1.31"))
}
dependencies { dependencies {
// Tests // Tests
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") testImplementation("org.junit.jupiter:junit-jupiter:5.9.3")
} }
plugins.withId("java") { plugins.withId("java") {
@ -219,23 +222,14 @@ tasks.getByName<Jar>("jar") {
enabled = false enabled = false
} }
val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1") 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 { tasks {
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
val artifact = ((JsonSlurper().parse(lastSuccessfulBuildUrl) as Map<*, *>)["artifacts"] as List<*>)
.map { it as Map<*, *> }
.map { it["fileName"] as String }
.first { it.contains("Bukkit") }
supportedVersions.forEach { supportedVersions.forEach {
register<RunServer>("runServer-$it") { register<RunServer>("runServer-$it") {
minecraftVersion(it) minecraftVersion(it)
pluginJars(*project(":plotsquared-bukkit").getTasksByName("shadowJar", false).map { (it as Jar).archiveFile } pluginJars(*project(":plotsquared-bukkit").getTasksByName("shadowJar", false).map { (it as Jar).archiveFile }
.toTypedArray()) .toTypedArray())
jvmArgs("-DPaper.IgnoreJavaVersion=true", "-Dcom.mojang.eula.agree=true") jvmArgs("-DPaper.IgnoreJavaVersion=true", "-Dcom.mojang.eula.agree=true")
downloadPlugins {
url("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/artifact/artifacts/$artifact")
}
group = "run paper" group = "run paper"
runDirectory.set(file("run-$it")) runDirectory.set(file("run-$it"))
} }

View File

@ -1,58 +1,33 @@
[versions] [versions]
# Platform expectations # Platform expectations
paper = "1.20.1-R0.1-SNAPSHOT"
guice = "7.0.0" guice = "7.0.0"
spotbugs = "4.7.3" spotbugs = "4.7.3"
checkerqual = "3.37.0"
gson = "2.10"
guava = "31.1-jre"
snakeyaml = "2.0"
adventure = "4.14.0"
adventure-bukkit = "4.3.0"
log4j = "2.19.0"
# Plugins # Plugins
worldedit = "7.2.15" worldedit = "7.2.15"
fawe = "2.7.1"
placeholderapi = "2.11.3" placeholderapi = "2.11.3"
luckperms = "5.4" luckperms = "5.4"
essentialsx = "2.20.1" essentialsx = "2.20.0"
mvdwapi = "3.1.1" mvdwapi = "3.1.1"
# Third party # Third party
prtree = "2.0.1" prtree = "2.0.1"
aopalliance = "1.0" aopalliance = "1.0"
cloud-services = "1.8.4" cloud-services = "1.8.3"
arkitektonika = "2.1.2" arkitektonika = "2.1.2"
squirrelid = "0.3.2" squirrelid = "0.3.2"
paster = "1.1.5"
bstats = "3.0.2"
paperlib = "1.0.8"
informative-annotations = "1.3"
vault = "1.7.1"
serverlib = "2.3.4"
# Gradle plugins # Gradle plugins
shadow = "8.1.1" shadow = "8.1.1"
grgit = "4.1.1" grgit = "4.1.1"
spotless = "6.21.0" spotless = "6.19.0"
nexus = "1.3.0" nexus = "1.3.0"
runPaper = "2.2.0"
[libraries] [libraries]
# Platform expectations # Platform expectations
paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" }
guice = { group = "com.google.inject", name = "guice", version.ref = "guice" } guice = { group = "com.google.inject", name = "guice", version.ref = "guice" }
guiceassistedinject = { group = "com.google.inject.extensions", name = "guice-assistedinject", version.ref = "guice" } guiceassistedinject = { group = "com.google.inject.extensions", name = "guice-assistedinject", version.ref = "guice" }
spotbugs = { group = "com.github.spotbugs", name = "spotbugs-annotations", version.ref = "spotbugs" } spotbugs = { group = "com.github.spotbugs", name = "spotbugs-annotations", version.ref = "spotbugs" }
checkerqual = { group = "org.checkerframework", name = "checker-qual", version.ref = "checkerqual" }
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
guava = { group = "com.google.guava", name = "guava", version.ref = "guava" }
snakeyaml = { group = "org.yaml", name = "snakeyaml", version.ref = "snakeyaml" }
adventureApi = { group = "net.kyori", name = "adventure-api", version.ref = "adventure" }
adventureMiniMessage = { group = "net.kyori", name = "adventure-text-minimessage", version.ref = "adventure" }
adventureBukkit = { group = "net.kyori", name = "adventure-platform-bukkit", version.ref = "adventure-bukkit" }
log4j = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" }
# Plugins # Plugins
worldeditCore = { group = "com.sk89q.worldedit", name = "worldedit-core", version.ref = "worldedit" } worldeditCore = { group = "com.sk89q.worldedit", name = "worldedit-core", version.ref = "worldedit" }
@ -60,8 +35,6 @@ worldeditBukkit = { group = "com.sk89q.worldedit", name = "worldedit-bukkit", ve
placeholderapi = { group = "me.clip", name = "placeholderapi", version.ref = "placeholderapi" } placeholderapi = { group = "me.clip", name = "placeholderapi", version.ref = "placeholderapi" }
luckperms = { group = "net.luckperms", name = "api", version.ref = "luckperms" } luckperms = { group = "net.luckperms", name = "api", version.ref = "luckperms" }
essentialsx = { group = "net.essentialsx", name = "EssentialsX", version.ref = "essentialsx" } essentialsx = { group = "net.essentialsx", name = "EssentialsX", version.ref = "essentialsx" }
faweCore = { group = "com.fastasyncworldedit", name = "FastAsyncWorldEdit-Core", version.ref = "fawe" }
faweBukkit = { group = "com.fastasyncworldedit", name = "FastAsyncWorldEdit-Bukkit", version.ref = "fawe" }
# Third party # Third party
prtree = { group = "com.intellectualsites.prtree", name = "PRTree", version.ref = "prtree" } prtree = { group = "com.intellectualsites.prtree", name = "PRTree", version.ref = "prtree" }
@ -70,17 +43,9 @@ cloudServices = { group = "cloud.commandframework", name = "cloud-services", ver
mvdwapi = { group = "com.intellectualsites.mvdwplaceholderapi", name = "MVdWPlaceholderAPI", version.ref = "mvdwapi" } mvdwapi = { group = "com.intellectualsites.mvdwplaceholderapi", name = "MVdWPlaceholderAPI", version.ref = "mvdwapi" }
squirrelid = { group = "org.enginehub", name = "squirrelid", version.ref = "squirrelid" } squirrelid = { group = "org.enginehub", name = "squirrelid", version.ref = "squirrelid" }
arkitektonika = { group = "com.intellectualsites.arkitektonika", name = "Arkitektonika-Client", version.ref = "arkitektonika" } arkitektonika = { group = "com.intellectualsites.arkitektonika", name = "Arkitektonika-Client", version.ref = "arkitektonika" }
paster = { group = "com.intellectualsites.paster", name = "Paster", version.ref = "paster" }
bstatsBase = { group = "org.bstats", name = "bstats-base", version.ref = "bstats" }
bstatsBukkit = { group = "org.bstats", name = "bstats-bukkit", version.ref = "bstats" }
informativeAnnotations = { group = "com.intellectualsites.informative-annotations", name = "informative-annotations", version.ref = "informative-annotations" }
paperlib = { group = "io.papermc", name = "paperlib", version.ref = "paperlib" }
vault = { group = "com.github.MilkBowl", name = "VaultAPI", version.ref = "vault" }
serverlib = { group = "dev.notmyfault.serverlib", name = "ServerLib", version.ref = "serverlib" }
[plugins] [plugins]
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" } shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }
grgit = { id = "org.ajoberstar.grgit", version.ref = "grgit" } grgit = { id = "org.ajoberstar.grgit", version.ref = "grgit" }
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
nexus = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexus" } nexus = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexus" }
runPaper = { id = "xyz.jpenilla.run-paper", version.ref = "runPaper" }

Binary file not shown.

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

3
gradlew vendored
View File

@ -83,8 +83,7 @@ done
# This is normally unused # This is normally unused
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum

View File

@ -1,4 +1,4 @@
Javadocs generated for Javadocs generated for
<a href="https://github.com/IntellectualSites/PlotSquared/" rel="noopener nofollow noreferrer" target="_blank"> PlotSquared</a> | <a href="https://github.com/IntellectualSites/PlotSquared/" rel="noopener nofollow noreferrer" target="_blank"> PlotSquared</a> |
<a href="https://intellectualsites.gitbook.io/plotsquared/" rel="noopener nofollow noreferrer"> Documentation </a> | <a href="https://intellectualsites.github.io/plotsquared-documentation/" rel="noopener nofollow noreferrer"> Documentation </a> |
Visit us on our <a href="https://discord.gg/intellectualsites" rel="noopener nofollow noreferrer"> Discord server</a> :) Visit us on our <a href="https://discord.gg/intellectualsites" rel="noopener nofollow noreferrer"> Discord server</a> :)