Compare commits

...

22 Commits

Author SHA1 Message Date
a72e615790 build: Switch back to upstream SquirrelID 2022-04-18 21:14:38 +02:00
38682ecff6 fix: share the QueueCoordinator in PlotModificationManager#unlinkPlot (#3571)
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-04-15 07:01:53 +00:00
6a54dc7eff fix: typo (MaxBuildHeight -> MinBuildHeight) (#3572) 2022-04-15 08:59:01 +02:00
8454c29c91 fix: Make PlayerManager#resolveName blocking for entry title (#3556) 2022-04-11 14:38:02 +00:00
b2c9311a47 build: Update com.fastasyncworldedit to v2.1.1 (#3562)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-04 15:32:02 +02:00
c4aa497a2b build: Update actions/setup-java action to v3.1.0 (#3563)
* build: Update actions/setup-java action to v3.1.0

* Update build.yml

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-04-04 15:31:53 +02:00
c13f544390 build: Back to snapshot for development 2022-04-04 13:03:49 +02:00
c28177d6af build: Release 6.6.2 2022-04-04 12:56:13 +02:00
8a80f252cf chore: Fill in since TODOs 2022-04-04 12:54:42 +02:00
93571c72d1 build: Update dependency org.checkerframework:checker-qual to v3.21.4 (#3561)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-04 12:47:38 +02:00
6fd7379221 build: Update dependency gradle to v7.4.2 (#3560)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-04 12:46:49 +02:00
dc5c80d812 clean up PlayerCommandPreprocess listener (#3557) 2022-04-01 19:30:37 +02:00
96e9a61e7c refactor: Deprecate Load#secToTime() (#3558) 2022-04-01 19:30:11 +02:00
b9bd9b81e6 Make confirm tasks synchronous. It was changed in 7ac3f7ca03 (#3551) 2022-03-23 15:04:39 +01:00
ec77812879 build: Update com.sk89q.worldedit to v7.2.10 (#3554)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-21 11:49:34 +01:00
efc2083798 Change the default sign orientation to better match the wall location 2022-03-15 16:25:40 +00:00
3a6f845c01 Use correct field for unsaved in 1.18 2022-03-15 16:25:23 +00:00
7efd42ae45 build: Ignore kyori updates until we update MM
Closes #3543
2022-03-14 20:09:52 +01:00
f43f4cbf5d build: Update com.fastasyncworldedit to v2.1.0 (#3541)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-14 15:36:43 +01:00
104cc4b7a4 build: Update dependency net.essentialsx:EssentialsX to v2.19.4 (#3540)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-14 12:40:03 +01:00
218be43143 build: Update dependency gradle to v7.4.1 (#3539)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-14 12:39:46 +01:00
308dba5601 Only add extent to WE operations once (#3537) 2022-03-10 22:40:09 +01:00
16 changed files with 106 additions and 88 deletions

View File

@ -8,11 +8,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3.0.0
uses: actions/checkout@v3
- name: Validate Gradle Wrapper"
uses: gradle/wrapper-validation-action@v1.0.4
uses: gradle/wrapper-validation-action@v1
- name: Setup Java
uses: actions/setup-java@v3.0.0
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 17

View File

@ -76,7 +76,6 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PremiumVerification;
import com.plotsquared.core.util.RegExUtil;
import com.plotsquared.core.util.entity.EntityCategories;
import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.util.task.TaskTime;
@ -223,10 +222,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
}
@SuppressWarnings("StringSplitter")
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void playerCommand(PlayerCommandPreprocessEvent event) {
String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim();
String msg = event.getMessage().replace("/", "").toLowerCase(Locale.ROOT).trim();
if (msg.isEmpty()) {
return;
}
@ -240,11 +238,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
String[] parts = msg.split(" ");
Plot plot = plotPlayer.getCurrentPlot();
// Check WorldEdit
switch (parts[0].toLowerCase()) {
switch (parts[0]) {
case "up":
case "/up":
case "worldedit:up":
case "worldedit:/up":
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) {
event.setCancelled(true);
@ -258,63 +254,67 @@ public class PlayerEventListener extends PlotListener implements Listener {
List<String> blockedCommands = plot != null ?
plot.getFlag(BlockedCmdsFlag.class) :
area.getFlag(BlockedCmdsFlag.class);
if (!blockedCommands.isEmpty() && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
String part = parts[0];
if (parts[0].contains(":")) {
part = parts[0].split(":")[1];
msg = msg.replace(parts[0].split(":")[0] + ':', "");
}
String s1 = part;
List<String> aliases = new ArrayList<>();
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) {
if (part.equals(cmdLabel.getName())) {
break;
}
String label = cmdLabel.getName().replaceFirst("/", "");
if (aliases.contains(label)) {
continue;
}
PluginCommand p;
if ((p = Bukkit.getPluginCommand(label)) != null) {
for (String a : p.getAliases()) {
if (aliases.contains(a)) {
continue;
}
aliases.add(a);
a = a.replaceFirst("/", "");
if (!a.equals(label) && a.equals(part)) {
part = label;
break;
}
}
}
}
if (!s1.equals(part)) {
msg = msg.replace(s1, part);
}
for (String s : blockedCommands) {
Pattern pattern;
if (!RegExUtil.compiledPatterns.containsKey(s)) {
RegExUtil.compiledPatterns.put(s, pattern = Pattern.compile(s));
if (blockedCommands.isEmpty()) {
return;
}
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
return;
}
// When using namespaced commands, we're not interested in the namespace
String part = parts[0];
if (part.contains(":")) {
String[] namespaced = part.split(":");
part = namespaced[1];
msg = msg.substring(namespaced[0].length() + 1);
}
msg = replaceAliases(msg, part);
for (String blocked : blockedCommands) {
if (blocked.equalsIgnoreCase(msg)) {
String perm;
if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
perm = "plots.admin.command.blocked-cmds.shared";
} else {
pattern = RegExUtil.compiledPatterns.get(s);
perm = "plots.admin.command.blocked-cmds.road";
}
if (pattern.matcher(msg).matches()) {
String perm;
if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
perm = "plots.admin.command.blocked-cmds.shared";
} else {
perm = "plots.admin.command.blocked-cmds.road";
if (!Permissions.hasPermission(plotPlayer, perm)) {
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
event.setCancelled(true);
}
return;
}
}
}
private String replaceAliases(String msg, String part) {
String s1 = part;
Set<String> aliases = new HashSet<>();
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) {
if (part.equals(cmdLabel.getName())) {
break;
}
String label = cmdLabel.getName().replaceFirst("/", "");
if (aliases.contains(label)) {
continue;
}
PluginCommand p = Bukkit.getPluginCommand(label);
if (p != null) {
for (String a : p.getAliases()) {
if (aliases.contains(a)) {
continue;
}
if (!Permissions.hasPermission(plotPlayer, perm)) {
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
event.setCancelled(true);
aliases.add(a);
a = a.replaceFirst("/", "");
if (!a.equals(label) && a.equals(part)) {
part = label;
break;
}
return;
}
}
}
if (!s1.equals(part)) {
msg = msg.replace(s1, part);
}
return msg;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)

View File

@ -46,7 +46,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
public class SingleWorldListener implements Listener {
private final Method methodGetHandleChunk;
private Field shouldSave;
private Field shouldSave = null;
public SingleWorldListener() throws Exception {
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
@ -59,9 +59,12 @@ public class SingleWorldListener implements Listener {
} else {
this.shouldSave = classChunk.getField("s").getRealField();
}
} else {
} 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();

View File

@ -347,13 +347,15 @@ public class BukkitUtil extends WorldUtil {
final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ());
final Material type = block.getType();
if (type != Material.LEGACY_SIGN && type != Material.LEGACY_WALL_SIGN) {
BlockFace facing = BlockFace.EAST;
if (world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
facing = BlockFace.NORTH;
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
facing = BlockFace.WEST;
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
facing = BlockFace.SOUTH;
BlockFace facing = BlockFace.NORTH;
if (!world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
if (world.getBlockAt(location.getX() - 1, location.getY(), location.getZ()).getType().isSolid()) {
facing = BlockFace.EAST;
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
facing = BlockFace.WEST;
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
facing = BlockFace.SOUTH;
}
}
if (PlotSquared.platform().serverVersion()[1] == 13) {
block.setType(Material.valueOf(area.legacySignMaterial()), false);

View File

@ -48,7 +48,7 @@ public class Confirm extends SubCommand {
player.sendMessage(TranslatableCaption.of("confirm.expired_confirm"));
return false;
}
TaskManager.runTaskAsync(command.command);
TaskManager.runTask(command.command);
return true;
}

View File

@ -40,6 +40,7 @@ import com.plotsquared.core.plot.schematic.Schematic;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.TimeUtil;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
@ -205,7 +206,7 @@ public class Load extends SubCommand {
if (split.length < 5) {
continue;
}
String time = secToTime((System.currentTimeMillis() / 1000) - Long.parseLong(split[0]));
String time = TimeUtil.secToTime((System.currentTimeMillis() / 1000) - Long.parseLong(split[0]));
String world = split[1];
PlotId id = PlotId.fromString(split[2] + ';' + split[3]);
String size = split[4];
@ -223,6 +224,10 @@ public class Load extends SubCommand {
}
}
/**
* @deprecated Use {@link TimeUtil#secToTime(long)}
*/
@Deprecated(forRemoval = true, since = "6.6.2")
public String secToTime(long time) {
StringBuilder toreturn = new StringBuilder();
if (time >= 33868800) {

View File

@ -389,7 +389,7 @@ public class ClassicPlotManager extends SquarePlotManager {
if (!plot.isMerged(Direction.NORTH)) {
int z = bot.getZ();
for (int x = bot.getX(); x < top.getX(); x++) {
for (int y = classicPlotWorld.getMaxBuildHeight(); y <= classicPlotWorld.WALL_HEIGHT; y++) {
for (int y = classicPlotWorld.getMinBuildHeight(); y <= classicPlotWorld.WALL_HEIGHT; y++) {
queue.setBlock(x, y, z, blocks);
}
}

View File

@ -309,7 +309,7 @@ public class PlotListener {
}
if ((lastPlot != null) && plot.getId().equals(lastPlot.getId()) && plot.hasOwner()) {
final UUID plotOwner = plot.getOwnerAbs();
String owner = PlayerManager.resolveName(plotOwner, false).getComponent(player);
String owner = PlayerManager.resolveName(plotOwner, true).getComponent(player);
Caption header = fromFlag ? StaticCaption.of(title) : TranslatableCaption.of("titles" +
".title_entered_plot");
Caption subHeader = fromFlag ? StaticCaption.of(subtitle) : TranslatableCaption.of("titles" +

View File

@ -35,6 +35,7 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.WEManager;
import com.plotsquared.core.util.WorldUtil;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.event.extent.EditSessionEvent;
@ -67,6 +68,9 @@ public class WESubscriber {
WorldEdit.getInstance().getEventBus().unregister(this);
return;
}
if (event.getStage() != EditSession.Stage.BEFORE_HISTORY) {
return;
}
World worldObj = event.getWorld();
if (worldObj == null) {
return;

View File

@ -333,10 +333,9 @@ public final class PlotModificationManager {
ids.add(current.getId());
}
this.plot.clearRatings();
QueueCoordinator queue = null;
QueueCoordinator queue = this.plot.getArea().getQueue();
if (createSign) {
this.removeSign();
queue = this.plot.getArea().getQueue();
}
PlotManager manager = this.plot.getArea().getPlotManager();
if (createRoad) {

View File

@ -29,6 +29,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
@Deprecated(since = "6.6.2", forRemoval = true)
public class RegExUtil {
public static Map<String, Pattern> compiledPatterns;

View File

@ -44,27 +44,27 @@ public final class TimeUtil {
StringBuilder toReturn = new StringBuilder();
if (time >= 33868800) {
int years = (int) (time / 33868800);
time -= years * 33868800;
time -= years * 33868800L;
toReturn.append(years).append("y ");
}
if (time >= 604800) {
int weeks = (int) (time / 604800);
time -= weeks * 604800;
time -= weeks * 604800L;
toReturn.append(weeks).append("w ");
}
if (time >= 86400) {
int days = (int) (time / 86400);
time -= days * 86400;
time -= days * 86400L;
toReturn.append(days).append("d ");
}
if (time >= 3600) {
int hours = (int) (time / 3600);
time -= hours * 3600;
time -= hours * 3600L;
toReturn.append(hours).append("h ");
}
if (time >= 60) {
int minutes = (int) (time / 60);
time -= minutes * 60;
time -= minutes * 60L;
toReturn.append(minutes).append("m ");
}
if (toReturn.length() == 0 || time > 0) {

View File

@ -18,7 +18,7 @@ plugins {
idea
}
version = "6.6.2-SNAPSHOT"
version = "6.6.3-SNAPSHOT"
allprojects {
group = "com.plotsquared"
@ -40,6 +40,9 @@ allprojects {
maven {
name = "Jitpack"
url = uri("https://jitpack.io")
content {
includeModule("com.github.MilkBowl", "VaultAPI")
}
}
maven {

View File

@ -6,7 +6,7 @@ guava = "31.0.1-jre" # Version set by Minecraft
# Platform expectations
paper = "1.18.1-R0.1-SNAPSHOT"
checker-qual = "3.21.3"
checker-qual = "3.21.4"
guice = "5.1.0"
findbugs = "3.0.1"
snakeyaml = "1.30" # Version set by Bukkit
@ -17,12 +17,12 @@ adventure-text-minimessage = "4.1.0-SNAPSHOT"
adventure-platform-bukkit = "4.0.1"
# Plugins
worldedit = "7.2.9"
fawe = "2.0.2-SNAPSHOT"
worldedit = "7.2.10"
fawe = "2.1.1"
vault = "1.7.1"
placeholderapi = "2.11.1"
luckperms = "5.4"
essentialsx = "2.19.3"
essentialsx = "2.19.4"
mvdwapi = "3.1.1"
# Third party
@ -33,7 +33,7 @@ arkitektonika = "2.1.1"
paster = "1.1.4"
bstats = "3.0.0"
paperlib = "1.0.7"
squirrelid = "0.3.0"
squirrelid = "0.3.1"
serverlib = "2.3.1"
http4j = "1.3"
@ -78,7 +78,7 @@ prtree = { group = "com.intellectualsites.prtree", name = "PRTree", version.ref
aopalliance = { group = "aopalliance", name = "aopalliance", version.ref = "aopalliance" }
cloudServices = { group = "cloud.commandframework", name = "cloud-services", version.ref = "cloud-services" }
mvdwapi = { group = "com.intellectualsites.mvdwplaceholderapi", name = "MVdWPlaceholderAPI", version.ref = "mvdwapi" }
squirrelid = { group = "com.github.EngineHub", name = "SquirrelID", version.ref = "squirrelid" }
squirrelid = { group = "org.enginehub", name = "squirrelid", version.ref = "squirrelid" }
serverlib = { group = "dev.notmyfault.serverlib", name = "ServerLib", version.ref = "serverlib" }
bstats = { group = "org.bstats", name = "bstats-bukkit", version.ref = "bstats" }
paperlib = { group = "io.papermc", name = "paperlib", version.ref = "paperlib" }

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -8,7 +8,8 @@
"com.google.guava:guava",
"com.google.code.gson:gson",
"gson",
"snakeyaml"
"snakeyaml",
"net.kyori"
],
"timezone": "Europe/Berlin",
"schedule": [