mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-21 20:56:45 +01:00
refactor: perform various code cleanup
This commit is contained in:
parent
746028afbc
commit
8a7c659992
@ -49,8 +49,8 @@ import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
|||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
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.UpdateUtility;
|
|
||||||
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;
|
||||||
@ -293,7 +293,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
this.injector.injectMembers(this);
|
this.injector.injectMembers(this);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.injector.getInstance(TranslationUpdateManager.class).upgradeTranslationFile();
|
this.injector.getInstance(TranslationUpdateManager.class);
|
||||||
|
TranslationUpdateManager.upgradeTranslationFile();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@ -363,7 +364,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
||||||
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
||||||
} else {
|
} else {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
||||||
}
|
}
|
||||||
@ -1008,8 +1009,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable
|
public @Nullable ChunkGenerator getDefaultWorldGenerator(
|
||||||
final ChunkGenerator getDefaultWorldGenerator(
|
|
||||||
final @NonNull String worldName,
|
final @NonNull String worldName,
|
||||||
final @Nullable String id
|
final @Nullable String id
|
||||||
) {
|
) {
|
||||||
@ -1176,9 +1176,17 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
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) {
|
||||||
msg.append("FastAsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit").getDescription().getVersion());
|
msg.append("FastAsyncWorldEdit: ").append(Bukkit
|
||||||
|
.getPluginManager()
|
||||||
|
.getPlugin("FastAsyncWorldEdit")
|
||||||
|
.getDescription()
|
||||||
|
.getVersion());
|
||||||
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
||||||
msg.append("AsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("AsyncWorldEdit").getDescription().getVersion()).append("\n");
|
msg.append("AsyncWorldEdit: ").append(Bukkit
|
||||||
|
.getPluginManager()
|
||||||
|
.getPlugin("AsyncWorldEdit")
|
||||||
|
.getDescription()
|
||||||
|
.getVersion()).append("\n");
|
||||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
} else {
|
} else {
|
||||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
|
@ -18,14 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.entity;
|
package com.plotsquared.bukkit.entity;
|
||||||
|
|
||||||
import org.bukkit.entity.Horse;
|
|
||||||
|
|
||||||
class HorseStats {
|
class HorseStats {
|
||||||
|
|
||||||
double jump;
|
double jump;
|
||||||
boolean chest;
|
boolean chest;
|
||||||
Horse.Variant variant;
|
|
||||||
Horse.Color color;
|
|
||||||
Horse.Style style;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -185,10 +185,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
if (horse instanceof ChestedHorse horse1) {
|
if (horse instanceof ChestedHorse horse1) {
|
||||||
this.horse.chest = horse1.isCarryingChest();
|
this.horse.chest = horse1.isCarryingChest();
|
||||||
}
|
}
|
||||||
//todo these horse features need fixing
|
|
||||||
//this.horse.variant = horse.getVariant();
|
|
||||||
//this.horse.style = horse.getStyle();
|
|
||||||
//this.horse.color = horse.getColor();
|
|
||||||
storeTameable(horse);
|
storeTameable(horse);
|
||||||
storeAgeable(horse);
|
storeAgeable(horse);
|
||||||
storeLiving(horse);
|
storeLiving(horse);
|
||||||
@ -577,10 +573,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
if (horse instanceof ChestedHorse) {
|
if (horse instanceof ChestedHorse) {
|
||||||
((ChestedHorse) horse).setCarryingChest(this.horse.chest);
|
((ChestedHorse) horse).setCarryingChest(this.horse.chest);
|
||||||
}
|
}
|
||||||
//todo broken as of 1.13
|
|
||||||
//horse.setVariant(this.horse.variant);
|
|
||||||
//horse.setStyle(this.horse.style);
|
|
||||||
//horse.setColor(this.horse.color);
|
|
||||||
restoreTameable(horse);
|
restoreTameable(horse);
|
||||||
restoreAgeable(horse);
|
restoreAgeable(horse);
|
||||||
restoreLiving(horse);
|
restoreLiving(horse);
|
||||||
|
@ -54,7 +54,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final boolean PAPER_ASYNC_SAFE = true;
|
public final boolean PAPER_ASYNC_SAFE = true;
|
||||||
@ -411,7 +411,8 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
}
|
}
|
||||||
PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
|
PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
throw new IllegalStateException(String.format("Cannot generate chunk that does not belong to a plot area. World: %s",
|
throw new IllegalStateException(String.format(
|
||||||
|
"Cannot generate chunk that does not belong to a plot area. World: %s",
|
||||||
name
|
name
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,11 @@ public class BlockEventListener117 implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) || plot != null && !plot.getFlag(
|
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(
|
||||||
|
area,
|
||||||
|
MiscInteractFlag.class,
|
||||||
|
true
|
||||||
|
) || plot != null && !plot.getFlag(
|
||||||
MiscInteractFlag.class)) {
|
MiscInteractFlag.class)) {
|
||||||
if (plotPlayer != null) {
|
if (plotPlayer != null) {
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
|
@ -67,16 +67,6 @@ public class ChunkListener implements Listener {
|
|||||||
private RefMethod methodGetHandleChunk;
|
private RefMethod methodGetHandleChunk;
|
||||||
private RefMethod methodGetHandleWorld;
|
private RefMethod methodGetHandleWorld;
|
||||||
private RefField mustSave;
|
private RefField mustSave;
|
||||||
/*
|
|
||||||
private RefMethod methodGetFullChunk;
|
|
||||||
private RefMethod methodGetBukkitChunk;
|
|
||||||
private RefMethod methodGetChunkProvider;
|
|
||||||
private RefMethod methodGetVisibleMap;
|
|
||||||
private RefField worldServer;
|
|
||||||
private RefField playerChunkMap;
|
|
||||||
private RefField updatingChunks;
|
|
||||||
private RefField visibleChunks;
|
|
||||||
*/
|
|
||||||
private Chunk lastChunk;
|
private Chunk lastChunk;
|
||||||
private boolean ignoreUnload = false;
|
private boolean ignoreUnload = false;
|
||||||
private boolean isTrueForNotSave = true;
|
private boolean isTrueForNotSave = true;
|
||||||
@ -234,7 +224,8 @@ public class ChunkListener implements Listener {
|
|||||||
Chunk chunk = event.getChunk();
|
Chunk chunk = event.getChunk();
|
||||||
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
||||||
String world = chunk.getWorld().getName();
|
String world = chunk.getWorld().getName();
|
||||||
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(world)) {
|
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(
|
||||||
|
world)) {
|
||||||
if (unloadChunk(world, chunk, true)) {
|
if (unloadChunk(world, chunk, true)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -113,15 +113,7 @@ public class EntityEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Entity victim = event.getEntity();
|
Entity victim = event.getEntity();
|
||||||
/*
|
|
||||||
if (victim.getType().equals(EntityType.ITEM_FRAME)) {
|
|
||||||
Plot plot = BukkitUtil.getLocation(victim).getPlot();
|
|
||||||
if (plot != null && !plot.isAdded(damager.getUniqueId())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if (!BukkitEntityUtil.entityDamage(damager, victim, event.getCause())) {
|
if (!BukkitEntityUtil.entityDamage(damager, victim, event.getCause())) {
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
if (victim instanceof Ageable ageable) {
|
if (victim instanceof Ageable ageable) {
|
||||||
|
@ -43,10 +43,10 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.TileState;
|
import org.bukkit.block.TileState;
|
||||||
@ -457,9 +457,11 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean getBooleanFlagValue(@NonNull FlagContainer container,
|
private boolean getBooleanFlagValue(
|
||||||
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
@NonNull FlagContainer container,
|
||||||
boolean defaultValue) {
|
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
||||||
|
boolean defaultValue
|
||||||
|
) {
|
||||||
BooleanFlag<?> flag = container.getFlag(flagClass);
|
BooleanFlag<?> flag = container.getFlag(flagClass);
|
||||||
return flag == null ? defaultValue : flag.getValue();
|
return flag == null ? defaultValue : flag.getValue();
|
||||||
}
|
}
|
||||||
|
@ -572,7 +572,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (now == null) {
|
if (now == null) {
|
||||||
try (final MetaDataAccess<Boolean> kickAccess =
|
try (final MetaDataAccess<Boolean> kickAccess =
|
||||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||||
|
false)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -665,7 +666,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
try (final MetaDataAccess<Boolean> kickAccess =
|
try (final MetaDataAccess<Boolean> kickAccess =
|
||||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||||
|
false)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -842,10 +844,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onInventoryClick(InventoryClickEvent event) {
|
public void onInventoryClick(InventoryClickEvent event) {
|
||||||
/*if (!event.isLeftClick() || (event.getAction() != InventoryAction.PLACE_ALL) || event
|
|
||||||
.isShiftClick()) {
|
|
||||||
return;
|
|
||||||
}*/
|
|
||||||
HumanEntity entity = event.getWhoClicked();
|
HumanEntity entity = event.getWhoClicked();
|
||||||
if (!(entity instanceof Player) || !this.plotAreaManager
|
if (!(entity instanceof Player) || !this.plotAreaManager
|
||||||
.hasPlotArea(entity.getWorld().getName())) {
|
.hasPlotArea(entity.getWorld().getName())) {
|
||||||
|
@ -30,9 +30,9 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.PlotHandler;
|
import com.plotsquared.core.plot.PlotHandler;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -89,11 +89,6 @@ public class SingleWorldListener implements Listener {
|
|||||||
markChunkAsClean(event.getChunk());
|
markChunkAsClean(event.getChunk());
|
||||||
}
|
}
|
||||||
|
|
||||||
// @EventHandler
|
|
||||||
// public void onPopulate(ChunkPopulateEvent event) {
|
|
||||||
// handle(event);
|
|
||||||
// }
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onChunkLoad(ChunkLoadEvent event) {
|
public void onChunkLoad(ChunkLoadEvent event) {
|
||||||
handle(event);
|
handle(event);
|
||||||
|
@ -52,7 +52,7 @@ public class MVdWPlaceholders {
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
||||||
this.addPlaceholder(event.getPlaceholder());
|
this.addPlaceholder(event.placeholder());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
||||||
|
@ -41,13 +41,9 @@ public class BukkitOfflinePlayer implements OfflinePlotPlayer {
|
|||||||
* @param player Bukkit OfflinePlayer player to convert
|
* @param player Bukkit OfflinePlayer player to convert
|
||||||
* @param permissionHandler Permission Profile to be used
|
* @param permissionHandler Permission Profile to be used
|
||||||
*/
|
*/
|
||||||
public BukkitOfflinePlayer(
|
public BukkitOfflinePlayer(final @NonNull OfflinePlayer player, final @NonNull PermissionHandler permissionHandler) {
|
||||||
final @NonNull OfflinePlayer player, final @NonNull
|
|
||||||
PermissionHandler permissionHandler
|
|
||||||
) {
|
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.permissionProfile = permissionHandler.getPermissionProfile(this)
|
this.permissionProfile = permissionHandler.getPermissionProfile(this).orElse(NullPermissionProfile.INSTANCE);
|
||||||
.orElse(NullPermissionProfile.INSTANCE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@ -71,14 +71,15 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
* @param eventDispatcher EventDispatcher instance
|
* @param eventDispatcher EventDispatcher instance
|
||||||
* @param player Bukkit player instance
|
* @param player Bukkit player instance
|
||||||
* @param permissionHandler PermissionHandler instance
|
* @param permissionHandler PermissionHandler instance
|
||||||
*
|
|
||||||
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
||||||
* This method will be made private in a future release.
|
* This method will be made private in a future release.
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true, since = "TODO")
|
@Deprecated(forRemoval = true, since = "TODO")
|
||||||
public BukkitPlayer(
|
public BukkitPlayer(
|
||||||
final @NonNull PlotAreaManager plotAreaManager, final @NonNull EventDispatcher eventDispatcher,
|
final @NonNull PlotAreaManager plotAreaManager,
|
||||||
final @NonNull Player player, final @NonNull PermissionHandler permissionHandler
|
final @NonNull EventDispatcher eventDispatcher,
|
||||||
|
final @NonNull Player player,
|
||||||
|
final @NonNull PermissionHandler permissionHandler
|
||||||
) {
|
) {
|
||||||
this(plotAreaManager, eventDispatcher, player, false, permissionHandler);
|
this(plotAreaManager, eventDispatcher, player, false, permissionHandler);
|
||||||
}
|
}
|
||||||
@ -88,14 +89,14 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
* @param eventDispatcher EventDispatcher instance
|
* @param eventDispatcher EventDispatcher instance
|
||||||
* @param player Bukkit player instance
|
* @param player Bukkit player instance
|
||||||
* @param permissionHandler PermissionHandler instance
|
* @param permissionHandler PermissionHandler instance
|
||||||
*
|
|
||||||
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
||||||
* This method will be made private in a future release.
|
* This method will be made private in a future release.
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true, since = "TODO")
|
@Deprecated(forRemoval = true, since = "TODO")
|
||||||
public BukkitPlayer(
|
public BukkitPlayer(
|
||||||
final @NonNull PlotAreaManager plotAreaManager, final @NonNull
|
final @NonNull PlotAreaManager plotAreaManager,
|
||||||
EventDispatcher eventDispatcher, final @NonNull Player player,
|
final @NonNull EventDispatcher eventDispatcher,
|
||||||
|
final @NonNull Player player,
|
||||||
final boolean realPlayer,
|
final boolean realPlayer,
|
||||||
final @NonNull PermissionHandler permissionHandler
|
final @NonNull PermissionHandler permissionHandler
|
||||||
) {
|
) {
|
||||||
|
@ -270,7 +270,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
if (getChunkObject() instanceof Chunk chunkObject) {
|
if (getChunkObject() instanceof Chunk chunkObject) {
|
||||||
existing = chunkObject.getBlock(x & 15, y, z & 15);
|
existing = chunkObject.getBlock(x & 15, y, z & 15);
|
||||||
} else {
|
} else {
|
||||||
existing = getBukkitWorld().getBlockAt(x, y, z);
|
existing = getBukkitWorld().getBlockAt(x, y, z);
|
||||||
}
|
}
|
||||||
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
|
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
|
||||||
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
|
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
|
||||||
|
@ -62,7 +62,6 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
/**
|
/**
|
||||||
* @param minY minimum world Y, inclusive
|
* @param minY minimum world Y, inclusive
|
||||||
* @param maxY maximum world Y, inclusive
|
* @param maxY maximum world Y, inclusive
|
||||||
*
|
|
||||||
* @since 6.6.0
|
* @since 6.6.0
|
||||||
*/
|
*/
|
||||||
public GenChunk(int minY, int maxY) {
|
public GenChunk(int minY, int maxY) {
|
||||||
@ -110,9 +109,9 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
*/
|
*/
|
||||||
public void setChunk(@NonNull ChunkWrapper wrap) {
|
public void setChunk(@NonNull ChunkWrapper wrap) {
|
||||||
chunk = null;
|
chunk = null;
|
||||||
world = wrap.world;
|
world = wrap.world();
|
||||||
chunkX = wrap.x;
|
chunkX = wrap.x();
|
||||||
chunkZ = wrap.z;
|
chunkZ = wrap.z();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -69,8 +69,9 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public BukkitRegionManager(
|
public BukkitRegionManager(
|
||||||
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull
|
@NonNull WorldUtil worldUtil,
|
||||||
ProgressSubscriberFactory subscriberFactory
|
@NonNull GlobalBlockQueue blockQueue,
|
||||||
|
@NonNull ProgressSubscriberFactory subscriberFactory
|
||||||
) {
|
) {
|
||||||
super(worldUtil, blockQueue, subscriberFactory);
|
super(worldUtil, blockQueue, subscriberFactory);
|
||||||
this.blockQueue = blockQueue;
|
this.blockQueue = blockQueue;
|
||||||
@ -257,7 +258,7 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
||||||
AugmentedUtils.bypass(
|
AugmentedUtils.bypass(
|
||||||
ignoreAugment,
|
ignoreAugment,
|
||||||
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ZeroedDelegateScopedQueueCoordinator>() {
|
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(ZeroedDelegateScopedQueueCoordinator value) {
|
public void run(ZeroedDelegateScopedQueueCoordinator value) {
|
||||||
Location min = value.getMin();
|
Location min = value.getMin();
|
||||||
|
@ -124,7 +124,7 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
public String setupWorld(PlotAreaBuilder builder) {
|
public String setupWorld(PlotAreaBuilder builder) {
|
||||||
this.updateGenerators(false);
|
this.updateGenerators(false);
|
||||||
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
||||||
new ConfigurationNode[0] : builder.settingsNodesWrapper().getSettingsNodes();
|
new ConfigurationNode[0] : builder.settingsNodesWrapper().settingsNodes();
|
||||||
String world = builder.worldName();
|
String world = builder.worldName();
|
||||||
PlotAreaType type = builder.plotAreaType();
|
PlotAreaType type = builder.plotAreaType();
|
||||||
String worldPath = "worlds." + builder.worldName();
|
String worldPath = "worlds." + builder.worldName();
|
||||||
|
@ -31,7 +31,6 @@ import org.apache.logging.log4j.Logger;
|
|||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -85,28 +84,6 @@ public class ContentMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveEntitiesIn(Chunk chunk, CuboidRegion region, boolean delete) {
|
|
||||||
for (Entity entity : chunk.getEntities()) {
|
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
|
||||||
int x = location.getX();
|
|
||||||
int z = location.getZ();
|
|
||||||
if (!BukkitChunkManager.isIn(region, x, z)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (entity.getVehicle() != null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
EntityWrapper wrap = new ReplicatingEntityWrapper(entity, (short) 2);
|
|
||||||
wrap.saveEntity();
|
|
||||||
this.entities.add(wrap);
|
|
||||||
if (delete) {
|
|
||||||
if (!(entity instanceof Player)) {
|
|
||||||
entity.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void restoreEntities(World world) {
|
void restoreEntities(World world) {
|
||||||
for (EntityWrapper entity : this.entities) {
|
for (EntityWrapper entity : this.entities) {
|
||||||
try {
|
try {
|
||||||
|
@ -60,4 +60,5 @@ public class TranslationUpdateManager {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,8 @@ public class UpdateUtility implements Listener {
|
|||||||
internalVersion = PlotSquared.get().getVersion();
|
internalVersion = PlotSquared.get().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
// Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
||||||
|
@SuppressWarnings({"deprecation", "DefaultCharset"})
|
||||||
public void updateChecker() {
|
public void updateChecker() {
|
||||||
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
||||||
try {
|
try {
|
||||||
|
@ -111,8 +111,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
|||||||
try (final PreparedStatement statement = getConnection()
|
try (final PreparedStatement statement = getConnection()
|
||||||
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
||||||
for (final UUIDMapping mapping : uuidWrappers) {
|
for (final UUIDMapping mapping : uuidWrappers) {
|
||||||
statement.setString(1, mapping.getUuid().toString());
|
statement.setString(1, mapping.uuid().toString());
|
||||||
statement.setString(2, mapping.getUsername());
|
statement.setString(2, mapping.username());
|
||||||
statement.executeUpdate();
|
statement.executeUpdate();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
@ -203,7 +203,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
* @return Player manager
|
* @return Player manager
|
||||||
*/
|
*/
|
||||||
default @NonNull PlayerManager<? extends PlotPlayer<P>, ? extends P> playerManager() {
|
default @NonNull PlayerManager<? extends PlotPlayer<P>, ? extends P> playerManager() {
|
||||||
return injector().getInstance(Key.get(new TypeLiteral<PlayerManager<? extends PlotPlayer<P>, ? extends P>>() {
|
return injector().getInstance(Key.get(new TypeLiteral<>() {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,8 +133,6 @@ public class PlotSquared {
|
|||||||
private final Map<String, CaptionMap> captionMaps = new HashMap<>();
|
private final Map<String, CaptionMap> captionMaps = new HashMap<>();
|
||||||
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
|
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
|
||||||
private CaptionLoader captionLoader;
|
private CaptionLoader captionLoader;
|
||||||
// WorldEdit instance
|
|
||||||
private WorldEdit worldedit;
|
|
||||||
private File configFile;
|
private File configFile;
|
||||||
private File worldsFile;
|
private File worldsFile;
|
||||||
private YamlConfiguration worldConfiguration;
|
private YamlConfiguration worldConfiguration;
|
||||||
@ -223,11 +221,11 @@ public class PlotSquared {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.worldedit = WorldEdit.getInstance();
|
WorldEdit worldedit = WorldEdit.getInstance();
|
||||||
WorldEdit.getInstance().getEventBus().register(new WEPlatformReadyListener());
|
WorldEdit.getInstance().getEventBus().register(new WEPlatformReadyListener());
|
||||||
|
|
||||||
// Create Event utility class
|
// Create Event utility class
|
||||||
this.eventDispatcher = new EventDispatcher(this.worldedit);
|
this.eventDispatcher = new EventDispatcher(worldedit);
|
||||||
// Create plot listener
|
// Create plot listener
|
||||||
this.plotListener = new PlotListener(this.eventDispatcher);
|
this.plotListener = new PlotListener(this.eventDispatcher);
|
||||||
|
|
||||||
@ -270,7 +268,11 @@ public class PlotSquared {
|
|||||||
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
|
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
|
||||||
} else {
|
} else {
|
||||||
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
||||||
captionMap = this.captionLoader.loadOrCreateSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
|
captionMap = this.captionLoader.loadOrCreateSingle(this.platform
|
||||||
|
.getDirectory()
|
||||||
|
.toPath()
|
||||||
|
.resolve("lang")
|
||||||
|
.resolve(fileName));
|
||||||
}
|
}
|
||||||
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
||||||
LOGGER.info(
|
LOGGER.info(
|
||||||
@ -1521,10 +1523,6 @@ public class PlotSquared {
|
|||||||
return this.backgroundUUIDPipeline;
|
return this.backgroundUUIDPipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NonNull WorldEdit getWorldEdit() {
|
|
||||||
return this.worldedit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NonNull File getConfigFile() {
|
public @NonNull File getConfigFile() {
|
||||||
return this.configFile;
|
return this.configFile;
|
||||||
}
|
}
|
||||||
|
@ -136,13 +136,7 @@ public class SimpleBackupManager implements BackupManager {
|
|||||||
return this.backupLimit;
|
return this.backupLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class PlotCacheKey {
|
private record PlotCacheKey(Plot plot) {
|
||||||
|
|
||||||
private final Plot plot;
|
|
||||||
|
|
||||||
private PlotCacheKey(Plot plot) {
|
|
||||||
this.plot = plot;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
|
@ -173,7 +173,7 @@ public class QuadMap<T> {
|
|||||||
|
|
||||||
public QuadMap<T> newInstance(int newsize, int x, int z, int min) {
|
public QuadMap<T> newInstance(int newsize, int x, int z, int min) {
|
||||||
try {
|
try {
|
||||||
return new QuadMap<T>(newsize, x, z, min) {
|
return new QuadMap<>(newsize, x, z, min) {
|
||||||
@Override
|
@Override
|
||||||
public CuboidRegion getRegion(T value) {
|
public CuboidRegion getRegion(T value) {
|
||||||
return QuadMap.this.getRegion(value);
|
return QuadMap.this.getRegion(value);
|
||||||
|
@ -70,7 +70,8 @@ public class Add extends Command {
|
|||||||
plot.isOwner(player.getUUID()) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST),
|
plot.isOwner(player.getUUID()) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST),
|
||||||
TranslatableCaption.of("permission.no_plot_perms")
|
TranslatableCaption.of("permission.no_plot_perms")
|
||||||
);
|
);
|
||||||
checkTrue(args.length == 1,
|
checkTrue(
|
||||||
|
args.length == 1,
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
|
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
|
||||||
);
|
);
|
||||||
|
@ -232,12 +232,13 @@ public class Area extends SubCommand {
|
|||||||
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(
|
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(
|
||||||
file))) {
|
file))) {
|
||||||
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
||||||
final EditSession editSession = WorldEdit
|
final EditSession editSession = WorldEdit.getInstance().newEditSession(selectedRegion.getWorld());
|
||||||
.getInstance()
|
final ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(
|
||||||
.getEditSessionFactory()
|
editSession,
|
||||||
.getEditSession(selectedRegion.getWorld(), -1);
|
selectedRegion,
|
||||||
final ForwardExtentCopy forwardExtentCopy =
|
clipboard,
|
||||||
new ForwardExtentCopy(editSession, selectedRegion, clipboard, selectedRegion.getMinimumPoint());
|
selectedRegion.getMinimumPoint()
|
||||||
|
);
|
||||||
forwardExtentCopy.setCopyingBiomes(true);
|
forwardExtentCopy.setCopyingBiomes(true);
|
||||||
forwardExtentCopy.setCopyingEntities(true);
|
forwardExtentCopy.setCopyingEntities(true);
|
||||||
Operations.complete(forwardExtentCopy);
|
Operations.complete(forwardExtentCopy);
|
||||||
@ -724,7 +725,7 @@ public class Area extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final List<PlotArea> areas = new ArrayList<>(Arrays.asList(this.plotAreaManager.getAllPlotAreas()));
|
final List<PlotArea> areas = new ArrayList<>(Arrays.asList(this.plotAreaManager.getAllPlotAreas()));
|
||||||
paginate(player, areas, 8, page, new RunnableVal3<Integer, PlotArea, CaptionHolder>() {
|
paginate(player, areas, 8, page, new RunnableVal3<>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(Integer i, PlotArea area, CaptionHolder caption) {
|
public void run(Integer i, PlotArea area, CaptionHolder caption) {
|
||||||
String name;
|
String name;
|
||||||
|
@ -83,7 +83,7 @@ public class Caps extends SubCommand {
|
|||||||
final int current = countedEntities[type];
|
final int current = countedEntities[type];
|
||||||
final int max = plot.getFlag(capFlag);
|
final int max = plot.getFlag(capFlag);
|
||||||
final String percentage = String.format("%.1f", 100 * ((float) current / max));
|
final String percentage = String.format("%.1f", 100 * ((float) current / max));
|
||||||
ComponentLike maxBeautified = max >= Integer.MAX_VALUE
|
ComponentLike maxBeautified = max == Integer.MAX_VALUE
|
||||||
? TranslatableCaption.of("info.infinite").toComponent(player)
|
? TranslatableCaption.of("info.infinite").toComponent(player)
|
||||||
: Component.text(max);
|
: Component.text(max);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -46,6 +46,7 @@ import java.util.Collections;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
@ -77,8 +78,7 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
String sub = args[0].toLowerCase();
|
String sub = args[0].toLowerCase();
|
||||||
switch (sub) {
|
switch (sub) {
|
||||||
case "l":
|
case "l", "list" -> {
|
||||||
case "list": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LIST)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LIST)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -133,8 +133,7 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "c":
|
case "c", "create" -> {
|
||||||
case "create": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -269,9 +268,7 @@ public class Cluster extends SubCommand {
|
|||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "disband":
|
case "disband", "del", "delete" -> {
|
||||||
case "del":
|
|
||||||
case "delete": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -330,8 +327,7 @@ public class Cluster extends SubCommand {
|
|||||||
));
|
));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "res":
|
case "res", "resize" -> {
|
||||||
case "resize": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -452,9 +448,7 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_resized"));
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_resized"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "add":
|
case "add", "inv", "invite" -> {
|
||||||
case "inv":
|
|
||||||
case "invite": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -523,9 +517,7 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "k":
|
case "k", "remove", "kick" -> {
|
||||||
case "remove":
|
|
||||||
case "kick": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -605,8 +597,7 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "quit":
|
case "quit", "leave" -> {
|
||||||
case "leave": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LEAVE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LEAVE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -667,7 +658,7 @@ public class Cluster extends SubCommand {
|
|||||||
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
|
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "members": {
|
case "members" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_HELPERS)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_HELPERS)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -728,9 +719,7 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "spawn":
|
case "spawn", "home", "tp" -> {
|
||||||
case "home":
|
|
||||||
case "tp": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -778,10 +767,7 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "i":
|
case "i", "info", "show", "information" -> {
|
||||||
case "info":
|
|
||||||
case "show":
|
|
||||||
case "information": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INFO)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INFO)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -827,12 +813,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (throwable instanceof TimeoutException) {
|
if (throwable instanceof TimeoutException) {
|
||||||
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
||||||
} else {
|
} else {
|
||||||
final String owner;
|
final String owner = Objects.requireNonNullElse(username, "unknown");
|
||||||
if (username == null) {
|
|
||||||
owner = "unknown";
|
|
||||||
} else {
|
|
||||||
owner = username;
|
|
||||||
}
|
|
||||||
String name = cluster.getName();
|
String name = cluster.getName();
|
||||||
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
|
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
|
||||||
cluster.getP2().getY() - cluster.getP1().getY() + 1);
|
cluster.getP2().getY() - cluster.getP1().getY() + 1);
|
||||||
@ -850,9 +831,7 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "sh":
|
case "sh", "setspawn", "sethome" -> {
|
||||||
case "setspawn":
|
|
||||||
case "sethome": {
|
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
|
@ -502,9 +502,9 @@ public abstract class Command {
|
|||||||
|
|
||||||
public String getCommandString() {
|
public String getCommandString() {
|
||||||
if (this.parent == null) {
|
if (this.parent == null) {
|
||||||
return "/" + toString();
|
return "/" + this;
|
||||||
} else {
|
} else {
|
||||||
return this.parent.getCommandString() + " " + toString();
|
return this.parent.getCommandString() + " " + this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ public class Confirm extends SubCommand {
|
|||||||
}
|
}
|
||||||
CmdConfirm.removePending(player);
|
CmdConfirm.removePending(player);
|
||||||
if ((System.currentTimeMillis() - command.timestamp)
|
if ((System.currentTimeMillis() - command.timestamp)
|
||||||
> Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS * 1000) {
|
> Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS * 1000L) {
|
||||||
player.sendMessage(TranslatableCaption.of("confirm.expired_confirm"));
|
player.sendMessage(TranslatableCaption.of("confirm.expired_confirm"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,8 @@ public class Copy extends SubCommand {
|
|||||||
|
|
||||||
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
|
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
|
||||||
if (result) {
|
if (result) {
|
||||||
player.sendMessage(TranslatableCaption.of("move.copy_success"),
|
player.sendMessage(
|
||||||
|
TranslatableCaption.of("move.copy_success"),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("origin", Tag.inserting(Component.text(plot1.toString())))
|
.tag("origin", Tag.inserting(Component.text(plot1.toString())))
|
||||||
.tag("target", Tag.inserting(Component.text(plot2.toString())))
|
.tag("target", Tag.inserting(Component.text(plot2.toString())))
|
||||||
|
@ -183,24 +183,22 @@ public class Download extends SubCommand {
|
|||||||
|
|
||||||
private void upload(PlotPlayer<?> player, Plot plot) {
|
private void upload(PlotPlayer<?> player, Plot plot) {
|
||||||
if (Settings.Web.LEGACY_WEBINTERFACE) {
|
if (Settings.Web.LEGACY_WEBINTERFACE) {
|
||||||
schematicHandler
|
schematicHandler.getCompoundTag(plot).whenComplete((compoundTag, throwable) -> schematicHandler.upload(
|
||||||
.getCompoundTag(plot)
|
compoundTag,
|
||||||
.whenComplete((compoundTag, throwable) -> {
|
null,
|
||||||
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() {
|
null,
|
||||||
@Override
|
new RunnableVal<>() {
|
||||||
public void run(URL value) {
|
@Override
|
||||||
plot.removeRunning();
|
public void run(URL value) {
|
||||||
player.sendMessage(
|
plot.removeRunning();
|
||||||
TranslatableCaption.of("web.generation_link_success"),
|
player.sendMessage(TranslatableCaption.of("web.generation_link_success"), TagResolver.builder().tag(
|
||||||
TagResolver.builder()
|
"download",
|
||||||
.tag("download", Tag.preProcessParsed(value.toString()))
|
Tag.preProcessParsed(value.toString())
|
||||||
.tag("delete", Tag.preProcessParsed("Not available"))
|
).tag("delete", Tag.preProcessParsed("Not available")).build());
|
||||||
.build()
|
player.sendMessage(StaticCaption.of(value.toString()));
|
||||||
);
|
}
|
||||||
player.sendMessage(StaticCaption.of(value.toString()));
|
}
|
||||||
}
|
));
|
||||||
});
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO legacy support
|
// TODO legacy support
|
||||||
|
@ -132,7 +132,12 @@ public class Help extends Command {
|
|||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||||
.tag("category", Tag.inserting(Component.text("all")))
|
.tag("category", Tag.inserting(Component.text("all")))
|
||||||
.tag("category_desc", Tag.inserting(TranslatableCaption.of("help.help_display_all_commands").toComponent(player)))
|
.tag(
|
||||||
|
"category_desc",
|
||||||
|
Tag.inserting(TranslatableCaption
|
||||||
|
.of("help.help_display_all_commands")
|
||||||
|
.toComponent(player))
|
||||||
|
)
|
||||||
.build()
|
.build()
|
||||||
));
|
));
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
||||||
|
@ -85,24 +85,24 @@ public class Inbox extends SubCommand {
|
|||||||
for (int x = page * 12; x < max; x++) {
|
for (int x = page * 12; x < max; x++) {
|
||||||
PlotComment comment = comments[x];
|
PlotComment comment = comments[x];
|
||||||
Component commentColored;
|
Component commentColored;
|
||||||
if (player.getName().equals(comment.senderName)) {
|
if (player.getName().equals(comment.senderName())) {
|
||||||
commentColored = MINI_MESSAGE
|
commentColored = MINI_MESSAGE
|
||||||
.deserialize(
|
.deserialize(
|
||||||
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
|
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
|
||||||
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment)))
|
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment())))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
commentColored = MINI_MESSAGE
|
commentColored = MINI_MESSAGE
|
||||||
.deserialize(
|
.deserialize(
|
||||||
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
|
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
|
||||||
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment)))
|
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment())))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
TagResolver resolver = TagResolver.builder()
|
TagResolver resolver = TagResolver.builder()
|
||||||
.tag("number", Tag.inserting(Component.text(x)))
|
.tag("number", Tag.inserting(Component.text(x)))
|
||||||
.tag("world", Tag.inserting(Component.text(comment.world)))
|
.tag("world", Tag.inserting(Component.text(comment.world())))
|
||||||
.tag("plot_id", Tag.inserting(Component.text(comment.id.getX() + ";" + comment.id.getY())))
|
.tag("plot_id", Tag.inserting(Component.text(comment.id().getX() + ";" + comment.id().getY())))
|
||||||
.tag("commenter", Tag.inserting(Component.text(comment.senderName)))
|
.tag("commenter", Tag.inserting(Component.text(comment.senderName())))
|
||||||
.tag("comment", Tag.inserting(commentColored))
|
.tag("comment", Tag.inserting(commentColored))
|
||||||
.build();
|
.build();
|
||||||
builder.append(MINI_MESSAGE
|
builder.append(MINI_MESSAGE
|
||||||
@ -137,7 +137,7 @@ public class Inbox extends SubCommand {
|
|||||||
int unread = 0;
|
int unread = 0;
|
||||||
for (PlotComment comment : value) {
|
for (PlotComment comment : value) {
|
||||||
total++;
|
total++;
|
||||||
if (comment.timestamp > CommentManager
|
if (comment.timestamp() > CommentManager
|
||||||
.getTimestamp(player, inbox.toString())) {
|
.getTimestamp(player, inbox.toString())) {
|
||||||
unread++;
|
unread++;
|
||||||
}
|
}
|
||||||
@ -242,7 +242,7 @@ public class Inbox extends SubCommand {
|
|||||||
if (success) {
|
if (success) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_removed_success"),
|
TranslatableCaption.of("comment.comment_removed_success"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(comment.comment)))
|
TagResolver.resolver("value", Tag.inserting(Component.text(comment.comment())))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -52,8 +52,9 @@ public class Info extends SubCommand {
|
|||||||
arg = args[0];
|
arg = args[0];
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
// TODO: (re?)implement /plot info inv. (it was never properly implemented)
|
// TODO: (re?)implement /plot info inv. (it was never properly implemented)
|
||||||
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" -> plot = Plot
|
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" ->
|
||||||
.getPlotFromString(player, null, false);
|
plot = Plot
|
||||||
|
.getPlotFromString(player, null, false);
|
||||||
default -> {
|
default -> {
|
||||||
plot = Plot.getPlotFromString(player, arg, false);
|
plot = Plot.getPlotFromString(player, arg, false);
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
|
@ -117,7 +117,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
|
if (player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
|
||||||
args.add("fuzzy <search...>");
|
args.add("fuzzy <search...>");
|
||||||
}
|
}
|
||||||
return args.toArray(new String[args.size()]);
|
return args.toArray(new String[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void noArgs(PlotPlayer<?> player) {
|
public void noArgs(PlotPlayer<?> player) {
|
||||||
@ -474,20 +474,20 @@ public class ListCmd extends SubCommand {
|
|||||||
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
|
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
|
||||||
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
|
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
|
||||||
for (final UUIDMapping uuidMapping : names) {
|
for (final UUIDMapping uuidMapping : names) {
|
||||||
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.getUuid());
|
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.uuid());
|
||||||
TagResolver resolver = TagResolver.builder()
|
TagResolver resolver = TagResolver.builder()
|
||||||
.tag("prefix", Tag.inserting(Component.text(prefix)))
|
.tag("prefix", Tag.inserting(Component.text(prefix)))
|
||||||
.tag("player", Tag.inserting(Component.text(uuidMapping.getUsername())))
|
.tag("player", Tag.inserting(Component.text(uuidMapping.username())))
|
||||||
.build();
|
.build();
|
||||||
if (pp != null) {
|
if (pp != null) {
|
||||||
builder.append(MINI_MESSAGE.deserialize(online, resolver));
|
builder.append(MINI_MESSAGE.deserialize(online, resolver));
|
||||||
} else if (uuidMapping.getUsername().equalsIgnoreCase("unknown")) {
|
} else if (uuidMapping.username().equalsIgnoreCase("unknown")) {
|
||||||
TagResolver unknownResolver = TagResolver.resolver(
|
TagResolver unknownResolver = TagResolver.resolver(
|
||||||
"info.unknown",
|
"info.unknown",
|
||||||
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
|
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
|
||||||
);
|
);
|
||||||
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
|
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
|
||||||
} else if (uuidMapping.getUuid().equals(DBFunc.EVERYONE)) {
|
} else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) {
|
||||||
TagResolver everyoneResolver = TagResolver.resolver(
|
TagResolver everyoneResolver = TagResolver.resolver(
|
||||||
"info.everyone",
|
"info.everyone",
|
||||||
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
|
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
|
||||||
|
@ -28,7 +28,6 @@ import net.kyori.adventure.text.Component;
|
|||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
@CommandDeclaration(command = "near",
|
@CommandDeclaration(command = "near",
|
||||||
@ -56,8 +55,4 @@ public class Near extends Command {
|
|||||||
return CompletableFuture.completedFuture(true);
|
return CompletableFuture.completedFuture(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PlotPlayer<?>> getPlayersInPlotVisible(Plot plot, PlotPlayer<?> executor) {
|
|
||||||
return plot.getPlayersInPlot().stream().filter(executor::canSee).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ public class Purge extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
owner = ownerMapping.getUuid();
|
owner = ownerMapping.uuid();
|
||||||
break;
|
break;
|
||||||
case "shared":
|
case "shared":
|
||||||
case "s":
|
case "s":
|
||||||
@ -139,7 +139,7 @@ public class Purge extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
added = addedMapping.getUuid();
|
added = addedMapping.uuid();
|
||||||
break;
|
break;
|
||||||
case "clear":
|
case "clear":
|
||||||
case "c":
|
case "c":
|
||||||
@ -236,9 +236,12 @@ public class Purge extends SubCommand {
|
|||||||
try {
|
try {
|
||||||
ids.add(plot.temp);
|
ids.add(plot.temp);
|
||||||
if (finalClear) {
|
if (finalClear) {
|
||||||
plot.getPlotModificationManager().clear(false, true, player, () -> {
|
plot.getPlotModificationManager().clear(
|
||||||
LOGGER.info("Plot {} cleared by purge", plot.getId());
|
false,
|
||||||
});
|
true,
|
||||||
|
player,
|
||||||
|
() -> LOGGER.info("Plot {} cleared by purge", plot.getId())
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
plot.getPlotModificationManager().removeSign();
|
plot.getPlotModificationManager().removeSign();
|
||||||
}
|
}
|
||||||
|
@ -156,9 +156,9 @@ public class Template extends SubCommand {
|
|||||||
ZipOutputStream zos = new ZipOutputStream(fos)) {
|
ZipOutputStream zos = new ZipOutputStream(fos)) {
|
||||||
|
|
||||||
for (FileBytes file : files) {
|
for (FileBytes file : files) {
|
||||||
ZipEntry ze = new ZipEntry(file.path);
|
ZipEntry ze = new ZipEntry(file.path());
|
||||||
zos.putNextEntry(ze);
|
zos.putNextEntry(ze);
|
||||||
zos.write(file.data);
|
zos.write(file.data());
|
||||||
}
|
}
|
||||||
zos.closeEntry();
|
zos.closeEntry();
|
||||||
}
|
}
|
||||||
|
@ -35,28 +35,8 @@ import java.util.Map;
|
|||||||
* the component GUI
|
* the component GUI
|
||||||
*/
|
*/
|
||||||
@SerializableAs("preset")
|
@SerializableAs("preset")
|
||||||
public class ComponentPreset implements ConfigurationSerializable {
|
public record ComponentPreset(ClassicPlotManagerComponent component, String pattern, double cost, String permission,
|
||||||
|
String displayName, List<String> description, ItemType icon) implements ConfigurationSerializable {
|
||||||
private final ClassicPlotManagerComponent component;
|
|
||||||
private final String pattern;
|
|
||||||
private final double cost;
|
|
||||||
private final String permission;
|
|
||||||
private final String displayName;
|
|
||||||
private final List<String> description;
|
|
||||||
private final ItemType icon;
|
|
||||||
|
|
||||||
public ComponentPreset(
|
|
||||||
ClassicPlotManagerComponent component, String pattern, double cost,
|
|
||||||
String permission, String displayName, List<String> description, final ItemType icon
|
|
||||||
) {
|
|
||||||
this.component = component;
|
|
||||||
this.pattern = pattern;
|
|
||||||
this.cost = cost;
|
|
||||||
this.permission = permission;
|
|
||||||
this.displayName = displayName;
|
|
||||||
this.description = description;
|
|
||||||
this.icon = icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) {
|
public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) {
|
||||||
@ -74,34 +54,6 @@ public class ComponentPreset implements ConfigurationSerializable {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClassicPlotManagerComponent getComponent() {
|
|
||||||
return this.component;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPattern() {
|
|
||||||
return this.pattern;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCost() {
|
|
||||||
return this.cost;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPermission() {
|
|
||||||
return this.permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDisplayName() {
|
|
||||||
return this.displayName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getDescription() {
|
|
||||||
return this.description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemType getIcon() {
|
|
||||||
return this.icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> serialize() {
|
public Map<String, Object> serialize() {
|
||||||
final Map<String, Object> map = new HashMap<>();
|
final Map<String, Object> map = new HashMap<>();
|
||||||
|
@ -165,8 +165,8 @@ public class ComponentPresetManager {
|
|||||||
|
|
||||||
final List<ComponentPreset> allowedPresets = new ArrayList<>(this.presets.size());
|
final List<ComponentPreset> allowedPresets = new ArrayList<>(this.presets.size());
|
||||||
for (final ComponentPreset componentPreset : this.presets) {
|
for (final ComponentPreset componentPreset : this.presets) {
|
||||||
if (!componentPreset.getPermission().isEmpty() && !player.hasPermission(
|
if (!componentPreset.permission().isEmpty() && !player.hasPermission(
|
||||||
componentPreset.getPermission()
|
componentPreset.permission()
|
||||||
)) {
|
)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -200,30 +200,30 @@ public class ComponentPresetManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Pattern pattern = PatternUtil.parse(null, componentPreset.getPattern(), false);
|
final Pattern pattern = PatternUtil.parse(null, componentPreset.pattern(), false);
|
||||||
if (pattern == null) {
|
if (pattern == null) {
|
||||||
getPlayer().sendMessage(TranslatableCaption.of("preset.preset_invalid"));
|
getPlayer().sendMessage(TranslatableCaption.of("preset.preset_invalid"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (componentPreset.getCost() > 0.0D) {
|
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"),
|
||||||
TagResolver.resolver("preset", Tag.inserting(Component.text(componentPreset.getDisplayName())))
|
TagResolver.resolver("preset", Tag.inserting(Component.text(componentPreset.displayName())))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (econHandler.getMoney(getPlayer()) < componentPreset.getCost()) {
|
if (econHandler.getMoney(getPlayer()) < componentPreset.cost()) {
|
||||||
getPlayer().sendMessage(TranslatableCaption.of("preset.preset_cannot_afford"));
|
getPlayer().sendMessage(TranslatableCaption.of("preset.preset_cannot_afford"));
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
econHandler.withdrawMoney(getPlayer(), componentPreset.getCost());
|
econHandler.withdrawMoney(getPlayer(), componentPreset.cost());
|
||||||
getPlayer().sendMessage(
|
getPlayer().sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
"money",
|
"money",
|
||||||
Tag.inserting(Component.text(econHandler.format(componentPreset.getCost())))
|
Tag.inserting(Component.text(econHandler.format(componentPreset.cost())))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -235,7 +235,7 @@ public class ComponentPresetManager {
|
|||||||
queue.setCompleteTask(plot::removeRunning);
|
queue.setCompleteTask(plot::removeRunning);
|
||||||
for (Plot current : plot.getConnectedPlots()) {
|
for (Plot current : plot.getConnectedPlots()) {
|
||||||
current.getPlotModificationManager().setComponent(
|
current.getPlotModificationManager().setComponent(
|
||||||
componentPreset.getComponent().name(),
|
componentPreset.component().name(),
|
||||||
pattern,
|
pattern,
|
||||||
player,
|
player,
|
||||||
queue
|
queue
|
||||||
@ -252,32 +252,32 @@ public class ComponentPresetManager {
|
|||||||
for (int i = 0; i < allowedPresets.size(); i++) {
|
for (int i = 0; i < allowedPresets.size(); i++) {
|
||||||
final ComponentPreset preset = allowedPresets.get(i);
|
final ComponentPreset preset = allowedPresets.get(i);
|
||||||
final List<String> lore = new ArrayList<>();
|
final List<String> lore = new ArrayList<>();
|
||||||
if (preset.getCost() > 0) {
|
if (preset.cost() > 0) {
|
||||||
if (!this.econHandler.isEnabled(plot.getArea())) {
|
if (!this.econHandler.isEnabled(plot.getArea())) {
|
||||||
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
|
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
|
||||||
TranslatableCaption.of("preset.preset_lore_economy_disabled").getComponent(player))));
|
TranslatableCaption.of("preset.preset_lore_economy_disabled").getComponent(player))));
|
||||||
} else {
|
} else {
|
||||||
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
|
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
|
||||||
TranslatableCaption.of("preset.preset_lore_cost").getComponent(player),
|
TranslatableCaption.of("preset.preset_lore_cost").getComponent(player),
|
||||||
TagResolver.resolver("cost", Tag.inserting(Component.text(String.format("%.2f", preset.getCost()))))
|
TagResolver.resolver("cost", Tag.inserting(Component.text(String.format("%.2f", preset.cost()))))
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
|
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
|
||||||
TranslatableCaption.of("preset.preset_lore_component").getComponent(player),
|
TranslatableCaption.of("preset.preset_lore_component").getComponent(player),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("component", Tag.inserting(Component.text(preset.getComponent().name().toLowerCase())))
|
.tag("component", Tag.inserting(Component.text(preset.component().name().toLowerCase())))
|
||||||
.tag("prefix", Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(player)))
|
.tag("prefix", Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(player)))
|
||||||
.build()
|
.build()
|
||||||
)));
|
)));
|
||||||
lore.removeIf(String::isEmpty);
|
lore.removeIf(String::isEmpty);
|
||||||
lore.addAll(preset.getDescription());
|
lore.addAll(preset.description());
|
||||||
plotInventory.setItem(
|
plotInventory.setItem(
|
||||||
i,
|
i,
|
||||||
new PlotItemStack(
|
new PlotItemStack(
|
||||||
preset.getIcon().getId().replace("minecraft:", ""),
|
preset.icon().getId().replace("minecraft:", ""),
|
||||||
1,
|
1,
|
||||||
preset.getDisplayName(),
|
preset.displayName(),
|
||||||
lore.toArray(new String[0])
|
lore.toArray(new String[0])
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -42,32 +42,6 @@ public class Config {
|
|||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Config.class.getSimpleName());
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Config.class.getSimpleName());
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the value for a node<br>
|
|
||||||
* Probably throws some error if you try to get a non existent key
|
|
||||||
*
|
|
||||||
* @param key configuration key
|
|
||||||
* @param root configuration class
|
|
||||||
* @param <T> value type
|
|
||||||
* @return value
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public static <T> T get(String key, Class<?> root) {
|
|
||||||
String[] split = key.split("\\.");
|
|
||||||
Object instance = getInstance(split, root);
|
|
||||||
if (instance != null) {
|
|
||||||
Field field = getField(split, instance);
|
|
||||||
if (field != null) {
|
|
||||||
try {
|
|
||||||
return (T) field.get(instance);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the value of a specific node<br>
|
* Set the value of a specific node<br>
|
||||||
* Probably throws some error if you supply non existing keys or invalid values
|
* Probably throws some error if you supply non existing keys or invalid values
|
||||||
@ -445,10 +419,6 @@ public class Config {
|
|||||||
return INSTANCES.values();
|
return INSTANCES.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<String> getSections() {
|
|
||||||
return INSTANCES.keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Map<String, T> getRaw() {
|
private Map<String, T> getRaw() {
|
||||||
return INSTANCES;
|
return INSTANCES;
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,6 @@ public final class CaptionLoader {
|
|||||||
* @param reader the reader to read the map from.
|
* @param reader the reader to read the map from.
|
||||||
* @return the translation map.
|
* @return the translation map.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("UnstableApiUsage")
|
|
||||||
static @NonNull Map<@NonNull String, @NonNull String> loadFromReader(final @NonNull Reader reader) {
|
static @NonNull Map<@NonNull String, @NonNull String> loadFromReader(final @NonNull Reader reader) {
|
||||||
final Type type = new TypeToken<Map<String, String>>() {
|
final Type type = new TypeToken<Map<String, String>>() {
|
||||||
}.getType();
|
}.getType();
|
||||||
@ -225,7 +224,7 @@ public final class CaptionLoader {
|
|||||||
*/
|
*/
|
||||||
public @NonNull CaptionMap loadOrCreateSingle(final @NonNull Path file) throws IOException {
|
public @NonNull CaptionMap loadOrCreateSingle(final @NonNull Path file) throws IOException {
|
||||||
final Locale locale = this.localeExtractor.apply(file);
|
final Locale locale = this.localeExtractor.apply(file);
|
||||||
if (!Files.exists(file) ) {
|
if (!Files.exists(file)) {
|
||||||
Map<String, String> map = new LinkedHashMap<>();
|
Map<String, String> map = new LinkedHashMap<>();
|
||||||
patch(map, locale);
|
patch(map, locale);
|
||||||
save(file, map);
|
save(file, map);
|
||||||
|
@ -56,7 +56,8 @@ final class ClassLoaderCaptionProvider implements DefaultCaptionProvider {
|
|||||||
LOGGER.info("No resource for locale '{}' found in the plugin file." +
|
LOGGER.info("No resource for locale '{}' found in the plugin file." +
|
||||||
"Please ensure you have placed the latest version of the file messages_{}.json in the 'lang' folder." +
|
"Please ensure you have placed the latest version of the file messages_{}.json in the 'lang' folder." +
|
||||||
"You may be able to find completed translations at https://intellectualsites.crowdin.com/plotsquared",
|
"You may be able to find completed translations at https://intellectualsites.crowdin.com/plotsquared",
|
||||||
locale, locale);
|
locale, locale
|
||||||
|
);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {
|
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {
|
||||||
|
@ -2400,13 +2400,13 @@ public class SQLManager implements AbstractDB {
|
|||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
statement.setString(1, plot.getArea().toString());
|
statement.setString(1, plot.getArea().toString());
|
||||||
statement.setInt(2, plot.getId().hashCode());
|
statement.setInt(2, plot.getId().hashCode());
|
||||||
statement.setString(3, comment.comment);
|
statement.setString(3, comment.comment());
|
||||||
statement.setString(4, comment.inbox);
|
statement.setString(4, comment.inbox());
|
||||||
statement.setString(5, comment.senderName);
|
statement.setString(5, comment.senderName());
|
||||||
} else {
|
} else {
|
||||||
statement.setString(1, comment.comment);
|
statement.setString(1, comment.comment());
|
||||||
statement.setString(2, comment.inbox);
|
statement.setString(2, comment.inbox());
|
||||||
statement.setString(3, comment.senderName);
|
statement.setString(3, comment.senderName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2499,7 +2499,7 @@ public class SQLManager implements AbstractDB {
|
|||||||
id = null;
|
id = null;
|
||||||
}
|
}
|
||||||
String msg = set.getString("comment");
|
String msg = set.getString("comment");
|
||||||
long timestamp = set.getInt("timestamp") * 1000;
|
long timestamp = set.getInt("timestamp") * 1000L;
|
||||||
PlotComment comment =
|
PlotComment comment =
|
||||||
new PlotComment(world, id, msg, sender, inbox, timestamp);
|
new PlotComment(world, id, msg, sender, inbox, timestamp);
|
||||||
comments.add(comment);
|
comments.add(comment);
|
||||||
@ -2518,10 +2518,10 @@ public class SQLManager implements AbstractDB {
|
|||||||
public void set(PreparedStatement statement) throws SQLException {
|
public void set(PreparedStatement statement) throws SQLException {
|
||||||
statement.setString(1, plot.getArea().toString());
|
statement.setString(1, plot.getArea().toString());
|
||||||
statement.setInt(2, plot.getId().hashCode());
|
statement.setInt(2, plot.getId().hashCode());
|
||||||
statement.setString(3, comment.comment);
|
statement.setString(3, comment.comment());
|
||||||
statement.setString(4, comment.inbox);
|
statement.setString(4, comment.inbox());
|
||||||
statement.setInt(5, (int) (comment.timestamp / 1000));
|
statement.setInt(5, (int) (comment.timestamp() / 1000));
|
||||||
statement.setString(6, comment.senderName);
|
statement.setString(6, comment.senderName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -3414,15 +3414,7 @@ public class SQLManager implements AbstractDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class LegacySettings {
|
private record LegacySettings(int id, PlotSettings settings) {
|
||||||
|
|
||||||
public final int id;
|
|
||||||
public final PlotSettings settings;
|
|
||||||
|
|
||||||
public LegacySettings(int id, PlotSettings settings) {
|
|
||||||
this.id = id;
|
|
||||||
this.settings = settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import javax.annotation.Nullable;
|
|||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
@SuppressWarnings("WeakerAccess")
|
||||||
public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ClassicPlotWorld.class.getSimpleName());
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ClassicPlotWorld.class.getSimpleName());
|
||||||
|
|
||||||
public int ROAD_HEIGHT = 62;
|
public int ROAD_HEIGHT = 62;
|
||||||
|
@ -341,7 +341,10 @@ public class HybridGen extends IndependentPlotGenerator {
|
|||||||
for (Entity entity : hybridPlotWorld.getPlotSchematicEntities()) {
|
for (Entity entity : hybridPlotWorld.getPlotSchematicEntities()) {
|
||||||
if (region.contains(entity.getLocation().toVector().toBlockPoint())) {
|
if (region.contains(entity.getLocation().toVector().toBlockPoint())) {
|
||||||
Vector3 pos = (entity.getLocation().toVector()
|
Vector3 pos = (entity.getLocation().toVector()
|
||||||
.subtract(region.getMinimumPoint().withY(hybridPlotWorld.getPlotSchematicMinPoint().getY()).toVector3()))
|
.subtract(region
|
||||||
|
.getMinimumPoint()
|
||||||
|
.withY(hybridPlotWorld.getPlotSchematicMinPoint().getY())
|
||||||
|
.toVector3()))
|
||||||
.add(min.getBlockVector3().withY(hybridPlotWorld.SCHEM_Y).toVector3());
|
.add(min.getBlockVector3().withY(hybridPlotWorld.SCHEM_Y).toVector3());
|
||||||
result.setEntity(new PopulatingEntity(
|
result.setEntity(new PopulatingEntity(
|
||||||
entity,
|
entity,
|
||||||
@ -365,7 +368,6 @@ public class HybridGen extends IndependentPlotGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -141,7 +141,11 @@ public class HybridPlotManager extends ClassicPlotManager {
|
|||||||
(pos1.getX() + pos2.getX()) / 2,
|
(pos1.getX() + pos2.getX()) / 2,
|
||||||
(pos1.getZ() + pos2.getZ()) / 2
|
(pos1.getZ() + pos2.getZ()) / 2
|
||||||
), biome)) {
|
), biome)) {
|
||||||
WorldUtil.setBiome(hybridPlotWorld.getWorldName(), new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()), biome);
|
WorldUtil.setBiome(
|
||||||
|
hybridPlotWorld.getWorldName(),
|
||||||
|
new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()),
|
||||||
|
biome
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,8 +207,18 @@ public class HybridPlotManager extends ClassicPlotManager {
|
|||||||
PlotId id2 = PlotId.of(id.getX(), id.getY() + 1);
|
PlotId id2 = PlotId.of(id.getX(), id.getY() + 1);
|
||||||
Location bot = getPlotBottomLocAbs(id2);
|
Location bot = getPlotBottomLocAbs(id2);
|
||||||
Location top = getPlotTopLocAbs(id);
|
Location top = getPlotTopLocAbs(id);
|
||||||
Location pos1 = Location.at(hybridPlotWorld.getWorldName(), bot.getX() - 1, hybridPlotWorld.getMinGenHeight(), top.getZ() + 1);
|
Location pos1 = Location.at(
|
||||||
Location pos2 = Location.at(hybridPlotWorld.getWorldName(), top.getX() + 1, hybridPlotWorld.getMaxGenHeight(), bot.getZ());
|
hybridPlotWorld.getWorldName(),
|
||||||
|
bot.getX() - 1,
|
||||||
|
hybridPlotWorld.getMinGenHeight(),
|
||||||
|
top.getZ() + 1
|
||||||
|
);
|
||||||
|
Location pos2 = Location.at(
|
||||||
|
hybridPlotWorld.getWorldName(),
|
||||||
|
top.getX() + 1,
|
||||||
|
hybridPlotWorld.getMaxGenHeight(),
|
||||||
|
bot.getZ()
|
||||||
|
);
|
||||||
this.resetBiome(hybridPlotWorld, pos1, pos2);
|
this.resetBiome(hybridPlotWorld, pos1, pos2);
|
||||||
if (!hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
|
if (!hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -344,18 +344,8 @@ public class HybridPlotWorld extends ClassicPlotWorld {
|
|||||||
if (w3 > PLOT_WIDTH || h3 > PLOT_WIDTH) {
|
if (w3 > PLOT_WIDTH || h3 > PLOT_WIDTH) {
|
||||||
this.ROAD_SCHEMATIC_ENABLED = true;
|
this.ROAD_SCHEMATIC_ENABLED = true;
|
||||||
}
|
}
|
||||||
int centerShiftZ;
|
int centerShiftZ = (this.PLOT_WIDTH - l3) / 2;
|
||||||
if (l3 < this.PLOT_WIDTH) {
|
int centerShiftX = (this.PLOT_WIDTH - w3) / 2;
|
||||||
centerShiftZ = (this.PLOT_WIDTH - l3) / 2;
|
|
||||||
} else {
|
|
||||||
centerShiftZ = (PLOT_WIDTH - l3) / 2;
|
|
||||||
}
|
|
||||||
int centerShiftX;
|
|
||||||
if (w3 < this.PLOT_WIDTH) {
|
|
||||||
centerShiftX = (this.PLOT_WIDTH - w3) / 2;
|
|
||||||
} else {
|
|
||||||
centerShiftX = (PLOT_WIDTH - w3) / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockVector3 min = blockArrayClipboard3.getMinimumPoint();
|
BlockVector3 min = blockArrayClipboard3.getMinimumPoint();
|
||||||
for (short x = 0; x < w3; x++) {
|
for (short x = 0; x < w3; x++) {
|
||||||
|
@ -37,7 +37,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
|
|||||||
import com.plotsquared.core.queue.BlockArrayCacheScopedQueueCoordinator;
|
import com.plotsquared.core.queue.BlockArrayCacheScopedQueueCoordinator;
|
||||||
import com.plotsquared.core.queue.GlobalBlockQueue;
|
import com.plotsquared.core.queue.GlobalBlockQueue;
|
||||||
import com.plotsquared.core.queue.QueueCoordinator;
|
import com.plotsquared.core.queue.QueueCoordinator;
|
||||||
import com.plotsquared.core.util.ChunkManager;
|
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.plotsquared.core.util.RegionManager;
|
import com.plotsquared.core.util.RegionManager;
|
||||||
@ -63,7 +62,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -88,7 +86,6 @@ public class HybridUtils {
|
|||||||
public static boolean UPDATE = false;
|
public static boolean UPDATE = false;
|
||||||
|
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final ChunkManager chunkManager;
|
|
||||||
private final GlobalBlockQueue blockQueue;
|
private final GlobalBlockQueue blockQueue;
|
||||||
private final WorldUtil worldUtil;
|
private final WorldUtil worldUtil;
|
||||||
private final SchematicHandler schematicHandler;
|
private final SchematicHandler schematicHandler;
|
||||||
@ -97,14 +94,12 @@ public class HybridUtils {
|
|||||||
@Inject
|
@Inject
|
||||||
public HybridUtils(
|
public HybridUtils(
|
||||||
final @NonNull PlotAreaManager plotAreaManager,
|
final @NonNull PlotAreaManager plotAreaManager,
|
||||||
final @NonNull ChunkManager chunkManager,
|
|
||||||
final @NonNull GlobalBlockQueue blockQueue,
|
final @NonNull GlobalBlockQueue blockQueue,
|
||||||
final @NonNull WorldUtil worldUtil,
|
final @NonNull WorldUtil worldUtil,
|
||||||
final @NonNull SchematicHandler schematicHandler,
|
final @NonNull SchematicHandler schematicHandler,
|
||||||
final @NonNull EventDispatcher eventDispatcher
|
final @NonNull EventDispatcher eventDispatcher
|
||||||
) {
|
) {
|
||||||
this.plotAreaManager = plotAreaManager;
|
this.plotAreaManager = plotAreaManager;
|
||||||
this.chunkManager = chunkManager;
|
|
||||||
this.blockQueue = blockQueue;
|
this.blockQueue = blockQueue;
|
||||||
this.worldUtil = worldUtil;
|
this.worldUtil = worldUtil;
|
||||||
this.schematicHandler = schematicHandler;
|
this.schematicHandler = schematicHandler;
|
||||||
@ -380,22 +375,6 @@ public class HybridUtils {
|
|||||||
run.run();
|
run.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int checkModified(QueueCoordinator queue, int x1, int x2, int y1, int y2, int z1, int z2, BlockState[] blocks) {
|
|
||||||
int count = 0;
|
|
||||||
for (int y = y1; y <= y2; y++) {
|
|
||||||
for (int x = x1; x <= x2; x++) {
|
|
||||||
for (int z = z1; z <= z2; z++) {
|
|
||||||
BlockState block = queue.getBlock(x, y, z);
|
|
||||||
boolean same = Arrays.stream(blocks).anyMatch(p -> this.worldUtil.isBlockSame(block, p));
|
|
||||||
if (!same) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final ArrayList<BlockVector2> getChunks(BlockVector2 region) {
|
public final ArrayList<BlockVector2> getChunks(BlockVector2 region) {
|
||||||
ArrayList<BlockVector2> chunks = new ArrayList<>();
|
ArrayList<BlockVector2> chunks = new ArrayList<>();
|
||||||
int sx = region.getX() << 5;
|
int sx = region.getX() << 5;
|
||||||
@ -645,7 +624,7 @@ public class HybridUtils {
|
|||||||
queue = queueCoordinator;
|
queue = queueCoordinator;
|
||||||
enqueue = false;
|
enqueue = false;
|
||||||
}
|
}
|
||||||
if (id1 == null || id2 == null || id1 != id2) {
|
if (id2 == null || id1 != id2) {
|
||||||
if (id1 != null) {
|
if (id1 != null) {
|
||||||
Plot p1 = area.getPlotAbs(id1);
|
Plot p1 = area.getPlotAbs(id1);
|
||||||
if (p1 != null && p1.hasOwner() && p1.isMerged()) {
|
if (p1 != null && p1.hasOwner() && p1.isMerged()) {
|
||||||
|
@ -57,7 +57,8 @@ public abstract class IndependentPlotGenerator {
|
|||||||
* @param setting PlotArea (settings)
|
* @param setting PlotArea (settings)
|
||||||
* @since TODO
|
* @since TODO
|
||||||
*/
|
*/
|
||||||
public void populateChunk(ZeroedDelegateScopedQueueCoordinator result, PlotArea setting) {}
|
public void populateChunk(ZeroedDelegateScopedQueueCoordinator result, PlotArea setting) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a new PlotArea object.
|
* Return a new PlotArea object.
|
||||||
@ -103,9 +104,9 @@ public abstract class IndependentPlotGenerator {
|
|||||||
* Get the biome to be generated at a specific point
|
* Get the biome to be generated at a specific point
|
||||||
*
|
*
|
||||||
* @param settings PlotArea settings to provide biome
|
* @param settings PlotArea settings to provide biome
|
||||||
* @param x World x position
|
* @param x World x position
|
||||||
* @param y World y position
|
* @param y World y position
|
||||||
* @param z World z position
|
* @param z World z position
|
||||||
* @return Biome type to be generated
|
* @return Biome type to be generated
|
||||||
* @since TODO
|
* @since TODO
|
||||||
*/
|
*/
|
||||||
|
@ -64,7 +64,6 @@ import com.sk89q.worldedit.world.item.ItemType;
|
|||||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.ComponentLike;
|
import net.kyori.adventure.text.ComponentLike;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
@ -80,8 +79,6 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class PlotListener {
|
public class PlotListener {
|
||||||
|
|
||||||
private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
|
|
||||||
|
|
||||||
private final HashMap<UUID, Interval> feedRunnable = new HashMap<>();
|
private final HashMap<UUID, Interval> feedRunnable = new HashMap<>();
|
||||||
private final HashMap<UUID, Interval> healRunnable = new HashMap<>();
|
private final HashMap<UUID, Interval> healRunnable = new HashMap<>();
|
||||||
private final Map<UUID, List<StatusEffect>> playerEffects = new HashMap<>();
|
private final Map<UUID, List<StatusEffect>> playerEffects = new HashMap<>();
|
||||||
@ -142,7 +139,9 @@ public class PlotListener {
|
|||||||
Map.Entry<UUID, List<StatusEffect>> entry = iterator.next();
|
Map.Entry<UUID, List<StatusEffect>> entry = iterator.next();
|
||||||
List<StatusEffect> effects = entry.getValue();
|
List<StatusEffect> effects = entry.getValue();
|
||||||
effects.removeIf(effect -> currentTime > effect.expiresAt);
|
effects.removeIf(effect -> currentTime > effect.expiresAt);
|
||||||
if (effects.isEmpty()) iterator.remove();
|
if (effects.isEmpty()) {
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, TaskTime.seconds(1L));
|
}, TaskTime.seconds(1L));
|
||||||
@ -341,14 +340,14 @@ public class PlotListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TimedFlag.Timed<Integer> feed = plot.getFlag(FeedFlag.class);
|
TimedFlag.Timed<Integer> feed = plot.getFlag(FeedFlag.class);
|
||||||
if (feed.getInterval() != 0 && feed.getValue() != 0) {
|
if (feed.interval() != 0 && feed.value() != 0) {
|
||||||
feedRunnable
|
feedRunnable
|
||||||
.put(player.getUUID(), new Interval(feed.getInterval(), feed.getValue(), 20));
|
.put(player.getUUID(), new Interval(feed.interval(), feed.value(), 20));
|
||||||
}
|
}
|
||||||
TimedFlag.Timed<Integer> heal = plot.getFlag(HealFlag.class);
|
TimedFlag.Timed<Integer> heal = plot.getFlag(HealFlag.class);
|
||||||
if (heal.getInterval() != 0 && heal.getValue() != 0) {
|
if (heal.interval() != 0 && heal.value() != 0) {
|
||||||
healRunnable
|
healRunnable
|
||||||
.put(player.getUUID(), new Interval(heal.getInterval(), heal.getValue(), 20));
|
.put(player.getUUID(), new Interval(heal.interval(), heal.value(), 20));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -486,8 +485,9 @@ public class PlotListener {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Marks an effect as a status effect that will be removed on leaving a plot
|
* Marks an effect as a status effect that will be removed on leaving a plot
|
||||||
* @param uuid The uuid of the player the effect belongs to
|
*
|
||||||
* @param name The name of the status effect
|
* @param uuid The uuid of the player the effect belongs to
|
||||||
|
* @param name The name of the status effect
|
||||||
* @param expiresAt The time when the effect expires
|
* @param expiresAt The time when the effect expires
|
||||||
* @since 6.10.0
|
* @since 6.10.0
|
||||||
*/
|
*/
|
||||||
@ -517,11 +517,6 @@ public class PlotListener {
|
|||||||
|
|
||||||
private record StatusEffect(@NonNull String name, long expiresAt) {
|
private record StatusEffect(@NonNull String name, long expiresAt) {
|
||||||
|
|
||||||
private StatusEffect(@NonNull String name, long expiresAt) {
|
}
|
||||||
this.name = name;
|
|
||||||
this.expiresAt = expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,17 +21,7 @@ package com.plotsquared.core.location;
|
|||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
|
|
||||||
public class ChunkWrapper {
|
public record ChunkWrapper(String world, int x, int z) {
|
||||||
|
|
||||||
public final int x;
|
|
||||||
public final int z;
|
|
||||||
public final String world;
|
|
||||||
|
|
||||||
public ChunkWrapper(String world, int x, int z) {
|
|
||||||
this.world = world;
|
|
||||||
this.x = x;
|
|
||||||
this.z = z;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
|
@ -51,7 +51,6 @@ public final class UncheckedWorldLocation extends Location {
|
|||||||
* @param y Y coordinate
|
* @param y Y coordinate
|
||||||
* @param z Z coordinate
|
* @param z Z coordinate
|
||||||
* @return New location
|
* @return New location
|
||||||
*
|
|
||||||
* @since 6.9.0
|
* @since 6.9.0
|
||||||
*/
|
*/
|
||||||
@DoNotUse
|
@DoNotUse
|
||||||
|
@ -215,17 +215,7 @@ public final class BlockBucket implements ConfigurationSerializable {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Range {
|
private record Range(int min, int max, boolean automatic) {
|
||||||
|
|
||||||
private final int min;
|
|
||||||
private final int max;
|
|
||||||
private final boolean automatic;
|
|
||||||
|
|
||||||
public Range(int min, int max, boolean automatic) {
|
|
||||||
this.min = min;
|
|
||||||
this.max = max;
|
|
||||||
this.automatic = automatic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getWeight() {
|
public int getWeight() {
|
||||||
return max - min;
|
return max - min;
|
||||||
@ -235,14 +225,6 @@ public final class BlockBucket implements ConfigurationSerializable {
|
|||||||
return num <= max && num >= min;
|
return num <= max && num >= min;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMin() {
|
|
||||||
return this.min;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMax() {
|
|
||||||
return this.max;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
if (o == this) {
|
if (o == this) {
|
||||||
return true;
|
return true;
|
||||||
@ -250,31 +232,24 @@ public final class BlockBucket implements ConfigurationSerializable {
|
|||||||
if (!(o instanceof final Range other)) {
|
if (!(o instanceof final Range other)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (this.getMin() != other.getMin()) {
|
if (this.min() != other.min()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (this.getMax() != other.getMax()) {
|
if (this.max() != other.max()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (this.isAutomatic() != other.isAutomatic()) {
|
return this.automatic() == other.automatic();
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
final int PRIME = 59;
|
final int PRIME = 59;
|
||||||
int result = 1;
|
int result = 1;
|
||||||
result = result * PRIME + this.getMin();
|
result = result * PRIME + this.min();
|
||||||
result = result * PRIME + this.getMax();
|
result = result * PRIME + this.max();
|
||||||
result = result * PRIME + (this.isAutomatic() ? 79 : 97);
|
result = result * PRIME + (this.automatic() ? 79 : 97);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAutomatic() {
|
|
||||||
return this.automatic;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -382,9 +382,6 @@ public abstract class PlotArea implements ComponentLike {
|
|||||||
this.defaultHome = new BlockLoc(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE);
|
this.defaultHome = new BlockLoc(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
/*String[] split = homeDefault.split(",");
|
|
||||||
this.DEFAULT_HOME =
|
|
||||||
new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1]));*/
|
|
||||||
this.defaultHome = BlockLoc.fromString(homeDefault);
|
this.defaultHome = BlockLoc.fromString(homeDefault);
|
||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
this.defaultHome = null;
|
this.defaultHome = null;
|
||||||
@ -658,8 +655,10 @@ public abstract class PlotArea implements ComponentLike {
|
|||||||
TranslatableCaption.of("height.height_limit"),
|
TranslatableCaption.of("height.height_limit"),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("minHeight", Tag.inserting(Component.text(minBuildHeight)))
|
.tag("minHeight", Tag.inserting(Component.text(minBuildHeight)))
|
||||||
.tag("maxHeight",
|
.tag(
|
||||||
Tag.inserting(Component.text(maxBuildHeight))).build()
|
"maxHeight",
|
||||||
|
Tag.inserting(Component.text(maxBuildHeight))
|
||||||
|
).build()
|
||||||
);
|
);
|
||||||
// Return true if "failed" as the method will always be inverted otherwise
|
// Return true if "failed" as the method will always be inverted otherwise
|
||||||
return true;
|
return true;
|
||||||
@ -1017,7 +1016,7 @@ public abstract class PlotArea implements ComponentLike {
|
|||||||
*
|
*
|
||||||
* @param plotIds List of plot IDs to merge
|
* @param plotIds List of plot IDs to merge
|
||||||
* @param removeRoads If the roads between plots should be removed
|
* @param removeRoads If the roads between plots should be removed
|
||||||
* @param whenDone Task to run when any merge world changes are complete. Also runs if no changes were made. Does not
|
* @param whenDone Task to run when any merge world changes are complete. Also runs if no changes were made. Does not
|
||||||
* run if there was an error or if too few plots IDs were supplied.
|
* run if there was an error or if too few plots IDs were supplied.
|
||||||
* @return if merges were completed successfully.
|
* @return if merges were completed successfully.
|
||||||
* @since 6.9.0
|
* @since 6.9.0
|
||||||
|
@ -100,7 +100,7 @@ public class PlotInventory {
|
|||||||
* Put an item into this inventory
|
* Put an item into this inventory
|
||||||
*
|
*
|
||||||
* @param index the index (= slot) where to place the item
|
* @param index the index (= slot) where to place the item
|
||||||
* @param item the item to place
|
* @param item the item to place
|
||||||
* @see #setItemChecked(int, PlotItemStack)
|
* @see #setItemChecked(int, PlotItemStack)
|
||||||
*/
|
*/
|
||||||
public void setItem(int index, PlotItemStack item) {
|
public void setItem(int index, PlotItemStack item) {
|
||||||
|
@ -79,14 +79,6 @@ public class PlotSettings {
|
|||||||
this.ratings = ratings;
|
this.ratings = ratings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setMerged(int direction, boolean merged) {
|
|
||||||
if (this.merged[direction] != merged) {
|
|
||||||
this.merged[direction] = merged;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setMerged(Direction direction, boolean merged) {
|
public boolean setMerged(Direction direction, boolean merged) {
|
||||||
if (Direction.ALL == direction) {
|
if (Direction.ALL == direction) {
|
||||||
throw new IllegalArgumentException("You cannot use Direction.ALL in this method!");
|
throw new IllegalArgumentException("You cannot use Direction.ALL in this method!");
|
||||||
@ -113,13 +105,12 @@ public class PlotSettings {
|
|||||||
this.position = position;
|
this.position = position;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"UnstableApiUsage"})
|
|
||||||
public List<PlotComment> getComments(String inbox) {
|
public List<PlotComment> getComments(String inbox) {
|
||||||
if (this.comments == null) {
|
if (this.comments == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.comments.stream().filter(comment -> comment.inbox.equals(inbox))
|
return this.comments.stream().filter(comment -> comment.inbox().equals(inbox))
|
||||||
.collect(ImmutableList.toImmutableList());
|
.collect(ImmutableList.toImmutableList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ public class CommentManager {
|
|||||||
if (value != null) {
|
if (value != null) {
|
||||||
int num = 0;
|
int num = 0;
|
||||||
for (PlotComment comment : value) {
|
for (PlotComment comment : value) {
|
||||||
if (comment.timestamp > getTimestamp(player, inbox.toString())) {
|
if (comment.timestamp() > getTimestamp(player, inbox.toString())) {
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,25 +20,6 @@ package com.plotsquared.core.plot.comment;
|
|||||||
|
|
||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
|
|
||||||
public class PlotComment {
|
public record PlotComment(String world, PlotId id, String comment, String senderName, String inbox, long timestamp) {
|
||||||
|
|
||||||
public final String comment;
|
|
||||||
public final String inbox;
|
|
||||||
public final String senderName;
|
|
||||||
public final PlotId id;
|
|
||||||
public final String world;
|
|
||||||
public final long timestamp;
|
|
||||||
|
|
||||||
public PlotComment(
|
|
||||||
String world, PlotId id, String comment, String senderName, String inbox,
|
|
||||||
long timestamp
|
|
||||||
) {
|
|
||||||
this.world = world;
|
|
||||||
this.id = id;
|
|
||||||
this.comment = comment;
|
|
||||||
this.senderName = senderName;
|
|
||||||
this.inbox = inbox;
|
|
||||||
this.timestamp = timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -154,6 +154,7 @@ public class ExpiryTask {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns {@code true} if this task respects unknown owners
|
* Returns {@code true} if this task respects unknown owners
|
||||||
|
*
|
||||||
* @return {@code true} if unknown owners should be counted as never online
|
* @return {@code true} if unknown owners should be counted as never online
|
||||||
* @since 6.4.0
|
* @since 6.4.0
|
||||||
*/
|
*/
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.plot.flag.implementations;
|
package com.plotsquared.core.plot.flag.implementations;
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.plot.flag.FlagParseException;
|
|
||||||
import com.plotsquared.core.plot.flag.InternalFlag;
|
import com.plotsquared.core.plot.flag.InternalFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.ListFlag;
|
import com.plotsquared.core.plot.flag.types.ListFlag;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
@ -34,7 +33,7 @@ public class AnalysisFlag extends ListFlag<Integer, AnalysisFlag> implements Int
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AnalysisFlag parse(@NonNull String input) throws FlagParseException {
|
public AnalysisFlag parse(@NonNull String input) {
|
||||||
final String[] split = input.split(",");
|
final String[] split = input.split(",");
|
||||||
final List<Integer> numbers = new ArrayList<>();
|
final List<Integer> numbers = new ArrayList<>();
|
||||||
for (final String element : split) {
|
for (final String element : split) {
|
||||||
|
@ -27,7 +27,7 @@ public class BeaconEffectsFlag extends BooleanFlag<BeaconEffectsFlag> {
|
|||||||
public static final BeaconEffectsFlag BEACON_EFFECT_TRUE = new BeaconEffectsFlag(true);
|
public static final BeaconEffectsFlag BEACON_EFFECT_TRUE = new BeaconEffectsFlag(true);
|
||||||
public static final BeaconEffectsFlag BEACON_EFFECT_FALSE = new BeaconEffectsFlag(false);
|
public static final BeaconEffectsFlag BEACON_EFFECT_FALSE = new BeaconEffectsFlag(false);
|
||||||
|
|
||||||
private BeaconEffectsFlag(boolean value){
|
private BeaconEffectsFlag(boolean value) {
|
||||||
super(value, TranslatableCaption.of("flags.flag_description_beacon_effect"));
|
super(value, TranslatableCaption.of("flags.flag_description_beacon_effect"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.plot.flag.implementations;
|
package com.plotsquared.core.plot.flag.implementations;
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.plot.flag.FlagParseException;
|
|
||||||
import com.plotsquared.core.plot.flag.types.ListFlag;
|
import com.plotsquared.core.plot.flag.types.ListFlag;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@ -39,7 +38,7 @@ public class BlockedCmdsFlag extends ListFlag<String, BlockedCmdsFlag> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockedCmdsFlag parse(@NonNull String input) throws FlagParseException {
|
public BlockedCmdsFlag parse(@NonNull String input) {
|
||||||
return flagOf(Arrays.asList(input.split(",")));
|
return flagOf(Arrays.asList(input.split(",")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ public class FeedFlag extends TimedFlag<Integer, FeedFlag> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Integer mergeValue(Integer other) {
|
protected Integer mergeValue(Integer other) {
|
||||||
return this.getValue().getValue() + other;
|
return this.getValue().value() + other;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -68,14 +68,11 @@ public class FlyFlag extends PlotFlag<FlyFlag.FlyStatus, FlyFlag> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FlyFlag flagOf(final @NonNull FlyStatus value) {
|
protected FlyFlag flagOf(final @NonNull FlyStatus value) {
|
||||||
switch (value) {
|
return switch (value) {
|
||||||
case ENABLED:
|
case ENABLED -> FLIGHT_FLAG_ENABLED;
|
||||||
return FLIGHT_FLAG_ENABLED;
|
case DISABLED -> FLIGHT_FLAG_DISABLED;
|
||||||
case DISABLED:
|
default -> FLIGHT_FLAG_DEFAULT;
|
||||||
return FLIGHT_FLAG_DISABLED;
|
};
|
||||||
default:
|
|
||||||
return FLIGHT_FLAG_DEFAULT;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.plot.flag.implementations;
|
package com.plotsquared.core.plot.flag.implementations;
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.plot.flag.FlagParseException;
|
|
||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.sk89q.worldedit.world.gamemode.GameMode;
|
import com.sk89q.worldedit.world.gamemode.GameMode;
|
||||||
import com.sk89q.worldedit.world.gamemode.GameModes;
|
import com.sk89q.worldedit.world.gamemode.GameModes;
|
||||||
@ -57,7 +56,7 @@ public class GamemodeFlag extends PlotFlag<GameMode, GamemodeFlag> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GamemodeFlag parse(@NonNull String input) throws FlagParseException {
|
public GamemodeFlag parse(@NonNull String input) {
|
||||||
return switch (input) {
|
return switch (input) {
|
||||||
case "creative", "c", "1" -> flagOf(GameModes.CREATIVE);
|
case "creative", "c", "1" -> flagOf(GameModes.CREATIVE);
|
||||||
case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE);
|
case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE);
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.plot.flag.implementations;
|
package com.plotsquared.core.plot.flag.implementations;
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.plot.flag.FlagParseException;
|
|
||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.sk89q.worldedit.world.gamemode.GameMode;
|
import com.sk89q.worldedit.world.gamemode.GameMode;
|
||||||
import com.sk89q.worldedit.world.gamemode.GameModes;
|
import com.sk89q.worldedit.world.gamemode.GameModes;
|
||||||
@ -52,7 +51,7 @@ public class GuestGamemodeFlag extends PlotFlag<GameMode, GuestGamemodeFlag> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GuestGamemodeFlag parse(@NonNull String input) throws FlagParseException {
|
public GuestGamemodeFlag parse(@NonNull String input) {
|
||||||
return switch (input) {
|
return switch (input) {
|
||||||
case "creative", "c", "1" -> flagOf(GameModes.CREATIVE);
|
case "creative", "c", "1" -> flagOf(GameModes.CREATIVE);
|
||||||
case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE);
|
case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE);
|
||||||
|
@ -60,7 +60,7 @@ public class HealFlag extends TimedFlag<Integer, HealFlag> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Integer mergeValue(Integer other) {
|
protected Integer mergeValue(Integer other) {
|
||||||
return this.getValue().getValue() + other;
|
return this.getValue().value() + other;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -27,7 +27,7 @@ public class ProjectilesFlag extends BooleanFlag<ProjectilesFlag> {
|
|||||||
public static final ProjectilesFlag PROJECTILES_TRUE = new ProjectilesFlag(true);
|
public static final ProjectilesFlag PROJECTILES_TRUE = new ProjectilesFlag(true);
|
||||||
public static final ProjectilesFlag PROJECTILES_FALSE = new ProjectilesFlag(false);
|
public static final ProjectilesFlag PROJECTILES_FALSE = new ProjectilesFlag(false);
|
||||||
|
|
||||||
private ProjectilesFlag(boolean value){
|
private ProjectilesFlag(boolean value) {
|
||||||
super(value, TranslatableCaption.of("flags.flag_description_projectiles"));
|
super(value, TranslatableCaption.of("flags.flag_description_projectiles"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public abstract class BlockTypeListFlag<F extends ListFlag<BlockTypeWrapper, F>>
|
public abstract class BlockTypeListFlag<F extends ListFlag<BlockTypeWrapper, F>>
|
||||||
extends ListFlag<BlockTypeWrapper, F> {
|
extends ListFlag<BlockTypeWrapper, F> {
|
||||||
@ -73,11 +72,9 @@ public abstract class BlockTypeListFlag<F extends ListFlag<BlockTypeWrapper, F>>
|
|||||||
public Collection<String> getTabCompletions() {
|
public Collection<String> getTabCompletions() {
|
||||||
final Collection<String> tabCompletions = new ArrayList<>();
|
final Collection<String> tabCompletions = new ArrayList<>();
|
||||||
tabCompletions.addAll(
|
tabCompletions.addAll(
|
||||||
BlockType.REGISTRY.keySet().stream().map(val -> val.replace("minecraft:", ""))
|
BlockType.REGISTRY.keySet().stream().map(val -> val.replace("minecraft:", "")).toList());
|
||||||
.collect(Collectors.toList()));
|
|
||||||
tabCompletions.addAll(
|
tabCompletions.addAll(
|
||||||
BlockCategory.REGISTRY.keySet().stream().map(val -> "#" + val.replace("minecraft:", ""))
|
BlockCategory.REGISTRY.keySet().stream().map(val -> "#" + val.replace("minecraft:", "")).toList());
|
||||||
.collect(Collectors.toList()));
|
|
||||||
return tabCompletions;
|
return tabCompletions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,23 +76,7 @@ public abstract class TimedFlag<T, F extends PlotFlag<TimedFlag.Timed<T>, F>>
|
|||||||
return getValue().toString();
|
return getValue().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Timed<T> {
|
public record Timed<T>(int interval, T value) {
|
||||||
|
|
||||||
private final int interval;
|
|
||||||
private final T value;
|
|
||||||
|
|
||||||
public Timed(int interval, T value) {
|
|
||||||
this.interval = interval;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getInterval() {
|
|
||||||
return interval;
|
|
||||||
}
|
|
||||||
|
|
||||||
public T getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@ -76,6 +76,7 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
* Returns true if the given string matches the naming system used to identify single plot worlds
|
* Returns true if the given string matches the naming system used to identify single plot worlds
|
||||||
* e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world
|
* e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world
|
||||||
* {@link com.plotsquared.core.plot.PlotArea}.
|
* {@link com.plotsquared.core.plot.PlotArea}.
|
||||||
|
*
|
||||||
* @since 6.1.4
|
* @since 6.1.4
|
||||||
*/
|
*/
|
||||||
public static boolean isSinglePlotWorld(String worldName) {
|
public static boolean isSinglePlotWorld(String worldName) {
|
||||||
@ -193,17 +194,6 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
// String worldName = plot.getWorldName();
|
|
||||||
// World world = Bukkit.getWorld(worldName);
|
|
||||||
// if (world != null) {
|
|
||||||
// return world;
|
|
||||||
// }
|
|
||||||
// WorldCreator wc = new WorldCreator(worldName);
|
|
||||||
// wc.generator("PlotSquared:single");
|
|
||||||
// wc.environment(World.Environment.NORMAL);
|
|
||||||
// wc.type(WorldType.FLAT);
|
|
||||||
// return AsyncWorld.create(wc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
* The min and max points of this queue are offset according to the minimum point given in the constructor, and the offsets set
|
* The min and max points of this queue are offset according to the minimum point given in the constructor, and the offsets set
|
||||||
* in {@link BlockArrayCacheScopedQueueCoordinator#setOffsetX(int)} and
|
* in {@link BlockArrayCacheScopedQueueCoordinator#setOffsetX(int)} and
|
||||||
* {@link BlockArrayCacheScopedQueueCoordinator#setOffsetZ(int)}
|
* {@link BlockArrayCacheScopedQueueCoordinator#setOffsetZ(int)}
|
||||||
*
|
* <p>
|
||||||
* Internal use only. Subject to change at any time and created for specific use cases.
|
* Internal use only. Subject to change at any time and created for specific use cases.
|
||||||
*/
|
*/
|
||||||
@NotPublic
|
@NotPublic
|
||||||
@ -54,6 +54,7 @@ public class BlockArrayCacheScopedQueueCoordinator extends ZeroedDelegateScopedQ
|
|||||||
private final int scopeMaxZ;
|
private final int scopeMaxZ;
|
||||||
private int offsetX = 0;
|
private int offsetX = 0;
|
||||||
private int offsetZ = 0;
|
private int offsetZ = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new instance
|
* Construct a new instance
|
||||||
*
|
*
|
||||||
|
@ -29,6 +29,7 @@ public abstract class ChunkCoordinator implements Runnable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel the chunk coordinator.
|
* Cancel the chunk coordinator.
|
||||||
|
*
|
||||||
* @since 6.0.10
|
* @since 6.0.10
|
||||||
*/
|
*/
|
||||||
public abstract void cancel();
|
public abstract void cancel();
|
||||||
|
@ -41,9 +41,6 @@ public class ZeroedDelegateScopedQueueCoordinator extends DelegateQueueCoordinat
|
|||||||
private final int minX;
|
private final int minX;
|
||||||
private final int minZ;
|
private final int minZ;
|
||||||
|
|
||||||
private final int maxX;
|
|
||||||
private final int maxZ;
|
|
||||||
|
|
||||||
private final int dx;
|
private final int dx;
|
||||||
private final int dz;
|
private final int dz;
|
||||||
|
|
||||||
@ -59,11 +56,8 @@ public class ZeroedDelegateScopedQueueCoordinator extends DelegateQueueCoordinat
|
|||||||
this.minX = min.getX();
|
this.minX = min.getX();
|
||||||
this.minZ = min.getZ();
|
this.minZ = min.getZ();
|
||||||
|
|
||||||
this.maxX = max.getX();
|
this.dx = max.getX() - minX;
|
||||||
this.maxZ = max.getZ();
|
this.dz = max.getZ() - minZ;
|
||||||
|
|
||||||
this.dx = maxX - minX;
|
|
||||||
this.dz = maxZ - minZ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,6 +36,7 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,11 +93,7 @@ public class DefaultProgressSubscriber implements ProgressSubscriber {
|
|||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
this.interval = TaskTime.ms(interval);
|
this.interval = TaskTime.ms(interval);
|
||||||
this.wait = TaskTime.ms(wait);
|
this.wait = TaskTime.ms(wait);
|
||||||
if (caption == null) {
|
this.caption = Objects.requireNonNullElse(caption, TranslatableCaption.of("working.progress"));
|
||||||
this.caption = TranslatableCaption.of("working.progress");
|
|
||||||
} else {
|
|
||||||
this.caption = caption;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -40,13 +40,7 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
.expireAfterWrite(20, TimeUnit.SECONDS).build();
|
.expireAfterWrite(20, TimeUnit.SECONDS).build();
|
||||||
Object plotLock = new Object();
|
Object plotLock = new Object();
|
||||||
|
|
||||||
final class AutoQuery {
|
record AutoQuery(PlotPlayer<?> player, PlotId startId, int sizeX, int sizeZ, PlotArea plotArea) {
|
||||||
|
|
||||||
private final PlotPlayer<?> player;
|
|
||||||
private final PlotId startId;
|
|
||||||
private final int sizeX;
|
|
||||||
private final int sizeZ;
|
|
||||||
private final PlotArea plotArea;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crate a new auto query
|
* Crate a new auto query
|
||||||
@ -73,7 +67,8 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
*
|
*
|
||||||
* @return Player
|
* @return Player
|
||||||
*/
|
*/
|
||||||
public @NonNull PlotPlayer<?> getPlayer() {
|
@Override
|
||||||
|
public @NonNull PlotPlayer<?> player() {
|
||||||
return this.player;
|
return this.player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +77,8 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
*
|
*
|
||||||
* @return Start ID
|
* @return Start ID
|
||||||
*/
|
*/
|
||||||
public @Nullable PlotId getStartId() {
|
@Override
|
||||||
|
public @Nullable PlotId startId() {
|
||||||
return this.startId;
|
return this.startId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +87,8 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
*
|
*
|
||||||
* @return Number of plots along the X axis
|
* @return Number of plots along the X axis
|
||||||
*/
|
*/
|
||||||
public int getSizeX() {
|
@Override
|
||||||
|
public int sizeX() {
|
||||||
return this.sizeX;
|
return this.sizeX;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,7 +97,8 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
*
|
*
|
||||||
* @return Number of plots along the Z axis
|
* @return Number of plots along the Z axis
|
||||||
*/
|
*/
|
||||||
public int getSizeZ() {
|
@Override
|
||||||
|
public int sizeZ() {
|
||||||
return this.sizeZ;
|
return this.sizeZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +107,8 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
*
|
*
|
||||||
* @return Plot area
|
* @return Plot area
|
||||||
*/
|
*/
|
||||||
public @NonNull PlotArea getPlotArea() {
|
@Override
|
||||||
|
public @NonNull PlotArea plotArea() {
|
||||||
return this.plotArea;
|
return this.plotArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,10 +131,10 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
@Override
|
@Override
|
||||||
public List<Plot> handle(@NonNull AutoQuery autoQuery) {
|
public List<Plot> handle(@NonNull AutoQuery autoQuery) {
|
||||||
Plot plot;
|
Plot plot;
|
||||||
PlotId nextId = autoQuery.getStartId();
|
PlotId nextId = autoQuery.startId();
|
||||||
do {
|
do {
|
||||||
synchronized (plotLock) {
|
synchronized (plotLock) {
|
||||||
plot = autoQuery.getPlotArea().getNextFreePlot(autoQuery.getPlayer(), nextId);
|
plot = autoQuery.plotArea().getNextFreePlot(autoQuery.player(), nextId);
|
||||||
if (plot != null && plotCandidateCache.getIfPresent(plot.getId()) == null) {
|
if (plot != null && plotCandidateCache.getIfPresent(plot.getId()) == null) {
|
||||||
plotCandidateCache.put(plot.getId(), plot);
|
plotCandidateCache.put(plot.getId(), plot);
|
||||||
return Collections.singletonList(plot);
|
return Collections.singletonList(plot);
|
||||||
@ -166,14 +165,14 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
while (true) {
|
while (true) {
|
||||||
synchronized (plotLock) {
|
synchronized (plotLock) {
|
||||||
final PlotId start =
|
final PlotId start =
|
||||||
autoQuery.getPlotArea().getMeta("lastPlot", PlotId.of(0, 0)).getNextId();
|
autoQuery.plotArea().getMeta("lastPlot", PlotId.of(0, 0)).getNextId();
|
||||||
final PlotId end = PlotId.of(
|
final PlotId end = PlotId.of(
|
||||||
start.getX() + autoQuery.getSizeX() - 1,
|
start.getX() + autoQuery.sizeX() - 1,
|
||||||
start.getY() + autoQuery.getSizeZ() - 1
|
start.getY() + autoQuery.sizeZ() - 1
|
||||||
);
|
);
|
||||||
final List<Plot> plots =
|
final List<Plot> plots =
|
||||||
autoQuery.getPlotArea().canClaim(autoQuery.getPlayer(), start, end);
|
autoQuery.plotArea().canClaim(autoQuery.player(), start, end);
|
||||||
autoQuery.getPlotArea().setMeta("lastPlot", start); // set entry point for next try
|
autoQuery.plotArea().setMeta("lastPlot", start); // set entry point for next try
|
||||||
if (plots != null && !plots.isEmpty()) {
|
if (plots != null && !plots.isEmpty()) {
|
||||||
for (final Plot plot : plots) {
|
for (final Plot plot : plots) {
|
||||||
if (plotCandidateCache.getIfPresent(plot.getId()) != null) {
|
if (plotCandidateCache.getIfPresent(plot.getId()) != null) {
|
||||||
@ -189,7 +188,7 @@ public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(final @NonNull AutoQuery autoQuery) {
|
public boolean test(final @NonNull AutoQuery autoQuery) {
|
||||||
return autoQuery.getPlotArea().getType() != PlotAreaType.PARTIAL;
|
return autoQuery.plotArea().getType() != PlotAreaType.PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public enum CommonSetupSteps implements SetupStep {
|
|||||||
@Override
|
@Override
|
||||||
public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String arg) {
|
public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String arg) {
|
||||||
Optional<PlotAreaType> plotAreaType = PlotAreaType.fromString(arg);
|
Optional<PlotAreaType> plotAreaType = PlotAreaType.fromString(arg);
|
||||||
if (!plotAreaType.isPresent()) {
|
if (plotAreaType.isEmpty()) {
|
||||||
plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_world_type_error"));
|
plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_world_type_error"));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -180,8 +180,7 @@ public enum CommonSetupSteps implements SetupStep {
|
|||||||
@Override
|
@Override
|
||||||
public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String argument) {
|
public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String argument) {
|
||||||
Optional<PlotAreaTerrainType> optTerrain;
|
Optional<PlotAreaTerrainType> optTerrain;
|
||||||
if (!(optTerrain = PlotAreaTerrainType.fromString(argument))
|
if ((optTerrain = PlotAreaTerrainType.fromString(argument)).isEmpty()) {
|
||||||
.isPresent()) {
|
|
||||||
plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_partial_area_error"));
|
plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_partial_area_error"));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -48,10 +48,10 @@ public class SettingsNodeStep implements SetupStep {
|
|||||||
) {
|
) {
|
||||||
this.configurationNode = configurationNode;
|
this.configurationNode = configurationNode;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
if (wrapper.getSettingsNodes().length > id + 1) {
|
if (wrapper.settingsNodes().length > id + 1) {
|
||||||
this.next = new SettingsNodeStep(wrapper.getSettingsNodes()[id + 1], id + 1, wrapper);
|
this.next = new SettingsNodeStep(wrapper.settingsNodes()[id + 1], id + 1, wrapper);
|
||||||
} else {
|
} else {
|
||||||
this.next = wrapper.getAfterwards();
|
this.next = wrapper.afterwards();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,15 +23,7 @@ import com.plotsquared.core.configuration.ConfigurationNode;
|
|||||||
/**
|
/**
|
||||||
* This class wraps an array of {@link ConfigurationNode}s.
|
* This class wraps an array of {@link ConfigurationNode}s.
|
||||||
*/
|
*/
|
||||||
public class SettingsNodesWrapper {
|
public record SettingsNodesWrapper(ConfigurationNode[] settingsNodes, SetupStep afterwards) {
|
||||||
|
|
||||||
private final ConfigurationNode[] settingsNodes;
|
|
||||||
private final SetupStep afterwards;
|
|
||||||
|
|
||||||
public SettingsNodesWrapper(final ConfigurationNode[] settingsNodes, final SetupStep afterwards) {
|
|
||||||
this.settingsNodes = settingsNodes;
|
|
||||||
this.afterwards = afterwards;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the first step of this wrapper or the step or the
|
* Returns the first step of this wrapper or the step or the
|
||||||
@ -43,12 +35,4 @@ public class SettingsNodesWrapper {
|
|||||||
return this.settingsNodes.length == 0 ? this.afterwards : new SettingsNodeStep(this.settingsNodes[0], 0, this);
|
return this.settingsNodes.length == 0 ? this.afterwards : new SettingsNodeStep(this.settingsNodes[0], 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConfigurationNode[] getSettingsNodes() {
|
|
||||||
return this.settingsNodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SetupStep getAfterwards() {
|
|
||||||
return this.afterwards;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -65,9 +65,9 @@ public final class LockRepository {
|
|||||||
* @param runnable Action to run when the lock is available
|
* @param runnable Action to run when the lock is available
|
||||||
*/
|
*/
|
||||||
public void useLock(final @NonNull LockKey key, final @NonNull Runnable runnable) {
|
public void useLock(final @NonNull LockKey key, final @NonNull Runnable runnable) {
|
||||||
try (LockAccess ignored = lock(key)) {
|
try (LockAccess ignored = lock(key)) {
|
||||||
runnable.run();
|
runnable.run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,8 +31,6 @@ import com.sk89q.worldedit.world.registry.LegacyMapper;
|
|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link BlockState} related utility methods
|
* {@link BlockState} related utility methods
|
||||||
*/
|
*/
|
||||||
@ -109,34 +107,4 @@ public final class BlockUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a comma delimited list of block states
|
|
||||||
*
|
|
||||||
* @param commaDelimited List of block states
|
|
||||||
* @return Parsed block states
|
|
||||||
*/
|
|
||||||
public static @NonNull BlockState[] parse(final @NonNull String commaDelimited) {
|
|
||||||
final String[] split = commaDelimited.split(",(?![^\\(\\[]*[\\]\\)])");
|
|
||||||
final BlockState[] result = new BlockState[split.length];
|
|
||||||
for (int i = 0; i < split.length; i++) {
|
|
||||||
result[i] = get(split[i]);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deserialize a serialized {@link BlockState}
|
|
||||||
*
|
|
||||||
* @param map Serialized block state
|
|
||||||
* @return Deserialized block state, or {@code null} if the map is
|
|
||||||
* not a properly serialized block state
|
|
||||||
*/
|
|
||||||
public static @Nullable BlockState deserialize(final @NonNull Map<String, Object> map) {
|
|
||||||
if (map.containsKey("material")) {
|
|
||||||
final Object object = map.get("material");
|
|
||||||
return get(object.toString());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core.util;
|
package com.plotsquared.core.util;
|
||||||
|
|
||||||
import com.plotsquared.core.location.Location;
|
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area.
|
* This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area.
|
||||||
*/
|
*/
|
||||||
@ -107,22 +103,4 @@ public class ChunkUtil {
|
|||||||
return z_loc[j];
|
return z_loc[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the region pos1-pos2 contains the chunk
|
|
||||||
*
|
|
||||||
* @param pos1 Region minimum point
|
|
||||||
* @param pos2 Region maximum point
|
|
||||||
* @param chunk BlockVector2 of chunk coordinates
|
|
||||||
* @return {@code true} if the region pos1-pos2 contains the chunk
|
|
||||||
*/
|
|
||||||
public static boolean isWholeChunk(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockVector2 chunk) {
|
|
||||||
int x1 = pos1.getX();
|
|
||||||
int z1 = pos1.getZ();
|
|
||||||
int x2 = pos2.getX();
|
|
||||||
int z2 = pos2.getZ();
|
|
||||||
int cx = chunk.getX() << 4;
|
|
||||||
int cz = chunk.getZ() << 4;
|
|
||||||
return cx > x1 && cz > z1 && cx < x2 && cz < z2;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,27 +42,15 @@ public class EntityUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int capNumeral(final @NonNull String flagName) {
|
private static int capNumeral(final @NonNull String flagName) {
|
||||||
int i;
|
int i = switch (flagName) {
|
||||||
switch (flagName) {
|
case "mob-cap" -> CAP_MOB;
|
||||||
case "mob-cap":
|
case "hostile-cap" -> CAP_MONSTER;
|
||||||
i = CAP_MOB;
|
case "animal-cap" -> CAP_ANIMAL;
|
||||||
break;
|
case "vehicle-cap" -> CAP_VEHICLE;
|
||||||
case "hostile-cap":
|
case "misc-cap" -> CAP_MISC;
|
||||||
i = CAP_MONSTER;
|
// "entity-cap"
|
||||||
break;
|
default -> CAP_ENTITY;
|
||||||
case "animal-cap":
|
};
|
||||||
i = CAP_ANIMAL;
|
|
||||||
break;
|
|
||||||
case "vehicle-cap":
|
|
||||||
i = CAP_VEHICLE;
|
|
||||||
break;
|
|
||||||
case "misc-cap":
|
|
||||||
i = CAP_MISC;
|
|
||||||
break;
|
|
||||||
case "entity-cap":
|
|
||||||
default:
|
|
||||||
i = CAP_ENTITY;
|
|
||||||
}
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,14 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core.util;
|
package com.plotsquared.core.util;
|
||||||
|
|
||||||
public class FileBytes {
|
public record FileBytes(String path, byte[] data) {
|
||||||
|
|
||||||
public final String path;
|
|
||||||
public final byte[] data;
|
|
||||||
|
|
||||||
public FileBytes(String path, byte[] data) {
|
|
||||||
this.path = path;
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,8 @@ public abstract class InventoryUtil {
|
|||||||
* Attempts to set an item into a {@link PlotInventory} while also checking the existence of the material
|
* Attempts to set an item into a {@link PlotInventory} while also checking the existence of the material
|
||||||
*
|
*
|
||||||
* @param plotInventory The inventory where the item should be placed
|
* @param plotInventory The inventory where the item should be placed
|
||||||
* @param index The index where to place the item
|
* @param index The index where to place the item
|
||||||
* @param item The item to place into the inventory
|
* @param item The item to place into the inventory
|
||||||
* @return {@code true} if the item could be placed, {@code false} otherwise (e.g. item not available in current version)
|
* @return {@code true} if the item could be placed, {@code false} otherwise (e.g. item not available in current version)
|
||||||
* @since 6.5.0
|
* @since 6.5.0
|
||||||
*/
|
*/
|
||||||
@ -49,12 +49,14 @@ public abstract class InventoryUtil {
|
|||||||
* Attempts to set an item into a {@link PlotInventory}
|
* Attempts to set an item into a {@link PlotInventory}
|
||||||
*
|
*
|
||||||
* @param plotInventory The inventory where the item should be placed
|
* @param plotInventory The inventory where the item should be placed
|
||||||
* @param index The index where to place the item
|
* @param index The index where to place the item
|
||||||
* @param item The item to place into the inventory
|
* @param item The item to place into the inventory
|
||||||
* @see #setItemChecked(PlotInventory, int, PlotItemStack)
|
* @see #setItemChecked(PlotInventory, int, PlotItemStack)
|
||||||
*/
|
*/
|
||||||
public void setItem(final PlotInventory plotInventory, final int index,
|
public void setItem(
|
||||||
final PlotItemStack item) {
|
final PlotInventory plotInventory, final int index,
|
||||||
|
final PlotItemStack item
|
||||||
|
) {
|
||||||
setItemChecked(plotInventory, index, item);
|
setItemChecked(plotInventory, index, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public final class ItemUtil {
|
|||||||
return ItemTypes.get(input);
|
return ItemTypes.get(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ItemType[] parse(String commaDelimited) {
|
public static ItemType[] parse(String commaDelimited) {
|
||||||
String[] split = commaDelimited.split(",(?![^\\(\\[]*[\\]\\)])");
|
String[] split = commaDelimited.split(",(?![^\\(\\[]*[\\]\\)])");
|
||||||
ItemType[] result = new ItemType[split.length];
|
ItemType[] result = new ItemType[split.length];
|
||||||
for (int i = 0; i < split.length; i++) {
|
for (int i = 0; i < split.length; i++) {
|
||||||
|
@ -20,49 +20,14 @@ package com.plotsquared.core.util;
|
|||||||
|
|
||||||
public class MathMan {
|
public class MathMan {
|
||||||
|
|
||||||
private static final int ATAN2_BITS = 7;
|
public static int gcd(int a, int b) {
|
||||||
private static final int ATAN2_BITS2 = ATAN2_BITS << 1;
|
|
||||||
private static final int ATAN2_MASK = ~(-1 << ATAN2_BITS2);
|
|
||||||
private static final int ATAN2_COUNT = ATAN2_MASK + 1;
|
|
||||||
private static final int ATAN2_DIM = (int) Math.sqrt(ATAN2_COUNT);
|
|
||||||
private static final float INV_ATAN2_DIM_MINUS_1 = 1.0f / (ATAN2_DIM - 1);
|
|
||||||
private static final float[] atan2 = new float[ATAN2_COUNT];
|
|
||||||
private static final int[] table =
|
|
||||||
{0, 16, 22, 27, 32, 35, 39, 42, 45, 48, 50, 53, 55, 57, 59, 61, 64, 65, 67, 69, 71, 73, 75,
|
|
||||||
76, 78, 80, 81, 83, 84, 86, 87, 89, 90, 91, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104,
|
|
||||||
106, 107, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
|
|
||||||
124, 125, 126, 128, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
|
|
||||||
141, 142, 143, 144, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, 153, 154, 155,
|
|
||||||
155, 156, 157, 158, 159, 160, 160, 161, 162, 163, 163, 164, 165, 166, 167, 167, 168,
|
|
||||||
169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, 178, 179, 180, 181,
|
|
||||||
181, 182, 183, 183, 184, 185, 185, 186, 187, 187, 188, 189, 189, 190, 191, 192, 192,
|
|
||||||
193, 193, 194, 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, 202, 203, 203,
|
|
||||||
204, 204, 205, 206, 206, 207, 208, 208, 209, 209, 210, 211, 211, 212, 212, 213, 214,
|
|
||||||
214, 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, 221, 221, 222, 222, 223, 224,
|
|
||||||
224, 225, 225, 226, 226, 227, 227, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
|
|
||||||
234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 240, 240, 241, 241, 242, 242,
|
|
||||||
243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, 251,
|
|
||||||
251, 252, 252, 253, 253, 254, 254, 255};
|
|
||||||
|
|
||||||
static {
|
|
||||||
for (int i = 0; i < ATAN2_DIM; i++) {
|
|
||||||
for (int j = 0; j < ATAN2_DIM; j++) {
|
|
||||||
float x0 = (float) i / ATAN2_DIM;
|
|
||||||
float y0 = (float) j / ATAN2_DIM;
|
|
||||||
|
|
||||||
atan2[(j * ATAN2_DIM) + i] = (float) Math.atan2(y0, x0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final int gcd(int a, int b) {
|
|
||||||
if (b == 0) {
|
if (b == 0) {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
return gcd(b, a % b);
|
return gcd(b, a % b);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final int gcd(int[] a) {
|
public static int gcd(int[] a) {
|
||||||
int result = a[0];
|
int result = a[0];
|
||||||
for (int i = 1; i < a.length; i++) {
|
for (int i = 1; i < a.length; i++) {
|
||||||
result = gcd(result, a[i]);
|
result = gcd(result, a[i]);
|
||||||
@ -70,103 +35,6 @@ public class MathMan {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long pairInt(int x, int y) {
|
|
||||||
return (((long) x) << 32) | (y & 0xffffffffL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int unpairIntX(long pair) {
|
|
||||||
return (int) (pair >> 32);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int unpairIntY(long pair) {
|
|
||||||
return (int) pair;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte pair16(byte x, byte y) {
|
|
||||||
return (byte) (x + (y << 4));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte unpair16x(byte value) {
|
|
||||||
return (byte) (value & 0xF);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte unpair16y(byte value) {
|
|
||||||
return (byte) ((value >> 4) & 0xF);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static long inverseRound(double val) {
|
|
||||||
long round = Math.round(val);
|
|
||||||
return (long) (round + Math.signum(val - round));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int sqrt(int x) {
|
|
||||||
int xn;
|
|
||||||
|
|
||||||
if (x >= 0x10000) {
|
|
||||||
if (x >= 0x1000000) {
|
|
||||||
if (x >= 0x10000000) {
|
|
||||||
if (x >= 0x40000000) {
|
|
||||||
xn = table[x >> 24] << 8;
|
|
||||||
} else {
|
|
||||||
xn = table[x >> 22] << 7;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (x >= 0x4000000) {
|
|
||||||
xn = table[x >> 20] << 6;
|
|
||||||
} else {
|
|
||||||
xn = table[x >> 18] << 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
xn = (xn + 1 + (x / xn)) >> 1;
|
|
||||||
xn = (xn + 1 + (x / xn)) >> 1;
|
|
||||||
return ((xn * xn) > x) ? --xn : xn;
|
|
||||||
} else {
|
|
||||||
if (x >= 0x100000) {
|
|
||||||
if (x >= 0x400000) {
|
|
||||||
xn = table[x >> 16] << 4;
|
|
||||||
} else {
|
|
||||||
xn = table[x >> 14] << 3;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (x >= 0x40000) {
|
|
||||||
xn = table[x >> 12] << 2;
|
|
||||||
} else {
|
|
||||||
xn = table[x >> 10] << 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
xn = (xn + 1 + (x / xn)) >> 1;
|
|
||||||
|
|
||||||
return ((xn * xn) > x) ? --xn : xn;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (x >= 0x100) {
|
|
||||||
if (x >= 0x1000) {
|
|
||||||
if (x >= 0x4000) {
|
|
||||||
xn = (table[x >> 8]) + 1;
|
|
||||||
} else {
|
|
||||||
xn = (table[x >> 6] >> 1) + 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (x >= 0x400) {
|
|
||||||
xn = (table[x >> 4] >> 2) + 1;
|
|
||||||
} else {
|
|
||||||
xn = (table[x >> 2] >> 3) + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((xn * xn) > x) ? --xn : xn;
|
|
||||||
} else {
|
|
||||||
if (x >= 0) {
|
|
||||||
return table[x] >> 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("Invalid number:" + x);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static double getMean(int[] array) {
|
public static double getMean(int[] array) {
|
||||||
double count = 0;
|
double count = 0;
|
||||||
for (int i : array) {
|
for (int i : array) {
|
||||||
@ -175,121 +43,18 @@ public class MathMan {
|
|||||||
return count / array.length;
|
return count / array.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getMean(double[] array) {
|
|
||||||
double count = 0;
|
|
||||||
for (double i : array) {
|
|
||||||
count += i;
|
|
||||||
}
|
|
||||||
return count / array.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int pair(short x, short y) {
|
public static int pair(short x, short y) {
|
||||||
return (x << 16) | (y & 0xFFFF);
|
return (x << 16) | (y & 0xFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final int average(int a, int b) {
|
public static int average(int a, int b) {
|
||||||
return (a & b) + (a ^ b) / 2;
|
return (a & b) + (a ^ b) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static short unpairX(int hash) {
|
|
||||||
return (short) (hash >> 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static short unpairY(int hash) {
|
|
||||||
return (short) (hash & 0xFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the x,y,z unit vector from pitch and yaw specified
|
|
||||||
*
|
|
||||||
* @param yaw yaw
|
|
||||||
* @param pitch pitch
|
|
||||||
* @return x, y, z unit vector
|
|
||||||
*/
|
|
||||||
public static float[] getDirection(float yaw, float pitch) {
|
|
||||||
double pitch_sin = Math.sin(pitch);
|
|
||||||
return new float[]{(float) (pitch_sin * Math.cos(yaw)),
|
|
||||||
(float) (pitch_sin * Math.sin(yaw)), (float) Math.cos(pitch)};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int floorMod(int x, int y) {
|
|
||||||
int i = x % y;
|
|
||||||
if (i < 0) {
|
|
||||||
i += y;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int roundInt(double value) {
|
public static int roundInt(double value) {
|
||||||
return (int) (value < 0 ? (value == (int) value) ? value : value - 1 : value);
|
return (int) (value < 0 ? (value == (int) value) ? value : value - 1 : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns [ pitch, yaw ]
|
|
||||||
*
|
|
||||||
* @param x x
|
|
||||||
* @param y y
|
|
||||||
* @param z z
|
|
||||||
* @return pitch and yaw of x,y,z from 0,0,0
|
|
||||||
*/
|
|
||||||
public static float[] getPitchAndYaw(float x, float y, float z) {
|
|
||||||
float distance = sqrtApprox((z * z) + (x * x));
|
|
||||||
return new float[]{atan2(y, distance), atan2(x, z)};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final float atan2(float y, float x) {
|
|
||||||
float add;
|
|
||||||
float mul;
|
|
||||||
|
|
||||||
if (x < 0.0f) {
|
|
||||||
if (y < 0.0f) {
|
|
||||||
x = -x;
|
|
||||||
y = -y;
|
|
||||||
|
|
||||||
mul = 1.0f;
|
|
||||||
} else {
|
|
||||||
x = -x;
|
|
||||||
mul = -1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
add = -3.141592653f;
|
|
||||||
} else {
|
|
||||||
if (y < 0.0f) {
|
|
||||||
y = -y;
|
|
||||||
mul = -1.0f;
|
|
||||||
} else {
|
|
||||||
mul = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
add = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
float invDiv = 1.0f / (((x < y) ? y : x) * INV_ATAN2_DIM_MINUS_1);
|
|
||||||
|
|
||||||
int xi = (int) (x * invDiv);
|
|
||||||
int yi = (int) (y * invDiv);
|
|
||||||
|
|
||||||
return (atan2[(yi * ATAN2_DIM) + xi] + add) * mul;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float sqrtApprox(float f) {
|
|
||||||
return f * Float.intBitsToFloat(0x5f375a86 - (Float.floatToIntBits(f) >> 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double sqrtApprox(double d) {
|
|
||||||
return Double
|
|
||||||
.longBitsToDouble(((Double.doubleToLongBits(d) - (1L << 52)) >> 1) + (1L << 61));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float invSqrt(float x) {
|
|
||||||
float xhalf = 0.5f * x;
|
|
||||||
int i = Float.floatToIntBits(x);
|
|
||||||
i = 0x5f3759df - (i >> 1);
|
|
||||||
x = Float.intBitsToFloat(i);
|
|
||||||
x = x * (1.5f - (xhalf * x * x));
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getPositiveId(int i) {
|
public static int getPositiveId(int i) {
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
return (-i * 2) - 1;
|
return (-i * 2) - 1;
|
||||||
@ -321,14 +86,6 @@ public class MathMan {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getSD(double[] array, double av) {
|
|
||||||
double sd = 0;
|
|
||||||
for (double element : array) {
|
|
||||||
sd += Math.pow(Math.abs(element - av), 2);
|
|
||||||
}
|
|
||||||
return Math.sqrt(sd / array.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double getSD(int[] array, double av) {
|
public static double getSD(int[] array, double av) {
|
||||||
double sd = 0;
|
double sd = 0;
|
||||||
for (int element : array) {
|
for (int element : array) {
|
||||||
@ -337,22 +94,4 @@ public class MathMan {
|
|||||||
return Math.sqrt(sd / array.length);
|
return Math.sqrt(sd / array.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int mod(int x, int y) {
|
|
||||||
if (isPowerOfTwo(y)) {
|
|
||||||
return x & (y - 1);
|
|
||||||
}
|
|
||||||
return x % y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int unsignedmod(int x, int y) {
|
|
||||||
if (isPowerOfTwo(y)) {
|
|
||||||
return x & (y - 1);
|
|
||||||
}
|
|
||||||
return x % y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isPowerOfTwo(int number) {
|
|
||||||
return (number & (number - 1)) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
consumer.accept(null, throwable);
|
consumer.accept(null, throwable);
|
||||||
} else {
|
} else {
|
||||||
for (final UUIDMapping uuid : uuids) {
|
for (final UUIDMapping uuid : uuids) {
|
||||||
result.add(uuid.getUuid());
|
result.add(uuid.uuid());
|
||||||
}
|
}
|
||||||
consumer.accept(result, null);
|
consumer.accept(result, null);
|
||||||
}
|
}
|
||||||
@ -136,7 +136,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
try {
|
try {
|
||||||
for (final UUIDMapping mapping : PlotSquared.get().getImpromptuUUIDPipeline()
|
for (final UUIDMapping mapping : PlotSquared.get().getImpromptuUUIDPipeline()
|
||||||
.getNames(players).get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS)) {
|
.getNames(players).get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS)) {
|
||||||
users.add(Component.text(mapping.getUsername()));
|
users.add(Component.text(mapping.username()));
|
||||||
}
|
}
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -200,7 +200,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
final UUIDMapping uuidMapping =
|
final UUIDMapping uuidMapping =
|
||||||
PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(owner);
|
PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(owner);
|
||||||
if (uuidMapping != null) {
|
if (uuidMapping != null) {
|
||||||
name = uuidMapping.getUsername();
|
name = uuidMapping.username();
|
||||||
} else {
|
} else {
|
||||||
name = null;
|
name = null;
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,8 @@ public abstract class RegionManager {
|
|||||||
fromQueue1.addReadChunks(new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()).getChunks());
|
fromQueue1.addReadChunks(new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()).getChunks());
|
||||||
fromQueue2.addReadChunks(new CuboidRegion(
|
fromQueue2.addReadChunks(new CuboidRegion(
|
||||||
swapPos.getBlockVector3(),
|
swapPos.getBlockVector3(),
|
||||||
BlockVector3.at(swapPos.getX() + pos2.getX() - pos1.getX(),
|
BlockVector3.at(
|
||||||
|
swapPos.getX() + pos2.getX() - pos1.getX(),
|
||||||
pos1.getY(),
|
pos1.getY(),
|
||||||
swapPos.getZ() + pos2.getZ() - pos1.getZ()
|
swapPos.getZ() + pos2.getZ() - pos1.getZ()
|
||||||
)
|
)
|
||||||
|
@ -19,12 +19,10 @@
|
|||||||
package com.plotsquared.core.util;
|
package com.plotsquared.core.util;
|
||||||
|
|
||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
import com.sk89q.worldedit.math.BlockVector3;
|
||||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.awt.geom.Rectangle2D;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
@ -90,12 +88,6 @@ public class RegionUtil {
|
|||||||
.getY() && y <= max.getY();
|
.getY() && y <= max.getY();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NonNull Rectangle2D toRectangle(final @NonNull CuboidRegion region) {
|
|
||||||
final BlockVector2 min = region.getMinimumPoint().toBlockVector2();
|
|
||||||
final BlockVector2 max = region.getMaximumPoint().toBlockVector2();
|
|
||||||
return new Rectangle2D.Double(min.getX(), min.getZ(), max.getX(), max.getZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Because WorldEdit (not FastAsyncWorldEdit) lack this for CuboidRegion
|
// Because WorldEdit (not FastAsyncWorldEdit) lack this for CuboidRegion
|
||||||
public static boolean intersects(CuboidRegion region, CuboidRegion other) {
|
public static boolean intersects(CuboidRegion region, CuboidRegion other) {
|
||||||
BlockVector3 regionMin = region.getMinimumPoint();
|
BlockVector3 regionMin = region.getMinimumPoint();
|
||||||
|
@ -429,9 +429,7 @@ public abstract class SchematicHandler {
|
|||||||
if (parent.exists()) {
|
if (parent.exists()) {
|
||||||
final String[] rawNames = parent.list((dir, name) -> name.endsWith(".schematic") || name.endsWith(".schem"));
|
final String[] rawNames = parent.list((dir, name) -> name.endsWith(".schematic") || name.endsWith(".schem"));
|
||||||
if (rawNames != null) {
|
if (rawNames != null) {
|
||||||
final List<String> transformed = Arrays.stream(rawNames)
|
final List<String> transformed = Arrays.stream(rawNames).toList();
|
||||||
//.map(rawName -> rawName.substring(0, rawName.length() - 10))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
names.addAll(transformed);
|
names.addAll(transformed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -727,10 +725,7 @@ public abstract class SchematicHandler {
|
|||||||
}
|
}
|
||||||
BaseBlock block = aabb.getWorld().getFullBlock(point);
|
BaseBlock block = aabb.getWorld().getFullBlock(point);
|
||||||
if (block.getNbtData() != null) {
|
if (block.getNbtData() != null) {
|
||||||
Map<String, Tag> values = new HashMap<>();
|
Map<String, Tag> values = new HashMap<>(block.getNbtData().getValue());
|
||||||
for (Map.Entry<String, Tag> entry : block.getNbtData().getValue().entrySet()) {
|
|
||||||
values.put(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Positions are kept in NBT, we don't want that.
|
// Positions are kept in NBT, we don't want that.
|
||||||
values.remove("x");
|
values.remove("x");
|
||||||
|
@ -18,19 +18,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core.util;
|
package com.plotsquared.core.util;
|
||||||
|
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
import com.plotsquared.core.configuration.caption.Caption;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -39,27 +33,6 @@ public class StringMan {
|
|||||||
// Stolen from https://stackoverflow.com/a/366532/12620913 | Debug: https://regex101.com/r/DudJLb/1
|
// Stolen from https://stackoverflow.com/a/366532/12620913 | Debug: https://regex101.com/r/DudJLb/1
|
||||||
private static final Pattern STRING_SPLIT_PATTERN = Pattern.compile("[^\\s\"]+|\"([^\"]*)\"");
|
private static final Pattern STRING_SPLIT_PATTERN = Pattern.compile("[^\\s\"]+|\"([^\"]*)\"");
|
||||||
|
|
||||||
public static String replaceFromMap(String string, Map<String, String> replacements) {
|
|
||||||
StringBuilder sb = new StringBuilder(string);
|
|
||||||
int size = string.length();
|
|
||||||
for (Entry<String, String> entry : replacements.entrySet()) {
|
|
||||||
if (size == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
String key = entry.getKey();
|
|
||||||
String value = entry.getValue();
|
|
||||||
int start = sb.indexOf(key, 0);
|
|
||||||
while (start > -1) {
|
|
||||||
int end = start + key.length();
|
|
||||||
int nextSearchStart = start + value.length();
|
|
||||||
sb.replace(start, end, value);
|
|
||||||
size -= end - start;
|
|
||||||
start = sb.indexOf(key, nextSearchStart);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int intersection(Set<String> options, String[] toCheck) {
|
public static int intersection(Set<String> options, String[] toCheck) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (String check : toCheck) {
|
for (String check : toCheck) {
|
||||||
@ -70,91 +43,6 @@ public class StringMan {
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getString(Object obj) {
|
|
||||||
if (obj == null) {
|
|
||||||
return "null";
|
|
||||||
}
|
|
||||||
if (obj instanceof String) {
|
|
||||||
return (String) obj;
|
|
||||||
}
|
|
||||||
if (obj instanceof Caption) {
|
|
||||||
return ((Caption) obj).getComponent(PlotSquared.platform());
|
|
||||||
}
|
|
||||||
if (obj.getClass().isArray()) {
|
|
||||||
StringBuilder result = new StringBuilder();
|
|
||||||
String prefix = "";
|
|
||||||
|
|
||||||
for (int i = 0; i < Array.getLength(obj); i++) {
|
|
||||||
result.append(prefix).append(getString(Array.get(obj, i)));
|
|
||||||
prefix = ",";
|
|
||||||
}
|
|
||||||
return "( " + result + " )";
|
|
||||||
} else if (obj instanceof Collection<?>) {
|
|
||||||
StringBuilder result = new StringBuilder();
|
|
||||||
String prefix = "";
|
|
||||||
for (Object element : (Collection<?>) obj) {
|
|
||||||
result.append(prefix).append(getString(element));
|
|
||||||
prefix = ",";
|
|
||||||
}
|
|
||||||
return "[ " + result + " ]";
|
|
||||||
} else {
|
|
||||||
return obj.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String replaceFirst(char c, String s) {
|
|
||||||
if (s == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
if (s.isEmpty()) {
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
char[] chars = s.toCharArray();
|
|
||||||
char[] newChars = new char[chars.length];
|
|
||||||
int used = 0;
|
|
||||||
boolean found = false;
|
|
||||||
for (char cc : chars) {
|
|
||||||
if (!found && (c == cc)) {
|
|
||||||
found = true;
|
|
||||||
} else {
|
|
||||||
newChars[used++] = cc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (found) {
|
|
||||||
chars = new char[newChars.length - 1];
|
|
||||||
System.arraycopy(newChars, 0, chars, 0, chars.length);
|
|
||||||
return String.valueOf(chars);
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String replaceAll(String string, Object... pairs) {
|
|
||||||
StringBuilder sb = new StringBuilder(string);
|
|
||||||
for (int i = 0; i < pairs.length; i += 2) {
|
|
||||||
String key = pairs[i] + "";
|
|
||||||
String value = pairs[i + 1] + "";
|
|
||||||
int start = sb.indexOf(key, 0);
|
|
||||||
while (start > -1) {
|
|
||||||
int end = start + key.length();
|
|
||||||
int nextSearchStart = start + value.length();
|
|
||||||
sb.replace(start, end, value);
|
|
||||||
start = sb.indexOf(key, nextSearchStart);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isAlphanumeric(String str) {
|
|
||||||
for (int i = 0; i < str.length(); i++) {
|
|
||||||
char c = str.charAt(i);
|
|
||||||
if ((c < 0x30) || ((c >= 0x3a) && (c <= 0x40)) || ((c > 0x5a) && (c <= 0x60)) || (c
|
|
||||||
> 0x7a)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isAlphanumericUnd(String str) {
|
public static boolean isAlphanumericUnd(String str) {
|
||||||
for (int i = 0; i < str.length(); i++) {
|
for (int i = 0; i < str.length(); i++) {
|
||||||
char c = str.charAt(i);
|
char c = str.charAt(i);
|
||||||
@ -165,16 +53,6 @@ public class StringMan {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAlpha(String str) {
|
|
||||||
for (int i = 0; i < str.length(); i++) {
|
|
||||||
char c = str.charAt(i);
|
|
||||||
if ((c <= 0x40) || ((c > 0x5a) && (c <= 0x60)) || (c > 0x7a)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String join(Collection<?> collection, String delimiter) {
|
public static String join(Collection<?> collection, String delimiter) {
|
||||||
return join(collection.toArray(), delimiter);
|
return join(collection.toArray(), delimiter);
|
||||||
}
|
}
|
||||||
@ -185,23 +63,6 @@ public class StringMan {
|
|||||||
return join(array, delimiter);
|
return join(array, delimiter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String join(Collection<?> collection, char delimiter) {
|
|
||||||
return join(collection.toArray(), delimiter + "");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isAsciiPrintable(char c) {
|
|
||||||
return (c >= ' ') && (c < '');
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isAsciiPrintable(String s) {
|
|
||||||
for (char c : s.toCharArray()) {
|
|
||||||
if (!isAsciiPrintable(c)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getLevenshteinDistance(String s, String t) {
|
public static int getLevenshteinDistance(String s, String t) {
|
||||||
int n = s.length();
|
int n = s.length();
|
||||||
int m = t.length();
|
int m = t.length();
|
||||||
@ -249,23 +110,6 @@ public class StringMan {
|
|||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String join(int[] array, String delimiter) {
|
|
||||||
Integer[] wrapped = new Integer[array.length];
|
|
||||||
for (int i = 0; i < array.length; i++) {
|
|
||||||
wrapped[i] = array[i];
|
|
||||||
}
|
|
||||||
return join(wrapped, delimiter);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isEqualToAny(String a, String... args) {
|
|
||||||
for (String arg : args) {
|
|
||||||
if (StringMan.isEqual(a, arg)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isEqualIgnoreCaseToAny(@NonNull String a, String... args) {
|
public static boolean isEqualIgnoreCaseToAny(@NonNull String a, String... args) {
|
||||||
for (String arg : args) {
|
for (String arg : args) {
|
||||||
if (a.equalsIgnoreCase(arg)) {
|
if (a.equalsIgnoreCase(arg)) {
|
||||||
@ -284,39 +128,8 @@ public class StringMan {
|
|||||||
return a.equals(b);
|
return a.equals(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isEqualIgnoreCase(String a, String b) {
|
|
||||||
return a.equals(b) || ((a != null) && (b != null) && (a.length() == b.length()) && a
|
|
||||||
.equalsIgnoreCase(b));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String repeat(String s, int n) {
|
public static String repeat(String s, int n) {
|
||||||
StringBuilder sb = new StringBuilder();
|
return String.valueOf(s).repeat(Math.max(0, n));
|
||||||
sb.append(String.valueOf(s).repeat(Math.max(0, n)));
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean contains(String name, char c) {
|
|
||||||
for (char current : name.toCharArray()) {
|
|
||||||
if (c == current) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> Collection<T> match(Collection<T> col, String startsWith) {
|
|
||||||
if (col == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
startsWith = startsWith.toLowerCase();
|
|
||||||
Iterator<?> iterator = col.iterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Object item = iterator.next();
|
|
||||||
if (item == null || !item.toString().toLowerCase().startsWith(startsWith)) {
|
|
||||||
iterator.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return col;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -238,8 +238,8 @@ public final class TabCompletions {
|
|||||||
PlotSquared.get().getImpromptuUUIDPipeline().getAllImmediately();
|
PlotSquared.get().getImpromptuUUIDPipeline().getAllImmediately();
|
||||||
players = new ArrayList<>(mappings.size());
|
players = new ArrayList<>(mappings.size());
|
||||||
for (final UUIDMapping mapping : mappings) {
|
for (final UUIDMapping mapping : mappings) {
|
||||||
if (uuidFilter.test(mapping.getUuid())) {
|
if (uuidFilter.test(mapping.uuid())) {
|
||||||
players.add(mapping.getUsername());
|
players.add(mapping.username());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cachedCompletionValues.put(cacheIdentifier, players);
|
cachedCompletionValues.put(cacheIdentifier, players);
|
||||||
|
@ -92,23 +92,23 @@ public final class TimeUtil {
|
|||||||
case "wks":
|
case "wks":
|
||||||
case "w":
|
case "w":
|
||||||
|
|
||||||
time += 604800 * numbers;
|
time += 604800L * numbers;
|
||||||
case "days":
|
case "days":
|
||||||
case "day":
|
case "day":
|
||||||
case "d":
|
case "d":
|
||||||
time += 86400 * numbers;
|
time += 86400L * numbers;
|
||||||
case "hour":
|
case "hour":
|
||||||
case "hr":
|
case "hr":
|
||||||
case "hrs":
|
case "hrs":
|
||||||
case "hours":
|
case "hours":
|
||||||
case "h":
|
case "h":
|
||||||
time += 3600 * numbers;
|
time += 3600L * numbers;
|
||||||
case "minutes":
|
case "minutes":
|
||||||
case "minute":
|
case "minute":
|
||||||
case "mins":
|
case "mins":
|
||||||
case "min":
|
case "min":
|
||||||
case "m":
|
case "m":
|
||||||
time += 60 * numbers;
|
time += 60L * numbers;
|
||||||
case "seconds":
|
case "seconds":
|
||||||
case "second":
|
case "second":
|
||||||
case "secs":
|
case "secs":
|
||||||
|
@ -58,29 +58,6 @@ public class WEManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean maskContains(Set<CuboidRegion> mask, double dx, double dy, double dz) {
|
|
||||||
int x = Math.toIntExact(Math.round(dx >= 0 ? dx - 0.5 : dx + 0.5));
|
|
||||||
int y = Math.toIntExact(Math.round(dy - 0.5));
|
|
||||||
int z = Math.toIntExact(Math.round(dz >= 0 ? dz - 0.5 : dz + 0.5));
|
|
||||||
for (CuboidRegion region : mask) {
|
|
||||||
if (RegionUtil.contains(region, x, y, z)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean maskContains(Set<CuboidRegion> mask, double dx, double dz) {
|
|
||||||
int x = Math.toIntExact(Math.round(dx >= 0 ? dx - 0.5 : dx + 0.5));
|
|
||||||
int z = Math.toIntExact(Math.round(dz >= 0 ? dz - 0.5 : dz + 0.5));
|
|
||||||
for (CuboidRegion region : mask) {
|
|
||||||
if (RegionUtil.contains(region, x, z)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HashSet<CuboidRegion> getMask(PlotPlayer<?> player) {
|
public static HashSet<CuboidRegion> getMask(PlotPlayer<?> player) {
|
||||||
HashSet<CuboidRegion> regions = new HashSet<>();
|
HashSet<CuboidRegion> regions = new HashSet<>();
|
||||||
UUID uuid = player.getUUID();
|
UUID uuid = player.getUUID();
|
||||||
@ -116,17 +93,4 @@ public class WEManager {
|
|||||||
return regions;
|
return regions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean intersects(CuboidRegion region1, CuboidRegion region2) {
|
|
||||||
return RegionUtil.intersects(region1, region2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean regionContains(CuboidRegion selection, HashSet<CuboidRegion> mask) {
|
|
||||||
for (CuboidRegion region : mask) {
|
|
||||||
if (intersects(region, selection)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -281,7 +281,8 @@ public abstract class WorldUtil {
|
|||||||
int trz = top.getZ() >> 9;
|
int trz = top.getZ() >> 9;
|
||||||
Set<BlockVector2> files = getChunkChunks(bot.getWorldName());
|
Set<BlockVector2> files = getChunkChunks(bot.getWorldName());
|
||||||
for (BlockVector2 mca : files) {
|
for (BlockVector2 mca : files) {
|
||||||
if (mca.getX() >= brx && mca.getX() <= trx && mca.getZ() >= brz && mca.getZ() <= trz && !added.contains(mca)) {
|
if (mca.getX() >= brx && mca.getX() <= trx && mca.getZ() >= brz && mca.getZ() <= trz && !added.contains(
|
||||||
|
mca)) {
|
||||||
final File file = getMcr(plot.getWorldName(), mca.getX(), mca.getZ());
|
final File file = getMcr(plot.getWorldName(), mca.getX(), mca.getZ());
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
//final String name = "r." + (x - cx) + "." + (z - cz) + ".mca";
|
//final String name = "r." + (x - cx) + "." + (z - cz) + ".mca";
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user