mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-03 22:24:43 +02:00
Compare commits
21 Commits
7.2.0
...
feat/plotL
Author | SHA1 | Date | |
---|---|---|---|
fb3da2f97c | |||
a0ee0caba9 | |||
c0b1179d22 | |||
1a18adcd95 | |||
65858c5f3e | |||
5c7520b5f5 | |||
f3b9cd5ded | |||
8a3eb25805 | |||
48bbd3c018 | |||
bf85013f70 | |||
d36a2d236b | |||
79f111ec0a | |||
31ae62b62c | |||
cdb44d4884 | |||
eb63e4351d | |||
ba7880241b | |||
be6838f29e | |||
dc73116401 | |||
b6a87df072 | |||
8195afaa2f | |||
561eac2fbd |
2
.github/renovate.json
vendored
2
.github/renovate.json
vendored
@ -14,6 +14,6 @@
|
|||||||
"com.google.code.gson:gson",
|
"com.google.code.gson:gson",
|
||||||
"com.google.guava:guava",
|
"com.google.guava:guava",
|
||||||
"org.yaml:snakeyaml",
|
"org.yaml:snakeyaml",
|
||||||
"org.apache.logging.log4j:log4j-api",
|
"org.apache.logging.log4j:log4j-api"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
2
.github/workflows/build-pr.yml
vendored
2
.github/workflows/build-pr.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- name: Validate Gradle Wrapper
|
- name: Validate Gradle Wrapper
|
||||||
uses: gradle/wrapper-validation-action@v1
|
uses: gradle/wrapper-validation-action@v1
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- name: Validate Gradle Wrapper
|
- name: Validate Gradle Wrapper
|
||||||
uses: gradle/wrapper-validation-action@v1
|
uses: gradle/wrapper-validation-action@v1
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@ -22,7 +22,7 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
@ -37,6 +37,7 @@ import com.plotsquared.bukkit.listener.EntityEventListener;
|
|||||||
import com.plotsquared.bukkit.listener.EntitySpawnListener;
|
import com.plotsquared.bukkit.listener.EntitySpawnListener;
|
||||||
import com.plotsquared.bukkit.listener.PaperListener;
|
import com.plotsquared.bukkit.listener.PaperListener;
|
||||||
import com.plotsquared.bukkit.listener.PlayerEventListener;
|
import com.plotsquared.bukkit.listener.PlayerEventListener;
|
||||||
|
import com.plotsquared.bukkit.listener.PlayerEventListener1201;
|
||||||
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
||||||
import com.plotsquared.bukkit.listener.ServerListener;
|
import com.plotsquared.bukkit.listener.ServerListener;
|
||||||
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
||||||
@ -359,6 +360,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
|
|
||||||
if (Settings.Enabled_Components.EVENTS) {
|
if (Settings.Enabled_Components.EVENTS) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener.class), this);
|
||||||
|
if ((serverVersion()[1] == 20 && serverVersion()[2] >= 1) || serverVersion()[1] > 20) {
|
||||||
|
getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener1201.class), this);
|
||||||
|
}
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener.class), this);
|
||||||
if (serverVersion()[1] >= 17) {
|
if (serverVersion()[1] >= 17) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener117.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener117.class), this);
|
||||||
@ -814,6 +818,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
case "MINECART_MOB_SPAWNER":
|
case "MINECART_MOB_SPAWNER":
|
||||||
case "ENDER_CRYSTAL":
|
case "ENDER_CRYSTAL":
|
||||||
case "MINECART_TNT":
|
case "MINECART_TNT":
|
||||||
|
case "CHEST_BOAT":
|
||||||
case "BOAT":
|
case "BOAT":
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
||||||
com.plotsquared.core.location.Location location = BukkitUtil.adapt(entity.getLocation());
|
com.plotsquared.core.location.Location location = BukkitUtil.adapt(entity.getLocation());
|
||||||
|
@ -143,6 +143,10 @@ public class EntityEventListener implements Listener {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Armour-stands are handled elsewhere and should not be handled by area-wide entity-spawn options
|
||||||
|
if (entity.getType() == EntityType.ARMOR_STAND) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
||||||
switch (reason.toString()) {
|
switch (reason.toString()) {
|
||||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
||||||
@ -153,7 +157,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",
|
||||||
"DUPLICATION", "FROZEN", "SPELL" -> {
|
"DUPLICATION", "FROZEN", "SPELL", "DEFAULT" -> {
|
||||||
if (!area.isMobSpawning()) {
|
if (!area.isMobSpawning()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -166,7 +170,7 @@ public class EntityEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
||||||
if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) {
|
if (!area.isSpawnCustom()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,7 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
Slime slime = event.getEntity();
|
Slime slime = event.getEntity();
|
||||||
|
|
||||||
Block b = slime.getTargetBlock(4);
|
Block b = slime.getTargetBlockExact(4);
|
||||||
if (b == null) {
|
if (b == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -166,12 +166,16 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
Location location = BukkitUtil.adapt(event.getSpawnLocation());
|
Location location = BukkitUtil.adapt(event.getSpawnLocation());
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (!location.isPlotArea()) {
|
if (area == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Armour-stands are handled elsewhere and should not be handled by area-wide entity-spawn options
|
||||||
|
if (event.getType() == EntityType.ARMOR_STAND) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// If entities are spawning... the chunk should be loaded?
|
// If entities are spawning... the chunk should be loaded?
|
||||||
Entity[] entities = event.getSpawnLocation().getChunk().getEntities();
|
Entity[] entities = event.getSpawnLocation().getChunk().getEntities();
|
||||||
if (entities.length > Settings.Chunk_Processor.MAX_ENTITIES) {
|
if (entities.length >= Settings.Chunk_Processor.MAX_ENTITIES) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -200,7 +204,7 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
||||||
if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) {
|
if (!area.isSpawnCustom()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
|
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* 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.bukkit.listener;
|
||||||
|
|
||||||
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
|
import com.plotsquared.core.location.Location;
|
||||||
|
import com.plotsquared.core.plot.Plot;
|
||||||
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
|
||||||
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerSignOpenEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For events since 1.20.1
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public class PlayerEventListener1201 implements Listener {
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
@SuppressWarnings({"removal", "UnstableApiUsage"}) // thanks Paper, thanks Spigot
|
||||||
|
public void onPlayerSignOpenEvent(PlayerSignOpenEvent event) {
|
||||||
|
Sign sign = event.getSign();
|
||||||
|
Location location = BukkitUtil.adapt(sign.getLocation());
|
||||||
|
PlotArea area = location.getPlotArea();
|
||||||
|
if (area == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot plot = location.getOwnedPlot();
|
||||||
|
if (plot == null) {
|
||||||
|
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (plot.isAdded(event.getPlayer().getUniqueId())) {
|
||||||
|
return; // allow for added players
|
||||||
|
}
|
||||||
|
if (!plot.getFlag(EditSignFlag.class)) {
|
||||||
|
plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false");
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -158,6 +158,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
}
|
}
|
||||||
final String[] nodes = stub.split("\\.");
|
final String[] nodes = stub.split("\\.");
|
||||||
final StringBuilder n = new StringBuilder();
|
final StringBuilder n = new StringBuilder();
|
||||||
|
// Wildcard check from less specific permission to more specific permission
|
||||||
for (int i = 0; i < (nodes.length - 1); i++) {
|
for (int i = 0; i < (nodes.length - 1); i++) {
|
||||||
n.append(nodes[i]).append(".");
|
n.append(nodes[i]).append(".");
|
||||||
if (!stub.equals(n + Permission.PERMISSION_STAR.toString())) {
|
if (!stub.equals(n + Permission.PERMISSION_STAR.toString())) {
|
||||||
@ -166,9 +167,11 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Wildcard check for the full permission
|
||||||
if (hasPermission(stub + ".*")) {
|
if (hasPermission(stub + ".*")) {
|
||||||
return Integer.MAX_VALUE;
|
return Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
// Permission value cache for iterative check
|
||||||
int max = 0;
|
int max = 0;
|
||||||
if (CHECK_EFFECTIVE) {
|
if (CHECK_EFFECTIVE) {
|
||||||
boolean hasAny = false;
|
boolean hasAny = false;
|
||||||
|
@ -136,7 +136,9 @@ public class Download extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generation_link_success_legacy_world"),
|
TranslatableCaption.of("web.generation_link_success_legacy_world"),
|
||||||
TagResolver.resolver("url", Tag.inserting(Component.text(url.toString())))
|
TagResolver.builder()
|
||||||
|
.tag("url", Tag.preProcessParsed(url.toString()))
|
||||||
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -103,9 +103,10 @@ public final class FlagCommand extends Command {
|
|||||||
if (flag instanceof IntegerFlag && MathMan.isInteger(value)) {
|
if (flag instanceof IntegerFlag && MathMan.isInteger(value)) {
|
||||||
try {
|
try {
|
||||||
int numeric = Integer.parseInt(value);
|
int numeric = Integer.parseInt(value);
|
||||||
|
// Getting full permission without ".<amount>" at the end
|
||||||
perm = perm.substring(0, perm.length() - value.length() - 1);
|
perm = perm.substring(0, perm.length() - value.length() - 1);
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
if (numeric > 0) {
|
if (numeric >= 0) {
|
||||||
int checkRange = PlotSquared.get().getPlatform().equalsIgnoreCase("bukkit") ?
|
int checkRange = PlotSquared.get().getPlatform().equalsIgnoreCase("bukkit") ?
|
||||||
numeric :
|
numeric :
|
||||||
Settings.Limit.MAX_PLOTS;
|
Settings.Limit.MAX_PLOTS;
|
||||||
|
@ -100,15 +100,17 @@ public class Remove extends SubCommand {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
} else if (uuid == DBFunc.EVERYONE) {
|
} else if (uuid == DBFunc.EVERYONE) {
|
||||||
|
count += plot.getTrusted().size();
|
||||||
if (plot.removeTrusted(uuid)) {
|
if (plot.removeTrusted(uuid)) {
|
||||||
this.eventDispatcher.callTrusted(player, plot, uuid, false);
|
this.eventDispatcher.callTrusted(player, plot, uuid, false);
|
||||||
count++;
|
}
|
||||||
} else if (plot.removeMember(uuid)) {
|
count += plot.getMembers().size();
|
||||||
|
if (plot.removeMember(uuid)) {
|
||||||
this.eventDispatcher.callMember(player, plot, uuid, false);
|
this.eventDispatcher.callMember(player, plot, uuid, false);
|
||||||
count++;
|
}
|
||||||
} else if (plot.removeDenied(uuid)) {
|
count += plot.getDenied().size();
|
||||||
|
if (plot.removeDenied(uuid)) {
|
||||||
this.eventDispatcher.callDenied(player, plot, uuid, false);
|
this.eventDispatcher.callDenied(player, plot, uuid, false);
|
||||||
count++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -522,7 +522,7 @@ public class Settings extends Config {
|
|||||||
@Comment("Should the limit be global (over multiple worlds)")
|
@Comment("Should the limit be global (over multiple worlds)")
|
||||||
public static boolean GLOBAL =
|
public static boolean GLOBAL =
|
||||||
false;
|
false;
|
||||||
@Comment({"The max range of permissions to check for, e.g. plots.plot.127",
|
@Comment({"The max range of integer permissions to check for, e.g. 'plots.plot.127' or 'plots.set.flag.mob-cap.127'",
|
||||||
"The value covers the permission range to check, you need to assign the permission to players/groups still",
|
"The value covers the permission range to check, you need to assign the permission to players/groups still",
|
||||||
"Modifying the value does NOT change the amount of plots players can claim"})
|
"Modifying the value does NOT change the amount of plots players can claim"})
|
||||||
public static int MAX_PLOTS = 127;
|
public static int MAX_PLOTS = 127;
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* 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.events;
|
||||||
|
|
||||||
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import org.checkerframework.checker.index.qual.NonNegative;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called every time after PlotSquared calculated a players plot limit based on their permission.
|
||||||
|
* <p>
|
||||||
|
* May be used to grant a player more plots based on another rank or bought feature.
|
||||||
|
*
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public class PlayerPlotLimitEvent {
|
||||||
|
|
||||||
|
private final PlotPlayer<?> player;
|
||||||
|
|
||||||
|
private int limit;
|
||||||
|
|
||||||
|
public PlayerPlotLimitEvent(@NonNull final PlotPlayer<?> player, @NonNegative final int limit) {
|
||||||
|
this.player = player;
|
||||||
|
this.limit = limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides the previously calculated or set plot limit for {@link #player()}.
|
||||||
|
*
|
||||||
|
* @param limit The amount of plots a player may claim. Must be {@code 0} or greater.
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public void limit(@NonNegative final int limit) {
|
||||||
|
if (limit < 0) {
|
||||||
|
throw new IllegalArgumentException("Player plot limit must be greater or equal 0");
|
||||||
|
}
|
||||||
|
this.limit = limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the previous set limit, if none was overridden before this event handler the default limit based on the players
|
||||||
|
* permissions node is returned.
|
||||||
|
*
|
||||||
|
* @return The currently defined plot limit of this player.
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public @NonNegative int limit() {
|
||||||
|
return limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The player for which the limit is queried.
|
||||||
|
*
|
||||||
|
* @return the player.
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public @NonNull PlotPlayer<?> player() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -21,21 +21,26 @@ package com.plotsquared.core.events;
|
|||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
import java.util.function.UnaryOperator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a player teleports to a plot
|
* Called when a player teleports to a plot
|
||||||
*/
|
*/
|
||||||
public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent {
|
public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent {
|
||||||
|
|
||||||
private final Location from;
|
|
||||||
private final TeleportCause cause;
|
private final TeleportCause cause;
|
||||||
private Result eventResult;
|
private Result eventResult;
|
||||||
|
private final Location from;
|
||||||
|
private UnaryOperator<Location> locationTransformer;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PlayerTeleportToPlotEvent: Called when a player teleports to a plot
|
* PlayerTeleportToPlotEvent: Called when a player teleports to a plot
|
||||||
*
|
*
|
||||||
* @param player That was teleported
|
* @param player That was teleported
|
||||||
* @param from Start location
|
* @param from The origin location, from where the teleport was triggered (players location most likely)
|
||||||
* @param plot Plot to which the player was teleported
|
* @param plot Plot to which the player was teleported
|
||||||
* @param cause Why the teleport is being completed
|
* @param cause Why the teleport is being completed
|
||||||
* @since 6.1.0
|
* @since 6.1.0
|
||||||
@ -57,7 +62,8 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the from location
|
* Get the location, from where the teleport was triggered
|
||||||
|
* (the players current location when executing the home command for example)
|
||||||
*
|
*
|
||||||
* @return Location
|
* @return Location
|
||||||
*/
|
*/
|
||||||
@ -65,6 +71,27 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
|
|||||||
return this.from;
|
return this.from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the currently applied {@link UnaryOperator<Location> transformer} or null, if none was set
|
||||||
|
*
|
||||||
|
* @return LocationTransformer
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public @Nullable UnaryOperator<Location> getLocationTransformer() {
|
||||||
|
return this.locationTransformer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link UnaryOperator<Location> transformer} to mutate the location where the player will be teleported to.
|
||||||
|
* May be {@code null}, if any previous set transformations should be discarded.
|
||||||
|
*
|
||||||
|
* @param locationTransformer The new transformer
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) {
|
||||||
|
this.locationTransformer = locationTransformer;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result getEventResult() {
|
public Result getEventResult() {
|
||||||
return eventResult;
|
return eventResult;
|
||||||
|
@ -100,6 +100,7 @@ public interface PermissionHolder {
|
|||||||
}
|
}
|
||||||
String[] nodes = stub.split("\\.");
|
String[] nodes = stub.split("\\.");
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
|
// Wildcard check from less specific permission to more specific permission
|
||||||
for (int i = 0; i < (nodes.length - 1); i++) {
|
for (int i = 0; i < (nodes.length - 1); i++) {
|
||||||
builder.append(nodes[i]).append(".");
|
builder.append(nodes[i]).append(".");
|
||||||
if (!stub.equals(builder + Permission.PERMISSION_STAR.toString())) {
|
if (!stub.equals(builder + Permission.PERMISSION_STAR.toString())) {
|
||||||
@ -108,6 +109,7 @@ public interface PermissionHolder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Wildcard check for the full permission
|
||||||
if (hasPermission(stub + ".*")) {
|
if (hasPermission(stub + ".*")) {
|
||||||
return Integer.MAX_VALUE;
|
return Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
@ -306,7 +306,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
|||||||
* @return number of allowed plots within the scope (globally, or in the player's current world as defined in the settings.yml)
|
* @return number of allowed plots within the scope (globally, or in the player's current world as defined in the settings.yml)
|
||||||
*/
|
*/
|
||||||
public int getAllowedPlots() {
|
public int getAllowedPlots() {
|
||||||
return hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS);
|
final int calculatedLimit = hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS);
|
||||||
|
return this.eventDispatcher.callPlayerPlotLimit(this, calculatedLimit).limit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,6 +29,7 @@ import com.plotsquared.core.configuration.caption.CaptionUtility;
|
|||||||
import com.plotsquared.core.configuration.caption.StaticCaption;
|
import com.plotsquared.core.configuration.caption.StaticCaption;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.database.DBFunc;
|
import com.plotsquared.core.database.DBFunc;
|
||||||
|
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
|
||||||
import com.plotsquared.core.events.Result;
|
import com.plotsquared.core.events.Result;
|
||||||
import com.plotsquared.core.events.TeleportCause;
|
import com.plotsquared.core.events.TeleportCause;
|
||||||
import com.plotsquared.core.generator.ClassicPlotWorld;
|
import com.plotsquared.core.generator.ClassicPlotWorld;
|
||||||
@ -2573,8 +2574,9 @@ public class Plot {
|
|||||||
*/
|
*/
|
||||||
public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) {
|
public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) {
|
||||||
Plot plot = this.getBasePlot(false);
|
Plot plot = this.getBasePlot(false);
|
||||||
Result result = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause).getEventResult();
|
|
||||||
if (result == Result.DENY) {
|
PlayerTeleportToPlotEvent event = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause);
|
||||||
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Teleport")))
|
TagResolver.resolver("value", Tag.inserting(Component.text("Teleport")))
|
||||||
@ -2582,7 +2584,10 @@ public class Plot {
|
|||||||
resultConsumer.accept(false);
|
resultConsumer.accept(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Consumer<Location> locationConsumer = location -> {
|
|
||||||
|
final Consumer<Location> locationConsumer = calculatedLocation -> {
|
||||||
|
Location location = event.getLocationTransformer() == null ? calculatedLocation :
|
||||||
|
Objects.requireNonNullElse(event.getLocationTransformer().apply(calculatedLocation), calculatedLocation);
|
||||||
if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) {
|
if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) {
|
||||||
player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot"));
|
player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot"));
|
||||||
player.teleport(location, cause);
|
player.teleport(location, cause);
|
||||||
|
@ -42,6 +42,7 @@ import com.plotsquared.core.plot.flag.implementations.DeviceInteractFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
|
import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag;
|
import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag;
|
||||||
|
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.EntityCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.EntityCapFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.EntityChangeBlockFlag;
|
import com.plotsquared.core.plot.flag.implementations.EntityChangeBlockFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ExplosionFlag;
|
import com.plotsquared.core.plot.flag.implementations.ExplosionFlag;
|
||||||
@ -153,6 +154,7 @@ public final class GlobalFlagContainer extends FlagContainer {
|
|||||||
this.addFlag(DeviceInteractFlag.DEVICE_INTERACT_FALSE);
|
this.addFlag(DeviceInteractFlag.DEVICE_INTERACT_FALSE);
|
||||||
this.addFlag(DisablePhysicsFlag.DISABLE_PHYSICS_FALSE);
|
this.addFlag(DisablePhysicsFlag.DISABLE_PHYSICS_FALSE);
|
||||||
this.addFlag(DropProtectionFlag.DROP_PROTECTION_FALSE);
|
this.addFlag(DropProtectionFlag.DROP_PROTECTION_FALSE);
|
||||||
|
this.addFlag(EditSignFlag.EDIT_SIGN_FALSE);
|
||||||
this.addFlag(EntityChangeBlockFlag.ENTITY_CHANGE_BLOCK_FALSE);
|
this.addFlag(EntityChangeBlockFlag.ENTITY_CHANGE_BLOCK_FALSE);
|
||||||
this.addFlag(ExplosionFlag.EXPLOSION_FALSE);
|
this.addFlag(ExplosionFlag.EXPLOSION_FALSE);
|
||||||
this.addFlag(ForcefieldFlag.FORCEFIELD_FALSE);
|
this.addFlag(ForcefieldFlag.FORCEFIELD_FALSE);
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
public class EditSignFlag extends BooleanFlag<EditSignFlag> {
|
||||||
|
public static final EditSignFlag EDIT_SIGN_TRUE = new EditSignFlag(true);
|
||||||
|
public static final EditSignFlag EDIT_SIGN_FALSE = new EditSignFlag(false);
|
||||||
|
|
||||||
|
private EditSignFlag(final boolean value) {
|
||||||
|
super(value, TranslatableCaption.of("flags.flag_description_edit_sign"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected EditSignFlag flagOf(@NonNull final Boolean value) {
|
||||||
|
return value ? EDIT_SIGN_TRUE : EDIT_SIGN_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -30,6 +30,7 @@ import com.plotsquared.core.events.PlayerEnterPlotEvent;
|
|||||||
import com.plotsquared.core.events.PlayerLeavePlotEvent;
|
import com.plotsquared.core.events.PlayerLeavePlotEvent;
|
||||||
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
|
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
|
||||||
import com.plotsquared.core.events.PlayerPlotHelperEvent;
|
import com.plotsquared.core.events.PlayerPlotHelperEvent;
|
||||||
|
import com.plotsquared.core.events.PlayerPlotLimitEvent;
|
||||||
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
|
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
|
||||||
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
|
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
|
||||||
import com.plotsquared.core.events.PlotAutoMergeEvent;
|
import com.plotsquared.core.events.PlotAutoMergeEvent;
|
||||||
@ -63,6 +64,7 @@ import com.plotsquared.core.plot.PlotId;
|
|||||||
import com.plotsquared.core.plot.Rating;
|
import com.plotsquared.core.plot.Rating;
|
||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DeviceInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.DeviceInteractFlag;
|
||||||
|
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MiscPlaceFlag;
|
import com.plotsquared.core.plot.flag.implementations.MiscPlaceFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MobPlaceFlag;
|
import com.plotsquared.core.plot.flag.implementations.MobPlaceFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.PlaceFlag;
|
import com.plotsquared.core.plot.flag.implementations.PlaceFlag;
|
||||||
@ -74,6 +76,7 @@ import com.plotsquared.core.util.task.TaskManager;
|
|||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.entity.Entity;
|
import com.sk89q.worldedit.entity.Entity;
|
||||||
import com.sk89q.worldedit.function.pattern.Pattern;
|
import com.sk89q.worldedit.function.pattern.Pattern;
|
||||||
|
import com.sk89q.worldedit.world.block.BlockCategories;
|
||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -306,6 +309,12 @@ public class EventDispatcher {
|
|||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PlayerPlotLimitEvent callPlayerPlotLimit(PlotPlayer<?> player, int calculatedLimit) {
|
||||||
|
PlayerPlotLimitEvent event = new PlayerPlotLimitEvent(player, calculatedLimit);
|
||||||
|
eventBus.post(event);
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
public void doJoinTask(final PlotPlayer<?> player) {
|
public void doJoinTask(final PlotPlayer<?> player) {
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return; //possible future warning message to figure out where we are retrieving null
|
return; //possible future warning message to figure out where we are retrieving null
|
||||||
@ -392,6 +401,12 @@ public class EventDispatcher {
|
|||||||
if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), false)) {
|
if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), false)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// we check for the EditSignFlag in the PlayerSignOpenEvent again, but we must not cancel the interact event
|
||||||
|
// or send a message if the flag is true
|
||||||
|
if (BlockCategories.ALL_SIGNS != null && BlockCategories.ALL_SIGNS.contains(blockType)
|
||||||
|
&& plot.getFlag(EditSignFlag.class)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (notifyPerms) {
|
if (notifyPerms) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.flag_tutorial_usage"),
|
TranslatableCaption.of("commandconfig.flag_tutorial_usage"),
|
||||||
|
@ -555,6 +555,7 @@
|
|||||||
"flags.flag_description_device_interact": "<gray>Set to `true` to allow devices to be interacted with in the plot.</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_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>",
|
"flags.flag_description_drop_protection": "<gray>Set to `true` to prevent dropped items from being picked up by non-members of the plot.</gray>",
|
||||||
|
"flags.flag_description_edit_sign": "<gray>Set to `true` to allow editing signs in the plot.</gray>",
|
||||||
"flags.flag_description_feed": "<gray>Specify an interval in seconds and an optional amount by which the players will be fed (amount is 1 by default).</gray>",
|
"flags.flag_description_feed": "<gray>Specify an interval in seconds and an optional amount by which the players will be fed (amount is 1 by default).</gray>",
|
||||||
"flags.flag_description_forcefield": "<gray>Set to `true` to enable member forcefield in the plot.</gray>",
|
"flags.flag_description_forcefield": "<gray>Set to `true` to enable member forcefield in the plot.</gray>",
|
||||||
"flags.flag_description_grass_grow": "<gray>Set to `false` to prevent grass from growing within the plot.</gray>",
|
"flags.flag_description_grass_grow": "<gray>Set to `false` to prevent grass from growing within the plot.</gray>",
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
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 groovy.json.JsonSlurper
|
||||||
import java.net.URI
|
|
||||||
import xyz.jpenilla.runpaper.task.RunServer
|
import xyz.jpenilla.runpaper.task.RunServer
|
||||||
|
import java.net.URI
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
java
|
java
|
||||||
@ -22,7 +22,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "com.intellectualsites.plotsquared"
|
group = "com.intellectualsites.plotsquared"
|
||||||
version = "7.2.0"
|
version = "7.2.1-SNAPSHOT"
|
||||||
|
|
||||||
if (!File("$rootDir/.git").exists()) {
|
if (!File("$rootDir/.git").exists()) {
|
||||||
logger.lifecycle("""
|
logger.lifecycle("""
|
||||||
@ -79,7 +79,8 @@ subprojects {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Tests
|
// Tests
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
|
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
|
||||||
|
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.10.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins.withId("java") {
|
plugins.withId("java") {
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
# Platform expectations
|
# Platform expectations
|
||||||
paper = "1.20.2-R0.1-SNAPSHOT"
|
paper = "1.20.2-R0.1-SNAPSHOT"
|
||||||
guice = "7.0.0"
|
guice = "7.0.0"
|
||||||
spotbugs = "4.8.0"
|
spotbugs = "4.8.2"
|
||||||
checkerqual = "3.39.0"
|
checkerqual = "3.40.0"
|
||||||
gson = "2.10"
|
gson = "2.10"
|
||||||
guava = "31.1-jre"
|
guava = "31.1-jre"
|
||||||
snakeyaml = "2.0"
|
snakeyaml = "2.0"
|
||||||
@ -13,7 +13,7 @@ log4j = "2.19.0"
|
|||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
worldedit = "7.2.17"
|
worldedit = "7.2.17"
|
||||||
fawe = "2.8.1"
|
fawe = "2.8.2"
|
||||||
placeholderapi = "2.11.5"
|
placeholderapi = "2.11.5"
|
||||||
luckperms = "5.4"
|
luckperms = "5.4"
|
||||||
essentialsx = "2.20.1"
|
essentialsx = "2.20.1"
|
||||||
@ -35,9 +35,9 @@ 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.22.0"
|
spotless = "6.23.2"
|
||||||
nexus = "1.3.0"
|
nexus = "1.3.0"
|
||||||
runPaper = "2.2.0"
|
runPaper = "2.2.2"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
# Platform expectations
|
# Platform expectations
|
||||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
Reference in New Issue
Block a user