mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-21 20:56:45 +01:00
Initial annotation usage cleanup + EditorConfig
This commit is contained in:
parent
8b332adbe7
commit
57fc51d013
1013
.editorconfig
Normal file
1013
.editorconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -93,7 +93,6 @@ tasks.named<ShadowJar>("shadowJar") {
|
||||
relocate("org.apache.logging.slf4j", "com.plotsquared.logging.apache.slf4j")
|
||||
relocate("org.slf4j", "com.plotsquared.logging.slf4j")
|
||||
relocate("com.google.inject", "com.plotsquared.google")
|
||||
relocate("javax.inject", "com.plotsquared.core.inject.javax")
|
||||
relocate("org.aopalliance", "com.plotsquared.core.aopalliance")
|
||||
relocate("com.intellectualsites.services", "com.plotsquared.core.services")
|
||||
relocate("com.intellectualsites.arkitektonika", "com.plotsquared.core.arkitektonika")
|
||||
|
@ -46,8 +46,10 @@ import java.util.List;
|
||||
public class BukkitCommand implements CommandExecutor, TabCompleter {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender commandSender, Command command, String commandLabel,
|
||||
String[] args) {
|
||||
public boolean onCommand(
|
||||
CommandSender commandSender, Command command, String commandLabel,
|
||||
String[] args
|
||||
) {
|
||||
if (commandSender instanceof Player) {
|
||||
return MainCommand.onCommand(BukkitUtil.adapt((Player) commandSender), args);
|
||||
}
|
||||
@ -60,8 +62,10 @@ public class BukkitCommand implements CommandExecutor, TabCompleter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender commandSender, Command command, String s,
|
||||
String[] args) {
|
||||
public List<String> onTabComplete(
|
||||
CommandSender commandSender, Command command, String s,
|
||||
String[] args
|
||||
) {
|
||||
if (!(commandSender instanceof Player)) {
|
||||
return null;
|
||||
}
|
||||
@ -80,4 +84,5 @@ public class BukkitCommand implements CommandExecutor, TabCompleter {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -136,11 +136,11 @@ import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
@ -165,7 +165,8 @@ import static com.plotsquared.core.util.PremiumVerification.getResourceID;
|
||||
import static com.plotsquared.core.util.PremiumVerification.getUserID;
|
||||
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
||||
|
||||
@SuppressWarnings("unused") @Singleton
|
||||
@SuppressWarnings("unused")
|
||||
@Singleton
|
||||
public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPlatform<Player> {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger("P2/" + BukkitPlatform.class.getSimpleName());
|
||||
@ -188,19 +189,34 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
|
||||
private Injector injector;
|
||||
|
||||
@Inject private PlotAreaManager plotAreaManager;
|
||||
@Inject private EventDispatcher eventDispatcher;
|
||||
@Inject private PlotListener plotListener;
|
||||
@Inject @WorldConfig private YamlConfiguration worldConfiguration;
|
||||
@Inject @WorldFile private File worldfile;
|
||||
@Inject private BukkitPlayerManager playerManager;
|
||||
@Inject private BackupManager backupManager;
|
||||
@Inject @ImpromptuPipeline private UUIDPipeline impromptuPipeline;
|
||||
@Inject @BackgroundPipeline private UUIDPipeline backgroundPipeline;
|
||||
@Inject private PlatformWorldManager<World> worldManager;
|
||||
@Inject
|
||||
private PlotAreaManager plotAreaManager;
|
||||
@Inject
|
||||
private EventDispatcher eventDispatcher;
|
||||
@Inject
|
||||
private PlotListener plotListener;
|
||||
@Inject
|
||||
@WorldConfig
|
||||
private YamlConfiguration worldConfiguration;
|
||||
@Inject
|
||||
@WorldFile
|
||||
private File worldfile;
|
||||
@Inject
|
||||
private BukkitPlayerManager playerManager;
|
||||
@Inject
|
||||
private BackupManager backupManager;
|
||||
@Inject
|
||||
@ImpromptuPipeline
|
||||
private UUIDPipeline impromptuPipeline;
|
||||
@Inject
|
||||
@BackgroundPipeline
|
||||
private UUIDPipeline backgroundPipeline;
|
||||
@Inject
|
||||
private PlatformWorldManager<World> worldManager;
|
||||
private Locale serverLocale;
|
||||
|
||||
@Override @Nonnull public int[] serverVersion() {
|
||||
@Override
|
||||
public @NonNull int[] serverVersion() {
|
||||
if (this.version == null) {
|
||||
try {
|
||||
this.version = new int[3];
|
||||
@ -212,17 +228,19 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
e.printStackTrace();
|
||||
return new int[] {1, 13, 0};
|
||||
return new int[]{1, 13, 0};
|
||||
}
|
||||
}
|
||||
return this.version;
|
||||
}
|
||||
|
||||
@Override @Nonnull public String serverImplementation() {
|
||||
@Override
|
||||
public @NonNull String serverImplementation() {
|
||||
return Bukkit.getVersion();
|
||||
}
|
||||
|
||||
@Override public void onEnable() {
|
||||
@Override
|
||||
public void onEnable() {
|
||||
this.pluginName = getDescription().getName();
|
||||
|
||||
final TaskTime.TimeConverter timeConverter;
|
||||
@ -241,8 +259,13 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
// We create the injector after PlotSquared has been initialized, so that we have access
|
||||
// to generated instances and settings
|
||||
this.injector = Guice
|
||||
.createInjector(Stage.PRODUCTION, new PermissionModule(), new WorldManagerModule(), new PlotSquaredModule(), new BukkitModule(this),
|
||||
new BackupModule());
|
||||
.createInjector(Stage.PRODUCTION,
|
||||
new PermissionModule(),
|
||||
new WorldManagerModule(),
|
||||
new PlotSquaredModule(),
|
||||
new BukkitModule(this),
|
||||
new BackupModule()
|
||||
);
|
||||
this.injector.injectMembers(this);
|
||||
|
||||
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
|
||||
@ -299,7 +322,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
new WE_Anywhere();
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("Incompatible version of WorldEdit, please upgrade: https://builds.enginehub.org/job/worldedit?branch=master");
|
||||
logger.error(
|
||||
"Incompatible version of WorldEdit, please upgrade: https://builds.enginehub.org/job/worldedit?branch=master");
|
||||
}
|
||||
}
|
||||
|
||||
@ -367,7 +391,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
continue;
|
||||
}
|
||||
if (!worldUtil.isWorld(world) && !world.equals("*")) {
|
||||
logger.warn("`{}` was not properly loaded - {} will now try to load it properly", world, this.pluginName());
|
||||
logger.warn(
|
||||
"`{}` was not properly loaded - {} will now try to load it properly",
|
||||
world,
|
||||
this.pluginName()
|
||||
);
|
||||
logger.warn(
|
||||
" - Are you trying to delete this world? Remember to remove it from the worlds.yml, bukkit.yml and multiverse worlds.yml");
|
||||
logger.warn(" - Your world management plugin may be faulty (or non existent)");
|
||||
@ -403,7 +431,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
final SQLiteUUIDService sqLiteUUIDService = new SQLiteUUIDService("user_cache.db");
|
||||
|
||||
final SQLiteUUIDService legacyUUIDService;
|
||||
if (Settings.UUID.LEGACY_DATABASE_SUPPORT && FileUtils.getFile(PlotSquared.platform().getDirectory(), "usercache.db").exists()) {
|
||||
if (Settings.UUID.LEGACY_DATABASE_SUPPORT && FileUtils
|
||||
.getFile(PlotSquared.platform().getDirectory(), "usercache.db")
|
||||
.exists()) {
|
||||
legacyUUIDService = new SQLiteUUIDService("usercache.db");
|
||||
} else {
|
||||
legacyUUIDService = null;
|
||||
@ -518,7 +548,12 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
this.methodUnloadSetup = true;
|
||||
try {
|
||||
ReflectionUtils.RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
|
||||
this.methodUnloadChunk0 = classCraftWorld.getRealClass().getDeclaredMethod("unloadChunk0", int.class, int.class, boolean.class);
|
||||
this.methodUnloadChunk0 = classCraftWorld.getRealClass().getDeclaredMethod(
|
||||
"unloadChunk0",
|
||||
int.class,
|
||||
int.class,
|
||||
boolean.class
|
||||
);
|
||||
this.methodUnloadChunk0.setAccessible(true);
|
||||
} catch (Throwable event) {
|
||||
event.printStackTrace();
|
||||
@ -549,7 +584,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
final Plot plot = area.getOwnedPlot(id);
|
||||
if (plot != null) {
|
||||
if (!plot.getFlag(ServerPlotFlag.class) || PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwner()) == null) {
|
||||
if (!plot.getFlag(ServerPlotFlag.class) || PlotSquared
|
||||
.platform()
|
||||
.playerManager()
|
||||
.getPlayerIfExists(plot.getOwner()) == null) {
|
||||
if (world.getKeepSpawnInMemory()) {
|
||||
world.setKeepSpawnInMemory(false);
|
||||
return;
|
||||
@ -590,7 +628,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
}
|
||||
|
||||
private void startUuidCaching(@Nonnull final SQLiteUUIDService sqLiteUUIDService, @Nonnull final CacheUUIDService cacheUUIDService) {
|
||||
private void startUuidCaching(
|
||||
final @NonNull SQLiteUUIDService sqLiteUUIDService,
|
||||
final @NonNull CacheUUIDService cacheUUIDService
|
||||
) {
|
||||
// Load all uuids into a big chunky boi queue
|
||||
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>();
|
||||
PlotSquared.get().forEachPlotRaw(plot -> {
|
||||
@ -656,12 +697,14 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}, 10, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
@Override public void onDisable() {
|
||||
@Override
|
||||
public void onDisable() {
|
||||
PlotSquared.get().disable();
|
||||
Bukkit.getScheduler().cancelTasks(this);
|
||||
}
|
||||
|
||||
@Override public void shutdown() {
|
||||
@Override
|
||||
public void shutdown() {
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
}
|
||||
|
||||
@ -675,15 +718,18 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnull public File getDirectory() {
|
||||
@Override
|
||||
public @NonNull File getDirectory() {
|
||||
return getDataFolder();
|
||||
}
|
||||
|
||||
@Override @Nonnull public File worldContainer() {
|
||||
@Override
|
||||
public @NonNull File worldContainer() {
|
||||
return Bukkit.getWorldContainer();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") private void runEntityTask() {
|
||||
@SuppressWarnings("deprecation")
|
||||
private void runEntityTask() {
|
||||
TaskManager.runTaskRepeat(() -> this.plotAreaManager.forEachPlotArea(plotArea -> {
|
||||
final World world = Bukkit.getWorld(plotArea.getWorldName());
|
||||
try {
|
||||
@ -794,7 +840,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
PlotArea area = pLoc.getPlotArea();
|
||||
if (area != null) {
|
||||
PlotId currentPlotId = area.getPlotAbs(pLoc).getId();
|
||||
if (!originalPlotId.equals(currentPlotId) && (currentPlotId == null || !area.getPlot(originalPlotId)
|
||||
if (!originalPlotId.equals(currentPlotId) && (currentPlotId == null || !area.getPlot(
|
||||
originalPlotId)
|
||||
.equals(area.getPlot(currentPlotId)))) {
|
||||
if (entity.hasMetadata("ps-tmp-teleport")) {
|
||||
continue;
|
||||
@ -811,7 +858,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
if (area != null) {
|
||||
PlotId currentPlotId = area.getPlotAbs(pLoc).getId();
|
||||
if (currentPlotId != null) {
|
||||
entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlotId));
|
||||
entity.setMetadata(
|
||||
"shulkerPlot",
|
||||
new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlotId)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -930,7 +980,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}), TaskTime.seconds(1L));
|
||||
}
|
||||
|
||||
@Override @Nullable public final ChunkGenerator getDefaultWorldGenerator(@Nonnull final String worldName, final String id) {
|
||||
@Override
|
||||
public @Nullable final ChunkGenerator getDefaultWorldGenerator(final @NonNull String worldName, final String id) {
|
||||
final IndependentPlotGenerator result;
|
||||
if (id != null && id.equalsIgnoreCase("single")) {
|
||||
result = injector().getInstance(SingleWorldGenerator.class);
|
||||
@ -943,7 +994,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
return (ChunkGenerator) result.specify(worldName);
|
||||
}
|
||||
|
||||
@Override @Nullable public GeneratorWrapper<?> getGenerator(@Nonnull final String world, @Nullable final String name) {
|
||||
@Override
|
||||
public @Nullable GeneratorWrapper<?> getGenerator(final @NonNull String world, final @Nullable String name) {
|
||||
if (name == null) {
|
||||
return null;
|
||||
}
|
||||
@ -955,12 +1007,15 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
return new BukkitPlotGenerator(world, gen, this.plotAreaManager);
|
||||
} else {
|
||||
return new BukkitPlotGenerator(world, injector().getInstance(Key.get(IndependentPlotGenerator.class, DefaultGenerator.class)),
|
||||
this.plotAreaManager);
|
||||
return new BukkitPlotGenerator(world,
|
||||
injector().getInstance(Key.get(IndependentPlotGenerator.class, DefaultGenerator.class)),
|
||||
this.plotAreaManager
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void startMetrics() {
|
||||
@Override
|
||||
public void startMetrics() {
|
||||
if (this.metricsStarted) {
|
||||
return;
|
||||
}
|
||||
@ -977,32 +1032,49 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
for (final PlotArea plotArea : this.plotAreaManager.getAllPlotAreas()) {
|
||||
final Map<String, Integer> terrainTypeMap = map.get(plotArea.getType().name().toLowerCase());
|
||||
terrainTypeMap.put(plotArea.getTerrain().name().toLowerCase(), terrainTypeMap.get(plotArea.getTerrain().name().toLowerCase()) + 1);
|
||||
terrainTypeMap.put(
|
||||
plotArea.getTerrain().name().toLowerCase(),
|
||||
terrainTypeMap.get(plotArea.getTerrain().name().toLowerCase()) + 1
|
||||
);
|
||||
}
|
||||
return map;
|
||||
}));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("premium", () -> PremiumVerification.isPremium() ? "Premium" : "Non-Premium"));
|
||||
metrics.addCustomChart(new Metrics.SimplePie(
|
||||
"premium",
|
||||
() -> PremiumVerification.isPremium() ? "Premium" : "Non-Premium"
|
||||
));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("worlds", () -> Settings.Enabled_Components.WORLDS ? "true" : "false"));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("economy", () -> Settings.Enabled_Components.ECONOMY ? "true" : "false"));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("plot_expiry", () -> Settings.Enabled_Components.PLOT_EXPIRY ? "true" : "false"));
|
||||
metrics.addCustomChart(new Metrics.SimplePie(
|
||||
"plot_expiry",
|
||||
() -> Settings.Enabled_Components.PLOT_EXPIRY ? "true" : "false"
|
||||
));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("database_type", () -> Storage.MySQL.USE ? "MySQL" : "SQLite"));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("worldedit_implementation",
|
||||
() -> Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null ? "FastAsyncWorldEdit" : "WorldEdit"));
|
||||
metrics.addCustomChart(new Metrics.SimplePie(
|
||||
"worldedit_implementation",
|
||||
() -> Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null ? "FastAsyncWorldEdit" : "WorldEdit"
|
||||
));
|
||||
}
|
||||
|
||||
@Override public void unregister(@Nonnull final PlotPlayer<?> player) {
|
||||
@Override
|
||||
public void unregister(final @NonNull PlotPlayer<?> player) {
|
||||
PlotSquared.platform().playerManager().removePlayer(player.getUUID());
|
||||
}
|
||||
|
||||
@Override public void setGenerator(@Nonnull final String worldName) {
|
||||
@Override
|
||||
public void setGenerator(final @NonNull String worldName) {
|
||||
World world = BukkitUtil.getWorld(worldName);
|
||||
if (world == null) {
|
||||
// create world
|
||||
ConfigurationSection worldConfig = this.worldConfiguration.getConfigurationSection("worlds." + worldName);
|
||||
String manager = worldConfig.getString("generator.plugin", pluginName());
|
||||
PlotAreaBuilder builder =
|
||||
PlotAreaBuilder.newBuilder().plotManager(manager).generatorName(worldConfig.getString("generator.init", manager))
|
||||
.plotAreaType(ConfigurationUtil.getType(worldConfig)).terrainType(ConfigurationUtil.getTerrain(worldConfig))
|
||||
PlotAreaBuilder.newBuilder().plotManager(manager).generatorName(worldConfig.getString(
|
||||
"generator.init",
|
||||
manager
|
||||
))
|
||||
.plotAreaType(ConfigurationUtil.getType(worldConfig)).terrainType(ConfigurationUtil.getTerrain(
|
||||
worldConfig))
|
||||
.settingsNodesWrapper(new SettingsNodesWrapper(new ConfigurationNode[0], null)).worldName(worldName);
|
||||
injector().getInstance(SetupUtils.class).setupWorld(builder);
|
||||
world = Bukkit.getWorld(worldName);
|
||||
@ -1028,16 +1100,22 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnull public String serverNativePackage() {
|
||||
@Override
|
||||
public @NonNull String serverNativePackage() {
|
||||
final String name = Bukkit.getServer().getClass().getPackage().getName();
|
||||
return name.substring(name.lastIndexOf('.') + 1);
|
||||
}
|
||||
|
||||
@Override @Nonnull public GeneratorWrapper<?> wrapPlotGenerator(@Nullable final String world, @Nonnull final IndependentPlotGenerator generator) {
|
||||
@Override
|
||||
public @NonNull GeneratorWrapper<?> wrapPlotGenerator(
|
||||
final @Nullable String world,
|
||||
final @NonNull IndependentPlotGenerator generator
|
||||
) {
|
||||
return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
|
||||
}
|
||||
|
||||
@Override @Nonnull public String pluginsFormatted() {
|
||||
@Override
|
||||
public @NonNull String pluginsFormatted() {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
Plugin[] plugins = Bukkit.getServer().getPluginManager().getPlugins();
|
||||
msg.append("Plugins (").append(plugins.length).append("): \n");
|
||||
@ -1054,15 +1132,18 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
return msg.toString();
|
||||
}
|
||||
|
||||
@Override @Nonnull public com.plotsquared.core.location.World<?> getPlatformWorld(@Nonnull final String worldName) {
|
||||
@Override
|
||||
public com.plotsquared.core.location.@NonNull World<?> getPlatformWorld(final @NonNull String worldName) {
|
||||
return BukkitWorld.of(worldName);
|
||||
}
|
||||
|
||||
@Override @Nonnull public Audience consoleAudience() {
|
||||
@Override
|
||||
public @NonNull Audience consoleAudience() {
|
||||
return BukkitUtil.BUKKIT_AUDIENCES.console();
|
||||
}
|
||||
|
||||
@Override @Nonnull public String pluginName() {
|
||||
@Override
|
||||
public @NonNull String pluginName() {
|
||||
return this.pluginName;
|
||||
}
|
||||
|
||||
@ -1070,30 +1151,39 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
return this.singleWorldListener;
|
||||
}
|
||||
|
||||
@Override @Nonnull public Injector injector() {
|
||||
@Override
|
||||
public @NonNull Injector injector() {
|
||||
return this.injector;
|
||||
}
|
||||
|
||||
@Nonnull @Override public Locale getLocale() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Locale getLocale() {
|
||||
return this.serverLocale;
|
||||
}
|
||||
|
||||
@Override public void setLocale(@Nonnull final Locale locale) {
|
||||
@Override
|
||||
public void setLocale(final @NonNull Locale locale) {
|
||||
throw new UnsupportedOperationException("Cannot replace server locale");
|
||||
}
|
||||
|
||||
@Override @Nonnull public PlatformWorldManager<?> worldManager() {
|
||||
@Override
|
||||
public @NonNull PlatformWorldManager<?> worldManager() {
|
||||
return injector().getInstance(Key.get(new TypeLiteral<PlatformWorldManager<World>>() {
|
||||
}));
|
||||
}
|
||||
|
||||
@Override @Nonnull @SuppressWarnings("ALL") public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
|
||||
@Override
|
||||
@NonNull
|
||||
@SuppressWarnings("ALL")
|
||||
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
|
||||
return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class);
|
||||
}
|
||||
|
||||
@Override public void copyCaptionMaps() {
|
||||
@Override
|
||||
public void copyCaptionMaps() {
|
||||
/* Make this prettier at some point */
|
||||
final String[] languages = new String[] { "en" };
|
||||
final String[] languages = new String[]{"en"};
|
||||
for (final String language : languages) {
|
||||
if (!new File(new File(this.getDataFolder(), "lang"), String.format("messages_%s.json", language)).exists()) {
|
||||
this.saveResource(String.format("lang/messages_%s.json", language), false);
|
||||
@ -1102,7 +1192,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@NonNull
|
||||
@Override
|
||||
public String toLegacyPlatformString(Component component) {
|
||||
return LegacyComponentSerializer.legacyAmpersand().serialize(component);
|
||||
|
@ -30,4 +30,5 @@ class AgeableStats {
|
||||
int age;
|
||||
boolean locked;
|
||||
boolean adult;
|
||||
|
||||
}
|
||||
|
@ -37,4 +37,5 @@ class ArmorStandStats {
|
||||
boolean noPlate;
|
||||
boolean invisible;
|
||||
boolean small;
|
||||
|
||||
}
|
||||
|
@ -34,4 +34,5 @@ class EntityBaseStats {
|
||||
double vZ;
|
||||
double vY;
|
||||
double vX;
|
||||
|
||||
}
|
||||
|
@ -29,8 +29,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public abstract class EntityWrapper {
|
||||
|
||||
@ -42,7 +41,7 @@ public abstract class EntityWrapper {
|
||||
public double y;
|
||||
public double z;
|
||||
|
||||
EntityWrapper(@Nonnull final Entity entity) {
|
||||
EntityWrapper(final @NonNull Entity entity) {
|
||||
this.entity = entity;
|
||||
this.type = entity.getType();
|
||||
|
||||
@ -54,7 +53,9 @@ public abstract class EntityWrapper {
|
||||
this.pitch = location.getPitch();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") @Override public String toString() {
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("[%s, x=%s, y=%s, z=%s]", type.getName(), x, y, z);
|
||||
}
|
||||
|
||||
@ -89,4 +90,5 @@ public abstract class EntityWrapper {
|
||||
public double getZ() {
|
||||
return this.z;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,4 +34,5 @@ class HorseStats {
|
||||
Horse.Variant variant;
|
||||
Horse.Color color;
|
||||
Horse.Style style;
|
||||
|
||||
}
|
||||
|
@ -50,4 +50,5 @@ class LivingEntityStats {
|
||||
ItemStack chestplate;
|
||||
Collection<PotionEffect> potions;
|
||||
ItemStack offHand;
|
||||
|
||||
}
|
||||
|
@ -241,7 +241,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
case "ARMOR_STAND":
|
||||
ArmorStand stand = (ArmorStand) entity;
|
||||
this.inventory =
|
||||
new ItemStack[] {stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
||||
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
||||
stand.getChestplate().clone(), stand.getLeggings().clone(),
|
||||
stand.getBoots().clone()};
|
||||
storeLiving(stand);
|
||||
@ -340,11 +340,13 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object obj) {
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return this.hash == obj.hashCode();
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return this.hash;
|
||||
}
|
||||
|
||||
@ -460,7 +462,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
this.tamed.tamed = tamed.isTamed();
|
||||
}
|
||||
|
||||
@Override public Entity spawn(World world, int xOffset, int zOffset) {
|
||||
@Override
|
||||
public Entity spawn(World world, int xOffset, int zOffset) {
|
||||
Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset);
|
||||
location.setYaw(this.yaw);
|
||||
location.setPitch(this.pitch);
|
||||
@ -658,25 +661,29 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
if (this.stand.leftLeg[0] != 0 || this.stand.leftLeg[1] != 0
|
||||
|| this.stand.leftLeg[2] != 0) {
|
||||
EulerAngle pose = new EulerAngle(this.stand.leftLeg[0], this.stand.leftLeg[1],
|
||||
this.stand.leftLeg[2]);
|
||||
this.stand.leftLeg[2]
|
||||
);
|
||||
stand.setLeftLegPose(pose);
|
||||
}
|
||||
if (this.stand.rightLeg[0] != 0 || this.stand.rightLeg[1] != 0
|
||||
|| this.stand.rightLeg[2] != 0) {
|
||||
EulerAngle pose = new EulerAngle(this.stand.rightLeg[0], this.stand.rightLeg[1],
|
||||
this.stand.rightLeg[2]);
|
||||
this.stand.rightLeg[2]
|
||||
);
|
||||
stand.setRightLegPose(pose);
|
||||
}
|
||||
if (this.stand.leftArm[0] != 0 || this.stand.leftArm[1] != 0
|
||||
|| this.stand.leftArm[2] != 0) {
|
||||
EulerAngle pose = new EulerAngle(this.stand.leftArm[0], this.stand.leftArm[1],
|
||||
this.stand.leftArm[2]);
|
||||
this.stand.leftArm[2]
|
||||
);
|
||||
stand.setLeftArmPose(pose);
|
||||
}
|
||||
if (this.stand.rightArm[0] != 0 || this.stand.rightArm[1] != 0
|
||||
|| this.stand.rightArm[2] != 0) {
|
||||
EulerAngle pose = new EulerAngle(this.stand.rightArm[0], this.stand.rightArm[1],
|
||||
this.stand.rightArm[2]);
|
||||
this.stand.rightArm[2]
|
||||
);
|
||||
stand.setRightArmPose(pose);
|
||||
}
|
||||
if (this.stand.invisible) {
|
||||
|
@ -31,4 +31,5 @@ class TameableStats {
|
||||
|
||||
AnimalTamer owner;
|
||||
boolean tamed;
|
||||
|
||||
}
|
||||
|
@ -44,7 +44,8 @@ public class TeleportEntityWrapper extends EntityWrapper {
|
||||
super(entity);
|
||||
}
|
||||
|
||||
@Override public Entity spawn(final World world, final int xOffset, final int zOffset) {
|
||||
@Override
|
||||
public Entity spawn(final World world, final int xOffset, final int zOffset) {
|
||||
if (!getEntity().getLocation().getChunk().equals(oldLocation.getChunk())) {
|
||||
final Location oldLocation = this.oldLocation.clone();
|
||||
oldLocation.add(xOffset, 0, xOffset);
|
||||
@ -58,7 +59,8 @@ public class TeleportEntityWrapper extends EntityWrapper {
|
||||
return getEntity();
|
||||
}
|
||||
|
||||
@Override public void saveEntity() {
|
||||
@Override
|
||||
public void saveEntity() {
|
||||
if (getEntity().hasMetadata("ps-tmp-teleport")) {
|
||||
this.oldLocation = (Location) this.getEntity().getMetadata("ps-tmp-teleport").get(0);
|
||||
} else {
|
||||
@ -77,8 +79,10 @@ public class TeleportEntityWrapper extends EntityWrapper {
|
||||
this.getEntity().setInvulnerable(true);
|
||||
this.fireTicksOld = this.getEntity().getFireTicks();
|
||||
this.livingTicksOld = this.getEntity().getTicksLived();
|
||||
this.getEntity().setMetadata("ps-tmp-teleport",
|
||||
new FixedMetadataValue(BukkitPlatform.getPlugin(BukkitPlatform.class), oldLocation));
|
||||
this.getEntity().setMetadata(
|
||||
"ps-tmp-teleport",
|
||||
new FixedMetadataValue(BukkitPlatform.getPlugin(BukkitPlatform.class), oldLocation)
|
||||
);
|
||||
final Chunk newChunk = getNewChunk();
|
||||
this.getEntity().teleport(
|
||||
new Location(newChunk.getWorld(), newChunk.getX() << 4, 5000, newChunk.getZ() << 4));
|
||||
@ -115,4 +119,5 @@ public class TeleportEntityWrapper extends EntityWrapper {
|
||||
private Chunk getChunkRelative(final Chunk chunk, final int dx, final int dz) {
|
||||
return chunk.getWorld().getChunkAt(chunk.getX() + dx, chunk.getZ() + dz);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -36,8 +36,8 @@ import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Random;
|
||||
|
||||
final class BlockStatePopulator extends BlockPopulator {
|
||||
@ -47,12 +47,16 @@ final class BlockStatePopulator extends BlockPopulator {
|
||||
|
||||
private QueueCoordinator queue;
|
||||
|
||||
public BlockStatePopulator(@Nonnull final IndependentPlotGenerator plotGenerator, @Nonnull final PlotAreaManager plotAreaManager) {
|
||||
public BlockStatePopulator(
|
||||
final @NonNull IndependentPlotGenerator plotGenerator,
|
||||
final @NonNull PlotAreaManager plotAreaManager
|
||||
) {
|
||||
this.plotGenerator = plotGenerator;
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@Override public void populate(@Nonnull final World world, @Nonnull final Random random, @Nonnull final Chunk source) {
|
||||
@Override
|
||||
public void populate(final @NonNull World world, final @NonNull Random random, final @NonNull Chunk source) {
|
||||
if (this.queue == null) {
|
||||
this.queue = PlotSquared.platform().globalBlockQueue().getNewQueue(new BukkitWorld(world));
|
||||
}
|
||||
|
@ -29,8 +29,8 @@ import com.plotsquared.core.generator.AugmentedUtils;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Random;
|
||||
|
||||
public class BukkitAugmentedGenerator extends BlockPopulator {
|
||||
@ -51,7 +51,8 @@ public class BukkitAugmentedGenerator extends BlockPopulator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate(@Nonnull World world, @Nonnull Random random, @Nonnull Chunk source) {
|
||||
public void populate(@NonNull World world, @NonNull Random random, @NonNull Chunk source) {
|
||||
AugmentedUtils.generate(source, world.getName(), source.getX(), source.getZ(), null);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -41,8 +41,8 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
@ -51,20 +51,22 @@ import java.util.Set;
|
||||
public class BukkitPlotGenerator extends ChunkGenerator
|
||||
implements GeneratorWrapper<ChunkGenerator> {
|
||||
|
||||
@SuppressWarnings("unused") public final boolean PAPER_ASYNC_SAFE = true;
|
||||
@SuppressWarnings("unused")
|
||||
public final boolean PAPER_ASYNC_SAFE = true;
|
||||
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
private final IndependentPlotGenerator plotGenerator;
|
||||
private final ChunkGenerator platformGenerator;
|
||||
private final boolean full;
|
||||
private final String levelName;
|
||||
private List<BlockPopulator> populators;
|
||||
private boolean loaded = false;
|
||||
|
||||
private final String levelName;
|
||||
|
||||
public BukkitPlotGenerator(@Nonnull final String name,
|
||||
@Nonnull final IndependentPlotGenerator generator,
|
||||
@Nonnull final PlotAreaManager plotAreaManager) {
|
||||
public BukkitPlotGenerator(
|
||||
final @NonNull String name,
|
||||
final @NonNull IndependentPlotGenerator generator,
|
||||
final @NonNull PlotAreaManager plotAreaManager
|
||||
) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.levelName = name;
|
||||
this.plotGenerator = generator;
|
||||
@ -74,7 +76,7 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
this.full = true;
|
||||
}
|
||||
|
||||
public BukkitPlotGenerator(final String world, final ChunkGenerator cg, @Nonnull final PlotAreaManager plotAreaManager) {
|
||||
public BukkitPlotGenerator(final String world, final ChunkGenerator cg, final @NonNull PlotAreaManager plotAreaManager) {
|
||||
if (cg instanceof BukkitPlotGenerator) {
|
||||
throw new IllegalArgumentException("ChunkGenerator: " + cg.getClass().getName()
|
||||
+ " is already a BukkitPlotGenerator!");
|
||||
@ -86,23 +88,28 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
this.plotGenerator = new DelegatePlotGenerator(cg, world);
|
||||
}
|
||||
|
||||
@Override public void augment(PlotArea area) {
|
||||
@Override
|
||||
public void augment(PlotArea area) {
|
||||
BukkitAugmentedGenerator.get(BukkitUtil.getWorld(area.getWorldName()));
|
||||
}
|
||||
|
||||
@Override public boolean isFull() {
|
||||
@Override
|
||||
public boolean isFull() {
|
||||
return this.full;
|
||||
}
|
||||
|
||||
@Override public IndependentPlotGenerator getPlotGenerator() {
|
||||
@Override
|
||||
public IndependentPlotGenerator getPlotGenerator() {
|
||||
return this.plotGenerator;
|
||||
}
|
||||
|
||||
@Override public ChunkGenerator getPlatformGenerator() {
|
||||
@Override
|
||||
public ChunkGenerator getPlatformGenerator() {
|
||||
return this.platformGenerator;
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<BlockPopulator> getDefaultPopulators(@Nonnull World world) {
|
||||
@Override
|
||||
public @NonNull List<BlockPopulator> getDefaultPopulators(@NonNull World world) {
|
||||
try {
|
||||
if (!this.loaded) {
|
||||
String name = world.getName();
|
||||
@ -146,9 +153,11 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
return toAdd;
|
||||
}
|
||||
|
||||
@Override @Nonnull
|
||||
public ChunkData generateChunkData(@Nonnull World world, @Nonnull Random random, int x, int z,
|
||||
@Nonnull BiomeGrid biome) {
|
||||
@Override
|
||||
public @NonNull ChunkData generateChunkData(
|
||||
@NonNull World world, @NonNull Random random, int x, int z,
|
||||
@NonNull BiomeGrid biome
|
||||
) {
|
||||
|
||||
GenChunk result = new GenChunk();
|
||||
if (this.getPlotGenerator() instanceof SingleWorldGenerator) {
|
||||
@ -212,7 +221,8 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
ChunkManager.postProcessChunk(loc, result);
|
||||
}
|
||||
|
||||
@Override public boolean canSpawn(@Nonnull final World world, final int x, final int z) {
|
||||
@Override
|
||||
public boolean canSpawn(final @NonNull World world, final int x, final int z) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -236,7 +246,8 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
@Override
|
||||
public String toString() {
|
||||
if (this.platformGenerator == this) {
|
||||
return this.plotGenerator.getName();
|
||||
}
|
||||
@ -247,7 +258,8 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean equals(final Object obj) {
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
@ -257,4 +269,5 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
||||
public String getLevelName() {
|
||||
return this.levelName;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -38,8 +38,8 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Random;
|
||||
|
||||
final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
||||
@ -52,18 +52,22 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
@Override public void initialize(PlotArea area) {
|
||||
@Override
|
||||
public void initialize(PlotArea area) {
|
||||
}
|
||||
|
||||
@Override public String getName() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.chunkGenerator.getClass().getName();
|
||||
}
|
||||
|
||||
@Override public PlotArea getNewPlotArea(String world, String id, PlotId min, PlotId max) {
|
||||
@Override
|
||||
public PlotArea getNewPlotArea(String world, String id, PlotId min, PlotId max) {
|
||||
return PlotSquared.platform().defaultGenerator().getNewPlotArea(world, id, min, max);
|
||||
}
|
||||
|
||||
@Override public void generateChunk(final ScopedQueueCoordinator result, PlotArea settings) {
|
||||
@Override
|
||||
public void generateChunk(final ScopedQueueCoordinator result, PlotArea settings) {
|
||||
World world = BukkitUtil.getWorld(this.world);
|
||||
Location min = result.getMin();
|
||||
int chunkX = min.getX() >> 4;
|
||||
@ -71,21 +75,24 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
||||
Random random = new Random(MathMan.pair((short) chunkX, (short) chunkZ));
|
||||
try {
|
||||
ChunkGenerator.BiomeGrid grid = new ChunkGenerator.BiomeGrid() {
|
||||
@Override public void setBiome(int x, int z, @Nonnull Biome biome) {
|
||||
@Override
|
||||
public void setBiome(int x, int z, @NonNull Biome biome) {
|
||||
result.setBiome(x, z, BukkitAdapter.adapt(biome));
|
||||
}
|
||||
|
||||
//do not annotate with Override until we discontinue support for 1.4.4
|
||||
public void setBiome(int x, int y, int z, @Nonnull Biome biome) {
|
||||
public void setBiome(int x, int y, int z, @NonNull Biome biome) {
|
||||
result.setBiome(x, z, BukkitAdapter.adapt(biome));
|
||||
|
||||
}
|
||||
|
||||
@Override @Nonnull public Biome getBiome(int x, int z) {
|
||||
@Override
|
||||
public @NonNull Biome getBiome(int x, int z) {
|
||||
return Biome.FOREST;
|
||||
}
|
||||
|
||||
@Override public @Nonnull Biome getBiome(int x, int y, int z) {
|
||||
@Override
|
||||
public @NonNull Biome getBiome(int x, int y, int z) {
|
||||
return Biome.FOREST;
|
||||
}
|
||||
};
|
||||
|
@ -40,7 +40,8 @@ public class BackupModule extends AbstractModule {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger("P2/" + BackupModule.class.getSimpleName());
|
||||
|
||||
@Override protected void configure() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
try {
|
||||
install(new FactoryModuleBuilder()
|
||||
.implement(BackupProfile.class, PlayerBackupProfile.class).build(PlayerBackupProfileFactory.class));
|
||||
|
@ -29,7 +29,6 @@ import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.assistedinject.FactoryModuleBuilder;
|
||||
import com.google.inject.assistedinject.FactoryProvider;
|
||||
import com.plotsquared.bukkit.BukkitPlatform;
|
||||
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
||||
import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
||||
@ -73,32 +72,33 @@ import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class BukkitModule extends AbstractModule {
|
||||
|
||||
private final BukkitPlatform bukkitPlatform;
|
||||
|
||||
public BukkitModule(@Nonnull final BukkitPlatform bukkitPlatform) {
|
||||
public BukkitModule(final @NonNull BukkitPlatform bukkitPlatform) {
|
||||
this.bukkitPlatform = bukkitPlatform;
|
||||
}
|
||||
|
||||
@Override protected void configure() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(PlayerManager.class).to(BukkitPlayerManager.class);
|
||||
bind(JavaPlugin.class).toInstance(bukkitPlatform);
|
||||
bind(PlotPlatform.class).toInstance(bukkitPlatform);
|
||||
bind(BukkitPlatform.class).toInstance(bukkitPlatform);
|
||||
bind(IndependentPlotGenerator.class).annotatedWith(DefaultGenerator.class).to(HybridGen.class);
|
||||
// Console actor
|
||||
@Nonnull ConsoleCommandSender console = Bukkit.getServer().getConsoleSender();
|
||||
@NonNull ConsoleCommandSender console = Bukkit.getServer().getConsoleSender();
|
||||
WorldEditPlugin wePlugin = ((WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"));
|
||||
bind(Actor.class).annotatedWith(ConsoleActor.class).toInstance(wePlugin.wrapCommandSender(console));
|
||||
bind(InventoryUtil.class).to(BukkitInventoryUtil.class);
|
||||
bind(SetupUtils.class).to(BukkitSetupUtils.class);
|
||||
bind(WorldUtil.class).to(BukkitUtil.class);
|
||||
install(new FactoryModuleBuilder().implement(ProgressSubscriber.class, DefaultProgressSubscriber.class).build(ProgressSubscriberFactory.class));
|
||||
install(new FactoryModuleBuilder()
|
||||
.implement(ProgressSubscriber.class, DefaultProgressSubscriber.class)
|
||||
.build(ProgressSubscriberFactory.class));
|
||||
bind(GlobalBlockQueue.class).toInstance(new GlobalBlockQueue(QueueProvider.of(BukkitQueueCoordinator.class)));
|
||||
bind(ChunkManager.class).to(BukkitChunkManager.class);
|
||||
bind(RegionManager.class).to(BukkitRegionManager.class);
|
||||
@ -114,11 +114,15 @@ public class BukkitModule extends AbstractModule {
|
||||
bind(PlotAreaManager.class).to(DefaultPlotAreaManager.class);
|
||||
}
|
||||
install(new FactoryModuleBuilder().build(HybridPlotWorldFactory.class));
|
||||
install(new FactoryModuleBuilder().implement(ChunkCoordinator.class, BukkitChunkCoordinator.class).build(ChunkCoordinatorFactory.class));
|
||||
install(new FactoryModuleBuilder()
|
||||
.implement(ChunkCoordinator.class, BukkitChunkCoordinator.class)
|
||||
.build(ChunkCoordinatorFactory.class));
|
||||
install(new FactoryModuleBuilder().build(ChunkCoordinatorBuilderFactory.class));
|
||||
}
|
||||
|
||||
@Provides @Singleton @Nonnull EconHandler provideEconHandler() {
|
||||
@Provides
|
||||
@Singleton
|
||||
@NonNull EconHandler provideEconHandler() {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("Vault")) {
|
||||
try {
|
||||
return new BukkitEconHandler();
|
||||
|
@ -35,7 +35,9 @@ import org.bukkit.Bukkit;
|
||||
|
||||
public class PermissionModule extends AbstractModule {
|
||||
|
||||
@Provides @Singleton PermissionHandler providePermissionHandler() {
|
||||
@Provides
|
||||
@Singleton
|
||||
PermissionHandler providePermissionHandler() {
|
||||
try {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("Vault")) {
|
||||
return new VaultPermissionHandler();
|
||||
|
@ -25,6 +25,7 @@
|
||||
*/
|
||||
package com.plotsquared.bukkit.listener;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
@ -102,9 +103,8 @@ import org.bukkit.event.world.StructureGrowEvent;
|
||||
import org.bukkit.material.Directional;
|
||||
import org.bukkit.projectiles.BlockProjectileSource;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@ -116,7 +116,8 @@ public class BlockEventListener implements Listener {
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
private final WorldEdit worldEdit;
|
||||
|
||||
@Inject public BlockEventListener(@Nonnull final PlotAreaManager plotAreaManager, @Nonnull final WorldEdit worldEdit) {
|
||||
@Inject
|
||||
public BlockEventListener(final @NonNull PlotAreaManager plotAreaManager, final @NonNull WorldEdit worldEdit) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.worldEdit = worldEdit;
|
||||
}
|
||||
@ -140,7 +141,8 @@ public class BlockEventListener implements Listener {
|
||||
}, TaskTime.ticks(3L));
|
||||
}
|
||||
|
||||
@EventHandler public void onRedstoneEvent(BlockRedstoneEvent event) {
|
||||
@EventHandler
|
||||
public void onRedstoneEvent(BlockRedstoneEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -344,7 +346,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST) public void blockDestroy(BlockBreakEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void blockDestroy(BlockBreakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -414,7 +417,7 @@ public class BlockEventListener implements Listener {
|
||||
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||
return;
|
||||
}
|
||||
if (this.worldEdit!= null && pp.getAttribute("worldedit")) {
|
||||
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
||||
if (player.getInventory().getItemInMainHand().getType() == Material
|
||||
.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
|
||||
return;
|
||||
@ -427,7 +430,8 @@ public class BlockEventListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockSpread(BlockSpreadEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
if (location.isPlotRoad()) {
|
||||
@ -474,7 +478,9 @@ public class BlockEventListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockForm(BlockFormEvent event) {
|
||||
if (event instanceof EntityBlockFormEvent) return; // handled below
|
||||
if (event instanceof EntityBlockFormEvent) {
|
||||
return; // handled below
|
||||
}
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
if (location.isPlotRoad()) {
|
||||
@ -546,9 +552,11 @@ public class BlockEventListener implements Listener {
|
||||
if (allowed) {
|
||||
return; // player is not added but forming <flag> is allowed
|
||||
}
|
||||
plot.debug(String.format("%s could not be formed because %s = false (entity is player)",
|
||||
plot.debug(String.format(
|
||||
"%s could not be formed because %s = false (entity is player)",
|
||||
event.getNewState().getType(),
|
||||
flag == SnowFormFlag.class ? "snow-form" : "ice-form"));
|
||||
flag == SnowFormFlag.class ? "snow-form" : "ice-form"
|
||||
));
|
||||
event.setCancelled(true); // player is not added and forming <flag> isn't allowed
|
||||
}
|
||||
return; // event is cancelled if not added and not allowed, otherwise forming <flag> is allowed
|
||||
@ -557,9 +565,11 @@ public class BlockEventListener implements Listener {
|
||||
if (allowed) {
|
||||
return;
|
||||
}
|
||||
plot.debug(String.format("%s could not be formed because %s = false (entity is not player)",
|
||||
plot.debug(String.format(
|
||||
"%s could not be formed because %s = false (entity is not player)",
|
||||
event.getNewState().getType(),
|
||||
flag == SnowFormFlag.class ? "snow-form" : "ice-form"));
|
||||
flag == SnowFormFlag.class ? "snow-form" : "ice-form"
|
||||
));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@ -622,7 +632,8 @@ public class BlockEventListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFade(BlockFadeEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onFade(BlockFadeEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -681,7 +692,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onChange(BlockFromToEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onChange(BlockFromToEvent event) {
|
||||
Block from = event.getBlock();
|
||||
|
||||
// Check liquid flow flag inside of origin plot too
|
||||
@ -689,7 +701,9 @@ public class BlockEventListener implements Listener {
|
||||
final PlotArea fromArea = fLocation.getPlotArea();
|
||||
if (fromArea != null) {
|
||||
final Plot plot = fromArea.getOwnedPlot(fLocation);
|
||||
if (plot != null && plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) {
|
||||
if (plot != null && plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event
|
||||
.getBlock()
|
||||
.isLiquid()) {
|
||||
plot.debug("Liquid could now flow because liquid-flow = disabled");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@ -750,7 +764,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onGrow(BlockGrowEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onGrow(BlockGrowEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
if (location.isUnownedPlotArea()) {
|
||||
@ -758,7 +773,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
BlockFace face = event.getDirection();
|
||||
@ -770,7 +786,9 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
for (Block block1 : event.getBlocks()) {
|
||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||
if (bloc.isPlotArea() || bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()).isPlotArea()) {
|
||||
if (bloc.isPlotArea() || bloc
|
||||
.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())
|
||||
.isPlotArea()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -789,7 +807,10 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
for (Block block1 : event.getBlocks()) {
|
||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(bloc.getX() + relative.getBlockX(), bloc.getZ() + relative.getBlockZ())) {
|
||||
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(
|
||||
bloc.getX() + relative.getBlockX(),
|
||||
bloc.getZ() + relative.getBlockZ()
|
||||
)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -807,7 +828,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
BlockFace face = event.getDirection();
|
||||
@ -819,7 +841,9 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
for (Block block1 : event.getBlocks()) {
|
||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||
if (bloc.isPlotArea() || bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()).isPlotArea()) {
|
||||
if (bloc.isPlotArea() || bloc
|
||||
.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())
|
||||
.isPlotArea()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -833,7 +857,10 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
for (Block block1 : event.getBlocks()) {
|
||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(bloc.getX() + relative.getBlockX(), bloc.getZ() + relative.getBlockZ())) {
|
||||
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(
|
||||
bloc.getX() + relative.getBlockX(),
|
||||
bloc.getZ() + relative.getBlockZ()
|
||||
)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -845,7 +872,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockDispense(BlockDispenseEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockDispense(BlockDispenseEvent event) {
|
||||
Material type = event.getItem().getType();
|
||||
switch (type) {
|
||||
case SHULKER_BOX:
|
||||
@ -891,7 +919,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onStructureGrow(StructureGrowEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onStructureGrow(StructureGrowEvent event) {
|
||||
if (!this.plotAreaManager.hasPlotArea(event.getWorld().getName())) {
|
||||
return;
|
||||
}
|
||||
@ -947,7 +976,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBigBoom(BlockExplodeEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBigBoom(BlockExplodeEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
String world = location.getWorldName();
|
||||
@ -975,7 +1005,8 @@ public class BlockEventListener implements Listener {
|
||||
event.blockList().removeIf(blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation()))));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockBurn(BlockBurnEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
|
||||
@ -1085,7 +1116,8 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onLeavesDecay(LeavesDecayEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onLeavesDecay(LeavesDecayEvent event) {
|
||||
Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
|
||||
@ -1103,4 +1135,5 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -54,10 +54,10 @@ import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.event.world.ChunkLoadEvent;
|
||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
@ -76,7 +76,8 @@ public class ChunkListener implements Listener {
|
||||
private Chunk lastChunk;
|
||||
private boolean ignoreUnload = false;
|
||||
|
||||
@Inject public ChunkListener(@Nonnull final PlotAreaManager plotAreaManager) {
|
||||
@Inject
|
||||
public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
||||
try {
|
||||
@ -179,7 +180,8 @@ public class ChunkListener implements Listener {
|
||||
return plot != null && plot.hasOwner();
|
||||
}
|
||||
|
||||
@EventHandler public void onChunkUnload(ChunkUnloadEvent event) {
|
||||
@EventHandler
|
||||
public void onChunkUnload(ChunkUnloadEvent event) {
|
||||
if (ignoreUnload) {
|
||||
return;
|
||||
}
|
||||
@ -197,11 +199,13 @@ public class ChunkListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onChunkLoad(ChunkLoadEvent event) {
|
||||
@EventHandler
|
||||
public void onChunkLoad(ChunkLoadEvent event) {
|
||||
processChunk(event.getChunk(), false);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST) public void onItemSpawn(ItemSpawnEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onItemSpawn(ItemSpawnEvent event) {
|
||||
Item entity = event.getEntity();
|
||||
PaperLib.getChunkAtAsync(event.getLocation()).thenAccept(chunk -> {
|
||||
if (chunk == this.lastChunk) {
|
||||
@ -306,10 +310,11 @@ public class ChunkListener implements Listener {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int i = 0 ; i < (tiles.length - Settings.Chunk_Processor.MAX_TILES); i++) {
|
||||
for (int i = 0; i < (tiles.length - Settings.Chunk_Processor.MAX_TILES); i++) {
|
||||
tiles[i].getBlock().setType(Material.AIR, false);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
*/
|
||||
package com.plotsquared.bukkit.listener;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.bukkit.util.BukkitEntityUtil;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
@ -60,9 +61,8 @@ import org.bukkit.event.vehicle.VehicleCreateEvent;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@ -72,20 +72,28 @@ public class EntityEventListener implements Listener {
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
private float lastRadius;
|
||||
|
||||
@Inject public EntityEventListener(@Nonnull final PlotAreaManager plotAreaManager) {
|
||||
@Inject
|
||||
public EntityEventListener(final @NonNull PlotAreaManager plotAreaManager) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
|
||||
EntityDamageByEntityEvent eventChange =
|
||||
new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(), EntityDamageEvent.DamageCause.FIRE_TICK, event.getDuration());
|
||||
new EntityDamageByEntityEvent(
|
||||
event.getCombuster(),
|
||||
event.getEntity(),
|
||||
EntityDamageEvent.DamageCause.FIRE_TICK,
|
||||
event.getDuration()
|
||||
);
|
||||
onEntityDamageByEntityEvent(eventChange);
|
||||
if (eventChange.isCancelled()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
|
||||
Entity damager = event.getDamager();
|
||||
Location location = BukkitUtil.adapt(damager.getLocation());
|
||||
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||
@ -115,7 +123,8 @@ public class EntityEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void creatureSpawnEvent(CreatureSpawnEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void creatureSpawnEvent(CreatureSpawnEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -185,7 +194,8 @@ public class EntityEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onEntityFall(EntityChangeBlockEvent event) {
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||
public void onEntityFall(EntityChangeBlockEvent event) {
|
||||
if (event.getEntityType() != EntityType.FALLING_BLOCK) {
|
||||
return;
|
||||
}
|
||||
@ -227,7 +237,8 @@ public class EntityEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH) public void onDamage(EntityDamageEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onDamage(EntityDamageEvent event) {
|
||||
if (event.getEntityType() != EntityType.PLAYER) {
|
||||
return;
|
||||
}
|
||||
@ -249,7 +260,8 @@ public class EntityEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBigBoom(EntityExplodeEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBigBoom(EntityExplodeEvent event) {
|
||||
Location location = BukkitUtil.adapt(event.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
boolean plotArea = location.isPlotArea();
|
||||
@ -313,11 +325,13 @@ public class EntityEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onPrime(ExplosionPrimeEvent event) {
|
||||
@EventHandler
|
||||
public void onPrime(ExplosionPrimeEvent event) {
|
||||
this.lastRadius = event.getRadius() + 1;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onVehicleCreate(VehicleCreateEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onVehicleCreate(VehicleCreateEvent event) {
|
||||
Vehicle entity = event.getVehicle();
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -333,4 +347,5 @@ public class EntityEventListener implements Listener {
|
||||
entity.setMetadata("plot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -54,8 +54,8 @@ import org.bukkit.event.world.ChunkLoadEvent;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
|
||||
public class EntitySpawnListener implements Listener {
|
||||
@ -66,7 +66,7 @@ public class EntitySpawnListener implements Listener {
|
||||
private static String areaName = null;
|
||||
|
||||
public static void testNether(final Entity entity) {
|
||||
@Nonnull World world = entity.getWorld();
|
||||
@NonNull World world = entity.getWorld();
|
||||
if (world.getEnvironment() != World.Environment.NETHER && world.getEnvironment() != World.Environment.THE_END) {
|
||||
return;
|
||||
}
|
||||
@ -74,7 +74,7 @@ public class EntitySpawnListener implements Listener {
|
||||
}
|
||||
|
||||
public static void testCreate(final Entity entity) {
|
||||
@Nonnull World world = entity.getWorld();
|
||||
@NonNull World world = entity.getWorld();
|
||||
if (areaName == world.getName()) {
|
||||
} else {
|
||||
areaName = world.getName();
|
||||
@ -87,7 +87,7 @@ public class EntitySpawnListener implements Listener {
|
||||
}
|
||||
|
||||
public static void test(Entity entity) {
|
||||
@Nonnull World world = entity.getWorld();
|
||||
@NonNull World world = entity.getWorld();
|
||||
List<MetadataValue> meta = entity.getMetadata(KEY);
|
||||
if (meta.isEmpty()) {
|
||||
if (PlotSquared.get().getPlotAreaManager().hasPlotArea(world.getName())) {
|
||||
@ -122,7 +122,8 @@ public class EntitySpawnListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void creatureSpawnEvent(EntitySpawnEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void creatureSpawnEvent(EntitySpawnEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -166,39 +167,47 @@ public class EntitySpawnListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onChunkLoad(ChunkLoadEvent event) {
|
||||
@Nonnull Chunk chunk = event.getChunk();
|
||||
@EventHandler
|
||||
public void onChunkLoad(ChunkLoadEvent event) {
|
||||
@NonNull Chunk chunk = event.getChunk();
|
||||
for (final Entity entity : chunk.getEntities()) {
|
||||
testCreate(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onVehicle(VehicleUpdateEvent event) {
|
||||
@EventHandler
|
||||
public void onVehicle(VehicleUpdateEvent event) {
|
||||
testNether(event.getVehicle());
|
||||
}
|
||||
|
||||
@EventHandler public void onVehicle(VehicleCreateEvent event) {
|
||||
@EventHandler
|
||||
public void onVehicle(VehicleCreateEvent event) {
|
||||
testCreate(event.getVehicle());
|
||||
}
|
||||
|
||||
@EventHandler public void onVehicle(VehicleBlockCollisionEvent event) {
|
||||
@EventHandler
|
||||
public void onVehicle(VehicleBlockCollisionEvent event) {
|
||||
testNether(event.getVehicle());
|
||||
}
|
||||
|
||||
@EventHandler public void onTeleport(EntityTeleportEvent event) {
|
||||
@EventHandler
|
||||
public void onTeleport(EntityTeleportEvent event) {
|
||||
Entity ent = event.getEntity();
|
||||
if (ent instanceof Vehicle || ent instanceof ArmorStand) {
|
||||
testNether(event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void vehicleMove(VehicleMoveEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void vehicleMove(VehicleMoveEvent event) {
|
||||
testNether(event.getVehicle());
|
||||
}
|
||||
|
||||
@EventHandler public void spawn(CreatureSpawnEvent event) {
|
||||
@EventHandler
|
||||
public void spawn(CreatureSpawnEvent event) {
|
||||
if (event.getEntityType() == EntityType.ARMOR_STAND) {
|
||||
testCreate(event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,8 +28,8 @@ package com.plotsquared.bukkit.listener;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.plot.flag.implementations.ForcefieldFlag;
|
||||
@ -129,4 +129,5 @@ public class ForceFieldListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -60,8 +60,8 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@ -77,11 +77,13 @@ public class PaperListener implements Listener {
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
private Chunk lastChunk;
|
||||
|
||||
@Inject public PaperListener(@Nonnull final PlotAreaManager plotAreaManager) {
|
||||
@Inject
|
||||
public PaperListener(final @NonNull PlotAreaManager plotAreaManager) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@EventHandler public void onEntityPathfind(EntityPathfindEvent event) {
|
||||
@EventHandler
|
||||
public void onEntityPathfind(EntityPathfindEvent event) {
|
||||
if (!Settings.Paper_Components.ENTITY_PATHING) {
|
||||
return;
|
||||
}
|
||||
@ -114,7 +116,8 @@ public class PaperListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler public void onEntityPathfind(SlimePathfindEvent event) {
|
||||
@EventHandler
|
||||
public void onEntityPathfind(SlimePathfindEvent event) {
|
||||
if (!Settings.Paper_Components.ENTITY_PATHING) {
|
||||
return;
|
||||
}
|
||||
@ -155,7 +158,8 @@ public class PaperListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler public void onPreCreatureSpawnEvent(PreCreatureSpawnEvent event) {
|
||||
@EventHandler
|
||||
public void onPreCreatureSpawnEvent(PreCreatureSpawnEvent event) {
|
||||
if (!Settings.Paper_Components.CREATURE_SPAWN) {
|
||||
return;
|
||||
}
|
||||
@ -269,7 +273,8 @@ public class PaperListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onPreSpawnerSpawnEvent(PreSpawnerSpawnEvent event) {
|
||||
@EventHandler
|
||||
public void onPreSpawnerSpawnEvent(PreSpawnerSpawnEvent event) {
|
||||
if (Settings.Paper_Components.SPAWNER_SPAWN) {
|
||||
Location location = BukkitUtil.adapt(event.getSpawnerLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -280,7 +285,8 @@ public class PaperListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) public void onBlockPlace(BlockPlaceEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (!Settings.Paper_Components.TILE_ENTITY_CHECK || !Settings.Enabled_Components.CHUNK_PROCESSOR) {
|
||||
return;
|
||||
}
|
||||
@ -310,7 +316,8 @@ public class PaperListener implements Listener {
|
||||
*
|
||||
* @param event Paper's PlayerLaunchProjectileEvent
|
||||
*/
|
||||
@EventHandler public void onProjectileLaunch(PlayerLaunchProjectileEvent event) {
|
||||
@EventHandler
|
||||
public void onProjectileLaunch(PlayerLaunchProjectileEvent event) {
|
||||
if (!Settings.Paper_Components.PLAYER_PROJECTILE) {
|
||||
return;
|
||||
}
|
||||
@ -334,7 +341,8 @@ public class PaperListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onAsyncTabCompletion(final AsyncTabCompleteEvent event) {
|
||||
@EventHandler
|
||||
public void onAsyncTabCompletion(final AsyncTabCompleteEvent event) {
|
||||
if (!Settings.Paper_Components.ASYNC_TAB_COMPLETION) {
|
||||
return;
|
||||
}
|
||||
@ -369,7 +377,8 @@ public class PaperListener implements Listener {
|
||||
}
|
||||
event.setCompletions(result);
|
||||
event.setHandled(true);
|
||||
} catch (final Exception ignored) {}
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -53,16 +53,17 @@ import org.bukkit.block.Skull;
|
||||
import org.bukkit.block.Structure;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class PaperListener113 extends PaperListener {
|
||||
|
||||
@Inject public PaperListener113(@Nonnull PlotAreaManager plotAreaManager) {
|
||||
@Inject
|
||||
public PaperListener113(@NonNull PlotAreaManager plotAreaManager) {
|
||||
super(plotAreaManager);
|
||||
}
|
||||
|
||||
@EventHandler public void onBlockPlace(BlockPlaceEvent event) {
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (!Settings.Paper_Components.TILE_ENTITY_CHECK || !Settings.Enabled_Components.CHUNK_PROCESSOR) {
|
||||
return;
|
||||
}
|
||||
@ -81,10 +82,13 @@ public class PaperListener113 extends PaperListener {
|
||||
final int tileEntityCount = event.getBlock().getChunk().getTileEntities(false).length;
|
||||
if (tileEntityCount >= Settings.Chunk_Processor.MAX_TILES) {
|
||||
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
||||
plotPlayer.sendMessage(TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES)));
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
event.setBuild(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ package com.plotsquared.bukkit.listener;
|
||||
|
||||
import com.destroystokyo.paper.MaterialTags;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||
import com.plotsquared.bukkit.util.BukkitEntityUtil;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
@ -144,9 +145,8 @@ import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
@ -180,16 +180,20 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@Inject public PlayerEventListener(@Nonnull final PlotAreaManager plotAreaManager,
|
||||
@Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final WorldEdit worldEdit) {
|
||||
@Inject
|
||||
public PlayerEventListener(
|
||||
final @NonNull PlotAreaManager plotAreaManager,
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull WorldEdit worldEdit
|
||||
) {
|
||||
super(eventDispatcher);
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.worldEdit = worldEdit;
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@EventHandler public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
|
||||
@EventHandler
|
||||
public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
|
||||
if (e.getVehicle().getType() == EntityType.BOAT) {
|
||||
Location location = BukkitUtil.adapt(e.getEntity().getLocation());
|
||||
if (location.isPlotArea()) {
|
||||
@ -307,7 +311,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPreLogin(final AsyncPlayerPreLoginEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPreLogin(final AsyncPlayerPreLoginEvent event) {
|
||||
final UUID uuid;
|
||||
if (Settings.UUID.OFFLINE) {
|
||||
if (Settings.UUID.FORCE_LOWERCASE) {
|
||||
@ -358,7 +363,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void playerRespawn(PlayerRespawnEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void playerRespawn(PlayerRespawnEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
PlotPlayer<Player> pp = BukkitUtil.adapt(player);
|
||||
this.eventDispatcher.doRespawnTask(pp);
|
||||
@ -394,19 +400,23 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
// to is identical to the plot's home location, and untrusted-visit is true
|
||||
// i.e. untrusted-visit can override deny-teleport
|
||||
// this is acceptable, because otherwise it wouldn't make sense to have both flags set
|
||||
if (!result && !(plot.getFlag(UntrustedVisitFlag.class) && plot.getHomeSynchronous().equals(BukkitUtil.adaptComplete(to)))) {
|
||||
if (!result && !(plot.getFlag(UntrustedVisitFlag.class) && plot
|
||||
.getHomeSynchronous()
|
||||
.equals(BukkitUtil.adaptComplete(to)))) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_ENTRY_DENIED))
|
||||
);
|
||||
event.setCancelled(true);}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
playerMove(event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void vehicleMove(VehicleMoveEvent event)
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void vehicleMove(VehicleMoveEvent event)
|
||||
throws IllegalAccessException {
|
||||
final org.bukkit.Location from = event.getFrom();
|
||||
final org.bukkit.Location to = event.getTo();
|
||||
@ -437,7 +447,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
org.bukkit.Location dest;
|
||||
if (moveTmp.isCancelled()) {
|
||||
dest = from;
|
||||
} else if (MathMan.roundInt(moveTmp.getTo().getX()) != toX || MathMan.roundInt(moveTmp.getTo().getZ()) != toZ) {
|
||||
} else if (MathMan.roundInt(moveTmp.getTo().getX()) != toX || MathMan.roundInt(moveTmp
|
||||
.getTo()
|
||||
.getZ()) != toZ) {
|
||||
dest = to;
|
||||
} else {
|
||||
dest = null;
|
||||
@ -520,7 +532,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
this.tmpTeleport = true;
|
||||
event.setCancelled(true);
|
||||
return;}
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (now.equals(lastPlot)) {
|
||||
ForceFieldListener.handleForcefield(player, pp, now);
|
||||
@ -597,7 +610,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
this.tmpTeleport = true;
|
||||
event.setCancelled(true);
|
||||
return;}
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (now.equals(lastPlot)) {
|
||||
ForceFieldListener.handleForcefield(player, pp, now);
|
||||
@ -632,7 +646,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW) public void onChat(AsyncPlayerChatEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void onChat(AsyncPlayerChatEvent event) {
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
@ -683,7 +698,12 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
// allowing colour.
|
||||
if (plotPlayer.hasPermission("plots.chat.color")) {
|
||||
msgTemplate = Template
|
||||
.of("msg", BukkitUtil.LEGACY_COMPONENT_SERIALIZER.deserialize(ChatColor.translateAlternateColorCodes('&', message)));
|
||||
.of("msg",
|
||||
BukkitUtil.LEGACY_COMPONENT_SERIALIZER.deserialize(ChatColor.translateAlternateColorCodes(
|
||||
'&',
|
||||
message
|
||||
))
|
||||
);
|
||||
} else {
|
||||
msgTemplate = Template.of("msg", BukkitUtil.MINI_MESSAGE.deserialize(
|
||||
ChatColor.stripColor(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(Component.text(message)))));
|
||||
@ -738,7 +758,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
@SuppressWarnings("deprecation")
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
/*if (!event.isLeftClick() || (event.getAction() != InventoryAction.PLACE_ALL) || event
|
||||
.isShiftClick()) {
|
||||
@ -953,7 +974,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW) public void onCancelledInteract(PlayerInteractEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void onCancelledInteract(PlayerInteractEvent event) {
|
||||
if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
|
||||
Player player = event.getPlayer();
|
||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||
@ -988,7 +1010,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onInteract(PlayerInteractEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onInteract(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||
PlotArea area = pp.getPlotAreaAbs();
|
||||
@ -1210,7 +1233,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) public void onInventoryClose(InventoryCloseEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onInventoryClose(InventoryCloseEvent event) {
|
||||
HumanEntity closer = event.getPlayer();
|
||||
if (!(closer instanceof Player)) {
|
||||
return;
|
||||
@ -1219,7 +1243,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
PlotInventory.removePlotInventoryOpen(BukkitUtil.adapt(player));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR) public void onLeave(PlayerQuitEvent event) {
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onLeave(PlayerQuitEvent event) {
|
||||
TaskManager.removeFromTeleportQueue(event.getPlayer().getName());
|
||||
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
||||
pp.unregister();
|
||||
@ -1594,7 +1619,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onItemDrop(PlayerDropItemEvent event) {
|
||||
@EventHandler
|
||||
public void onItemDrop(PlayerDropItemEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||
Location location = pp.getLocation();
|
||||
@ -1618,7 +1644,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onItemPickup(EntityPickupItemEvent event) {
|
||||
@EventHandler
|
||||
public void onItemPickup(EntityPickupItemEvent event) {
|
||||
LivingEntity ent = event.getEntity();
|
||||
if (ent instanceof Player) {
|
||||
Player player = (Player) ent;
|
||||
@ -1643,7 +1670,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onDeath(final PlayerDeathEvent event) {
|
||||
@EventHandler
|
||||
public void onDeath(final PlayerDeathEvent event) {
|
||||
Location location = BukkitUtil.adapt(event.getEntity().getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
@ -1664,9 +1692,11 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onLocaleChange(final PlayerLocaleChangeEvent event) {
|
||||
@EventHandler
|
||||
public void onLocaleChange(final PlayerLocaleChangeEvent event) {
|
||||
BukkitPlayer player = BukkitUtil.adapt(event.getPlayer());
|
||||
// we're stripping the country code as we don't want to differ between countries
|
||||
player.setLocale(Locale.forLanguageTag(event.getLocale().substring(0, 2)));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
*/
|
||||
package com.plotsquared.bukkit.listener;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.bukkit.util.BukkitEntityUtil;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.location.Location;
|
||||
@ -49,20 +50,20 @@ import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.projectiles.BlockProjectileSource;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ProjectileEventListener implements Listener {
|
||||
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
|
||||
@Inject public ProjectileEventListener(@Nonnull final PlotAreaManager plotAreaManager) {
|
||||
@Inject
|
||||
public ProjectileEventListener(final @NonNull PlotAreaManager plotAreaManager) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPotionSplash(LingeringPotionSplashEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPotionSplash(LingeringPotionSplashEvent event) {
|
||||
Projectile entity = event.getEntity();
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||
@ -73,7 +74,8 @@ public class ProjectileEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPotionSplash(PotionSplashEvent event) {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPotionSplash(PotionSplashEvent event) {
|
||||
ThrownPotion damager = event.getPotion();
|
||||
Location location = BukkitUtil.adapt(damager.getLocation());
|
||||
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||
@ -91,7 +93,8 @@ public class ProjectileEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onProjectileLaunch(ProjectileLaunchEvent event) {
|
||||
@EventHandler
|
||||
public void onProjectileLaunch(ProjectileLaunchEvent event) {
|
||||
Projectile entity = event.getEntity();
|
||||
if (!(entity instanceof ThrownPotion)) {
|
||||
return;
|
||||
@ -112,7 +115,8 @@ public class ProjectileEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({"BooleanMethodIsAlwaysInverted", "cos it's not... dum IntelliJ"}) @EventHandler
|
||||
@SuppressWarnings({"BooleanMethodIsAlwaysInverted", "cos it's not... dum IntelliJ"})
|
||||
@EventHandler
|
||||
public boolean onProjectileHit(ProjectileHitEvent event) {
|
||||
Projectile entity = event.getEntity();
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
@ -160,4 +164,5 @@ public class ProjectileEventListener implements Listener {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -35,21 +35,23 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.server.ServerLoadEvent;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class ServerListener implements Listener {
|
||||
|
||||
private final BukkitPlatform plugin;
|
||||
|
||||
@Inject public ServerListener(@Nonnull final BukkitPlatform plugin) {
|
||||
@Inject
|
||||
public ServerListener(final @NonNull BukkitPlatform plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler public void onServerLoad(ServerLoadEvent event) {
|
||||
@EventHandler
|
||||
public void onServerLoad(ServerLoadEvent event) {
|
||||
if (Bukkit.getPluginManager().getPlugin("MVdWPlaceholderAPI") != null && Settings.Enabled_Components.USE_MVDWAPI) {
|
||||
new MVdWPlaceholders(this.plugin, this.plugin.placeholderRegistry());
|
||||
ConsolePlayer.getConsole().sendMessage(TranslatableCaption.of("placeholder.hooked"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -95,7 +95,8 @@ public class SingleWorldListener implements Listener {
|
||||
// handle(event);
|
||||
// }
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST) public void onChunkLoad(ChunkLoadEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onChunkLoad(ChunkLoadEvent event) {
|
||||
handle(event);
|
||||
}
|
||||
|
||||
@ -125,4 +126,5 @@ public class SingleWorldListener implements Listener {
|
||||
}
|
||||
return separator == 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,15 +37,15 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.world.WorldInitEvent;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class WorldEvents implements Listener {
|
||||
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
|
||||
@Inject public WorldEvents(@Nonnull final PlotAreaManager plotAreaManager) {
|
||||
@Inject
|
||||
public WorldEvents(final @NonNull PlotAreaManager plotAreaManager) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@ -67,4 +67,5 @@ public class WorldEvents implements Listener {
|
||||
PlotSquared.get().loadWorld(name, new BukkitPlotGenerator(name, gen, this.plotAreaManager));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,9 +32,9 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.WorldCreator;
|
||||
import org.bukkit.WorldType;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -45,13 +45,15 @@ import java.util.List;
|
||||
* Default Bukkit world manager. It will handle world creation by
|
||||
* registering the generator in bukkit.yml
|
||||
*/
|
||||
@Singleton public class BukkitWorldManager implements PlatformWorldManager<World> {
|
||||
@Singleton
|
||||
public class BukkitWorldManager implements PlatformWorldManager<World> {
|
||||
|
||||
@Override public void initialize() {
|
||||
@Override
|
||||
public void initialize() {
|
||||
}
|
||||
|
||||
@Override @Nullable
|
||||
public World handleWorldCreation(@Nonnull String worldName, @Nullable String generator) {
|
||||
@Override
|
||||
public @Nullable World handleWorldCreation(@NonNull String worldName, @Nullable String generator) {
|
||||
this.setGenerator(worldName, generator);
|
||||
final WorldCreator wc = new WorldCreator(worldName);
|
||||
wc.environment(World.Environment.NORMAL);
|
||||
@ -62,7 +64,7 @@ import java.util.List;
|
||||
return Bukkit.createWorld(wc);
|
||||
}
|
||||
|
||||
protected void setGenerator(@Nullable final String worldName, @Nullable final String generator) {
|
||||
protected void setGenerator(final @Nullable String worldName, final @Nullable String generator) {
|
||||
if (generator == null) {
|
||||
return;
|
||||
}
|
||||
@ -76,11 +78,13 @@ import java.util.List;
|
||||
}
|
||||
}
|
||||
|
||||
@Override public String getName() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "bukkit";
|
||||
}
|
||||
|
||||
@Override public Collection<String> getWorlds() {
|
||||
@Override
|
||||
public Collection<String> getWorlds() {
|
||||
final List<World> worlds = Bukkit.getWorlds();
|
||||
final List<String> worldNames = new ArrayList<>();
|
||||
for (final World world : worlds) {
|
||||
|
@ -27,23 +27,23 @@ package com.plotsquared.bukkit.managers;
|
||||
|
||||
import com.google.inject.Singleton;
|
||||
import org.bukkit.World;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import se.hyperver.hyperverse.Hyperverse;
|
||||
import se.hyperver.hyperverse.world.WorldConfiguration;
|
||||
import se.hyperver.hyperverse.world.WorldConfigurationBuilder;
|
||||
import se.hyperver.hyperverse.world.WorldFeatures;
|
||||
import se.hyperver.hyperverse.world.WorldType;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* Hyperverse specific manager that creates worlds
|
||||
* using Hyperverse's API
|
||||
*/
|
||||
@Singleton public class HyperverseWorldManager extends BukkitWorldManager {
|
||||
@Singleton
|
||||
public class HyperverseWorldManager extends BukkitWorldManager {
|
||||
|
||||
@Override @Nullable
|
||||
public World handleWorldCreation(@Nonnull String worldName, @Nullable String generator) {
|
||||
@Override
|
||||
public @Nullable World handleWorldCreation(@NonNull String worldName, @Nullable String generator) {
|
||||
// First let Bukkit register the world
|
||||
this.setGenerator(worldName, generator);
|
||||
// Create the world
|
||||
@ -61,7 +61,8 @@ import javax.annotation.Nullable;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public String getName() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "bukkit-hyperverse";
|
||||
}
|
||||
|
||||
|
@ -28,18 +28,18 @@ package com.plotsquared.bukkit.managers;
|
||||
import com.google.inject.Singleton;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/**
|
||||
* Multiverse specific manager that informs Multiverse of
|
||||
* world creation by executing a console command
|
||||
*/
|
||||
@Singleton public class MultiverseWorldManager extends BukkitWorldManager {
|
||||
@Singleton
|
||||
public class MultiverseWorldManager extends BukkitWorldManager {
|
||||
|
||||
@Override @Nullable
|
||||
public World handleWorldCreation(@Nonnull final String worldName, @Nullable final String generator) {
|
||||
@Override
|
||||
public @Nullable World handleWorldCreation(final @NonNull String worldName, final @Nullable String generator) {
|
||||
// First let Bukkit register the world
|
||||
this.setGenerator(worldName, generator);
|
||||
// Then we send the console command
|
||||
@ -52,7 +52,8 @@ import javax.annotation.Nullable;
|
||||
return Bukkit.getWorld(worldName);
|
||||
}
|
||||
|
||||
@Override public String getName() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "bukkit-multiverse";
|
||||
}
|
||||
|
||||
|
@ -33,9 +33,9 @@ import com.plotsquared.core.player.ConsolePlayer;
|
||||
import com.plotsquared.core.player.OfflinePlotPlayer;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Optional;
|
||||
@ -43,11 +43,15 @@ import java.util.Set;
|
||||
|
||||
public class BukkitPermissionHandler implements PermissionHandler {
|
||||
|
||||
@Override public void initialize() {
|
||||
@Override
|
||||
public void initialize() {
|
||||
}
|
||||
|
||||
@Nonnull @Override public Optional<PermissionProfile> getPermissionProfile(
|
||||
@Nonnull PlotPlayer<?> playerPlotPlayer) {
|
||||
@NonNull
|
||||
@Override
|
||||
public Optional<PermissionProfile> getPermissionProfile(
|
||||
@NonNull PlotPlayer<?> playerPlotPlayer
|
||||
) {
|
||||
if (playerPlotPlayer instanceof BukkitPlayer) {
|
||||
final BukkitPlayer bukkitPlayer = (BukkitPlayer) playerPlotPlayer;
|
||||
return Optional.of(new BukkitPermissionProfile(bukkitPlayer.getPlatformPlayer()));
|
||||
@ -57,12 +61,17 @@ public class BukkitPermissionHandler implements PermissionHandler {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Nonnull @Override public Optional<PermissionProfile> getPermissionProfile(
|
||||
@Nonnull OfflinePlotPlayer offlinePlotPlayer) {
|
||||
@NonNull
|
||||
@Override
|
||||
public Optional<PermissionProfile> getPermissionProfile(
|
||||
@NonNull OfflinePlotPlayer offlinePlotPlayer
|
||||
) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Nonnull @Override public Set<PermissionHandlerCapability> getCapabilities() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Set<PermissionHandlerCapability> getCapabilities() {
|
||||
return EnumSet.of(PermissionHandlerCapability.ONLINE_PERMISSIONS);
|
||||
}
|
||||
|
||||
@ -71,12 +80,15 @@ public class BukkitPermissionHandler implements PermissionHandler {
|
||||
|
||||
private final WeakReference<Player> playerReference;
|
||||
|
||||
private BukkitPermissionProfile(@Nonnull final Player player) {
|
||||
private BukkitPermissionProfile(final @NonNull Player player) {
|
||||
this.playerReference = new WeakReference<>(player);
|
||||
}
|
||||
|
||||
@Override public boolean hasPermission(@Nullable final String world,
|
||||
@Nonnull final String permission) {
|
||||
@Override
|
||||
public boolean hasPermission(
|
||||
final @Nullable String world,
|
||||
final @NonNull String permission
|
||||
) {
|
||||
final Player player = this.playerReference.get();
|
||||
return player != null && player.hasPermission(permission);
|
||||
}
|
||||
|
@ -37,9 +37,9 @@ import net.milkbowl.vault.permission.Permission;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
@ -48,7 +48,8 @@ public class VaultPermissionHandler implements PermissionHandler {
|
||||
|
||||
private Permission permissions;
|
||||
|
||||
@Override public void initialize() {
|
||||
@Override
|
||||
public void initialize() {
|
||||
if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null) {
|
||||
throw new IllegalStateException("Vault is not present on the server");
|
||||
}
|
||||
@ -59,8 +60,11 @@ public class VaultPermissionHandler implements PermissionHandler {
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull @Override public Optional<PermissionProfile> getPermissionProfile(
|
||||
@Nonnull PlotPlayer<?> playerPlotPlayer) {
|
||||
@NonNull
|
||||
@Override
|
||||
public Optional<PermissionProfile> getPermissionProfile(
|
||||
@NonNull PlotPlayer<?> playerPlotPlayer
|
||||
) {
|
||||
if (playerPlotPlayer instanceof BukkitPlayer) {
|
||||
final BukkitPlayer bukkitPlayer = (BukkitPlayer) playerPlotPlayer;
|
||||
return Optional.of(new VaultPermissionProfile(bukkitPlayer.getPlatformPlayer()));
|
||||
@ -70,18 +74,25 @@ public class VaultPermissionHandler implements PermissionHandler {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Nonnull @Override public Optional<PermissionProfile> getPermissionProfile(
|
||||
@Nonnull OfflinePlotPlayer offlinePlotPlayer) {
|
||||
@NonNull
|
||||
@Override
|
||||
public Optional<PermissionProfile> getPermissionProfile(
|
||||
@NonNull OfflinePlotPlayer offlinePlotPlayer
|
||||
) {
|
||||
if (offlinePlotPlayer instanceof BukkitOfflinePlayer) {
|
||||
return Optional.of(new VaultPermissionProfile(((BukkitOfflinePlayer) offlinePlotPlayer).player));
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Nonnull @Override public Set<PermissionHandlerCapability> getCapabilities() {
|
||||
return EnumSet.of(PermissionHandlerCapability.PER_WORLD_PERMISSIONS,
|
||||
@NonNull
|
||||
@Override
|
||||
public Set<PermissionHandlerCapability> getCapabilities() {
|
||||
return EnumSet.of(
|
||||
PermissionHandlerCapability.PER_WORLD_PERMISSIONS,
|
||||
PermissionHandlerCapability.ONLINE_PERMISSIONS,
|
||||
PermissionHandlerCapability.OFFLINE_PERMISSIONS);
|
||||
PermissionHandlerCapability.OFFLINE_PERMISSIONS
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -89,12 +100,15 @@ public class VaultPermissionHandler implements PermissionHandler {
|
||||
|
||||
private final OfflinePlayer offlinePlayer;
|
||||
|
||||
private VaultPermissionProfile(@Nonnull final OfflinePlayer offlinePlayer) {
|
||||
private VaultPermissionProfile(final @NonNull OfflinePlayer offlinePlayer) {
|
||||
this.offlinePlayer = offlinePlayer;
|
||||
}
|
||||
|
||||
@Override public boolean hasPermission(@Nullable final String world,
|
||||
@Nonnull final String permission) {
|
||||
@Override
|
||||
public boolean hasPermission(
|
||||
final @Nullable String world,
|
||||
final @NonNull String permission
|
||||
) {
|
||||
if (permissions == null) {
|
||||
return false;
|
||||
}
|
||||
|
@ -34,8 +34,7 @@ import com.plotsquared.core.util.placeholders.Placeholder;
|
||||
import com.plotsquared.core.util.placeholders.PlaceholderRegistry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
/**
|
||||
* Placeholder support for MVdWPlaceholderAPI
|
||||
@ -46,7 +45,10 @@ public class MVdWPlaceholders {
|
||||
private final Plugin plugin;
|
||||
private final PlaceholderRegistry registry;
|
||||
|
||||
public MVdWPlaceholders(@Nonnull final Plugin plugin, @Nonnull final PlaceholderRegistry registry) {
|
||||
public MVdWPlaceholders(
|
||||
final @NonNull Plugin plugin,
|
||||
final @NonNull PlaceholderRegistry registry
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
this.registry = registry;
|
||||
for (final Placeholder placeholder : registry.getPlaceholders()) {
|
||||
@ -55,19 +57,24 @@ public class MVdWPlaceholders {
|
||||
PlotSquared.get().getEventDispatcher().registerListener(this);
|
||||
}
|
||||
|
||||
@Subscribe public void onNewPlaceholder(@Nonnull final PlaceholderRegistry.PlaceholderAddedEvent event) {
|
||||
@Subscribe
|
||||
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
||||
this.addPlaceholder(event.getPlaceholder());
|
||||
}
|
||||
|
||||
private void addPlaceholder(@Nonnull final Placeholder placeholder) {
|
||||
PlaceholderAPI.registerPlaceholder(plugin, PREFIX + String.format("%s", placeholder.getKey()), placeholderReplaceEvent -> {
|
||||
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
||||
PlaceholderAPI.registerPlaceholder(
|
||||
plugin,
|
||||
PREFIX + String.format("%s", placeholder.getKey()),
|
||||
placeholderReplaceEvent -> {
|
||||
if (!placeholderReplaceEvent.isOnline() || placeholderReplaceEvent.getPlayer() == null) {
|
||||
return "";
|
||||
}
|
||||
final PlotPlayer<Player> player = BukkitUtil.adapt(placeholderReplaceEvent.getPlayer());
|
||||
String key = placeholderReplaceEvent.getPlaceholder().substring(PREFIX.length());
|
||||
return registry.getPlaceholderValue(key, player);
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -36,27 +36,33 @@ public class PAPIPlaceholders extends PlaceholderExpansion {
|
||||
public PAPIPlaceholders() {
|
||||
}
|
||||
|
||||
@Override public boolean persist() {
|
||||
@Override
|
||||
public boolean persist() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public boolean canRegister() {
|
||||
@Override
|
||||
public boolean canRegister() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public String getAuthor() {
|
||||
@Override
|
||||
public String getAuthor() {
|
||||
return "IntellectualSites";
|
||||
}
|
||||
|
||||
@Override public String getIdentifier() {
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return "plotsquared";
|
||||
}
|
||||
|
||||
@Override public String getVersion() {
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return "3";
|
||||
}
|
||||
|
||||
@Override public String onPlaceholderRequest(Player p, String identifier) {
|
||||
@Override
|
||||
public String onPlaceholderRequest(Player p, String identifier) {
|
||||
final PlotPlayer<?> pl = PlotSquared.platform().playerManager().getPlayerIfExists(p.getUniqueId());
|
||||
|
||||
if (pl == null) {
|
||||
@ -66,8 +72,9 @@ public class PAPIPlaceholders extends PlaceholderExpansion {
|
||||
// PAPI specific ones that don't translate well over into other placeholder APIs
|
||||
if (identifier.startsWith("has_plot_")) {
|
||||
identifier = identifier.substring("has_plot_".length());
|
||||
if (identifier.isEmpty())
|
||||
if (identifier.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return pl.getPlotCount(identifier) > 0 ?
|
||||
PlaceholderAPIPlugin.booleanTrue() :
|
||||
@ -76,8 +83,9 @@ public class PAPIPlaceholders extends PlaceholderExpansion {
|
||||
|
||||
if (identifier.startsWith("plot_count_")) {
|
||||
identifier = identifier.substring("plot_count_".length());
|
||||
if (identifier.isEmpty())
|
||||
if (identifier.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return String.valueOf(pl.getPlotCount(identifier));
|
||||
}
|
||||
|
@ -30,12 +30,12 @@ import com.plotsquared.core.configuration.caption.ChatFormatter;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class PlaceholderFormatter implements ChatFormatter {
|
||||
|
||||
@Override public void format(@Nonnull final ChatContext context) {
|
||||
@Override
|
||||
public void format(final @NonNull ChatContext context) {
|
||||
final PlotPlayer<?> recipient = context.getRecipient();
|
||||
if (recipient instanceof BukkitPlayer) {
|
||||
if (context.isRawOutput()) {
|
||||
|
@ -30,10 +30,9 @@ import com.plotsquared.core.permissions.PermissionHandler;
|
||||
import com.plotsquared.core.permissions.PermissionProfile;
|
||||
import com.plotsquared.core.player.OfflinePlotPlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import javax.annotation.Nonnegative;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import org.checkerframework.checker.index.qual.NonNegative;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -49,27 +48,37 @@ public class BukkitOfflinePlayer implements OfflinePlotPlayer {
|
||||
* @param player Bukkit OfflinePlayer player to convert
|
||||
* @param permissionHandler Permission Profile to be used
|
||||
*/
|
||||
public BukkitOfflinePlayer(@Nonnull final OfflinePlayer player, @Nonnull final
|
||||
PermissionHandler permissionHandler) {
|
||||
public BukkitOfflinePlayer(
|
||||
final @NonNull OfflinePlayer player, final @NonNull
|
||||
PermissionHandler permissionHandler
|
||||
) {
|
||||
this.player = player;
|
||||
this.permissionProfile = permissionHandler.getPermissionProfile(this)
|
||||
.orElse(NullPermissionProfile.INSTANCE);
|
||||
}
|
||||
|
||||
@Nonnull @Override public UUID getUUID() {
|
||||
@NonNull
|
||||
@Override
|
||||
public UUID getUUID() {
|
||||
return this.player.getUniqueId();
|
||||
}
|
||||
|
||||
@Override @Nonnegative public long getLastPlayed() {
|
||||
@Override
|
||||
@NonNegative
|
||||
public long getLastPlayed() {
|
||||
return this.player.getLastSeen();
|
||||
}
|
||||
|
||||
@Override public String getName() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.player.getName();
|
||||
}
|
||||
|
||||
@Override public boolean hasPermission(@Nullable final String world,
|
||||
@Nonnull final String permission) {
|
||||
@Override
|
||||
public boolean hasPermission(
|
||||
final @Nullable String world,
|
||||
final @NonNull String permission
|
||||
) {
|
||||
return this.permissionProfile.hasPermission(world, permission);
|
||||
}
|
||||
|
||||
|
@ -28,10 +28,10 @@ package com.plotsquared.bukkit.player;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.events.TeleportCause;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.permissions.PermissionHandler;
|
||||
import com.plotsquared.core.player.ConsolePlayer;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
@ -54,10 +54,9 @@ import org.bukkit.event.EventException;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||
import org.bukkit.plugin.RegisteredListener;
|
||||
import org.checkerframework.checker.index.qual.NonNegative;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnegative;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@ -73,6 +72,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
private static boolean CHECK_EFFECTIVE = true;
|
||||
public final Player player;
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* <p>Please do not use this method. Instead use
|
||||
* BukkitUtil.getPlayer(Player), as it caches player objects.</p>
|
||||
@ -82,15 +82,19 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
* @param player Bukkit player instance
|
||||
* @param permissionHandler PermissionHandler instance
|
||||
*/
|
||||
public BukkitPlayer(@Nonnull final PlotAreaManager plotAreaManager, @Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final Player player, @Nonnull final PermissionHandler permissionHandler) {
|
||||
public BukkitPlayer(
|
||||
final @NonNull PlotAreaManager plotAreaManager, final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull Player player, final @NonNull PermissionHandler permissionHandler
|
||||
) {
|
||||
this(plotAreaManager, eventDispatcher, player, false, permissionHandler);
|
||||
}
|
||||
|
||||
public BukkitPlayer(@Nonnull final PlotAreaManager plotAreaManager, @Nonnull final
|
||||
EventDispatcher eventDispatcher, @Nonnull final Player player,
|
||||
public BukkitPlayer(
|
||||
final @NonNull PlotAreaManager plotAreaManager, final @NonNull
|
||||
EventDispatcher eventDispatcher, final @NonNull Player player,
|
||||
final boolean realPlayer,
|
||||
@Nonnull final PermissionHandler permissionHandler) {
|
||||
final @NonNull PermissionHandler permissionHandler
|
||||
) {
|
||||
super(plotAreaManager, eventDispatcher, permissionHandler);
|
||||
this.player = player;
|
||||
this.setupPermissionProfile();
|
||||
@ -99,15 +103,19 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Actor toActor() {
|
||||
@Override
|
||||
public Actor toActor() {
|
||||
return BukkitAdapter.adapt(player);
|
||||
}
|
||||
|
||||
@Override public Player getPlatformPlayer() {
|
||||
@Override
|
||||
public Player getPlatformPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
@Nonnull @Override public UUID getUUID() {
|
||||
@NonNull
|
||||
@Override
|
||||
public UUID getUUID() {
|
||||
if (Settings.UUID.OFFLINE) {
|
||||
if (Settings.UUID.FORCE_LOWERCASE) {
|
||||
return UUID.nameUUIDFromBytes(("OfflinePlayer:" +
|
||||
@ -120,11 +128,14 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
return player.getUniqueId();
|
||||
}
|
||||
|
||||
@Override @Nonnegative public long getLastPlayed() {
|
||||
@Override
|
||||
@NonNegative
|
||||
public long getLastPlayed() {
|
||||
return this.player.getLastSeen();
|
||||
}
|
||||
|
||||
@Override public boolean canTeleport(@Nonnull final Location location) {
|
||||
@Override
|
||||
public boolean canTeleport(final @NonNull Location location) {
|
||||
final org.bukkit.Location to = BukkitUtil.adapt(location);
|
||||
final org.bukkit.Location from = player.getLocation();
|
||||
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
|
||||
@ -137,7 +148,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void callEvent(@Nonnull final Event event) {
|
||||
private void callEvent(final @NonNull Event event) {
|
||||
final RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners();
|
||||
for (final RegisteredListener listener : listeners) {
|
||||
if (listener.getPlugin().getName().equals(PlotSquared.platform().pluginName())) {
|
||||
@ -151,8 +162,12 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnegative public int hasPermissionRange(@Nonnull final String stub,
|
||||
@Nonnegative final int range) {
|
||||
@Override
|
||||
@NonNegative
|
||||
public int hasPermissionRange(
|
||||
final @NonNull String stub,
|
||||
@NonNegative final int range
|
||||
) {
|
||||
if (hasPermission(Permission.PERMISSION_ADMIN.toString())) {
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
@ -213,34 +228,40 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void teleport(@Nonnull final Location location, @Nonnull final TeleportCause cause) {
|
||||
public void teleport(final @NonNull Location location, final @NonNull TeleportCause cause) {
|
||||
if (Math.abs(location.getX()) >= 30000000 || Math.abs(location.getZ()) >= 30000000) {
|
||||
return;
|
||||
}
|
||||
final org.bukkit.Location bukkitLocation =
|
||||
new org.bukkit.Location(BukkitUtil.getWorld(location.getWorldName()), location.getX() + 0.5,
|
||||
location.getY(), location.getZ() + 0.5, location.getYaw(), location.getPitch());
|
||||
location.getY(), location.getZ() + 0.5, location.getYaw(), location.getPitch()
|
||||
);
|
||||
PaperLib.teleportAsync(player, bukkitLocation, getTeleportCause(cause));
|
||||
}
|
||||
|
||||
@Override public String getName() {
|
||||
@Override
|
||||
public String getName() {
|
||||
if (this.name == null) {
|
||||
this.name = this.player.getName();
|
||||
}
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override public void setCompassTarget(Location location) {
|
||||
@Override
|
||||
public void setCompassTarget(Location location) {
|
||||
this.player.setCompassTarget(
|
||||
new org.bukkit.Location(BukkitUtil.getWorld(location.getWorldName()), location.getX(),
|
||||
location.getY(), location.getZ()));
|
||||
location.getY(), location.getZ()
|
||||
));
|
||||
}
|
||||
|
||||
@Override public Location getLocationFull() {
|
||||
@Override
|
||||
public Location getLocationFull() {
|
||||
return BukkitUtil.adaptComplete(this.player.getLocation());
|
||||
}
|
||||
|
||||
@Override public void setWeather(@Nonnull final PlotWeather weather) {
|
||||
@Override
|
||||
public void setWeather(final @NonNull PlotWeather weather) {
|
||||
switch (weather) {
|
||||
case CLEAR:
|
||||
this.player.setPlayerWeather(WeatherType.CLEAR);
|
||||
@ -255,7 +276,8 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public com.sk89q.worldedit.world.gamemode.GameMode getGameMode() {
|
||||
@Override
|
||||
public com.sk89q.worldedit.world.gamemode.GameMode getGameMode() {
|
||||
switch (this.player.getGameMode()) {
|
||||
case ADVENTURE:
|
||||
return ADVENTURE;
|
||||
@ -282,7 +304,8 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void setTime(final long time) {
|
||||
@Override
|
||||
public void setTime(final long time) {
|
||||
if (time != Long.MAX_VALUE) {
|
||||
this.player.setPlayerTime(time, false);
|
||||
} else {
|
||||
@ -290,15 +313,18 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean getFlight() {
|
||||
@Override
|
||||
public boolean getFlight() {
|
||||
return player.getAllowFlight();
|
||||
}
|
||||
|
||||
@Override public void setFlight(boolean fly) {
|
||||
@Override
|
||||
public void setFlight(boolean fly) {
|
||||
this.player.setAllowFlight(fly);
|
||||
}
|
||||
|
||||
@Override public void playMusic(@Nonnull final Location location, @Nonnull final ItemType id) {
|
||||
@Override
|
||||
public void playMusic(final @NonNull Location location, final @NonNull ItemType id) {
|
||||
if (id == ItemTypes.AIR) {
|
||||
// Let's just stop all the discs because why not?
|
||||
for (final Sound sound : Arrays.stream(Sound.values())
|
||||
@ -309,29 +335,35 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
} else {
|
||||
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, id.to(Material.class));
|
||||
this.player.playSound(BukkitUtil.adapt(location),
|
||||
Sound.valueOf(BukkitAdapter.adapt(id).name()), Float.MAX_VALUE, 1f);
|
||||
Sound.valueOf(BukkitAdapter.adapt(id).name()), Float.MAX_VALUE, 1f
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void kick(final String message) {
|
||||
@Override
|
||||
public void kick(final String message) {
|
||||
this.player.kickPlayer(message);
|
||||
}
|
||||
|
||||
@Override public void stopSpectating() {
|
||||
@Override
|
||||
public void stopSpectating() {
|
||||
if (getGameMode() == SPECTATOR) {
|
||||
this.player.setSpectatorTarget(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean isBanned() {
|
||||
@Override
|
||||
public boolean isBanned() {
|
||||
return this.player.isBanned();
|
||||
}
|
||||
|
||||
@Override @Nonnull public Audience getAudience() {
|
||||
@Override
|
||||
public @NonNull Audience getAudience() {
|
||||
return BukkitUtil.BUKKIT_AUDIENCES.player(this.player);
|
||||
}
|
||||
|
||||
@Override public boolean canSee(final PlotPlayer<?> other) {
|
||||
@Override
|
||||
public boolean canSee(final PlotPlayer<?> other) {
|
||||
if (other instanceof ConsolePlayer) {
|
||||
return true;
|
||||
} else {
|
||||
@ -339,7 +371,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
public PlayerTeleportEvent.TeleportCause getTeleportCause(@Nonnull final TeleportCause cause) {
|
||||
public PlayerTeleportEvent.TeleportCause getTeleportCause(final @NonNull TeleportCause cause) {
|
||||
switch (cause) {
|
||||
case COMMAND:
|
||||
return PlayerTeleportEvent.TeleportCause.COMMAND;
|
||||
@ -349,4 +381,5 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
return PlayerTeleportEvent.TeleportCause.UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,29 +33,35 @@ import com.plotsquared.core.util.EventDispatcher;
|
||||
import com.plotsquared.core.util.PlayerManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Player manager providing {@link BukkitPlayer Bukkit players}
|
||||
*/
|
||||
@Singleton public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
||||
@Singleton
|
||||
public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
||||
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
private final EventDispatcher eventDispatcher;
|
||||
private final PermissionHandler permissionHandler;
|
||||
|
||||
@Inject public BukkitPlayerManager(@Nonnull final PlotAreaManager plotAreaManager,
|
||||
@Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final PermissionHandler permissionHandler) {
|
||||
@Inject
|
||||
public BukkitPlayerManager(
|
||||
final @NonNull PlotAreaManager plotAreaManager,
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull PermissionHandler permissionHandler
|
||||
) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.permissionHandler = permissionHandler;
|
||||
}
|
||||
|
||||
@Nonnull @Override public BukkitPlayer getPlayer(@Nonnull final Player object) {
|
||||
@NonNull
|
||||
@Override
|
||||
public BukkitPlayer getPlayer(final @NonNull Player object) {
|
||||
if (!object.isOnline()) {
|
||||
throw new NoSuchPlayerException(object.getUniqueId());
|
||||
}
|
||||
@ -66,7 +72,8 @@ import java.util.UUID;
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnull public BukkitPlayer createPlayer(@Nonnull final UUID uuid) {
|
||||
@Override
|
||||
public @NonNull BukkitPlayer createPlayer(final @NonNull UUID uuid) {
|
||||
final Player player = Bukkit.getPlayer(uuid);
|
||||
if (player == null || !player.isOnline()) {
|
||||
throw new NoSuchPlayerException(uuid);
|
||||
@ -74,14 +81,18 @@ import java.util.UUID;
|
||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, this.permissionHandler);
|
||||
}
|
||||
|
||||
@Nullable @Override public BukkitOfflinePlayer getOfflinePlayer(@Nullable final UUID uuid) {
|
||||
@Nullable
|
||||
@Override
|
||||
public BukkitOfflinePlayer getOfflinePlayer(final @Nullable UUID uuid) {
|
||||
if (uuid == null) {
|
||||
return null;
|
||||
}
|
||||
return new BukkitOfflinePlayer(Bukkit.getOfflinePlayer(uuid), this.permissionHandler);
|
||||
}
|
||||
|
||||
@Nonnull @Override public BukkitOfflinePlayer getOfflinePlayer(@Nonnull final String username) {
|
||||
@NonNull
|
||||
@Override
|
||||
public BukkitOfflinePlayer getOfflinePlayer(final @NonNull String username) {
|
||||
return new BukkitOfflinePlayer(Bukkit.getOfflinePlayer(username), this.permissionHandler);
|
||||
}
|
||||
|
||||
|
@ -39,8 +39,8 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@ -76,15 +76,18 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
||||
private final AtomicInteger expectedSize;
|
||||
private int batchSize;
|
||||
|
||||
@Inject private BukkitChunkCoordinator(@Assisted final long maxIterationTime,
|
||||
@Inject
|
||||
private BukkitChunkCoordinator(
|
||||
@Assisted final long maxIterationTime,
|
||||
@Assisted final int initialBatchSize,
|
||||
@Assisted @Nonnull final Consumer<BlockVector2> chunkConsumer,
|
||||
@Assisted @Nonnull final World world,
|
||||
@Assisted @Nonnull final Collection<BlockVector2> requestedChunks,
|
||||
@Assisted @Nonnull final Runnable whenDone,
|
||||
@Assisted @Nonnull final Consumer<Throwable> throwableConsumer,
|
||||
@Assisted final @NonNull Consumer<BlockVector2> chunkConsumer,
|
||||
@Assisted final @NonNull World world,
|
||||
@Assisted final @NonNull Collection<BlockVector2> requestedChunks,
|
||||
@Assisted final @NonNull Runnable whenDone,
|
||||
@Assisted final @NonNull Consumer<Throwable> throwableConsumer,
|
||||
@Assisted final boolean unloadAfter,
|
||||
@Assisted @Nonnull final Collection<ProgressSubscriber> progressSubscribers) {
|
||||
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers
|
||||
) {
|
||||
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
|
||||
this.availableChunks = new LinkedBlockingQueue<>();
|
||||
this.totalSize = requestedChunks.size();
|
||||
@ -100,14 +103,16 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
||||
this.progressSubscribers.addAll(progressSubscribers);
|
||||
}
|
||||
|
||||
@Override public void start() {
|
||||
@Override
|
||||
public void start() {
|
||||
// Request initial batch
|
||||
this.requestBatch();
|
||||
// Wait until next tick to give the chunks a chance to be loaded
|
||||
TaskManager.runTaskLater(() -> TaskManager.runTaskRepeat(this, TaskTime.ticks(1)), TaskTime.ticks(1));
|
||||
}
|
||||
|
||||
@Override public void runTask() {
|
||||
@Override
|
||||
public void runTask() {
|
||||
Chunk chunk = this.availableChunks.poll();
|
||||
if (chunk == null) {
|
||||
return;
|
||||
@ -166,7 +171,9 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
||||
BlockVector2 chunk;
|
||||
for (int i = 0; i < this.batchSize && (chunk = this.requestedChunks.poll()) != null; i++) {
|
||||
// This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent
|
||||
PaperLib.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true).whenComplete((chunkObject, throwable) -> {
|
||||
PaperLib
|
||||
.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true)
|
||||
.whenComplete((chunkObject, throwable) -> {
|
||||
if (throwable != null) {
|
||||
throwable.printStackTrace();
|
||||
// We want one less because this couldn't be processed
|
||||
@ -181,7 +188,7 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
||||
/**
|
||||
* Once a chunk has been loaded, process it (add a plugin ticket and add to available chunks list)
|
||||
*/
|
||||
private void processChunk(@Nonnull final Chunk chunk) {
|
||||
private void processChunk(final @NonNull Chunk chunk) {
|
||||
if (!chunk.isLoaded()) {
|
||||
throw new IllegalArgumentException(String.format("Chunk %d;%d is is not loaded", chunk.getX(), chunk.getZ()));
|
||||
}
|
||||
@ -192,18 +199,20 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
||||
/**
|
||||
* Once a chunk has been used, free it up for unload by removing the plugin ticket
|
||||
*/
|
||||
private void freeChunk(@Nonnull final Chunk chunk) {
|
||||
private void freeChunk(final @NonNull Chunk chunk) {
|
||||
if (!chunk.isLoaded()) {
|
||||
throw new IllegalArgumentException(String.format("Chunk %d;%d is is not loaded", chunk.getX(), chunk.getZ()));
|
||||
}
|
||||
chunk.removePluginChunkTicket(this.plugin);
|
||||
}
|
||||
|
||||
@Override public int getRemainingChunks() {
|
||||
@Override
|
||||
public int getRemainingChunks() {
|
||||
return this.expectedSize.get();
|
||||
}
|
||||
|
||||
@Override public int getTotalChunks() {
|
||||
@Override
|
||||
public int getTotalChunks() {
|
||||
return this.totalSize;
|
||||
}
|
||||
|
||||
@ -212,7 +221,7 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
||||
*
|
||||
* @param subscriber Subscriber
|
||||
*/
|
||||
public void subscribeToProgress(@Nonnull final ProgressSubscriber subscriber) {
|
||||
public void subscribeToProgress(final @NonNull ProgressSubscriber subscriber) {
|
||||
this.progressSubscribers.add(subscriber);
|
||||
}
|
||||
|
||||
|
@ -54,8 +54,8 @@ import org.bukkit.Chunk;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Consumer;
|
||||
@ -65,31 +65,41 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
||||
private final SideEffectSet noSideEffectSet;
|
||||
private final SideEffectSet lightingSideEffectSet;
|
||||
private org.bukkit.World bukkitWorld;
|
||||
@Inject private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory;
|
||||
@Inject private ChunkCoordinatorFactory chunkCoordinatorFactory;
|
||||
@Inject
|
||||
private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory;
|
||||
@Inject
|
||||
private ChunkCoordinatorFactory chunkCoordinatorFactory;
|
||||
private ChunkCoordinator chunkCoordinator;
|
||||
|
||||
@Inject public BukkitQueueCoordinator(@Nonnull World world) {
|
||||
@Inject
|
||||
public BukkitQueueCoordinator(@NonNull World world) {
|
||||
super(world);
|
||||
noSideEffectSet = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
|
||||
noSideEffectSet = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(
|
||||
SideEffect.NEIGHBORS,
|
||||
SideEffect.State.OFF
|
||||
);
|
||||
lightingSideEffectSet = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
|
||||
}
|
||||
|
||||
@Override public BlockState getBlock(int x, int y, int z) {
|
||||
@Override
|
||||
public BlockState getBlock(int x, int y, int z) {
|
||||
Block block = getBukkitWorld().getBlockAt(x, y, z);
|
||||
return BukkitBlockUtil.get(block);
|
||||
}
|
||||
|
||||
@Override public void start() {
|
||||
@Override
|
||||
public void start() {
|
||||
chunkCoordinator.start();
|
||||
}
|
||||
|
||||
//TODO: implement cancellation
|
||||
@Override public void cancel() {
|
||||
@Override
|
||||
public void cancel() {
|
||||
chunkCoordinator.cancel();
|
||||
}
|
||||
|
||||
@Override public boolean enqueue() {
|
||||
@Override
|
||||
public boolean enqueue() {
|
||||
final Clipboard regenClipboard;
|
||||
if (isRegen()) {
|
||||
BlockVector3 start = BlockVector3.at(getRegenStart()[0] << 4, 0, getRegenStart()[1] << 4);
|
||||
@ -190,16 +200,26 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
||||
read.addAll(getReadChunks());
|
||||
}
|
||||
chunkCoordinator =
|
||||
chunkCoordinatorBuilderFactory.create(chunkCoordinatorFactory).inWorld(getWorld()).withChunks(getBlockChunks().keySet()).withChunks(read)
|
||||
.withInitialBatchSize(3).withMaxIterationTime(40).withThrowableConsumer(Throwable::printStackTrace).withFinalAction(getCompleteTask())
|
||||
.withConsumer(consumer).unloadAfter(isUnloadAfter()).withProgressSubscribers(getProgressSubscribers()).build();
|
||||
chunkCoordinatorBuilderFactory
|
||||
.create(chunkCoordinatorFactory)
|
||||
.inWorld(getWorld())
|
||||
.withChunks(getBlockChunks().keySet())
|
||||
.withChunks(read)
|
||||
.withInitialBatchSize(3)
|
||||
.withMaxIterationTime(40)
|
||||
.withThrowableConsumer(Throwable::printStackTrace)
|
||||
.withFinalAction(getCompleteTask())
|
||||
.withConsumer(consumer)
|
||||
.unloadAfter(isUnloadAfter())
|
||||
.withProgressSubscribers(getProgressSubscribers())
|
||||
.build();
|
||||
return super.enqueue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails
|
||||
*/
|
||||
private void setWorldBlock(int x, int y, int z, @Nonnull BaseBlock block, @Nonnull BlockVector2 blockVector2) {
|
||||
private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2) {
|
||||
try {
|
||||
BlockVector3 loc = BlockVector3.at(x, y, z);
|
||||
boolean lighting = false;
|
||||
|
@ -45,8 +45,9 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
|
||||
import org.bukkit.generator.ChunkGenerator.ChunkData;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class GenChunk extends ScopedQueueCoordinator {
|
||||
@ -65,7 +66,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
this.biomes = Biome.values();
|
||||
}
|
||||
|
||||
@Nullable public ChunkData getChunkData() {
|
||||
public @Nullable ChunkData getChunkData() {
|
||||
return this.chunkData;
|
||||
}
|
||||
|
||||
@ -74,11 +75,11 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
*
|
||||
* @param chunkData Bukkit ChunkData
|
||||
*/
|
||||
public void setChunkData(@Nonnull ChunkData chunkData) {
|
||||
public void setChunkData(@NonNull ChunkData chunkData) {
|
||||
this.chunkData = chunkData;
|
||||
}
|
||||
|
||||
@Nonnull public Chunk getChunk() {
|
||||
public @NonNull Chunk getChunk() {
|
||||
if (chunk == null) {
|
||||
World worldObj = BukkitUtil.getWorld(world);
|
||||
if (worldObj != null) {
|
||||
@ -93,7 +94,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
*
|
||||
* @param chunk Bukkit Chunk
|
||||
*/
|
||||
public void setChunk(@Nonnull Chunk chunk) {
|
||||
public void setChunk(@NonNull Chunk chunk) {
|
||||
this.chunk = chunk;
|
||||
}
|
||||
|
||||
@ -103,14 +104,15 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
*
|
||||
* @param wrap P2 ChunkWrapper
|
||||
*/
|
||||
public void setChunk(@Nonnull ChunkWrapper wrap) {
|
||||
public void setChunk(@NonNull ChunkWrapper wrap) {
|
||||
chunk = null;
|
||||
world = wrap.world;
|
||||
chunkX = wrap.x;
|
||||
chunkZ = wrap.z;
|
||||
}
|
||||
|
||||
@Override public void fillBiome(@Nonnull BiomeType biomeType) {
|
||||
@Override
|
||||
public void fillBiome(@NonNull BiomeType biomeType) {
|
||||
if (biomeGrid == null) {
|
||||
return;
|
||||
}
|
||||
@ -124,7 +126,8 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void setCuboid(@Nonnull Location pos1, @Nonnull Location pos2, @Nonnull BlockState block) {
|
||||
@Override
|
||||
public void setCuboid(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockState block) {
|
||||
if (result != null && pos1.getX() == 0 && pos1.getZ() == 0 && pos2.getX() == 15 && pos2.getZ() == 15) {
|
||||
for (int y = pos1.getY(); y <= pos2.getY(); y++) {
|
||||
int layer = y >> 4;
|
||||
@ -146,7 +149,8 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
chunkData.setRegion(minX, minY, minZ, maxX + 1, maxY + 1, maxZ + 1, BukkitAdapter.adapt(block));
|
||||
}
|
||||
|
||||
@Override public boolean setBiome(int x, int z, @Nonnull BiomeType biomeType) {
|
||||
@Override
|
||||
public boolean setBiome(int x, int z, @NonNull BiomeType biomeType) {
|
||||
return setBiome(x, z, BukkitAdapter.adapt(biomeType));
|
||||
}
|
||||
|
||||
@ -156,10 +160,9 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
* @param x Relative x location within the chunk (0 - 15)
|
||||
* @param z Relative z location within the chunk (0 - 15)
|
||||
* @param biome Bukkit biome to set
|
||||
*
|
||||
* @return if successful
|
||||
*/
|
||||
public boolean setBiome(int x, int z, @Nonnull Biome biome) {
|
||||
public boolean setBiome(int x, int z, @NonNull Biome biome) {
|
||||
if (this.biomeGrid != null) {
|
||||
for (int y = 0; y < 256; y++) {
|
||||
this.setBiome(x, y, z, biome);
|
||||
@ -169,7 +172,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean setBiome(int x, int y, int z, @Nonnull Biome biome) {
|
||||
public boolean setBiome(int x, int y, int z, @NonNull Biome biome) {
|
||||
if (this.biomeGrid != null) {
|
||||
this.biomeGrid.setBiome(x, y, z, biome);
|
||||
return true;
|
||||
@ -177,11 +180,13 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean setBlock(int x, int y, int z, @Nonnull Pattern pattern) {
|
||||
@Override
|
||||
public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) {
|
||||
return setBlock(x, y, z, PatternUtil.apply(Preconditions.checkNotNull(pattern, "Pattern may not be null"), x, y, z));
|
||||
}
|
||||
|
||||
@Override public boolean setBlock(int x, int y, int z, @Nonnull BlockState id) {
|
||||
@Override
|
||||
public boolean setBlock(int x, int y, int z, @NonNull BlockState id) {
|
||||
if (this.result == null) {
|
||||
this.chunkData.setBlock(x, y, z, BukkitAdapter.adapt(id));
|
||||
return true;
|
||||
@ -191,7 +196,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void storeCache(final int x, final int y, final int z, @Nonnull final BlockState id) {
|
||||
private void storeCache(final int x, final int y, final int z, final @NonNull BlockState id) {
|
||||
int i = y >> 4;
|
||||
BlockState[] v = this.result[i];
|
||||
if (v == null) {
|
||||
@ -201,7 +206,8 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
v[j] = id;
|
||||
}
|
||||
|
||||
@Override public boolean setBlock(int x, int y, int z, @Nonnull BaseBlock id) {
|
||||
@Override
|
||||
public boolean setBlock(int x, int y, int z, @NonNull BaseBlock id) {
|
||||
if (this.result == null) {
|
||||
this.chunkData.setBlock(x, y, z, BukkitAdapter.adapt(id));
|
||||
return true;
|
||||
@ -211,7 +217,8 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override @Nullable public BlockState getBlock(int x, int y, int z) {
|
||||
@Override
|
||||
public @Nullable BlockState getBlock(int x, int y, int z) {
|
||||
int i = y >> 4;
|
||||
if (result == null) {
|
||||
return BukkitBlockUtil.get(chunkData.getType(x, y, z));
|
||||
@ -232,19 +239,22 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
return chunk == null ? chunkZ : chunk.getZ();
|
||||
}
|
||||
|
||||
@Override @Nonnull public com.sk89q.worldedit.world.World getWorld() {
|
||||
@Override
|
||||
public com.sk89q.worldedit.world.@NonNull World getWorld() {
|
||||
return chunk == null ? BukkitAdapter.adapt(Bukkit.getWorld(world)) : BukkitAdapter.adapt(chunk.getWorld());
|
||||
}
|
||||
|
||||
@Override @Nonnull public Location getMax() {
|
||||
@Override
|
||||
public @NonNull Location getMax() {
|
||||
return Location.at(getWorld().getName(), 15 + (getX() << 4), 255, 15 + (getZ() << 4));
|
||||
}
|
||||
|
||||
@Override @Nonnull public Location getMin() {
|
||||
@Override
|
||||
public @NonNull Location getMin() {
|
||||
return Location.at(getWorld().getName(), getX() << 4, 0, getZ() << 4);
|
||||
}
|
||||
|
||||
@Nonnull public GenChunk clone() {
|
||||
public @NonNull GenChunk clone() {
|
||||
GenChunk toReturn = new GenChunk();
|
||||
if (this.result != null) {
|
||||
for (int i = 0; i < this.result.length; i++) {
|
||||
@ -258,4 +268,5 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
toReturn.chunkData = this.chunkData;
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,15 +32,16 @@ import com.plotsquared.core.queue.QueueCoordinator;
|
||||
import com.plotsquared.core.util.SchematicHandler;
|
||||
import com.plotsquared.core.util.WorldUtil;
|
||||
import com.sk89q.jnbt.CompoundTag;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
/**
|
||||
* Schematic Handler.
|
||||
*/
|
||||
@Singleton public class BukkitSchematicHandler extends SchematicHandler {
|
||||
@Singleton
|
||||
public class BukkitSchematicHandler extends SchematicHandler {
|
||||
|
||||
@Inject public BukkitSchematicHandler(@Nonnull final WorldUtil worldUtil, @Nonnull ProgressSubscriberFactory subscriberFactory) {
|
||||
@Inject
|
||||
public BukkitSchematicHandler(final @NonNull WorldUtil worldUtil, @NonNull ProgressSubscriberFactory subscriberFactory) {
|
||||
super(worldUtil, subscriberFactory);
|
||||
}
|
||||
|
||||
@ -48,4 +49,5 @@ import javax.annotation.Nonnull;
|
||||
public boolean restoreTile(QueueCoordinator queue, CompoundTag ct, int x, int y, int z) {
|
||||
return new StateWrapper(ct).restoreTag(queue.getWorld().getName(), x, y, z);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,11 +37,14 @@ import java.util.concurrent.CompletableFuture;
|
||||
public class BukkitChunkManager extends ChunkManager {
|
||||
|
||||
public static boolean isIn(CuboidRegion region, int x, int z) {
|
||||
return x >= region.getMinimumPoint().getX() && x <= region.getMaximumPoint().getX() && z >= region.getMinimumPoint().getZ() && z <= region
|
||||
return x >= region.getMinimumPoint().getX() && x <= region.getMaximumPoint().getX() && z >= region
|
||||
.getMinimumPoint()
|
||||
.getZ() && z <= region
|
||||
.getMaximumPoint().getZ();
|
||||
}
|
||||
|
||||
@Override public CompletableFuture<?> loadChunk(String world, BlockVector2 chunkLoc, boolean force) {
|
||||
@Override
|
||||
public CompletableFuture<?> loadChunk(String world, BlockVector2 chunkLoc, boolean force) {
|
||||
return PaperLib.getChunkAtAsync(BukkitUtil.getWorld(world), chunkLoc.getX(), chunkLoc.getZ(), force);
|
||||
}
|
||||
|
||||
|
@ -38,11 +38,17 @@ import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
@Singleton public class BukkitEconHandler extends EconHandler {
|
||||
@Singleton
|
||||
public class BukkitEconHandler extends EconHandler {
|
||||
|
||||
private Economy econ;
|
||||
|
||||
@Override public boolean init() {
|
||||
private static OfflinePlayer getBukkitOfflinePlayer(PlotPlayer<?> plotPlayer) {
|
||||
return ((BukkitPlayer) plotPlayer).player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean init() {
|
||||
if (this.econ == null) {
|
||||
setupEconomy();
|
||||
}
|
||||
@ -60,7 +66,8 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
}
|
||||
}
|
||||
|
||||
@Override public double getMoney(PlotPlayer<?> player) {
|
||||
@Override
|
||||
public double getMoney(PlotPlayer<?> player) {
|
||||
double bal = super.getMoney(player);
|
||||
if (Double.isNaN(bal)) {
|
||||
return this.econ.getBalance(getBukkitOfflinePlayer(player));
|
||||
@ -68,15 +75,18 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
return bal;
|
||||
}
|
||||
|
||||
@Override public void withdrawMoney(PlotPlayer<?> player, double amount) {
|
||||
@Override
|
||||
public void withdrawMoney(PlotPlayer<?> player, double amount) {
|
||||
this.econ.withdrawPlayer(getBukkitOfflinePlayer(player), amount);
|
||||
}
|
||||
|
||||
@Override public void depositMoney(PlotPlayer<?> player, double amount) {
|
||||
@Override
|
||||
public void depositMoney(PlotPlayer<?> player, double amount) {
|
||||
this.econ.depositPlayer(getBukkitOfflinePlayer(player), amount);
|
||||
}
|
||||
|
||||
@Override public void depositMoney(OfflinePlotPlayer player, double amount) {
|
||||
@Override
|
||||
public void depositMoney(OfflinePlotPlayer player, double amount) {
|
||||
this.econ.depositPlayer(((BukkitOfflinePlayer) player).player, amount);
|
||||
}
|
||||
|
||||
@ -95,12 +105,9 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public double getBalance(PlotPlayer<?> player) {
|
||||
@Override
|
||||
public double getBalance(PlotPlayer<?> player) {
|
||||
return this.econ.getBalance(getBukkitOfflinePlayer(player));
|
||||
}
|
||||
|
||||
private static OfflinePlayer getBukkitOfflinePlayer(PlotPlayer<?> plotPlayer) {
|
||||
return ((BukkitPlayer) plotPlayer).player;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -352,7 +352,8 @@ public class BukkitEntityUtil {
|
||||
if (EntityCategories.PROJECTILE.contains(entityType) || EntityCategories.OTHER
|
||||
.contains(entityType) || EntityCategories.HANGING.contains(entityType)) {
|
||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
||||
MiscCapFlag.MISC_CAP_UNLIMITED);
|
||||
MiscCapFlag.MISC_CAP_UNLIMITED
|
||||
);
|
||||
}
|
||||
|
||||
// Has to go go before vehicle as horses are both
|
||||
@ -361,18 +362,21 @@ public class BukkitEntityUtil {
|
||||
.contains(entityType) || EntityCategories.TAMEABLE.contains(entityType)) {
|
||||
return EntityUtil
|
||||
.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED, MobCapFlag.MOB_CAP_UNLIMITED,
|
||||
AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
||||
AnimalCapFlag.ANIMAL_CAP_UNLIMITED
|
||||
);
|
||||
}
|
||||
|
||||
if (EntityCategories.HOSTILE.contains(entityType)) {
|
||||
return EntityUtil
|
||||
.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED, MobCapFlag.MOB_CAP_UNLIMITED,
|
||||
HostileCapFlag.HOSTILE_CAP_UNLIMITED);
|
||||
HostileCapFlag.HOSTILE_CAP_UNLIMITED
|
||||
);
|
||||
}
|
||||
|
||||
if (EntityCategories.VEHICLE.contains(entityType)) {
|
||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
||||
VehicleCapFlag.VEHICLE_CAP_UNLIMITED);
|
||||
VehicleCapFlag.VEHICLE_CAP_UNLIMITED
|
||||
);
|
||||
}
|
||||
|
||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED);
|
||||
|
@ -47,39 +47,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@Singleton public class BukkitInventoryUtil extends InventoryUtil {
|
||||
|
||||
@Override public void open(PlotInventory inv) {
|
||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||
Inventory inventory = Bukkit.createInventory(null, inv.getLines() * 9,
|
||||
ChatColor.translateAlternateColorCodes('&', inv.getTitle()));
|
||||
PlotItemStack[] items = inv.getItems();
|
||||
for (int i = 0; i < inv.getLines() * 9; i++) {
|
||||
PlotItemStack item = items[i];
|
||||
if (item != null) {
|
||||
inventory.setItem(i, getItem(item));
|
||||
}
|
||||
}
|
||||
bp.player.openInventory(inventory);
|
||||
}
|
||||
|
||||
@Override public void close(PlotInventory inv) {
|
||||
if (!inv.isOpen()) {
|
||||
return;
|
||||
}
|
||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||
bp.player.closeInventory();
|
||||
}
|
||||
|
||||
@Override public void setItem(PlotInventory inv, int index, PlotItemStack item) {
|
||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||
InventoryView opened = bp.player.getOpenInventory();
|
||||
if (!inv.isOpen()) {
|
||||
return;
|
||||
}
|
||||
opened.setItem(index, getItem(item));
|
||||
bp.player.updateInventory();
|
||||
}
|
||||
@Singleton
|
||||
public class BukkitInventoryUtil extends InventoryUtil {
|
||||
|
||||
private static ItemStack getItem(PlotItemStack item) {
|
||||
if (item == null) {
|
||||
@ -108,6 +77,42 @@ import java.util.stream.IntStream;
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(PlotInventory inv) {
|
||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||
Inventory inventory = Bukkit.createInventory(null, inv.getLines() * 9,
|
||||
ChatColor.translateAlternateColorCodes('&', inv.getTitle())
|
||||
);
|
||||
PlotItemStack[] items = inv.getItems();
|
||||
for (int i = 0; i < inv.getLines() * 9; i++) {
|
||||
PlotItemStack item = items[i];
|
||||
if (item != null) {
|
||||
inventory.setItem(i, getItem(item));
|
||||
}
|
||||
}
|
||||
bp.player.openInventory(inventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(PlotInventory inv) {
|
||||
if (!inv.isOpen()) {
|
||||
return;
|
||||
}
|
||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||
bp.player.closeInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItem(PlotInventory inv, int index, PlotItemStack item) {
|
||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||
InventoryView opened = bp.player.getOpenInventory();
|
||||
if (!inv.isOpen()) {
|
||||
return;
|
||||
}
|
||||
opened.setItem(index, getItem(item));
|
||||
bp.player.updateInventory();
|
||||
}
|
||||
|
||||
public PlotItemStack getItem(ItemStack item) {
|
||||
if (item == null) {
|
||||
return null;
|
||||
@ -132,14 +137,16 @@ import java.util.stream.IntStream;
|
||||
return new PlotItemStack(id.name(), amount, name, lore);
|
||||
}
|
||||
|
||||
@Override public PlotItemStack[] getItems(PlotPlayer player) {
|
||||
@Override
|
||||
public PlotItemStack[] getItems(PlotPlayer player) {
|
||||
BukkitPlayer bp = (BukkitPlayer) player;
|
||||
PlayerInventory inv = bp.player.getInventory();
|
||||
return IntStream.range(0, 36).mapToObj(i -> getItem(inv.getItem(i)))
|
||||
.toArray(PlotItemStack[]::new);
|
||||
}
|
||||
|
||||
@Override public boolean isOpen(PlotInventory plotInventory) {
|
||||
@Override
|
||||
public boolean isOpen(PlotInventory plotInventory) {
|
||||
if (!plotInventory.isOpen()) {
|
||||
return false;
|
||||
}
|
||||
@ -152,4 +159,5 @@ import java.util.stream.IntStream;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -55,9 +55,9 @@ import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@ -75,18 +75,27 @@ public class BukkitRegionManager extends RegionManager {
|
||||
|
||||
private final GlobalBlockQueue blockQueue;
|
||||
|
||||
@Inject public BukkitRegionManager(@Nonnull WorldUtil worldUtil, @Nonnull GlobalBlockQueue blockQueue, @Nonnull
|
||||
ProgressSubscriberFactory subscriberFactory) {
|
||||
@Inject
|
||||
public BukkitRegionManager(
|
||||
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull
|
||||
ProgressSubscriberFactory subscriberFactory
|
||||
) {
|
||||
super(worldUtil, blockQueue, subscriberFactory);
|
||||
this.blockQueue = blockQueue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleClear(@Nonnull Plot plot, @Nullable Runnable whenDone, @Nonnull PlotManager manager, @Nullable PlotPlayer<?> player) {
|
||||
public boolean handleClear(
|
||||
@NonNull Plot plot,
|
||||
@Nullable Runnable whenDone,
|
||||
@NonNull PlotManager manager,
|
||||
@Nullable PlotPlayer<?> player
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override public int[] countEntities(@Nonnull Plot plot) {
|
||||
@Override
|
||||
public int[] countEntities(@NonNull Plot plot) {
|
||||
int[] existing = (int[]) plot.getMeta("EntityCount");
|
||||
if (existing != null && (System.currentTimeMillis() - (long) plot.getMeta("EntityCountTime") < 1000)) {
|
||||
return existing;
|
||||
@ -160,10 +169,13 @@ public class BukkitRegionManager extends RegionManager {
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override public boolean regenerateRegion(@Nonnull final Location pos1,
|
||||
@Nonnull final Location pos2,
|
||||
@Override
|
||||
public boolean regenerateRegion(
|
||||
final @NonNull Location pos1,
|
||||
final @NonNull Location pos2,
|
||||
final boolean ignoreAugment,
|
||||
@Nullable final Runnable whenDone) {
|
||||
final @Nullable Runnable whenDone
|
||||
) {
|
||||
final BukkitWorld world = new BukkitWorld((World) pos1.getWorld());
|
||||
|
||||
final int p1x = pos1.getX();
|
||||
@ -251,8 +263,11 @@ public class BukkitRegionManager extends RegionManager {
|
||||
}
|
||||
CuboidRegion currentPlotClear = RegionUtil.createRegion(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
|
||||
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
||||
AugmentedUtils.bypass(ignoreAugment, () -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ScopedQueueCoordinator>() {
|
||||
@Override public void run(ScopedQueueCoordinator value) {
|
||||
AugmentedUtils.bypass(
|
||||
ignoreAugment,
|
||||
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ScopedQueueCoordinator>() {
|
||||
@Override
|
||||
public void run(ScopedQueueCoordinator value) {
|
||||
Location min = value.getMin();
|
||||
int bx = min.getX();
|
||||
int bz = min.getZ();
|
||||
@ -279,7 +294,8 @@ public class BukkitRegionManager extends RegionManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
}, world.getName(), chunk));
|
||||
}, world.getName(), chunk)
|
||||
);
|
||||
//map.restoreBlocks(worldObj, 0, 0);
|
||||
map.restoreEntities(Bukkit.getWorld(world.getName()), 0, 0);
|
||||
});
|
||||
@ -289,7 +305,8 @@ public class BukkitRegionManager extends RegionManager {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public void clearAllEntities(@Nonnull Location pos1, @Nonnull Location pos2) {
|
||||
@Override
|
||||
public void clearAllEntities(@NonNull Location pos1, @NonNull Location pos2) {
|
||||
String world = pos1.getWorldName();
|
||||
|
||||
final World bukkitWorld = BukkitUtil.getWorld(world);
|
||||
@ -317,7 +334,7 @@ public class BukkitRegionManager extends RegionManager {
|
||||
}
|
||||
}
|
||||
|
||||
private void count(int[] count, @Nonnull Entity entity) {
|
||||
private void count(int[] count, @NonNull Entity entity) {
|
||||
final com.sk89q.worldedit.world.entity.EntityType entityType = BukkitAdapter.adapt(entity.getType());
|
||||
|
||||
if (EntityCategories.PLAYER.contains(entityType)) {
|
||||
@ -337,4 +354,5 @@ public class BukkitRegionManager extends RegionManager {
|
||||
}
|
||||
count[CAP_ENTITY]++;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -48,29 +48,34 @@ import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
|
||||
@Singleton public class BukkitSetupUtils extends SetupUtils {
|
||||
@Singleton
|
||||
public class BukkitSetupUtils extends SetupUtils {
|
||||
|
||||
private final PlotAreaManager plotAreaManager;
|
||||
private final YamlConfiguration worldConfiguration;
|
||||
private final File worldFile;
|
||||
|
||||
@Inject public BukkitSetupUtils(@Nonnull final PlotAreaManager plotAreaManager,
|
||||
@WorldConfig @Nonnull final YamlConfiguration worldConfiguration,
|
||||
@WorldFile @Nonnull final File worldFile) {
|
||||
@Inject
|
||||
public BukkitSetupUtils(
|
||||
final @NonNull PlotAreaManager plotAreaManager,
|
||||
@WorldConfig final @NonNull YamlConfiguration worldConfiguration,
|
||||
@WorldFile final @NonNull File worldFile
|
||||
) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.worldConfiguration = worldConfiguration;
|
||||
this.worldFile = worldFile;
|
||||
}
|
||||
|
||||
@Override public void updateGenerators() {
|
||||
@Override
|
||||
public void updateGenerators() {
|
||||
if (!SetupUtils.generators.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@ -97,7 +102,8 @@ import java.util.Objects;
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void unload(String worldName, boolean save) {
|
||||
@Override
|
||||
public void unload(String worldName, boolean save) {
|
||||
TaskManager.runTask(() -> {
|
||||
World world = Bukkit.getWorld(worldName);
|
||||
if (world == null) {
|
||||
@ -120,7 +126,8 @@ import java.util.Objects;
|
||||
});
|
||||
}
|
||||
|
||||
@Override public String setupWorld(PlotAreaBuilder builder) {
|
||||
@Override
|
||||
public String setupWorld(PlotAreaBuilder builder) {
|
||||
this.updateGenerators();
|
||||
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
||||
new ConfigurationNode[0] : builder.settingsNodesWrapper().getSettingsNodes();
|
||||
@ -233,7 +240,8 @@ import java.util.Objects;
|
||||
return builder.worldName();
|
||||
}
|
||||
|
||||
@Override public String getGenerator(PlotArea plotArea) {
|
||||
@Override
|
||||
public String getGenerator(PlotArea plotArea) {
|
||||
if (SetupUtils.generators.isEmpty()) {
|
||||
updateGenerators();
|
||||
}
|
||||
@ -253,4 +261,5 @@ import java.util.Objects;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -94,12 +94,12 @@ import org.bukkit.entity.Snowman;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
import org.bukkit.entity.WaterMob;
|
||||
import org.checkerframework.checker.index.qual.NonNegative;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nonnegative;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
@ -113,12 +113,10 @@ import java.util.stream.Stream;
|
||||
@Singleton
|
||||
public class BukkitUtil extends WorldUtil {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger("P2/" + BukkitUtil.class.getSimpleName());
|
||||
|
||||
public static final BukkitAudiences BUKKIT_AUDIENCES = BukkitAudiences.create(BukkitPlatform.getPlugin(BukkitPlatform.class));
|
||||
public static final LegacyComponentSerializer LEGACY_COMPONENT_SERIALIZER = LegacyComponentSerializer.legacySection();
|
||||
public static final MiniMessage MINI_MESSAGE = MiniMessage.builder().build();
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger("P2/" + BukkitUtil.class.getSimpleName());
|
||||
private final Collection<BlockType> tileEntityTypes = new HashSet<>();
|
||||
|
||||
/**
|
||||
@ -127,7 +125,7 @@ public class BukkitUtil extends WorldUtil {
|
||||
* @param player Bukkit player
|
||||
* @return PlotSquared player
|
||||
*/
|
||||
@Nonnull public static BukkitPlayer adapt(@Nonnull final Player player) {
|
||||
public @NonNull static BukkitPlayer adapt(final @NonNull Player player) {
|
||||
final PlayerManager<?, ?> playerManager = PlotSquared.platform().playerManager();
|
||||
return ((BukkitPlayerManager) playerManager).getPlayer(player);
|
||||
}
|
||||
@ -139,10 +137,13 @@ public class BukkitUtil extends WorldUtil {
|
||||
* @param location Bukkit location
|
||||
* @return PlotSquared location
|
||||
*/
|
||||
@Nonnull public static Location adapt(@Nonnull final org.bukkit.Location location) {
|
||||
public @NonNull static Location adapt(final org.bukkit.@NonNull Location location) {
|
||||
return Location
|
||||
.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()), MathMan.roundInt(location.getX()), MathMan.roundInt(location.getY()),
|
||||
MathMan.roundInt(location.getZ()));
|
||||
.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()),
|
||||
MathMan.roundInt(location.getX()),
|
||||
MathMan.roundInt(location.getY()),
|
||||
MathMan.roundInt(location.getZ())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -152,10 +153,15 @@ public class BukkitUtil extends WorldUtil {
|
||||
* @param location Bukkit location
|
||||
* @return PlotSquared location
|
||||
*/
|
||||
@Nonnull public static Location adaptComplete(@Nonnull final org.bukkit.Location location) {
|
||||
public @NonNull static Location adaptComplete(final org.bukkit.@NonNull Location location) {
|
||||
return Location
|
||||
.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()), MathMan.roundInt(location.getX()), MathMan.roundInt(location.getY()),
|
||||
MathMan.roundInt(location.getZ()), location.getYaw(), location.getPitch());
|
||||
.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()),
|
||||
MathMan.roundInt(location.getX()),
|
||||
MathMan.roundInt(location.getY()),
|
||||
MathMan.roundInt(location.getZ()),
|
||||
location.getYaw(),
|
||||
location.getPitch()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -165,8 +171,13 @@ public class BukkitUtil extends WorldUtil {
|
||||
* @param location PlotSquared location
|
||||
* @return Bukkit location
|
||||
*/
|
||||
@Nonnull public static org.bukkit.Location adapt(@Nonnull final Location location) {
|
||||
return new org.bukkit.Location((World) location.getWorld().getPlatformWorld(), location.getX(), location.getY(), location.getZ());
|
||||
public static org.bukkit.@NonNull Location adapt(final @NonNull Location location) {
|
||||
return new org.bukkit.Location(
|
||||
(World) location.getWorld().getPlatformWorld(),
|
||||
location.getX(),
|
||||
location.getY(),
|
||||
location.getZ()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -175,20 +186,25 @@ public class BukkitUtil extends WorldUtil {
|
||||
* @param string World name
|
||||
* @return World if it exists, or {@code null}
|
||||
*/
|
||||
@Nullable public static World getWorld(@Nonnull final String string) {
|
||||
public @Nullable static World getWorld(final @NonNull String string) {
|
||||
return Bukkit.getWorld(string);
|
||||
}
|
||||
|
||||
private static void ensureLoaded(@Nonnull final String world, final int x, final int z, @Nonnull final Consumer<Chunk> chunkConsumer) {
|
||||
private static void ensureLoaded(
|
||||
final @NonNull String world,
|
||||
final int x,
|
||||
final int z,
|
||||
final @NonNull Consumer<Chunk> chunkConsumer
|
||||
) {
|
||||
PaperLib.getChunkAtAsync(Objects.requireNonNull(getWorld(world)), x >> 4, z >> 4, true)
|
||||
.thenAccept(chunk -> ensureMainThread(chunkConsumer, chunk));
|
||||
}
|
||||
|
||||
private static void ensureLoaded(@Nonnull final Location location, @Nonnull final Consumer<Chunk> chunkConsumer) {
|
||||
private static void ensureLoaded(final @NonNull Location location, final @NonNull Consumer<Chunk> chunkConsumer) {
|
||||
PaperLib.getChunkAtAsync(adapt(location), true).thenAccept(chunk -> ensureMainThread(chunkConsumer, chunk));
|
||||
}
|
||||
|
||||
private static <T> void ensureMainThread(@Nonnull final Consumer<T> consumer, @Nonnull final T value) {
|
||||
private static <T> void ensureMainThread(final @NonNull Consumer<T> consumer, final @NonNull T value) {
|
||||
if (Bukkit.isPrimaryThread()) {
|
||||
consumer.accept(value);
|
||||
} else {
|
||||
@ -196,7 +212,8 @@ public class BukkitUtil extends WorldUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean isBlockSame(@Nonnull final BlockState block1, @Nonnull final BlockState block2) {
|
||||
@Override
|
||||
public boolean isBlockSame(final @NonNull BlockState block1, final @NonNull BlockState block2) {
|
||||
if (block1.equals(block2)) {
|
||||
return true;
|
||||
}
|
||||
@ -205,19 +222,23 @@ public class BukkitUtil extends WorldUtil {
|
||||
return mat1 == mat2;
|
||||
}
|
||||
|
||||
@Override public boolean isWorld(@Nonnull final String worldName) {
|
||||
@Override
|
||||
public boolean isWorld(final @NonNull String worldName) {
|
||||
return getWorld(worldName) != null;
|
||||
}
|
||||
|
||||
@Override public void getBiome(@Nonnull final String world, final int x, final int z, @Nonnull final Consumer<BiomeType> result) {
|
||||
@Override
|
||||
public void getBiome(final @NonNull String world, final int x, final int z, final @NonNull Consumer<BiomeType> result) {
|
||||
ensureLoaded(world, x, z, chunk -> result.accept(BukkitAdapter.adapt(getWorld(world).getBiome(x, z))));
|
||||
}
|
||||
|
||||
@Override @Nonnull public BiomeType getBiomeSynchronous(@Nonnull final String world, final int x, final int z) {
|
||||
@Override
|
||||
public @NonNull BiomeType getBiomeSynchronous(final @NonNull String world, final int x, final int z) {
|
||||
return BukkitAdapter.adapt(Objects.requireNonNull(getWorld(world)).getBiome(x, z));
|
||||
}
|
||||
|
||||
@Override public void getHighestBlock(@Nonnull final String world, final int x, final int z, @Nonnull final IntConsumer result) {
|
||||
@Override
|
||||
public void getHighestBlock(final @NonNull String world, final int x, final int z, final @NonNull IntConsumer result) {
|
||||
ensureLoaded(world, x, z, chunk -> {
|
||||
final World bukkitWorld = Objects.requireNonNull(getWorld(world));
|
||||
// Skip top and bottom block
|
||||
@ -243,7 +264,9 @@ public class BukkitUtil extends WorldUtil {
|
||||
});
|
||||
}
|
||||
|
||||
@Override @Nonnegative public int getHighestBlockSynchronous(@Nonnull final String world, final int x, final int z) {
|
||||
@Override
|
||||
@NonNegative
|
||||
public int getHighestBlockSynchronous(final @NonNull String world, final int x, final int z) {
|
||||
final World bukkitWorld = Objects.requireNonNull(getWorld(world));
|
||||
// Skip top and bottom block
|
||||
int air = 1;
|
||||
@ -265,8 +288,13 @@ public class BukkitUtil extends WorldUtil {
|
||||
return bukkitWorld.getMaxHeight() - 1;
|
||||
}
|
||||
|
||||
@Override @Nonnull public String[] getSignSynchronous(@Nonnull final Location location) {
|
||||
Block block = Objects.requireNonNull(getWorld(location.getWorldName())).getBlockAt(location.getX(), location.getY(), location.getZ());
|
||||
@Override
|
||||
public @NonNull String[] getSignSynchronous(final @NonNull Location location) {
|
||||
Block block = Objects.requireNonNull(getWorld(location.getWorldName())).getBlockAt(
|
||||
location.getX(),
|
||||
location.getY(),
|
||||
location.getZ()
|
||||
);
|
||||
try {
|
||||
return TaskManager.getPlatformImplementation().sync(() -> {
|
||||
if (block.getState() instanceof Sign) {
|
||||
@ -281,28 +309,34 @@ public class BukkitUtil extends WorldUtil {
|
||||
return new String[0];
|
||||
}
|
||||
|
||||
@Override @Nonnull public Location getSpawn(@Nonnull final String world) {
|
||||
@Override
|
||||
public @NonNull Location getSpawn(final @NonNull String world) {
|
||||
final org.bukkit.Location temp = getWorld(world).getSpawnLocation();
|
||||
return Location.at(world, temp.getBlockX(), temp.getBlockY(), temp.getBlockZ(), temp.getYaw(), temp.getPitch());
|
||||
}
|
||||
|
||||
@Override public void setSpawn(@Nonnull final Location location) {
|
||||
@Override
|
||||
public void setSpawn(final @NonNull Location location) {
|
||||
final World world = getWorld(location.getWorldName());
|
||||
if (world != null) {
|
||||
world.setSpawnLocation(location.getX(), location.getY(), location.getZ());
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void saveWorld(@Nonnull final String worldName) {
|
||||
@Override
|
||||
public void saveWorld(final @NonNull String worldName) {
|
||||
final World world = getWorld(worldName);
|
||||
if (world != null) {
|
||||
world.save();
|
||||
}
|
||||
}
|
||||
|
||||
@Override @SuppressWarnings("deprecation")
|
||||
public void setSign(@Nonnull final Location location, @Nonnull final Caption[] lines,
|
||||
@Nonnull final Template ... replacements) {
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSign(
|
||||
final @NonNull Location location, final @NonNull Caption[] lines,
|
||||
final @NonNull Template... replacements
|
||||
) {
|
||||
ensureLoaded(location.getWorldName(), location.getX(), location.getZ(), chunk -> {
|
||||
final World world = getWorld(location.getWorldName());
|
||||
final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ());
|
||||
@ -341,12 +375,18 @@ public class BukkitUtil extends WorldUtil {
|
||||
});
|
||||
}
|
||||
|
||||
@Override @Nonnull public StringComparison<BlockState>.ComparisonResult getClosestBlock(@Nonnull String name) {
|
||||
@Override
|
||||
public @NonNull StringComparison<BlockState>.ComparisonResult getClosestBlock(@NonNull String name) {
|
||||
BlockState state = BlockUtil.get(name);
|
||||
return new StringComparison<BlockState>().new ComparisonResult(1, state);
|
||||
}
|
||||
|
||||
@Override public void setBiomes(@Nonnull final String worldName, @Nonnull final CuboidRegion region, @Nonnull final BiomeType biomeType) {
|
||||
@Override
|
||||
public void setBiomes(
|
||||
final @NonNull String worldName,
|
||||
final @NonNull CuboidRegion region,
|
||||
final @NonNull BiomeType biomeType
|
||||
) {
|
||||
final World world = getWorld(worldName);
|
||||
if (world == null) {
|
||||
logger.warn("An error occurred while setting the biome because the world was null", new RuntimeException());
|
||||
@ -362,15 +402,18 @@ public class BukkitUtil extends WorldUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnull public com.sk89q.worldedit.world.World getWeWorld(@Nonnull final String world) {
|
||||
@Override
|
||||
public com.sk89q.worldedit.world.@NonNull World getWeWorld(final @NonNull String world) {
|
||||
return new BukkitWorld(Bukkit.getWorld(world));
|
||||
}
|
||||
|
||||
@Override public void refreshChunk(int x, int z, String world) {
|
||||
@Override
|
||||
public void refreshChunk(int x, int z, String world) {
|
||||
Bukkit.getWorld(world).refreshChunk(x, z);
|
||||
}
|
||||
|
||||
@Override public void getBlock(@Nonnull final Location location, @Nonnull final Consumer<BlockState> result) {
|
||||
@Override
|
||||
public void getBlock(final @NonNull Location location, final @NonNull Consumer<BlockState> result) {
|
||||
ensureLoaded(location, chunk -> {
|
||||
final World world = getWorld(location.getWorldName());
|
||||
final Block block = Objects.requireNonNull(world).getBlockAt(location.getX(), location.getY(), location.getZ());
|
||||
@ -378,29 +421,37 @@ public class BukkitUtil extends WorldUtil {
|
||||
});
|
||||
}
|
||||
|
||||
@Override @Nonnull public BlockState getBlockSynchronous(@Nonnull final Location location) {
|
||||
@Override
|
||||
public @NonNull BlockState getBlockSynchronous(final @NonNull Location location) {
|
||||
final World world = getWorld(location.getWorldName());
|
||||
final Block block = Objects.requireNonNull(world).getBlockAt(location.getX(), location.getY(), location.getZ());
|
||||
return Objects.requireNonNull(BukkitAdapter.asBlockType(block.getType())).getDefaultState();
|
||||
}
|
||||
|
||||
@Override @Nonnegative public double getHealth(@Nonnull final PlotPlayer player) {
|
||||
@Override
|
||||
@NonNegative
|
||||
public double getHealth(final @NonNull PlotPlayer player) {
|
||||
return Objects.requireNonNull(Bukkit.getPlayer(player.getUUID())).getHealth();
|
||||
}
|
||||
|
||||
@Override @Nonnegative public int getFoodLevel(@Nonnull final PlotPlayer<?> player) {
|
||||
@Override
|
||||
@NonNegative
|
||||
public int getFoodLevel(final @NonNull PlotPlayer<?> player) {
|
||||
return Objects.requireNonNull(Bukkit.getPlayer(player.getUUID())).getFoodLevel();
|
||||
}
|
||||
|
||||
@Override public void setHealth(@Nonnull final PlotPlayer<?> player, @Nonnegative final double health) {
|
||||
@Override
|
||||
public void setHealth(final @NonNull PlotPlayer<?> player, @NonNegative final double health) {
|
||||
Objects.requireNonNull(Bukkit.getPlayer(player.getUUID())).setHealth(health);
|
||||
}
|
||||
|
||||
@Override public void setFoodLevel(@Nonnull final PlotPlayer<?> player, @Nonnegative final int foodLevel) {
|
||||
@Override
|
||||
public void setFoodLevel(final @NonNull PlotPlayer<?> player, @NonNegative final int foodLevel) {
|
||||
Bukkit.getPlayer(player.getUUID()).setFoodLevel(foodLevel);
|
||||
}
|
||||
|
||||
@Override @Nonnull public Set<com.sk89q.worldedit.world.entity.EntityType> getTypesInCategory(@Nonnull final String category) {
|
||||
@Override
|
||||
public @NonNull Set<com.sk89q.worldedit.world.entity.EntityType> getTypesInCategory(final @NonNull String category) {
|
||||
final Collection<Class<?>> allowedInterfaces = new HashSet<>();
|
||||
switch (category) {
|
||||
case "animal": {
|
||||
@ -480,7 +531,8 @@ public class BukkitUtil extends WorldUtil {
|
||||
return types;
|
||||
}
|
||||
|
||||
@Override @Nonnull public Collection<BlockType> getTileEntityTypes() {
|
||||
@Override
|
||||
public @NonNull Collection<BlockType> getTileEntityTypes() {
|
||||
if (this.tileEntityTypes.isEmpty()) {
|
||||
// Categories
|
||||
tileEntityTypes.addAll(BlockCategories.BANNERS.getAll());
|
||||
@ -489,22 +541,59 @@ public class BukkitUtil extends WorldUtil {
|
||||
tileEntityTypes.addAll(BlockCategories.FLOWER_POTS.getAll());
|
||||
// Individual Types
|
||||
// Add these from strings
|
||||
Stream.of("barrel", "beacon", "beehive", "bee_nest", "bell", "blast_furnace", "brewing_stand", "campfire", "chest", "ender_chest",
|
||||
"trapped_chest", "command_block", "end_gateway", "hopper", "jigsaw", "jubekox", "lectern", "note_block", "black_shulker_box",
|
||||
"blue_shulker_box", "brown_shulker_box", "cyan_shulker_box", "gray_shulker_box", "green_shulker_box", "light_blue_shulker_box",
|
||||
"light_gray_shulker_box", "lime_shulker_box", "magenta_shulker_box", "orange_shulker_box", "pink_shulker_box", "purple_shulker_box",
|
||||
"red_shulker_box", "shulker_box", "white_shulker_box", "yellow_shulker_box", "smoker", "structure_block", "structure_void")
|
||||
Stream.of("barrel",
|
||||
"beacon",
|
||||
"beehive",
|
||||
"bee_nest",
|
||||
"bell",
|
||||
"blast_furnace",
|
||||
"brewing_stand",
|
||||
"campfire",
|
||||
"chest",
|
||||
"ender_chest",
|
||||
"trapped_chest",
|
||||
"command_block",
|
||||
"end_gateway",
|
||||
"hopper",
|
||||
"jigsaw",
|
||||
"jubekox",
|
||||
"lectern",
|
||||
"note_block",
|
||||
"black_shulker_box",
|
||||
"blue_shulker_box",
|
||||
"brown_shulker_box",
|
||||
"cyan_shulker_box",
|
||||
"gray_shulker_box",
|
||||
"green_shulker_box",
|
||||
"light_blue_shulker_box",
|
||||
"light_gray_shulker_box",
|
||||
"lime_shulker_box",
|
||||
"magenta_shulker_box",
|
||||
"orange_shulker_box",
|
||||
"pink_shulker_box",
|
||||
"purple_shulker_box",
|
||||
"red_shulker_box",
|
||||
"shulker_box",
|
||||
"white_shulker_box",
|
||||
"yellow_shulker_box",
|
||||
"smoker",
|
||||
"structure_block",
|
||||
"structure_void"
|
||||
)
|
||||
.map(BlockTypes::get).filter(Objects::nonNull).forEach(tileEntityTypes::add);
|
||||
}
|
||||
return this.tileEntityTypes;
|
||||
}
|
||||
|
||||
@Override @Nonnegative public int getTileEntityCount(@Nonnull final String world, @Nonnull final BlockVector2 chunk) {
|
||||
@Override
|
||||
@NonNegative
|
||||
public int getTileEntityCount(final @NonNull String world, final @NonNull BlockVector2 chunk) {
|
||||
return Objects.requireNonNull(getWorld(world)).
|
||||
getChunkAt(chunk.getBlockX(), chunk.getBlockZ()).getTileEntities().length;
|
||||
}
|
||||
|
||||
@Override public Set<BlockVector2> getChunkChunks(String world) {
|
||||
@Override
|
||||
public Set<BlockVector2> getChunkChunks(String world) {
|
||||
Set<BlockVector2> chunks = super.getChunkChunks(world);
|
||||
if (Bukkit.isPrimaryThread()) {
|
||||
for (Chunk chunk : Objects.requireNonNull(Bukkit.getWorld(world)).getLoadedChunks()) {
|
||||
|
@ -28,8 +28,8 @@ package com.plotsquared.bukkit.util;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.plotsquared.core.location.World;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -49,7 +49,7 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
||||
* @param worldName World name
|
||||
* @return World instance
|
||||
*/
|
||||
@Nonnull public static BukkitWorld of(@Nonnull final String worldName) {
|
||||
public @NonNull static BukkitWorld of(final @NonNull String worldName) {
|
||||
final org.bukkit.World bukkitWorld = Bukkit.getWorld(worldName);
|
||||
if (bukkitWorld == null) {
|
||||
throw new IllegalArgumentException(String.format("There is no world with the name '%s'", worldName));
|
||||
@ -63,7 +63,7 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
||||
* @param world Bukkit world
|
||||
* @return World instance
|
||||
*/
|
||||
@Nonnull public static BukkitWorld of(final org.bukkit.World world) {
|
||||
public @NonNull static BukkitWorld of(final org.bukkit.World world) {
|
||||
BukkitWorld bukkitWorld = worldMap.get(world.getName());
|
||||
if (bukkitWorld != null && bukkitWorld.getPlatformWorld().equals(world)) {
|
||||
return bukkitWorld;
|
||||
@ -73,11 +73,13 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
||||
return bukkitWorld;
|
||||
}
|
||||
|
||||
@Override public org.bukkit.World getPlatformWorld() {
|
||||
@Override
|
||||
public org.bukkit.World getPlatformWorld() {
|
||||
return this.world;
|
||||
}
|
||||
|
||||
@Override @Nonnull public String getName() {
|
||||
@Override
|
||||
public @NonNull String getName() {
|
||||
return this.world.getName();
|
||||
}
|
||||
|
||||
@ -113,4 +115,5 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
||||
public String toString() {
|
||||
return "BukkitWorld(world=" + this.world + ")";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -96,8 +96,10 @@ public class ContentMap {
|
||||
saveEntitiesIn(chunk, region, 0, 0, false);
|
||||
}
|
||||
|
||||
void saveEntitiesIn(Chunk chunk, CuboidRegion region, int offsetX, int offsetZ,
|
||||
boolean delete) {
|
||||
void saveEntitiesIn(
|
||||
Chunk chunk, CuboidRegion region, int offsetX, int offsetZ,
|
||||
boolean delete
|
||||
) {
|
||||
for (Entity entity : chunk.getEntities()) {
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
int x = location.getX();
|
||||
@ -143,4 +145,5 @@ public class ContentMap {
|
||||
PlotLoc loc = new PlotLoc(x + offsetX, z + offsetZ);
|
||||
this.allBlocks.put(loc, ids);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -75,4 +75,5 @@ public class JavaVersionCheck {
|
||||
logger.error("************************************************************");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -74,4 +74,5 @@ public class SetGenCB {
|
||||
PlotSquared.get()
|
||||
.loadWorld(world.getName(), PlotSquared.platform().getGenerator(world.getName(), null));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -55,7 +55,8 @@ public class UpdateUtility implements Listener {
|
||||
public final JavaPlugin javaPlugin;
|
||||
private boolean notify = true;
|
||||
|
||||
@Inject public UpdateUtility(final JavaPlugin javaPlugin) {
|
||||
@Inject
|
||||
public UpdateUtility(final JavaPlugin javaPlugin) {
|
||||
this.javaPlugin = javaPlugin;
|
||||
internalVersion = PlotSquared.get().getVersion();
|
||||
}
|
||||
@ -79,7 +80,8 @@ public class UpdateUtility implements Listener {
|
||||
if (internalVersion.isLaterVersion(spigotVersion)) {
|
||||
logger.info("There appears to be a PlotSquared update available!");
|
||||
logger.info("You are running version {}, the latest version is {}",
|
||||
internalVersion.versionString(), spigotVersion);
|
||||
internalVersion.versionString(), spigotVersion
|
||||
);
|
||||
logger.info("https://www.spigotmc.org/resources/77506/updates");
|
||||
hasUpdate = true;
|
||||
if (Settings.UpdateChecker.NOTIFY_ONCE) {
|
||||
@ -95,4 +97,5 @@ public class UpdateUtility implements Listener {
|
||||
private void cancelTask() {
|
||||
Bukkit.getScheduler().runTaskLater(javaPlugin, () -> task.cancel(), 20L);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,21 +27,22 @@ package com.plotsquared.bukkit.util.task;
|
||||
|
||||
import com.plotsquared.core.util.task.PlotSquaredTask;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
/**
|
||||
* Bukkit implementation of {@link PlotSquaredTask}
|
||||
*/
|
||||
public final class BukkitPlotSquaredTask extends BukkitRunnable implements PlotSquaredTask {
|
||||
|
||||
@Nonnull private final Runnable runnable;
|
||||
@NonNull
|
||||
private final Runnable runnable;
|
||||
|
||||
public BukkitPlotSquaredTask(@Nonnull final Runnable runnable) {
|
||||
public BukkitPlotSquaredTask(final @NonNull Runnable runnable) {
|
||||
this.runnable = runnable;
|
||||
}
|
||||
|
||||
@Override public void runTask() {
|
||||
@Override
|
||||
public void runTask() {
|
||||
this.runnable.run();
|
||||
}
|
||||
|
||||
|
@ -33,8 +33,8 @@ import com.plotsquared.core.util.task.PlotSquaredTask;
|
||||
import com.plotsquared.core.util.task.TaskManager;
|
||||
import com.plotsquared.core.util.task.TaskTime;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@ -43,20 +43,26 @@ import java.util.concurrent.TimeUnit;
|
||||
* Bukkit implementation of {@link TaskManager} using
|
||||
* by {@link org.bukkit.scheduler.BukkitScheduler} and {@link BukkitPlotSquaredTask}
|
||||
*/
|
||||
@Singleton public class BukkitTaskManager extends TaskManager {
|
||||
@Singleton
|
||||
public class BukkitTaskManager extends TaskManager {
|
||||
|
||||
private final BukkitPlatform bukkitMain;
|
||||
private final TaskTime.TimeConverter timeConverter;
|
||||
|
||||
@Inject public BukkitTaskManager(@Nonnull final BukkitPlatform bukkitMain,
|
||||
@Nonnull final TaskTime.TimeConverter timeConverter) {
|
||||
@Inject
|
||||
public BukkitTaskManager(
|
||||
final @NonNull BukkitPlatform bukkitMain,
|
||||
final TaskTime.@NonNull TimeConverter timeConverter
|
||||
) {
|
||||
this.bukkitMain = bukkitMain;
|
||||
this.timeConverter = timeConverter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotSquaredTask taskRepeat(@Nonnull final Runnable runnable,
|
||||
@Nonnull final TaskTime taskTime) {
|
||||
public PlotSquaredTask taskRepeat(
|
||||
final @NonNull Runnable runnable,
|
||||
final @NonNull TaskTime taskTime
|
||||
) {
|
||||
final long ticks = this.timeConverter.toTicks(taskTime);
|
||||
final BukkitPlotSquaredTask bukkitPlotSquaredTask = new BukkitPlotSquaredTask(runnable);
|
||||
bukkitPlotSquaredTask.runTaskTimer(this.bukkitMain, ticks, ticks);
|
||||
@ -64,15 +70,18 @@ import java.util.concurrent.TimeUnit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotSquaredTask taskRepeatAsync(@Nonnull final Runnable runnable,
|
||||
@Nonnull final TaskTime taskTime) {
|
||||
public PlotSquaredTask taskRepeatAsync(
|
||||
final @NonNull Runnable runnable,
|
||||
final @NonNull TaskTime taskTime
|
||||
) {
|
||||
final long ticks = this.timeConverter.toTicks(taskTime);
|
||||
final BukkitPlotSquaredTask bukkitPlotSquaredTask = new BukkitPlotSquaredTask(runnable);
|
||||
bukkitPlotSquaredTask.runTaskTimerAsynchronously(this.bukkitMain, ticks, ticks);
|
||||
return bukkitPlotSquaredTask;
|
||||
}
|
||||
|
||||
@Override public void taskAsync(@Nonnull final Runnable runnable) {
|
||||
@Override
|
||||
public void taskAsync(final @NonNull Runnable runnable) {
|
||||
if (this.bukkitMain.isEnabled()) {
|
||||
new BukkitPlotSquaredTask(runnable).runTaskAsynchronously(this.bukkitMain);
|
||||
} else {
|
||||
@ -80,29 +89,38 @@ import java.util.concurrent.TimeUnit;
|
||||
}
|
||||
}
|
||||
|
||||
@Override public <T> T sync(@Nonnull final Callable<T> function, final int timeout) throws Exception {
|
||||
@Override
|
||||
public <T> T sync(final @NonNull Callable<T> function, final int timeout) throws Exception {
|
||||
if (PlotSquared.get().isMainThread(Thread.currentThread())) {
|
||||
return function.call();
|
||||
}
|
||||
return this.callMethodSync(function).get(timeout, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
@Override public <T> Future<T> callMethodSync(@Nonnull final Callable<T> method) {
|
||||
@Override
|
||||
public <T> Future<T> callMethodSync(final @NonNull Callable<T> method) {
|
||||
return Bukkit.getScheduler().callSyncMethod(this.bukkitMain, method);
|
||||
}
|
||||
|
||||
@Override public void task(@Nonnull final Runnable runnable) {
|
||||
@Override
|
||||
public void task(final @NonNull Runnable runnable) {
|
||||
new BukkitPlotSquaredTask(runnable).runTask(this.bukkitMain);
|
||||
}
|
||||
|
||||
@Override public void taskLater(@Nonnull final Runnable runnable,
|
||||
@Nonnull final TaskTime taskTime) {
|
||||
@Override
|
||||
public void taskLater(
|
||||
final @NonNull Runnable runnable,
|
||||
final @NonNull TaskTime taskTime
|
||||
) {
|
||||
final long delay = this.timeConverter.toTicks(taskTime);
|
||||
new BukkitPlotSquaredTask(runnable).runTaskLater(this.bukkitMain, delay);
|
||||
}
|
||||
|
||||
@Override public void taskLaterAsync(@Nonnull final Runnable runnable,
|
||||
@Nonnull final TaskTime taskTime) {
|
||||
@Override
|
||||
public void taskLaterAsync(
|
||||
final @NonNull Runnable runnable,
|
||||
final @NonNull TaskTime taskTime
|
||||
) {
|
||||
final long delay = this.timeConverter.toTicks(taskTime);
|
||||
new BukkitPlotSquaredTask(runnable).runTaskLaterAsynchronously(this.bukkitMain, delay);
|
||||
}
|
||||
|
@ -27,8 +27,7 @@ package com.plotsquared.bukkit.util.task;
|
||||
|
||||
import com.plotsquared.core.util.task.TaskTime;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import javax.annotation.Nonnegative;
|
||||
import org.checkerframework.checker.index.qual.NonNegative;
|
||||
|
||||
/**
|
||||
* Time converter that uses the server MSPT count to convert between
|
||||
@ -38,11 +37,13 @@ public final class PaperTimeConverter implements TaskTime.TimeConverter {
|
||||
|
||||
private static final long MIN_MS_PER_TICKS = 50L;
|
||||
|
||||
@Override public long msToTicks(@Nonnegative final long ms) {
|
||||
@Override
|
||||
public long msToTicks(@NonNegative final long ms) {
|
||||
return Math.max(1L, (long) (ms / Math.max(MIN_MS_PER_TICKS, Bukkit.getAverageTickTime())));
|
||||
}
|
||||
|
||||
@Override public long ticksToMs(@Nonnegative final long ticks) {
|
||||
@Override
|
||||
public long ticksToMs(@NonNegative final long ticks) {
|
||||
return Math.max(1L, (long) (ticks * Math.max(MIN_MS_PER_TICKS, Bukkit.getAverageTickTime())));
|
||||
}
|
||||
|
||||
|
@ -26,8 +26,7 @@
|
||||
package com.plotsquared.bukkit.util.task;
|
||||
|
||||
import com.plotsquared.core.util.task.TaskTime;
|
||||
|
||||
import javax.annotation.Nonnegative;
|
||||
import org.checkerframework.checker.index.qual.NonNegative;
|
||||
|
||||
/**
|
||||
* Naive time converter that assumes that all ticks are 50 milliseconds
|
||||
@ -36,11 +35,13 @@ public final class SpigotTimeConverter implements TaskTime.TimeConverter {
|
||||
|
||||
private static final long MS_PER_TICKS = 50L;
|
||||
|
||||
@Override public long msToTicks(@Nonnegative final long ms) {
|
||||
@Override
|
||||
public long msToTicks(@NonNegative final long ms) {
|
||||
return Math.max(1L, ms / MS_PER_TICKS);
|
||||
}
|
||||
|
||||
@Override public long ticksToMs(@Nonnegative final long ticks) {
|
||||
@Override
|
||||
public long ticksToMs(@NonNegative final long ticks) {
|
||||
return Math.max(1L, ticks * MS_PER_TICKS);
|
||||
}
|
||||
|
||||
|
@ -29,8 +29,8 @@ import com.earth2me.essentials.Essentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import com.plotsquared.core.uuid.UUIDMapping;
|
||||
import com.plotsquared.core.uuid.UUIDService;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -47,11 +47,13 @@ public class EssentialsUUIDService implements UUIDService {
|
||||
this.essentials = Essentials.getPlugin(Essentials.class);
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getNames(@Nonnull final List<UUID> uuids) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getNames(final @NonNull List<UUID> uuids) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getUUIDs(@Nonnull final List<String> usernames) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getUUIDs(final @NonNull List<String> usernames) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(usernames.size());
|
||||
for (final String username : usernames) {
|
||||
try {
|
||||
@ -62,7 +64,8 @@ public class EssentialsUUIDService implements UUIDService {
|
||||
mappings.add(new UUIDMapping(uuid, username));
|
||||
}
|
||||
}
|
||||
} catch (final Exception ignored){}
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
}
|
||||
return mappings;
|
||||
}
|
||||
|
@ -31,8 +31,8 @@ import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.model.user.UserManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@ -53,7 +53,8 @@ public class LuckPermsUUIDService implements UUIDService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getNames(@Nonnull final List<UUID> uuids) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getNames(final @NonNull List<UUID> uuids) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(uuids.size());
|
||||
final UserManager userManager = this.luckPerms.getUserManager();
|
||||
for (final UUID uuid : uuids) {
|
||||
@ -62,12 +63,14 @@ public class LuckPermsUUIDService implements UUIDService {
|
||||
if (username != null) {
|
||||
mappings.add(new UUIDMapping(uuid, username));
|
||||
}
|
||||
} catch (final Exception ignored) {}
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
}
|
||||
return mappings;
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getUUIDs(@Nonnull final List<String> usernames) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getUUIDs(final @NonNull List<String> usernames) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(usernames.size());
|
||||
final UserManager userManager = this.luckPerms.getUserManager();
|
||||
for (final String username : usernames) {
|
||||
@ -76,7 +79,8 @@ public class LuckPermsUUIDService implements UUIDService {
|
||||
if (username != null) {
|
||||
mappings.add(new UUIDMapping(uuid, username));
|
||||
}
|
||||
} catch (final Exception ignored) {}
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
}
|
||||
return mappings;
|
||||
}
|
||||
|
@ -31,8 +31,8 @@ import com.plotsquared.core.uuid.UUIDMapping;
|
||||
import com.plotsquared.core.uuid.UUIDService;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -43,7 +43,8 @@ import java.util.UUID;
|
||||
*/
|
||||
public class OfflinePlayerUUIDService implements UUIDService {
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getNames(@Nonnull final List<UUID> uuids) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getNames(final @NonNull List<UUID> uuids) {
|
||||
if (Settings.UUID.FORCE_LOWERCASE || Bukkit.getWorlds().isEmpty()) {
|
||||
return Collections.emptyList(); // This is useless now
|
||||
}
|
||||
@ -54,14 +55,16 @@ public class OfflinePlayerUUIDService implements UUIDService {
|
||||
if (offlinePlayer.hasPlayedBefore()) {
|
||||
wrappers.add(new UUIDMapping(uuid, offlinePlayer.getName()));
|
||||
}
|
||||
} catch (final Exception ignored) {} /* This can be safely ignored. If this happens, it is
|
||||
} catch (final Exception ignored) {
|
||||
} /* This can be safely ignored. If this happens, it is
|
||||
probably because it's called before the worlds have
|
||||
been loaded. This is bad, but does not break anything */
|
||||
}
|
||||
return wrappers;
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getUUIDs(@Nonnull final List<String> usernames) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getUUIDs(final @NonNull List<String> usernames) {
|
||||
final List<UUIDMapping> wrappers = new ArrayList<>(usernames.size());
|
||||
for (final String username : usernames) {
|
||||
if (Settings.UUID.OFFLINE) {
|
||||
|
@ -29,8 +29,8 @@ import com.destroystokyo.paper.profile.PlayerProfile;
|
||||
import com.plotsquared.core.uuid.UUIDMapping;
|
||||
import com.plotsquared.core.uuid.UUIDService;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@ -40,7 +40,8 @@ import java.util.UUID;
|
||||
*/
|
||||
public class PaperUUIDService implements UUIDService {
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getNames(@Nonnull final List<UUID> uuids) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getNames(final @NonNull List<UUID> uuids) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(uuids.size());
|
||||
for (final UUID uuid : uuids) {
|
||||
final PlayerProfile playerProfile = Bukkit.createProfile(uuid);
|
||||
@ -51,7 +52,8 @@ public class PaperUUIDService implements UUIDService {
|
||||
return mappings;
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getUUIDs(@Nonnull final List<String> usernames) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getUUIDs(final @NonNull List<String> usernames) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(usernames.size());
|
||||
for (final String username : usernames) {
|
||||
final PlayerProfile playerProfile = Bukkit.createProfile(username);
|
||||
|
@ -30,8 +30,8 @@ import com.plotsquared.core.database.SQLite;
|
||||
import com.plotsquared.core.util.FileUtils;
|
||||
import com.plotsquared.core.uuid.UUIDMapping;
|
||||
import com.plotsquared.core.uuid.UUIDService;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
@ -72,7 +72,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
||||
}
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getNames(@Nonnull final List<UUID> uuids) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getNames(final @NonNull List<UUID> uuids) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(uuids.size());
|
||||
try (final PreparedStatement statement = getConnection()
|
||||
.prepareStatement("SELECT `username` FROM `usercache` WHERE `uuid` = ?")) {
|
||||
@ -90,7 +91,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
||||
return mappings;
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getUUIDs(@Nonnull List<String> usernames) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getUUIDs(@NonNull List<String> usernames) {
|
||||
final List<UUIDMapping> mappings = new ArrayList<>(usernames.size());
|
||||
try (final PreparedStatement statement = getConnection()
|
||||
.prepareStatement("SELECT `uuid` FROM `usercache` WHERE `username` = ?")) {
|
||||
@ -98,8 +100,10 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
||||
statement.setString(1, username);
|
||||
try (final ResultSet resultSet = statement.executeQuery()) {
|
||||
if (resultSet.next()) {
|
||||
mappings.add(new UUIDMapping(UUID.fromString(resultSet.getString("uuid")),
|
||||
username));
|
||||
mappings.add(new UUIDMapping(
|
||||
UUID.fromString(resultSet.getString("uuid")),
|
||||
username
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -109,7 +113,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
||||
return mappings;
|
||||
}
|
||||
|
||||
@Override public void accept(final List<UUIDMapping> uuidWrappers) {
|
||||
@Override
|
||||
public void accept(final List<UUIDMapping> uuidWrappers) {
|
||||
try (final PreparedStatement statement = getConnection()
|
||||
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
||||
for (final UUIDMapping mapping : uuidWrappers) {
|
||||
@ -127,7 +132,7 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
||||
*
|
||||
* @return All read mappings
|
||||
*/
|
||||
@Nonnull public List<UUIDMapping> getAll() {
|
||||
public @NonNull List<UUIDMapping> getAll() {
|
||||
final List<UUIDMapping> mappings = new LinkedList<>();
|
||||
try (final PreparedStatement statement = getConnection().prepareStatement("SELECT * FROM `usercache`")) {
|
||||
try (final ResultSet resultSet = statement.executeQuery()) {
|
||||
|
@ -32,10 +32,10 @@ import com.plotsquared.core.uuid.UUIDService;
|
||||
import com.sk89q.squirrelid.Profile;
|
||||
import com.sk89q.squirrelid.resolver.HttpRepositoryService;
|
||||
import com.sk89q.squirrelid.resolver.ProfileService;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -67,7 +67,8 @@ public class SquirrelIdUUIDService implements UUIDService {
|
||||
this.rateLimiter = RateLimiter.create(rateLimit / 600.0D);
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getNames(@Nonnull final List<UUID> uuids) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getNames(final @NonNull List<UUID> uuids) {
|
||||
final List<UUIDMapping> results = new ArrayList<>(uuids.size());
|
||||
this.rateLimiter.acquire(uuids.size());
|
||||
try {
|
||||
@ -101,7 +102,8 @@ public class SquirrelIdUUIDService implements UUIDService {
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override @Nonnull public List<UUIDMapping> getUUIDs(@Nonnull final List<String> usernames) {
|
||||
@Override
|
||||
public @NonNull List<UUIDMapping> getUUIDs(final @NonNull List<String> usernames) {
|
||||
final List<UUIDMapping> results = new ArrayList<>(usernames.size());
|
||||
this.rateLimiter.acquire(usernames.size());
|
||||
try {
|
||||
|
@ -2,7 +2,7 @@ import java.time.format.DateTimeFormatter
|
||||
|
||||
dependencies {
|
||||
// Expected everywhere.
|
||||
compileOnlyApi("javax.annotation:javax.annotation-api:1.3.2")
|
||||
compileOnlyApi("org.checkerframework:checker-qual:3.9.0")
|
||||
|
||||
// Minecraft expectations
|
||||
compileOnlyApi("com.google.guava:guava:21.0") // Minecraft uses v21.0
|
||||
@ -23,7 +23,6 @@ dependencies {
|
||||
exclude("com.google.inject", "guice")
|
||||
}
|
||||
compileOnlyApi("com.google.code.findbugs:annotations:3.0.1")
|
||||
compileOnlyApi("javax.inject:javax.inject:1")
|
||||
|
||||
// Plugins
|
||||
compileOnlyApi("com.sk89q.worldedit:worldedit-core:7.2.0") {
|
||||
|
@ -1,31 +0,0 @@
|
||||
/*
|
||||
* _____ _ _ _____ _
|
||||
* | __ \| | | | / ____| | |
|
||||
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
|
||||
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
|
||||
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
|
||||
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
|
||||
* | |
|
||||
* |_|
|
||||
* PlotSquared plot management system for Minecraft
|
||||
* Copyright (C) 2021 IntellectualSites
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.plotsquared.core;
|
||||
|
||||
public enum Platform {
|
||||
Bukkit, Sponge, Spigot, Paper
|
||||
|
||||
}
|
@ -38,9 +38,9 @@ import com.plotsquared.core.util.EventDispatcher;
|
||||
import com.plotsquared.core.util.SchematicHandler;
|
||||
import com.plotsquared.core.util.query.PlotQuery;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@ -59,7 +59,8 @@ import java.util.UUID;
|
||||
*
|
||||
* @version 5
|
||||
*/
|
||||
@SuppressWarnings({"unused", "WeakerAccess"}) public class PlotAPI {
|
||||
@SuppressWarnings({"unused", "WeakerAccess"})
|
||||
public class PlotAPI {
|
||||
|
||||
public PlotAPI() {
|
||||
}
|
||||
@ -69,7 +70,7 @@ import java.util.UUID;
|
||||
*
|
||||
* @return all plots
|
||||
*/
|
||||
public Set<Plot> getAllPlots() {
|
||||
public @NonNull Set<@NonNull Plot> getAllPlots() {
|
||||
return PlotQuery.newQuery().allPlots().asSet();
|
||||
}
|
||||
|
||||
@ -79,7 +80,7 @@ import java.util.UUID;
|
||||
* @param player Player, whose plots to search for
|
||||
* @return all plots that a player owns
|
||||
*/
|
||||
public Set<Plot> getPlayerPlots(PlotPlayer<?> player) {
|
||||
public @NonNull Set<@NonNull Plot> getPlayerPlots(final @NonNull PlotPlayer<?> player) {
|
||||
return PlotQuery.newQuery().ownedBy(player).asSet();
|
||||
}
|
||||
|
||||
@ -89,7 +90,7 @@ import java.util.UUID;
|
||||
* @param plotArea Plot World Object
|
||||
* @see PlotSquared#addPlotArea(PlotArea)
|
||||
*/
|
||||
public void addPlotArea(PlotArea plotArea) {
|
||||
public void addPlotArea(final @NonNull PlotArea plotArea) {
|
||||
PlotSquared.get().addPlotArea(plotArea);
|
||||
}
|
||||
|
||||
@ -106,7 +107,7 @@ import java.util.UUID;
|
||||
* @return ChunkManager
|
||||
* @see ChunkManager
|
||||
*/
|
||||
public ChunkManager getChunkManager() {
|
||||
public @NonNull ChunkManager getChunkManager() {
|
||||
return PlotSquared.platform().injector().getInstance(ChunkManager.class);
|
||||
}
|
||||
|
||||
@ -115,7 +116,7 @@ import java.util.UUID;
|
||||
*
|
||||
* @return GlobalBlockQueue.IMP
|
||||
*/
|
||||
public GlobalBlockQueue getBlockQueue() {
|
||||
public @NonNull GlobalBlockQueue getBlockQueue() {
|
||||
return PlotSquared.platform().globalBlockQueue();
|
||||
}
|
||||
|
||||
@ -126,7 +127,7 @@ import java.util.UUID;
|
||||
* @return SchematicHandler
|
||||
* @see SchematicHandler
|
||||
*/
|
||||
public SchematicHandler getSchematicHandler() {
|
||||
public @NonNull SchematicHandler getSchematicHandler() {
|
||||
return PlotSquared.platform().injector().getInstance(SchematicHandler.class);
|
||||
}
|
||||
|
||||
@ -136,7 +137,7 @@ import java.util.UUID;
|
||||
* @param world The world to check for plot areas
|
||||
* @return A set of PlotAreas
|
||||
*/
|
||||
public Set<PlotArea> getPlotAreas(String world) {
|
||||
public @NonNull Set<@NonNull PlotArea> getPlotAreas(final @Nullable String world) {
|
||||
if (world == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
@ -149,7 +150,9 @@ import java.util.UUID;
|
||||
* @param message the message
|
||||
* @param replacements Variable replacements
|
||||
*/
|
||||
public void sendConsoleMessage(@Nonnull final String message, final Template... replacements) {
|
||||
public void sendConsoleMessage(
|
||||
final @NonNull String message,
|
||||
final @NonNull Template @NonNull... replacements) {
|
||||
ConsolePlayer.getConsole().sendMessage(StaticCaption.of(message), replacements);
|
||||
// TODO: Re-implement
|
||||
// PlotSquared.log(message);
|
||||
@ -161,7 +164,10 @@ import java.util.UUID;
|
||||
* @param caption the message
|
||||
* @param replacements Variable replacements
|
||||
*/
|
||||
public void sendConsoleMessage(@Nonnull final Caption caption, final Template... replacements) {
|
||||
public void sendConsoleMessage(
|
||||
final @NonNull Caption caption,
|
||||
final @NonNull Template @NonNull... replacements
|
||||
) {
|
||||
ConsolePlayer.getConsole().sendMessage(caption, replacements);
|
||||
}
|
||||
|
||||
@ -171,7 +177,7 @@ import java.util.UUID;
|
||||
* @return PlotSquared Class
|
||||
* @see PlotSquared
|
||||
*/
|
||||
public PlotSquared getPlotSquared() {
|
||||
public @NonNull PlotSquared getPlotSquared() {
|
||||
return PlotSquared.get();
|
||||
}
|
||||
|
||||
@ -179,12 +185,12 @@ import java.util.UUID;
|
||||
* Gets the PlotPlayer for a UUID.
|
||||
*
|
||||
* <p><i>Please note that PlotSquared can be configured to provide
|
||||
* different UUIDs than bukkit</i>
|
||||
* different UUIDs than Bukkit</i>
|
||||
*
|
||||
* @param uuid the uuid of the player to wrap
|
||||
* @return a {@code PlotPlayer}
|
||||
*/
|
||||
@Nullable public PlotPlayer<?> wrapPlayer(@Nonnull final UUID uuid) {
|
||||
public @Nullable PlotPlayer<?> wrapPlayer(final @NonNull UUID uuid) {
|
||||
return PlotSquared.platform().playerManager().getPlayerIfExists(uuid);
|
||||
}
|
||||
|
||||
@ -194,7 +200,7 @@ import java.util.UUID;
|
||||
* @param player the player to wrap
|
||||
* @return a {@code PlotPlayer}
|
||||
*/
|
||||
@Nullable public PlotPlayer<?> wrapPlayer(@Nonnull final String player) {
|
||||
public @Nullable PlotPlayer<?> wrapPlayer(final @NonNull String player) {
|
||||
return PlotSquared.platform().playerManager().getPlayerIfExists(player);
|
||||
}
|
||||
|
||||
@ -204,7 +210,8 @@ import java.util.UUID;
|
||||
* @param listener the listener class to register
|
||||
* @see EventDispatcher#registerListener(Object)
|
||||
*/
|
||||
public void registerListener(Object listener) {
|
||||
public void registerListener(final @NonNull Object listener) {
|
||||
PlotSquared.get().getEventDispatcher().registerListener(listener);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -49,9 +49,9 @@ import com.plotsquared.core.util.WorldUtil;
|
||||
import com.plotsquared.core.util.placeholders.PlaceholderRegistry;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
@ -66,14 +66,14 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return the PlotSquared directory
|
||||
*/
|
||||
@Nonnull File getDirectory();
|
||||
@NonNull File getDirectory();
|
||||
|
||||
/**
|
||||
* Gets the folder where all world data is stored.
|
||||
*
|
||||
* @return the world folder
|
||||
*/
|
||||
@Nonnull File worldContainer();
|
||||
@NonNull File worldContainer();
|
||||
|
||||
/**
|
||||
* Completely shuts down the plugin.
|
||||
@ -85,7 +85,8 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Plugin name
|
||||
*/
|
||||
@Nonnull default String pluginName() {
|
||||
@NonNull
|
||||
default String pluginName() {
|
||||
return "PlotSquared";
|
||||
}
|
||||
|
||||
@ -94,21 +95,21 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return server version as array of numbers
|
||||
*/
|
||||
@Nonnull int[] serverVersion();
|
||||
int[] serverVersion();
|
||||
|
||||
/**
|
||||
* Gets the server implementation name and version
|
||||
*
|
||||
* @return server implementation and version as string
|
||||
*/
|
||||
@Nonnull String serverImplementation();
|
||||
@NonNull String serverImplementation();
|
||||
|
||||
/**
|
||||
* Gets the native server code package prefix.
|
||||
*
|
||||
* @return The package prefix
|
||||
*/
|
||||
@Nonnull String serverNativePackage();
|
||||
@NonNull String serverNativePackage();
|
||||
|
||||
/**
|
||||
* Start Metrics.
|
||||
@ -120,14 +121,14 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @param world The world to set the generator
|
||||
*/
|
||||
void setGenerator(String world);
|
||||
void setGenerator(@NonNull String world);
|
||||
|
||||
/**
|
||||
* Unregisters a {@link PlotPlayer} from cache e.g. if they have logged off.
|
||||
*
|
||||
* @param player the player to remove
|
||||
*/
|
||||
void unregister(PlotPlayer<?> player);
|
||||
void unregister(@NonNull PlotPlayer<?> player);
|
||||
|
||||
/**
|
||||
* Gets the generator wrapper for a world (world) and generator (name).
|
||||
@ -136,7 +137,10 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
* @param name The name of the generator
|
||||
* @return The generator being used for the provided world
|
||||
*/
|
||||
@Nullable GeneratorWrapper<?> getGenerator(@Nonnull String world, @Nullable String name);
|
||||
@Nullable GeneratorWrapper<?> getGenerator(
|
||||
@NonNull String world,
|
||||
@Nullable String name
|
||||
);
|
||||
|
||||
/**
|
||||
* Create a platform generator from a plot generator
|
||||
@ -145,14 +149,17 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
* @param generator Plot generator
|
||||
* @return Platform generator wrapper
|
||||
*/
|
||||
@Nonnull GeneratorWrapper<?> wrapPlotGenerator(@Nonnull String world, @Nonnull IndependentPlotGenerator generator);
|
||||
@NonNull GeneratorWrapper<?> wrapPlotGenerator(
|
||||
@NonNull String world,
|
||||
@NonNull IndependentPlotGenerator generator
|
||||
);
|
||||
|
||||
/**
|
||||
* Usually HybridGen
|
||||
*
|
||||
* @return Default implementation generator
|
||||
*/
|
||||
@Nonnull default IndependentPlotGenerator defaultGenerator() {
|
||||
default @NonNull IndependentPlotGenerator defaultGenerator() {
|
||||
return injector().getInstance(Key.get(IndependentPlotGenerator.class, DefaultGenerator.class));
|
||||
}
|
||||
|
||||
@ -161,7 +168,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Backup manager
|
||||
*/
|
||||
@Nonnull default BackupManager backupManager() {
|
||||
default @NonNull BackupManager backupManager() {
|
||||
return injector().getInstance(BackupManager.class);
|
||||
}
|
||||
|
||||
@ -170,7 +177,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return World manager
|
||||
*/
|
||||
@Nonnull default PlatformWorldManager<?> worldManager() {
|
||||
default @NonNull PlatformWorldManager<?> worldManager() {
|
||||
return injector().getInstance(PlatformWorldManager.class);
|
||||
}
|
||||
|
||||
@ -179,8 +186,9 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Player manager
|
||||
*/
|
||||
@Nonnull default PlayerManager<? extends PlotPlayer<P>, ? extends P> playerManager() {
|
||||
return injector().getInstance(Key.get(new TypeLiteral<PlayerManager<? extends PlotPlayer<P>, ? extends P>>() {}));
|
||||
default @NonNull PlayerManager<? extends PlotPlayer<P>, ? extends P> playerManager() {
|
||||
return injector().getInstance(Key.get(new TypeLiteral<PlayerManager<? extends PlotPlayer<P>, ? extends P>>() {
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -189,21 +197,21 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
* @param worldName World name
|
||||
* @return Platform world wrapper
|
||||
*/
|
||||
@Nullable World<?> getPlatformWorld(@Nonnull final String worldName);
|
||||
@Nullable World<?> getPlatformWorld(@NonNull String worldName);
|
||||
|
||||
/**
|
||||
* Get the {@link com.google.inject.Injector} instance used by PlotSquared
|
||||
*
|
||||
* @return Injector instance
|
||||
*/
|
||||
@Nonnull Injector injector();
|
||||
@NonNull Injector injector();
|
||||
|
||||
/**
|
||||
* Get the world utility implementation
|
||||
*
|
||||
* @return World utility
|
||||
*/
|
||||
@Nonnull default WorldUtil worldUtil() {
|
||||
default @NonNull WorldUtil worldUtil() {
|
||||
return injector().getInstance(WorldUtil.class);
|
||||
}
|
||||
|
||||
@ -212,7 +220,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Global block queue implementation
|
||||
*/
|
||||
@Nonnull default GlobalBlockQueue globalBlockQueue() {
|
||||
default @NonNull GlobalBlockQueue globalBlockQueue() {
|
||||
return injector().getInstance(GlobalBlockQueue.class);
|
||||
}
|
||||
|
||||
@ -221,7 +229,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Hybrid utils
|
||||
*/
|
||||
@Nonnull default HybridUtils hybridUtils() {
|
||||
default @NonNull HybridUtils hybridUtils() {
|
||||
return injector().getInstance(HybridUtils.class);
|
||||
}
|
||||
|
||||
@ -230,16 +238,16 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Setup utils
|
||||
*/
|
||||
@Nonnull default SetupUtils setupUtils() {
|
||||
default @NonNull SetupUtils setupUtils() {
|
||||
return injector().getInstance(SetupUtils.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link EconHandler} implementation for the platform
|
||||
* *
|
||||
*
|
||||
* @return Econ handler
|
||||
*/
|
||||
@Nonnull default EconHandler econHandler() {
|
||||
default @NonNull EconHandler econHandler() {
|
||||
return injector().getInstance(EconHandler.class);
|
||||
}
|
||||
|
||||
@ -248,7 +256,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Region manager
|
||||
*/
|
||||
@Nonnull default RegionManager regionManager() {
|
||||
default @NonNull RegionManager regionManager() {
|
||||
return injector().getInstance(RegionManager.class);
|
||||
}
|
||||
|
||||
@ -257,7 +265,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Region manager
|
||||
*/
|
||||
@Nonnull default ChunkManager chunkManager() {
|
||||
default @NonNull ChunkManager chunkManager() {
|
||||
return injector().getInstance(ChunkManager.class);
|
||||
}
|
||||
|
||||
@ -266,7 +274,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Console audience
|
||||
*/
|
||||
@Nonnull Audience consoleAudience();
|
||||
@NonNull Audience consoleAudience();
|
||||
|
||||
/**
|
||||
* Get a formatted string containing all plugins on the server together
|
||||
@ -274,7 +282,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Formatted string
|
||||
*/
|
||||
@Nonnull String pluginsFormatted();
|
||||
@NonNull String pluginsFormatted();
|
||||
|
||||
/**
|
||||
* Load the caption maps
|
||||
@ -286,7 +294,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Permission handler
|
||||
*/
|
||||
@Nonnull default PermissionHandler permissionHandler() {
|
||||
default @NonNull PermissionHandler permissionHandler() {
|
||||
return injector().getInstance(PermissionHandler.class);
|
||||
}
|
||||
|
||||
@ -295,7 +303,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Service pipeline
|
||||
*/
|
||||
@Nonnull default ServicePipeline servicePipeline() {
|
||||
default @NonNull ServicePipeline servicePipeline() {
|
||||
return injector().getInstance(ServicePipeline.class);
|
||||
}
|
||||
|
||||
@ -304,10 +312,10 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
*
|
||||
* @return Placeholder registry
|
||||
*/
|
||||
@Nonnull default PlaceholderRegistry placeholderRegistry() {
|
||||
default @NonNull PlaceholderRegistry placeholderRegistry() {
|
||||
return injector().getInstance(PlaceholderRegistry.class);
|
||||
}
|
||||
|
||||
@Nonnull String toLegacyPlatformString(Component component);
|
||||
@NonNull String toLegacyPlatformString(Component component);
|
||||
|
||||
}
|
||||
|
@ -30,10 +30,10 @@ import com.plotsquared.core.configuration.ConfigurationUtil;
|
||||
import com.plotsquared.core.configuration.MemorySection;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.Storage;
|
||||
import com.plotsquared.core.configuration.caption.load.CaptionLoader;
|
||||
import com.plotsquared.core.configuration.caption.CaptionMap;
|
||||
import com.plotsquared.core.configuration.caption.DummyCaptionMap;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.configuration.caption.load.CaptionLoader;
|
||||
import com.plotsquared.core.configuration.caption.load.DefaultCaptionProvider;
|
||||
import com.plotsquared.core.configuration.file.YamlConfiguration;
|
||||
import com.plotsquared.core.configuration.serialization.ConfigurationSerialization;
|
||||
@ -73,10 +73,12 @@ import com.plotsquared.core.util.task.TaskManager;
|
||||
import com.plotsquared.core.uuid.UUIDPipeline;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.math.BlockVector2;
|
||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@ -120,7 +122,7 @@ import java.util.zip.ZipInputStream;
|
||||
public class PlotSquared {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger("P2/" + PlotSquared.class.getSimpleName());
|
||||
private static PlotSquared instance;
|
||||
private static @MonotonicNonNull PlotSquared instance;
|
||||
|
||||
// Implementation
|
||||
private final PlotPlatform<?> platform;
|
||||
@ -131,6 +133,10 @@ public class PlotSquared {
|
||||
new UUIDPipeline(Executors.newCachedThreadPool());
|
||||
private final UUIDPipeline backgroundUUIDPipeline =
|
||||
new UUIDPipeline(Executors.newSingleThreadExecutor());
|
||||
// Localization
|
||||
private final CaptionLoader captionLoader;
|
||||
private final Map<String, CaptionMap> captionMaps = new HashMap<>();
|
||||
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
|
||||
// WorldEdit instance
|
||||
private WorldEdit worldedit;
|
||||
private File configFile;
|
||||
@ -138,11 +144,7 @@ public class PlotSquared {
|
||||
private YamlConfiguration worldConfiguration;
|
||||
// Temporary hold the plots/clusters before the worlds load
|
||||
private HashMap<String, Set<PlotCluster>> clustersTmp;
|
||||
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
|
||||
private YamlConfiguration config;
|
||||
// Localization
|
||||
private final CaptionLoader captionLoader;
|
||||
private final Map<String, CaptionMap> captionMaps = new HashMap<>();
|
||||
// Platform / Version / Update URL
|
||||
private PlotVersion version;
|
||||
// Files and configuration
|
||||
@ -157,7 +159,10 @@ public class PlotSquared {
|
||||
* @param iPlotMain Implementation of {@link PlotPlatform} used
|
||||
* @param platform The platform being used
|
||||
*/
|
||||
public PlotSquared(final PlotPlatform<?> iPlotMain, final String platform) {
|
||||
public PlotSquared(
|
||||
final @NonNull PlotPlatform<?> iPlotMain,
|
||||
final @NonNull String platform
|
||||
) {
|
||||
if (instance != null) {
|
||||
throw new IllegalStateException("Cannot re-initialize the PlotSquared singleton");
|
||||
}
|
||||
@ -175,10 +180,14 @@ public class PlotSquared {
|
||||
//
|
||||
ConfigurationSerialization.registerClass(BlockBucket.class, "BlockBucket");
|
||||
|
||||
this.captionLoader = CaptionLoader.of(Locale.ENGLISH,
|
||||
this.captionLoader = CaptionLoader.of(
|
||||
Locale.ENGLISH,
|
||||
CaptionLoader.patternExtractor(Pattern.compile("messages_(.*)\\.json")),
|
||||
DefaultCaptionProvider.forClassLoaderFormatString(this.getClass().getClassLoader(),
|
||||
"lang/messages_%s.json")); // the path in our jar file
|
||||
DefaultCaptionProvider.forClassLoaderFormatString(
|
||||
this.getClass().getClassLoader(),
|
||||
"lang/messages_%s.json"
|
||||
)
|
||||
); // the path in our jar file
|
||||
// Load caption map
|
||||
try {
|
||||
this.loadCaptionMap();
|
||||
@ -200,8 +209,10 @@ public class PlotSquared {
|
||||
e.printStackTrace();
|
||||
this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
|
||||
if (!this.jarFile.exists()) {
|
||||
this.jarFile = new File(this.platform.getDirectory().getParentFile(),
|
||||
"PlotSquared-" + platform + ".jar");
|
||||
this.jarFile = new File(
|
||||
this.platform.getDirectory().getParentFile(),
|
||||
"PlotSquared-" + platform + ".jar"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -234,6 +245,27 @@ public class PlotSquared {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an instance of PlotSquared.
|
||||
*
|
||||
* @return instance of PlotSquared
|
||||
*/
|
||||
public static @NonNull PlotSquared get() {
|
||||
return PlotSquared.instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the platform specific implementation of PlotSquared
|
||||
*
|
||||
* @return Platform implementation
|
||||
*/
|
||||
public static @NonNull PlotPlatform<?> platform() {
|
||||
if (instance != null && instance.platform != null) {
|
||||
return instance.platform;
|
||||
}
|
||||
throw new IllegalStateException("Plot platform implementation is missing");
|
||||
}
|
||||
|
||||
public void loadCaptionMap() throws Exception {
|
||||
this.platform.copyCaptionMaps();
|
||||
// Setup localization
|
||||
@ -245,8 +277,10 @@ public class PlotSquared {
|
||||
captionMap = this.captionLoader.loadSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
|
||||
}
|
||||
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
||||
logger.info("Loaded caption map for namespace 'plotsquared': {}",
|
||||
this.captionMaps.get(TranslatableCaption.DEFAULT_NAMESPACE).getClass().getCanonicalName());
|
||||
logger.info(
|
||||
"Loaded caption map for namespace 'plotsquared': {}",
|
||||
this.captionMaps.get(TranslatableCaption.DEFAULT_NAMESPACE).getClass().getCanonicalName()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -254,31 +288,10 @@ public class PlotSquared {
|
||||
*
|
||||
* @return Plot area manager
|
||||
*/
|
||||
@Nonnull public PlotAreaManager getPlotAreaManager() {
|
||||
public @NonNull PlotAreaManager getPlotAreaManager() {
|
||||
return this.platform.injector().getInstance(PlotAreaManager.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an instance of PlotSquared.
|
||||
*
|
||||
* @return instance of PlotSquared
|
||||
*/
|
||||
public static PlotSquared get() {
|
||||
return PlotSquared.instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the platform specific implementation of PlotSquared
|
||||
*
|
||||
* @return Platform implementation
|
||||
*/
|
||||
@Nonnull public static PlotPlatform<?> platform() {
|
||||
if (instance != null && instance.platform != null) {
|
||||
return instance.platform;
|
||||
}
|
||||
throw new IllegalStateException("Plot platform implementation is missing");
|
||||
}
|
||||
|
||||
public void startExpiryTasks() {
|
||||
if (Settings.Enabled_Components.PLOT_EXPIRY) {
|
||||
ExpireManager.IMP = new ExpireManager(this.eventDispatcher);
|
||||
@ -290,7 +303,7 @@ public class PlotSquared {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isMainThread(Thread thread) {
|
||||
public boolean isMainThread(final @NonNull Thread thread) {
|
||||
return this.thread == thread;
|
||||
}
|
||||
|
||||
@ -301,7 +314,10 @@ public class PlotSquared {
|
||||
* @param version2 Second version
|
||||
* @return true if `version` is >= `version2`
|
||||
*/
|
||||
public boolean checkVersion(int[] version, int... version2) {
|
||||
public boolean checkVersion(
|
||||
final int[] version,
|
||||
final int... version2
|
||||
) {
|
||||
return version[0] > version2[0] || version[0] == version2[0] && version[1] > version2[1]
|
||||
|| version[0] == version2[0] && version[1] == version2[1] && version[2] >= version2[2];
|
||||
}
|
||||
@ -311,7 +327,7 @@ public class PlotSquared {
|
||||
*
|
||||
* @return current version in config or null
|
||||
*/
|
||||
public PlotVersion getVersion() {
|
||||
public @NonNull PlotVersion getVersion() {
|
||||
return this.version;
|
||||
}
|
||||
|
||||
@ -322,7 +338,7 @@ public class PlotSquared {
|
||||
*
|
||||
* @return the server implementation
|
||||
*/
|
||||
public String getPlatform() {
|
||||
public @NonNull String getPlatform() {
|
||||
return Settings.PLATFORM;
|
||||
}
|
||||
|
||||
@ -332,7 +348,7 @@ public class PlotSquared {
|
||||
* @param plotArea the {@code PlotArea} to add.
|
||||
* @see #removePlotArea(PlotArea) To remove the reference
|
||||
*/
|
||||
public void addPlotArea(PlotArea plotArea) {
|
||||
public void addPlotArea(final @NonNull PlotArea plotArea) {
|
||||
HashMap<PlotId, Plot> plots;
|
||||
if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) {
|
||||
if (plotArea.getType() == PlotAreaType.PARTIAL) {
|
||||
@ -397,7 +413,11 @@ public class PlotSquared {
|
||||
regionInts.forEach(l -> regions.add(BlockVector2.at(l[0], l[1])));
|
||||
chunkInts.forEach(l -> chunks.add(BlockVector2.at(l[0], l[1])));
|
||||
int height = (int) list.get(2);
|
||||
logger.info("Incomplete road regeneration found. Restarting in world {} with height {}", plotArea.getWorldName(), height);
|
||||
logger.info(
|
||||
"Incomplete road regeneration found. Restarting in world {} with height {}",
|
||||
plotArea.getWorldName(),
|
||||
height
|
||||
);
|
||||
logger.info(" - Regions: {}", regions.size());
|
||||
logger.info(" - Chunks: {}", chunks.size());
|
||||
HybridUtils.UPDATE = true;
|
||||
@ -417,12 +437,12 @@ public class PlotSquared {
|
||||
*
|
||||
* @param area the {@code PlotArea} to remove
|
||||
*/
|
||||
public void removePlotArea(PlotArea area) {
|
||||
public void removePlotArea(final @NonNull PlotArea area) {
|
||||
getPlotAreaManager().removePlotArea(area);
|
||||
setPlotsTmp(area);
|
||||
}
|
||||
|
||||
public void removePlotAreas(@Nonnull final String world) {
|
||||
public void removePlotAreas(final @NonNull String world) {
|
||||
for (final PlotArea area : this.getPlotAreaManager().getPlotAreasSet(world)) {
|
||||
if (area.getWorldName().equals(world)) {
|
||||
removePlotArea(area);
|
||||
@ -430,7 +450,7 @@ public class PlotSquared {
|
||||
}
|
||||
}
|
||||
|
||||
private void setPlotsTmp(PlotArea area) {
|
||||
private void setPlotsTmp(final @NonNull PlotArea area) {
|
||||
if (this.plots_tmp == null) {
|
||||
this.plots_tmp = new HashMap<>();
|
||||
}
|
||||
@ -445,7 +465,7 @@ public class PlotSquared {
|
||||
this.clustersTmp.put(area.toString(), area.getClusters());
|
||||
}
|
||||
|
||||
public Set<PlotCluster> getClusters(@Nonnull final String world) {
|
||||
public Set<PlotCluster> getClusters(final @NonNull String world) {
|
||||
final Set<PlotCluster> set = new HashSet<>();
|
||||
for (final PlotArea area : this.getPlotAreaManager().getPlotAreasSet(world)) {
|
||||
set.addAll(area.getClusters());
|
||||
@ -542,7 +562,7 @@ public class PlotSquared {
|
||||
*
|
||||
* @param input an array of plots to sort
|
||||
*/
|
||||
private void sortPlotsByHash(Plot[] input) {
|
||||
private void sortPlotsByHash(final @NonNull Plot @NonNull[] input) {
|
||||
List<Plot>[] bucket = new ArrayList[32];
|
||||
Arrays.fill(bucket, new ArrayList<>());
|
||||
boolean maxLength = false;
|
||||
@ -567,11 +587,11 @@ public class PlotSquared {
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Plot> sortPlotsByTimestamp(Collection<Plot> plots) {
|
||||
private @NonNull List<Plot> sortPlotsByTimestamp(final @NonNull Collection<Plot> plots) {
|
||||
int hardMax = 256000;
|
||||
int max = 0;
|
||||
int overflowSize = 0;
|
||||
for (Plot plot : plots) {
|
||||
for (final Plot plot : plots) {
|
||||
int hash = MathMan.getPositiveId(plot.hashCode());
|
||||
if (hash > max) {
|
||||
if (hash >= hardMax) {
|
||||
@ -615,10 +635,10 @@ public class PlotSquared {
|
||||
/**
|
||||
* Sort plots by creation timestamp.
|
||||
*
|
||||
* @param input
|
||||
* @return
|
||||
* @param input Plots to sort
|
||||
* @return Sorted list
|
||||
*/
|
||||
private List<Plot> sortPlotsByModified(Collection<Plot> input) {
|
||||
private @NonNull List<Plot> sortPlotsByModified(final @NonNull Collection<Plot> input) {
|
||||
List<Plot> list;
|
||||
if (input instanceof List) {
|
||||
list = (List<Plot>) input;
|
||||
@ -639,8 +659,11 @@ public class PlotSquared {
|
||||
* want default world order
|
||||
* @return ArrayList of plot
|
||||
*/
|
||||
public ArrayList<Plot> sortPlots(Collection<Plot> plots, SortType type,
|
||||
final PlotArea priorityArea) {
|
||||
public @NonNull List<Plot> sortPlots(
|
||||
final @NonNull Collection<Plot> plots,
|
||||
final @NonNull SortType type,
|
||||
final @Nullable PlotArea priorityArea
|
||||
) {
|
||||
// group by world
|
||||
// sort each
|
||||
HashMap<PlotArea, Collection<Plot>> map = new HashMap<>();
|
||||
@ -698,7 +721,7 @@ public class PlotSquared {
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
public void setPlots(@Nonnull final Map<String, HashMap<PlotId, Plot>> plots) {
|
||||
public void setPlots(final @NonNull Map<String, HashMap<PlotId, Plot>> plots) {
|
||||
if (this.plots_tmp == null) {
|
||||
this.plots_tmp = new HashMap<>();
|
||||
}
|
||||
@ -724,7 +747,10 @@ public class PlotSquared {
|
||||
* @param callEvent If to call an event about the plot being removed
|
||||
* @return true if plot existed | false if it didn't
|
||||
*/
|
||||
public boolean removePlot(Plot plot, boolean callEvent) {
|
||||
public boolean removePlot(
|
||||
final @NonNull Plot plot,
|
||||
final boolean callEvent
|
||||
) {
|
||||
if (plot == null) {
|
||||
return false;
|
||||
}
|
||||
@ -761,7 +787,10 @@ public class PlotSquared {
|
||||
* @param world the world to load
|
||||
* @param baseGenerator The generator for that world, or null
|
||||
*/
|
||||
public void loadWorld(String world, GeneratorWrapper<?> baseGenerator) {
|
||||
public void loadWorld(
|
||||
final @NonNull String world,
|
||||
final @Nullable GeneratorWrapper<?> baseGenerator
|
||||
) {
|
||||
if (world.equals("CheckingPlotSquaredGenerator")) {
|
||||
return;
|
||||
}
|
||||
@ -989,13 +1018,18 @@ public class PlotSquared {
|
||||
* @param generator the plot generator
|
||||
* @return boolean | if valid arguments were provided
|
||||
*/
|
||||
public boolean setupPlotWorld(String world, String args, IndependentPlotGenerator generator) {
|
||||
public boolean setupPlotWorld(
|
||||
final @NonNull String world,
|
||||
final @Nullable String args,
|
||||
final @NonNull IndependentPlotGenerator generator
|
||||
) {
|
||||
if (args != null && !args.isEmpty()) {
|
||||
// save configuration
|
||||
|
||||
final List<String> validArguments = Arrays
|
||||
.asList("s=", "size=", "g=", "gap=", "h=", "height=", "f=", "floor=", "m=", "main=",
|
||||
"w=", "wall=", "b=", "border=");
|
||||
"w=", "wall=", "b=", "border="
|
||||
);
|
||||
|
||||
// Calculate the number of expected arguments
|
||||
int expected = (int) validArguments.stream()
|
||||
@ -1035,7 +1069,9 @@ public class PlotSquared {
|
||||
split = combinedArgs;
|
||||
}
|
||||
|
||||
final HybridPlotWorldFactory hybridPlotWorldFactory = this.platform.injector().getInstance(HybridPlotWorldFactory.class);
|
||||
final HybridPlotWorldFactory hybridPlotWorldFactory = this.platform
|
||||
.injector()
|
||||
.getInstance(HybridPlotWorldFactory.class);
|
||||
final HybridPlotWorld plotWorld = hybridPlotWorldFactory.create(world, null, generator, null, null);
|
||||
|
||||
for (String element : split) {
|
||||
@ -1051,42 +1087,60 @@ public class PlotSquared {
|
||||
switch (key) {
|
||||
case "s":
|
||||
case "size":
|
||||
this.worldConfiguration.set(base + "plot.size",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue());
|
||||
this.worldConfiguration.set(
|
||||
base + "plot.size",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||
);
|
||||
break;
|
||||
case "g":
|
||||
case "gap":
|
||||
this.worldConfiguration.set(base + "road.width",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue());
|
||||
this.worldConfiguration.set(
|
||||
base + "road.width",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||
);
|
||||
break;
|
||||
case "h":
|
||||
case "height":
|
||||
this.worldConfiguration.set(base + "road.height",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue());
|
||||
this.worldConfiguration.set(base + "plot.height",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue());
|
||||
this.worldConfiguration.set(base + "wall.height",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue());
|
||||
this.worldConfiguration.set(
|
||||
base + "road.height",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||
);
|
||||
this.worldConfiguration.set(
|
||||
base + "plot.height",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||
);
|
||||
this.worldConfiguration.set(
|
||||
base + "wall.height",
|
||||
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||
);
|
||||
break;
|
||||
case "f":
|
||||
case "floor":
|
||||
this.worldConfiguration.set(base + "plot.floor",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString());
|
||||
this.worldConfiguration.set(
|
||||
base + "plot.floor",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
|
||||
);
|
||||
break;
|
||||
case "m":
|
||||
case "main":
|
||||
this.worldConfiguration.set(base + "plot.filling",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString());
|
||||
this.worldConfiguration.set(
|
||||
base + "plot.filling",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
|
||||
);
|
||||
break;
|
||||
case "w":
|
||||
case "wall":
|
||||
this.worldConfiguration.set(base + "wall.filling",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString());
|
||||
this.worldConfiguration.set(
|
||||
base + "wall.filling",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
|
||||
);
|
||||
break;
|
||||
case "b":
|
||||
case "border":
|
||||
this.worldConfiguration.set(base + "wall.block",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString());
|
||||
this.worldConfiguration.set(
|
||||
base + "wall.block",
|
||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
|
||||
);
|
||||
break;
|
||||
default:
|
||||
logger.error("Key not found: {}", element);
|
||||
@ -1117,7 +1171,10 @@ public class PlotSquared {
|
||||
* @param file Name of the file inside PlotSquared.jar
|
||||
* @param folder The output location relative to /plugins/PlotSquared/
|
||||
*/
|
||||
public void copyFile(String file, String folder) {
|
||||
public void copyFile(
|
||||
final @NonNull String file,
|
||||
final @NonNull String folder
|
||||
) {
|
||||
try {
|
||||
File output = this.platform.getDirectory();
|
||||
if (!output.exists()) {
|
||||
@ -1203,10 +1260,10 @@ public class PlotSquared {
|
||||
ArrayList<int[]> regions = new ArrayList<>();
|
||||
ArrayList<int[]> chunks = new ArrayList<>();
|
||||
for (BlockVector2 r : HybridUtils.regions) {
|
||||
regions.add(new int[] {r.getBlockX(), r.getBlockZ()});
|
||||
regions.add(new int[]{r.getBlockX(), r.getBlockZ()});
|
||||
}
|
||||
for (BlockVector2 c : HybridUtils.chunks) {
|
||||
chunks.add(new int[] {c.getBlockX(), c.getBlockZ()});
|
||||
chunks.add(new int[]{c.getBlockX(), c.getBlockZ()});
|
||||
}
|
||||
List<Object> list = new ArrayList<>();
|
||||
list.add(regions);
|
||||
@ -1238,7 +1295,8 @@ public class PlotSquared {
|
||||
Database database;
|
||||
if (Storage.MySQL.USE) {
|
||||
database = new MySQL(Storage.MySQL.HOST, Storage.MySQL.PORT, Storage.MySQL.DATABASE,
|
||||
Storage.MySQL.USER, Storage.MySQL.PASSWORD);
|
||||
Storage.MySQL.USER, Storage.MySQL.PASSWORD
|
||||
);
|
||||
} else if (Storage.SQLite.USE) {
|
||||
File file = FileUtils.getFile(platform.getDirectory(), Storage.SQLite.DB + ".db");
|
||||
database = new SQLite(file);
|
||||
@ -1247,7 +1305,13 @@ public class PlotSquared {
|
||||
this.platform.shutdown(); //shutdown used instead of disable because no database is set
|
||||
return;
|
||||
}
|
||||
DBFunc.dbManager = new SQLManager(database, Storage.PREFIX, this.eventDispatcher, this.plotListener, this.worldConfiguration);
|
||||
DBFunc.dbManager = new SQLManager(
|
||||
database,
|
||||
Storage.PREFIX,
|
||||
this.eventDispatcher,
|
||||
this.plotListener,
|
||||
this.worldConfiguration
|
||||
);
|
||||
this.plots_tmp = DBFunc.getPlots();
|
||||
if (getPlotAreaManager() instanceof SinglePlotAreaManager) {
|
||||
SinglePlotArea area = ((SinglePlotAreaManager) getPlotAreaManager()).getArea();
|
||||
@ -1261,28 +1325,31 @@ public class PlotSquared {
|
||||
}
|
||||
this.clustersTmp = DBFunc.getClusters();
|
||||
} catch (ClassNotFoundException | SQLException e) {
|
||||
logger.error("Failed to open database connection ({}). Disabling PlotSquared", Storage.MySQL.USE ? "MySQL" : "SQLite");
|
||||
logger.error(
|
||||
"Failed to open database connection ({}). Disabling PlotSquared",
|
||||
Storage.MySQL.USE ? "MySQL" : "SQLite"
|
||||
);
|
||||
logger.error("==== Here is an ugly stacktrace, if you are interested in those things ===");
|
||||
e.printStackTrace();
|
||||
logger.error("==== End of stacktrace ====");
|
||||
logger.error("Please go to the {} 'storage.yml' and configure the database correctly",
|
||||
platform.pluginName());
|
||||
logger.error(
|
||||
"Please go to the {} 'storage.yml' and configure the database correctly",
|
||||
platform.pluginName()
|
||||
);
|
||||
this.platform.shutdown(); //shutdown used instead of disable because of database error
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the default configuration.
|
||||
*
|
||||
* @throws IOException if the config failed to save
|
||||
*/
|
||||
public void setupConfig() throws IOException {
|
||||
public void setupConfig() {
|
||||
String lastVersionString = this.getConfig().getString("version");
|
||||
if (lastVersionString != null) {
|
||||
String[] split = lastVersionString.split("\\.");
|
||||
int[] lastVersion = new int[] {Integer.parseInt(split[0]), Integer.parseInt(split[1]),
|
||||
int[] lastVersion = new int[]{Integer.parseInt(split[0]), Integer.parseInt(split[1]),
|
||||
Integer.parseInt(split[2])};
|
||||
if (checkVersion(new int[] {3, 4, 0}, lastVersion)) {
|
||||
if (checkVersion(new int[]{3, 4, 0}, lastVersion)) {
|
||||
Settings.convertLegacy(configFile);
|
||||
if (getConfig().contains("worlds")) {
|
||||
ConfigurationSection worldSection =
|
||||
@ -1350,7 +1417,8 @@ public class PlotSquared {
|
||||
converter.convert();
|
||||
this.worldConfiguration.set("worlds", worlds);
|
||||
this.setConfigurationVersion(LegacyConverter.CONFIGURATION_VERSION);
|
||||
logger.info("The conversion has finished. PlotSquared will now be disabled and the new configuration file will be used at next startup. Please review the new worlds.yml file. Please note that schematics will not be converted, as we are now using WorldEdit to handle schematics. You need to re-generate the schematics.");
|
||||
logger.info(
|
||||
"The conversion has finished. PlotSquared will now be disabled and the new configuration file will be used at next startup. Please review the new worlds.yml file. Please note that schematics will not be converted, as we are now using WorldEdit to handle schematics. You need to re-generate the schematics.");
|
||||
} catch (final Exception e) {
|
||||
logger.error("Failed to convert the legacy configuration file. See stack trace for information.", e);
|
||||
}
|
||||
@ -1387,12 +1455,12 @@ public class PlotSquared {
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getConfigurationVersion() {
|
||||
public @NonNull String getConfigurationVersion() {
|
||||
return this.worldConfiguration.get("configuration_version", LegacyConverter.CONFIGURATION_VERSION)
|
||||
.toString();
|
||||
}
|
||||
|
||||
public void setConfigurationVersion(final String newVersion) throws IOException {
|
||||
public void setConfigurationVersion(final @NonNull String newVersion) throws IOException {
|
||||
this.worldConfiguration.set("configuration_version", newVersion);
|
||||
this.worldConfiguration.save(this.worldsFile);
|
||||
}
|
||||
@ -1418,7 +1486,7 @@ public class PlotSquared {
|
||||
}
|
||||
}
|
||||
|
||||
public void forEachPlotRaw(Consumer<Plot> consumer) {
|
||||
public void forEachPlotRaw(final @NonNull Consumer<Plot> consumer) {
|
||||
for (final PlotArea area : this.getPlotAreaManager().getAllPlotAreas()) {
|
||||
area.getPlots().forEach(consumer);
|
||||
}
|
||||
@ -1436,8 +1504,10 @@ public class PlotSquared {
|
||||
* @param chunkCoordinates Chunk coordinates
|
||||
* @return True if the chunk uses non-standard generation, false if not
|
||||
*/
|
||||
public boolean isNonStandardGeneration(@Nonnull final String world,
|
||||
@Nonnull final BlockVector2 chunkCoordinates) {
|
||||
public boolean isNonStandardGeneration(
|
||||
final @NonNull String world,
|
||||
final @NonNull BlockVector2 chunkCoordinates
|
||||
) {
|
||||
final Location location = Location.at(world, chunkCoordinates.getBlockX() << 4, 64, chunkCoordinates.getBlockZ() << 4);
|
||||
final PlotArea area = getPlotAreaManager().getApplicablePlotArea(location);
|
||||
if (area == null) {
|
||||
@ -1446,31 +1516,31 @@ public class PlotSquared {
|
||||
return area.getTerrain() != PlotAreaTerrainType.NONE;
|
||||
}
|
||||
|
||||
public YamlConfiguration getConfig() {
|
||||
public @NonNull YamlConfiguration getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
public UUIDPipeline getImpromptuUUIDPipeline() {
|
||||
public @NonNull UUIDPipeline getImpromptuUUIDPipeline() {
|
||||
return this.impromptuUUIDPipeline;
|
||||
}
|
||||
|
||||
public UUIDPipeline getBackgroundUUIDPipeline() {
|
||||
public @NonNull UUIDPipeline getBackgroundUUIDPipeline() {
|
||||
return this.backgroundUUIDPipeline;
|
||||
}
|
||||
|
||||
public WorldEdit getWorldEdit() {
|
||||
public @NonNull WorldEdit getWorldEdit() {
|
||||
return this.worldedit;
|
||||
}
|
||||
|
||||
public File getConfigFile() {
|
||||
public @NonNull File getConfigFile() {
|
||||
return this.configFile;
|
||||
}
|
||||
|
||||
public File getWorldsFile() {
|
||||
public @NonNull File getWorldsFile() {
|
||||
return this.worldsFile;
|
||||
}
|
||||
|
||||
public YamlConfiguration getWorldConfiguration() {
|
||||
public @NonNull YamlConfiguration getWorldConfiguration() {
|
||||
return this.worldConfiguration;
|
||||
}
|
||||
|
||||
@ -1482,9 +1552,11 @@ public class PlotSquared {
|
||||
* @return Map instance
|
||||
* @see #registerCaptionMap(String, CaptionMap) To register a caption map
|
||||
*/
|
||||
@Nonnull public CaptionMap getCaptionMap(@Nonnull final String namespace) {
|
||||
return this.captionMaps.computeIfAbsent(namespace.toLowerCase(Locale.ENGLISH),
|
||||
missingNamespace -> new DummyCaptionMap());
|
||||
public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) {
|
||||
return this.captionMaps.computeIfAbsent(
|
||||
namespace.toLowerCase(Locale.ENGLISH),
|
||||
missingNamespace -> new DummyCaptionMap()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1493,22 +1565,29 @@ public class PlotSquared {
|
||||
* @param namespace Namespace
|
||||
* @param captionMap Map instance
|
||||
*/
|
||||
public void registerCaptionMap(@Nonnull final String namespace, @Nonnull final CaptionMap captionMap) {
|
||||
public void registerCaptionMap(
|
||||
final @NonNull String namespace,
|
||||
final @NonNull CaptionMap captionMap
|
||||
) {
|
||||
if (namespace.equalsIgnoreCase(TranslatableCaption.DEFAULT_NAMESPACE)) {
|
||||
throw new IllegalArgumentException("Cannot replace default caption map");
|
||||
}
|
||||
this.captionMaps.put(namespace.toLowerCase(Locale.ENGLISH), captionMap);
|
||||
}
|
||||
|
||||
public EventDispatcher getEventDispatcher() {
|
||||
public @NonNull EventDispatcher getEventDispatcher() {
|
||||
return this.eventDispatcher;
|
||||
}
|
||||
|
||||
public PlotListener getPlotListener() {
|
||||
public @NonNull PlotListener getPlotListener() {
|
||||
return this.plotListener;
|
||||
}
|
||||
|
||||
public enum SortType {
|
||||
CREATION_DATE, CREATION_DATE_TIMESTAMP, LAST_MODIFIED, DISTANCE_FROM_ORIGIN
|
||||
CREATION_DATE,
|
||||
CREATION_DATE_TIMESTAMP,
|
||||
LAST_MODIFIED,
|
||||
DISTANCE_FROM_ORIGIN
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,13 +25,23 @@
|
||||
*/
|
||||
package com.plotsquared.core;
|
||||
|
||||
public class PlotVersion {
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public final class PlotVersion {
|
||||
|
||||
public final int year, month, day, hash;
|
||||
public final String versionString;
|
||||
public final int[] version;
|
||||
public final String suffix;
|
||||
|
||||
public PlotVersion(int year, int month, int day, int hash, String versionString) {
|
||||
public PlotVersion(
|
||||
final int year,
|
||||
final int month,
|
||||
final int day,
|
||||
final int hash,
|
||||
final String rawVersion
|
||||
) {
|
||||
String versionString = rawVersion;
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
this.day = day;
|
||||
@ -51,7 +61,12 @@ public class PlotVersion {
|
||||
version[2] = verArray.length > 2 ? Integer.parseInt(verArray[2]) : 0;
|
||||
}
|
||||
|
||||
public PlotVersion(String versionString, String commit, String date) {
|
||||
public PlotVersion(
|
||||
final String rawVersion,
|
||||
final String commit,
|
||||
final String date
|
||||
) {
|
||||
String versionString = rawVersion;
|
||||
int dash = versionString.indexOf('-');
|
||||
if (dash != -1) {
|
||||
suffix = versionString.substring(dash);
|
||||
@ -73,7 +88,11 @@ public class PlotVersion {
|
||||
this.day = Integer.parseInt(split1[2]);
|
||||
}
|
||||
|
||||
public static PlotVersion tryParse(String versionString, String commit, String date) {
|
||||
public static @NonNull PlotVersion tryParse(
|
||||
final @NonNull String versionString,
|
||||
final @NonNull String commit,
|
||||
final @NonNull String date
|
||||
) {
|
||||
try {
|
||||
return new PlotVersion(versionString, commit, date);
|
||||
} catch (Exception e) {
|
||||
@ -82,7 +101,7 @@ public class PlotVersion {
|
||||
}
|
||||
}
|
||||
|
||||
public String versionString() {
|
||||
public @NonNull String versionString() {
|
||||
if (hash == 0 && versionString == null) {
|
||||
return "NoVer-SNAPSHOT";
|
||||
} else {
|
||||
@ -90,7 +109,8 @@ public class PlotVersion {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
@Override
|
||||
public String toString() {
|
||||
if (hash == 0 && versionString == null) {
|
||||
return "PlotSquared-NoVer-SNAPSHOT";
|
||||
} else {
|
||||
@ -104,7 +124,7 @@ public class PlotVersion {
|
||||
* @param versionString the version to compare
|
||||
* @return true if the given version is a "later" version
|
||||
*/
|
||||
public boolean isLaterVersion(String versionString) {
|
||||
public boolean isLaterVersion(final @NonNull String versionString) {
|
||||
int dash = versionString.indexOf('-');
|
||||
String[] verArray =
|
||||
versionString.substring(0, dash == -1 ? versionString.length() : dash).split("\\.");
|
||||
@ -137,5 +157,4 @@ public class PlotVersion {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -25,7 +25,8 @@
|
||||
*/
|
||||
package com.plotsquared.core.backup;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
@ -38,7 +39,8 @@ public class Backup {
|
||||
|
||||
private final BackupProfile owner;
|
||||
private final long creationTime;
|
||||
@Nullable private final Path file;
|
||||
@Nullable
|
||||
private final Path file;
|
||||
|
||||
Backup(final BackupProfile owner, final long creationTime, final Path file) {
|
||||
this.owner = owner;
|
||||
@ -67,7 +69,8 @@ public class Backup {
|
||||
return this.creationTime;
|
||||
}
|
||||
|
||||
@Nullable public Path getFile() {
|
||||
public @Nullable Path getFile() {
|
||||
return this.file;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,9 +28,9 @@ package com.plotsquared.core.backup;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -45,7 +45,7 @@ public interface BackupManager {
|
||||
* @param plot Plot to perform the automatic backup on
|
||||
* @param whenDone Action that runs when the automatic backup has been completed
|
||||
*/
|
||||
static void backup(@Nullable PlotPlayer player, @Nonnull final Plot plot, @Nonnull Runnable whenDone) {
|
||||
static void backup(@Nullable PlotPlayer player, final @NonNull Plot plot, @NonNull Runnable whenDone) {
|
||||
Objects.requireNonNull(PlotSquared.platform()).backupManager().automaticBackup(player, plot, whenDone);
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ public interface BackupManager {
|
||||
* @param plot Plot to get the backup profile for
|
||||
* @return Backup profile
|
||||
*/
|
||||
@Nonnull BackupProfile getProfile(@Nonnull final Plot plot);
|
||||
@NonNull BackupProfile getProfile(final @NonNull Plot plot);
|
||||
|
||||
/**
|
||||
* This will perform an automatic backup of the plot iff the plot has an owner,
|
||||
@ -67,14 +67,14 @@ public interface BackupManager {
|
||||
* @param plot Plot to perform the automatic backup on
|
||||
* @param whenDone Action that runs when the automatic backup has been completed
|
||||
*/
|
||||
void automaticBackup(@Nullable PlotPlayer player, @Nonnull final Plot plot, @Nonnull Runnable whenDone);
|
||||
void automaticBackup(@Nullable PlotPlayer player, final @NonNull Plot plot, @NonNull Runnable whenDone);
|
||||
|
||||
/**
|
||||
* Get the directory in which backups are stored
|
||||
*
|
||||
* @return Backup directory path
|
||||
*/
|
||||
@Nonnull Path getBackupPath();
|
||||
@NonNull Path getBackupPath();
|
||||
|
||||
/**
|
||||
* Get the maximum amount of backups that may be stored for
|
||||
|
@ -26,9 +26,9 @@
|
||||
package com.plotsquared.core.backup;
|
||||
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@ -40,7 +40,7 @@ public interface BackupProfile {
|
||||
*
|
||||
* @return Future that will be completed with available backups
|
||||
*/
|
||||
@Nonnull CompletableFuture<List<Backup>> listBackups();
|
||||
@NonNull CompletableFuture<List<Backup>> listBackups();
|
||||
|
||||
/**
|
||||
* Remove all backups stored for this profile
|
||||
@ -53,7 +53,7 @@ public interface BackupProfile {
|
||||
*
|
||||
* @return Folder that contains the backups for this profile
|
||||
*/
|
||||
@Nonnull Path getBackupDirectory();
|
||||
@NonNull Path getBackupDirectory();
|
||||
|
||||
/**
|
||||
* Create a backup of the plot. If the profile is at the
|
||||
@ -61,7 +61,7 @@ public interface BackupProfile {
|
||||
*
|
||||
* @return Future that completes with the created backup.
|
||||
*/
|
||||
@Nonnull CompletableFuture<Backup> createBackup();
|
||||
@NonNull CompletableFuture<Backup> createBackup();
|
||||
|
||||
/**
|
||||
* Restore a backup
|
||||
@ -70,6 +70,6 @@ public interface BackupProfile {
|
||||
* @param player The player restoring the backup
|
||||
* @return Future that completes when the backup has finished
|
||||
*/
|
||||
@Nonnull CompletableFuture<Void> restoreBackup(@Nonnull final Backup backup, @Nullable PlotPlayer<?> player);
|
||||
@NonNull CompletableFuture<Void> restoreBackup(final @NonNull Backup backup, @Nullable PlotPlayer<?> player);
|
||||
|
||||
}
|
||||
|
@ -29,35 +29,43 @@ import com.google.inject.Singleton;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Singleton public class NullBackupManager implements BackupManager {
|
||||
@Singleton
|
||||
public class NullBackupManager implements BackupManager {
|
||||
|
||||
@Override @Nonnull public BackupProfile getProfile(@Nonnull Plot plot) {
|
||||
@Override
|
||||
public @NonNull BackupProfile getProfile(@NonNull Plot plot) {
|
||||
return new NullBackupProfile();
|
||||
}
|
||||
|
||||
@Override public void automaticBackup(@Nullable PlotPlayer plotPlayer,
|
||||
@Nonnull Plot plot, @Nonnull Runnable whenDone) {
|
||||
@Override
|
||||
public void automaticBackup(
|
||||
@Nullable PlotPlayer plotPlayer,
|
||||
@NonNull Plot plot, @NonNull Runnable whenDone
|
||||
) {
|
||||
whenDone.run();
|
||||
}
|
||||
|
||||
@Override @Nonnull public Path getBackupPath() {
|
||||
@Override
|
||||
public @NonNull Path getBackupPath() {
|
||||
return Objects.requireNonNull(PlotSquared.platform()).getDirectory().toPath();
|
||||
}
|
||||
|
||||
@Override public int getBackupLimit() {
|
||||
@Override
|
||||
public int getBackupLimit() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override public boolean shouldAutomaticallyBackup() {
|
||||
@Override
|
||||
public boolean shouldAutomaticallyBackup() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -26,9 +26,9 @@
|
||||
package com.plotsquared.core.backup;
|
||||
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
@ -41,22 +41,27 @@ import java.util.concurrent.CompletableFuture;
|
||||
*/
|
||||
public class NullBackupProfile implements BackupProfile {
|
||||
|
||||
@Override @Nonnull public CompletableFuture<List<Backup>> listBackups() {
|
||||
@Override
|
||||
public @NonNull CompletableFuture<List<Backup>> listBackups() {
|
||||
return CompletableFuture.completedFuture(Collections.emptyList());
|
||||
}
|
||||
|
||||
@Override public void destroy(){
|
||||
@Override
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
@Override @Nonnull public Path getBackupDirectory() {
|
||||
@Override
|
||||
public @NonNull Path getBackupDirectory() {
|
||||
return new File(".").toPath();
|
||||
}
|
||||
|
||||
@Override @Nonnull public CompletableFuture<Backup> createBackup() {
|
||||
@Override
|
||||
public @NonNull CompletableFuture<Backup> createBackup() {
|
||||
throw new UnsupportedOperationException("Cannot create backup of an unowned plot");
|
||||
}
|
||||
|
||||
@Override @Nonnull public CompletableFuture<Void> restoreBackup(@Nonnull final Backup backup, @Nullable PlotPlayer<?> player) {
|
||||
@Override
|
||||
public @NonNull CompletableFuture<Void> restoreBackup(final @NonNull Backup backup, @Nullable PlotPlayer<?> player) {
|
||||
return CompletableFuture.completedFuture(null);
|
||||
}
|
||||
|
||||
|
@ -36,9 +36,9 @@ import com.plotsquared.core.util.SchematicHandler;
|
||||
import com.plotsquared.core.util.task.RunnableVal;
|
||||
import com.plotsquared.core.util.task.TaskManager;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
@ -64,24 +64,42 @@ public class PlayerBackupProfile implements BackupProfile {
|
||||
private final Plot plot;
|
||||
private final BackupManager backupManager;
|
||||
private final SchematicHandler schematicHandler;
|
||||
|
||||
@Inject public PlayerBackupProfile(@Assisted @Nonnull final UUID owner, @Assisted @Nonnull final Plot plot,
|
||||
@Nonnull final BackupManager backupManager, @Nonnull final SchematicHandler schematicHandler) {
|
||||
private final Object backupLock = new Object();
|
||||
private volatile List<Backup> backupCache;
|
||||
@Inject
|
||||
public PlayerBackupProfile(
|
||||
@Assisted final @NonNull UUID owner, @Assisted final @NonNull Plot plot,
|
||||
final @NonNull BackupManager backupManager, final @NonNull SchematicHandler schematicHandler
|
||||
) {
|
||||
this.owner = owner;
|
||||
this.plot = plot;
|
||||
this.backupManager = backupManager;
|
||||
this.schematicHandler = schematicHandler;
|
||||
}
|
||||
|
||||
private volatile List<Backup> backupCache;
|
||||
private final Object backupLock = new Object();
|
||||
|
||||
private static boolean isValidFile(@Nonnull final Path path) {
|
||||
private static boolean isValidFile(final @NonNull Path path) {
|
||||
final String name = path.getFileName().toString();
|
||||
return name.endsWith(".schem") || name.endsWith(".schematic");
|
||||
}
|
||||
|
||||
@Override @Nonnull public CompletableFuture<List<Backup>> listBackups() {
|
||||
private static Path resolve(final @NonNull Path parent, final String child) {
|
||||
Path path = parent;
|
||||
try {
|
||||
if (!Files.exists(parent)) {
|
||||
Files.createDirectory(parent);
|
||||
}
|
||||
path = parent.resolve(child);
|
||||
if (!Files.exists(path)) {
|
||||
Files.createDirectory(path);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull CompletableFuture<List<Backup>> listBackups() {
|
||||
synchronized (this.backupLock) {
|
||||
if (this.backupCache != null) {
|
||||
return CompletableFuture.completedFuture(backupCache);
|
||||
@ -117,7 +135,8 @@ public class PlayerBackupProfile implements BackupProfile {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void destroy() {
|
||||
@Override
|
||||
public void destroy() {
|
||||
this.listBackups().whenCompleteAsync((backups, error) -> {
|
||||
if (error != null) {
|
||||
error.printStackTrace();
|
||||
@ -127,28 +146,15 @@ public class PlayerBackupProfile implements BackupProfile {
|
||||
});
|
||||
}
|
||||
|
||||
@Nonnull public Path getBackupDirectory() {
|
||||
return resolve(resolve(resolve(backupManager.getBackupPath(), Objects.requireNonNull(plot.getArea().toString(), "plot area id")),
|
||||
Objects.requireNonNull(plot.getId().toDashSeparatedString(), "plot id")), Objects.requireNonNull(owner.toString(), "owner"));
|
||||
public @NonNull Path getBackupDirectory() {
|
||||
return resolve(resolve(
|
||||
resolve(backupManager.getBackupPath(), Objects.requireNonNull(plot.getArea().toString(), "plot area id")),
|
||||
Objects.requireNonNull(plot.getId().toDashSeparatedString(), "plot id")
|
||||
), Objects.requireNonNull(owner.toString(), "owner"));
|
||||
}
|
||||
|
||||
private static Path resolve(@Nonnull final Path parent, final String child) {
|
||||
Path path = parent;
|
||||
try {
|
||||
if (!Files.exists(parent)) {
|
||||
Files.createDirectory(parent);
|
||||
}
|
||||
path = parent.resolve(child);
|
||||
if (!Files.exists(path)) {
|
||||
Files.createDirectory(path);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
@Override @Nonnull public CompletableFuture<Backup> createBackup() {
|
||||
@Override
|
||||
public @NonNull CompletableFuture<Backup> createBackup() {
|
||||
final CompletableFuture<Backup> future = new CompletableFuture<>();
|
||||
this.listBackups().thenAcceptAsync(backups -> {
|
||||
synchronized (this.backupLock) {
|
||||
@ -158,7 +164,8 @@ public class PlayerBackupProfile implements BackupProfile {
|
||||
final List<Plot> plots = Collections.singletonList(plot);
|
||||
final boolean result = this.schematicHandler.exportAll(plots, getBackupDirectory().toFile(),
|
||||
"%world%-%id%-" + System.currentTimeMillis(), () ->
|
||||
future.complete(new Backup(this, System.currentTimeMillis(), null)));
|
||||
future.complete(new Backup(this, System.currentTimeMillis(), null))
|
||||
);
|
||||
if (!result) {
|
||||
future.completeExceptionally(new RuntimeException("Failed to complete the backup"));
|
||||
}
|
||||
@ -168,7 +175,8 @@ public class PlayerBackupProfile implements BackupProfile {
|
||||
return future;
|
||||
}
|
||||
|
||||
@Override @Nonnull public CompletableFuture<Void> restoreBackup(@Nonnull final Backup backup, @Nullable PlotPlayer<?> player) {
|
||||
@Override
|
||||
public @NonNull CompletableFuture<Void> restoreBackup(final @NonNull Backup backup, @Nullable PlotPlayer<?> player) {
|
||||
final CompletableFuture<Void> future = new CompletableFuture<>();
|
||||
if (backup.getFile() == null || !Files.exists(backup.getFile())) {
|
||||
future.completeExceptionally(new IllegalArgumentException("The specific backup does not exist"));
|
||||
@ -181,15 +189,19 @@ public class PlayerBackupProfile implements BackupProfile {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (schematic == null) {
|
||||
future.completeExceptionally(new IllegalArgumentException("The backup is non-existent or not in the correct format"));
|
||||
future.completeExceptionally(new IllegalArgumentException(
|
||||
"The backup is non-existent or not in the correct format"));
|
||||
} else {
|
||||
this.schematicHandler.paste(schematic, plot, 0, 1, 0, false, player, new RunnableVal<Boolean>() {
|
||||
@Override public void run(Boolean value) {
|
||||
@Override
|
||||
public void run(Boolean value) {
|
||||
if (value) {
|
||||
future.complete(null);
|
||||
} else {
|
||||
future.completeExceptionally(new RuntimeException(MINI_MESSAGE.stripTokens(
|
||||
TranslatableCaption.of("schematics.schematic_paste_failed").getComponent(ConsolePlayer.getConsole()))));
|
||||
TranslatableCaption
|
||||
.of("schematics.schematic_paste_failed")
|
||||
.getComponent(ConsolePlayer.getConsole()))));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -38,9 +38,9 @@ import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.util.task.TaskManager;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
@ -50,7 +50,8 @@ import java.util.concurrent.TimeUnit;
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Singleton public class SimpleBackupManager implements BackupManager {
|
||||
@Singleton
|
||||
public class SimpleBackupManager implements BackupManager {
|
||||
|
||||
private final Path backupPath;
|
||||
private final boolean automaticBackup;
|
||||
@ -59,7 +60,8 @@ import java.util.concurrent.TimeUnit;
|
||||
.expireAfterAccess(3, TimeUnit.MINUTES).build();
|
||||
private final PlayerBackupProfileFactory playerBackupProfileFactory;
|
||||
|
||||
@Inject public SimpleBackupManager(@Nonnull final PlayerBackupProfileFactory playerBackupProfileFactory) throws Exception {
|
||||
@Inject
|
||||
public SimpleBackupManager(final @NonNull PlayerBackupProfileFactory playerBackupProfileFactory) throws Exception {
|
||||
this.playerBackupProfileFactory = playerBackupProfileFactory;
|
||||
this.backupPath = Objects.requireNonNull(PlotSquared.platform()).getDirectory().toPath().resolve("backups");
|
||||
if (!Files.exists(backupPath)) {
|
||||
@ -69,18 +71,24 @@ import java.util.concurrent.TimeUnit;
|
||||
this.backupLimit = Settings.Backup.BACKUP_LIMIT;
|
||||
}
|
||||
|
||||
public SimpleBackupManager(final Path backupPath, final boolean automaticBackup,
|
||||
final int backupLimit, final PlayerBackupProfileFactory playerBackupProfileFactory) {
|
||||
public SimpleBackupManager(
|
||||
final Path backupPath, final boolean automaticBackup,
|
||||
final int backupLimit, final PlayerBackupProfileFactory playerBackupProfileFactory
|
||||
) {
|
||||
this.backupPath = backupPath;
|
||||
this.automaticBackup = automaticBackup;
|
||||
this.backupLimit = backupLimit;
|
||||
this.playerBackupProfileFactory = playerBackupProfileFactory;
|
||||
}
|
||||
|
||||
@Override @Nonnull public BackupProfile getProfile(@Nonnull final Plot plot) {
|
||||
@Override
|
||||
public @NonNull BackupProfile getProfile(final @NonNull Plot plot) {
|
||||
if (plot.hasOwner()) {
|
||||
try {
|
||||
return backupProfileCache.get(new PlotCacheKey(plot), () -> this.playerBackupProfileFactory.create(plot.getOwnerAbs(), plot));
|
||||
return backupProfileCache.get(
|
||||
new PlotCacheKey(plot),
|
||||
() -> this.playerBackupProfileFactory.create(plot.getOwnerAbs(), plot)
|
||||
);
|
||||
} catch (ExecutionException e) {
|
||||
final BackupProfile profile = this.playerBackupProfileFactory.create(plot.getOwnerAbs(), plot);
|
||||
this.backupProfileCache.put(new PlotCacheKey(plot), profile);
|
||||
@ -90,19 +98,25 @@ import java.util.concurrent.TimeUnit;
|
||||
return new NullBackupProfile();
|
||||
}
|
||||
|
||||
@Override public void automaticBackup(@Nullable PlotPlayer player, @Nonnull final Plot plot, @Nonnull Runnable whenDone) {
|
||||
@Override
|
||||
public void automaticBackup(@Nullable PlotPlayer player, final @NonNull Plot plot, @NonNull Runnable whenDone) {
|
||||
final BackupProfile profile;
|
||||
if (!this.shouldAutomaticallyBackup() || (profile = getProfile(plot)) instanceof NullBackupProfile) {
|
||||
whenDone.run();
|
||||
} else {
|
||||
if (player != null) {
|
||||
player.sendMessage(TranslatableCaption.of("backups.backup_automatic_started"), Template.of("plot", String.valueOf(plot.getId())));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("backups.backup_automatic_started"),
|
||||
Template.of("plot", String.valueOf(plot.getId()))
|
||||
);
|
||||
}
|
||||
profile.createBackup().whenComplete((backup, throwable) -> {
|
||||
if (throwable != null) {
|
||||
if (player != null) {
|
||||
player.sendMessage(TranslatableCaption.of("backups.backup_automatic_failure"),
|
||||
Templates.of("reason", throwable.getMessage()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("backups.backup_automatic_failure"),
|
||||
Templates.of("reason", throwable.getMessage())
|
||||
);
|
||||
}
|
||||
throwable.printStackTrace();
|
||||
} else {
|
||||
@ -115,7 +129,8 @@ import java.util.concurrent.TimeUnit;
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean shouldAutomaticallyBackup() {
|
||||
@Override
|
||||
public boolean shouldAutomaticallyBackup() {
|
||||
return this.automaticBackup;
|
||||
}
|
||||
|
||||
@ -135,7 +150,8 @@ import java.util.concurrent.TimeUnit;
|
||||
this.plot = plot;
|
||||
}
|
||||
|
||||
@Override public boolean equals(final Object o) {
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
@ -148,9 +164,11 @@ import java.util.concurrent.TimeUnit;
|
||||
&& Objects.equals(plot.getOwnerAbs(), that.plot.getOwnerAbs());
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(plot.getArea(), plot.getId(), plot.getOwnerAbs());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ package com.plotsquared.core.collection;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class ArrayUtil {
|
||||
|
||||
public static final <T> T[] concatAll(T[] first, T[]... rest) {
|
||||
int totalLength = first.length;
|
||||
for (T[] array : rest) {
|
||||
@ -41,4 +42,5 @@ public class ArrayUtil {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ public class ByteArrayUtilities {
|
||||
}
|
||||
|
||||
public static byte[] booleanToBytes(boolean b) {
|
||||
return new byte[] {(byte) (b ? 1 : 0)};
|
||||
return new byte[]{(byte) (b ? 1 : 0)};
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
public class FlatRandomCollection<T> extends RandomCollection<T> {
|
||||
|
||||
private T[] values;
|
||||
|
||||
public FlatRandomCollection(Map<T, Double> weights, Random random) {
|
||||
@ -63,7 +64,9 @@ public class FlatRandomCollection<T> extends RandomCollection<T> {
|
||||
this.values = (T[]) parsed.toArray();
|
||||
}
|
||||
|
||||
@Override public T next() {
|
||||
@Override
|
||||
public T next() {
|
||||
return values[random.nextInt(values.length)];
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -128,7 +128,8 @@ public class QuadMap<T> {
|
||||
if (this.one == null) {
|
||||
this.one =
|
||||
newInstance(this.newsize, this.x + this.newsize, this.z + this.newsize,
|
||||
this.min);
|
||||
this.min
|
||||
);
|
||||
}
|
||||
this.one.add(area);
|
||||
recalculateSkip();
|
||||
@ -137,7 +138,8 @@ public class QuadMap<T> {
|
||||
if (this.two == null) {
|
||||
this.two =
|
||||
newInstance(this.newsize, this.x + this.newsize, this.z - this.newsize,
|
||||
this.min);
|
||||
this.min
|
||||
);
|
||||
}
|
||||
this.two.add(area);
|
||||
recalculateSkip();
|
||||
@ -148,7 +150,8 @@ public class QuadMap<T> {
|
||||
if (this.four == null) {
|
||||
this.four =
|
||||
newInstance(this.newsize, this.x - this.newsize, this.z + this.newsize,
|
||||
this.min);
|
||||
this.min
|
||||
);
|
||||
}
|
||||
this.four.add(area);
|
||||
recalculateSkip();
|
||||
@ -157,7 +160,8 @@ public class QuadMap<T> {
|
||||
if (this.three == null) {
|
||||
this.three =
|
||||
newInstance(this.newsize, this.x - this.newsize, this.z - this.newsize,
|
||||
this.min);
|
||||
this.min
|
||||
);
|
||||
}
|
||||
this.three.add(area);
|
||||
recalculateSkip();
|
||||
@ -177,7 +181,8 @@ public class QuadMap<T> {
|
||||
public QuadMap<T> newInstance(int newsize, int x, int z, int min) {
|
||||
try {
|
||||
return new QuadMap<T>(newsize, x, z, min) {
|
||||
@Override public CuboidRegion getRegion(T value) {
|
||||
@Override
|
||||
public CuboidRegion getRegion(T value) {
|
||||
return QuadMap.this.getRegion(value);
|
||||
}
|
||||
};
|
||||
@ -238,7 +243,7 @@ public class QuadMap<T> {
|
||||
|
||||
public void recalculateSkip() {
|
||||
QuadMap<T> map = null;
|
||||
for (QuadMap<T> current : new QuadMap[] {this.one, this.two, this.three, this.four}) {
|
||||
for (QuadMap<T> current : new QuadMap[]{this.one, this.two, this.three, this.four}) {
|
||||
if (current != null) {
|
||||
if (map != null) {
|
||||
this.skip = null;
|
||||
@ -321,4 +326,5 @@ public class QuadMap<T> {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ import java.util.Random;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
public abstract class RandomCollection<T> {
|
||||
|
||||
protected Random random;
|
||||
|
||||
public RandomCollection(Map<T, Double> weights, Random random) {
|
||||
@ -55,4 +56,5 @@ public abstract class RandomCollection<T> {
|
||||
}
|
||||
|
||||
public abstract T next();
|
||||
|
||||
}
|
||||
|
@ -43,8 +43,9 @@ public class SimpleRandomCollection<E> extends RandomCollection<E> {
|
||||
}
|
||||
|
||||
public void add(double weight, E result) {
|
||||
if (weight <= 0)
|
||||
if (weight <= 0) {
|
||||
return;
|
||||
}
|
||||
total += weight;
|
||||
map.put(total, result);
|
||||
}
|
||||
@ -52,4 +53,5 @@ public class SimpleRandomCollection<E> extends RandomCollection<E> {
|
||||
public E next() {
|
||||
return map.ceilingEntry(random.nextDouble()).getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,9 +27,9 @@ package com.plotsquared.core.command;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.database.DBFunc;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.util.EventDispatcher;
|
||||
@ -39,8 +39,8 @@ import com.plotsquared.core.util.TabCompletions;
|
||||
import com.plotsquared.core.util.task.RunnableVal2;
|
||||
import com.plotsquared.core.util.task.RunnableVal3;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
@ -57,37 +57,46 @@ public class Add extends Command {
|
||||
|
||||
private final EventDispatcher eventDispatcher;
|
||||
|
||||
@Inject public Add(@Nonnull final EventDispatcher eventDispatcher) {
|
||||
@Inject
|
||||
public Add(final @NonNull EventDispatcher eventDispatcher) {
|
||||
super(MainCommand.getInstance(), true);
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
|
||||
public CompletableFuture<Boolean> execute(
|
||||
final PlotPlayer<?> player, String[] args,
|
||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
|
||||
RunnableVal2<Command, CommandResult> whenDone
|
||||
) throws CommandException {
|
||||
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
|
||||
checkTrue(plot.hasOwner(), TranslatableCaption.of("info.plot_unowned"));
|
||||
checkTrue(plot.isOwner(player.getUUID()) || Permissions
|
||||
checkTrue(
|
||||
plot.isOwner(player.getUUID()) || Permissions
|
||||
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST),
|
||||
TranslatableCaption.of("permission.no_plot_perms"));
|
||||
TranslatableCaption.of("permission.no_plot_perms")
|
||||
);
|
||||
checkTrue(args.length == 1, TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Template.of("value", "/plot add <player | *>"));
|
||||
Template.of("value", "/plot add <player | *>")
|
||||
);
|
||||
final CompletableFuture<Boolean> future = new CompletableFuture<>();
|
||||
PlayerManager.getUUIDsFromString(args[0], (uuids, throwable) -> {
|
||||
if (throwable != null) {
|
||||
if (throwable instanceof TimeoutException) {
|
||||
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("errors.invalid_player"),
|
||||
Template.of("value", args[0]));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("errors.invalid_player"),
|
||||
Template.of("value", args[0])
|
||||
);
|
||||
}
|
||||
future.completeExceptionally(throwable);
|
||||
return;
|
||||
} else {
|
||||
try {
|
||||
checkTrue(!uuids.isEmpty(), TranslatableCaption.of("errors.invalid_player"),
|
||||
Template.of("value", args[0]));
|
||||
Template.of("value", args[0])
|
||||
);
|
||||
Iterator<UUID> iterator = uuids.iterator();
|
||||
int size = plot.getTrusted().size() + plot.getMembers().size();
|
||||
while (iterator.hasNext()) {
|
||||
@ -95,20 +104,26 @@ public class Add extends Command {
|
||||
if (uuid == DBFunc.EVERYONE && !(
|
||||
Permissions.hasPermission(player, Permission.PERMISSION_TRUST_EVERYONE) || Permissions
|
||||
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.invalid_player"),
|
||||
Template.of("value", PlayerManager.getName(uuid)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("errors.invalid_player"),
|
||||
Template.of("value", PlayerManager.getName(uuid))
|
||||
);
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
if (plot.isOwner(uuid)) {
|
||||
player.sendMessage(TranslatableCaption.of("member.already_added"),
|
||||
Template.of("player", PlayerManager.getName(uuid)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("member.already_added"),
|
||||
Template.of("player", PlayerManager.getName(uuid))
|
||||
);
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
if (plot.getMembers().contains(uuid)) {
|
||||
player.sendMessage(TranslatableCaption.of("member.already_added"),
|
||||
Template.of("player", PlayerManager.getName(uuid)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("member.already_added"),
|
||||
Template.of("player", PlayerManager.getName(uuid))
|
||||
);
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
@ -117,7 +132,10 @@ public class Add extends Command {
|
||||
checkTrue(!uuids.isEmpty(), null);
|
||||
int maxAddSize = Permissions.hasPermissionRange(player, Permission.PERMISSION_ADD, Settings.Limit.MAX_PLOTS);
|
||||
if (size > maxAddSize) {
|
||||
player.sendMessage(TranslatableCaption.of("members.plot_max_members_added"), Template.of("amount", String.valueOf(size - 1)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("members.plot_max_members_added"),
|
||||
Template.of("amount", String.valueOf(size - 1))
|
||||
);
|
||||
return;
|
||||
}
|
||||
// Success
|
||||
@ -145,7 +163,8 @@ public class Add extends Command {
|
||||
return future;
|
||||
}
|
||||
|
||||
@Override public Collection<Command> tab(final PlotPlayer player, final String[] args, final boolean space) {
|
||||
@Override
|
||||
public Collection<Command> tab(final PlotPlayer player, final String[] args, final boolean space) {
|
||||
return TabCompletions.completePlayers(String.join(",", args).trim(), Collections.emptyList());
|
||||
}
|
||||
|
||||
|
@ -26,10 +26,10 @@
|
||||
package com.plotsquared.core.command;
|
||||
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.util.MathMan;
|
||||
@ -50,10 +50,14 @@ import java.util.concurrent.TimeoutException;
|
||||
category = CommandCategory.SETTINGS,
|
||||
requiredType = RequiredType.PLAYER)
|
||||
public class Alias extends SubCommand {
|
||||
private static final Command SET_COMMAND = new Command(null, false, "set", null, RequiredType.NONE, null) {};
|
||||
private static final Command REMOVE_COMMAND = new Command(null, false, "remove", null, RequiredType.NONE, null) {};
|
||||
|
||||
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
private static final Command SET_COMMAND = new Command(null, false, "set", null, RequiredType.NONE, null) {
|
||||
};
|
||||
private static final Command REMOVE_COMMAND = new Command(null, false, "remove", null, RequiredType.NONE, null) {
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
|
||||
if (args.length == 0) {
|
||||
sendUsage(player);
|
||||
@ -94,8 +98,10 @@ public class Alias extends SubCommand {
|
||||
setAlias(player, plot, args[1]);
|
||||
return true;
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_SET)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_SET))
|
||||
);
|
||||
}
|
||||
|
||||
break;
|
||||
@ -109,8 +115,10 @@ public class Alias extends SubCommand {
|
||||
if (permission) {
|
||||
result = removeAlias(player, plot);
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_REMOVE)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_REMOVE))
|
||||
);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -162,8 +170,10 @@ public class Alias extends SubCommand {
|
||||
player.sendMessage(TranslatableCaption.of("alias.alias_is_taken"));
|
||||
} else {
|
||||
plot.setAlias(alias);
|
||||
player.sendMessage(TranslatableCaption.of("alias.alias_set_to"),
|
||||
Template.of("alias", alias));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("alias.alias_set_to"),
|
||||
Template.of("alias", alias)
|
||||
);
|
||||
}
|
||||
}));
|
||||
}
|
||||
@ -171,12 +181,15 @@ public class Alias extends SubCommand {
|
||||
|
||||
private boolean removeAlias(PlotPlayer<?> player, Plot plot) {
|
||||
plot.setAlias(null);
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_REMOVE)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_REMOVE))
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isPermitted(PlotPlayer<?> player, Permission permission) {
|
||||
return Permissions.hasPermission(player, permission);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -76,8 +76,8 @@ import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
@ -114,14 +114,17 @@ public class Area extends SubCommand {
|
||||
|
||||
private final Map<UUID, Map<String, Object>> metaData = new HashMap<>();
|
||||
|
||||
@Inject public Area(@Nonnull final PlotAreaManager plotAreaManager,
|
||||
@WorldConfig @Nonnull final YamlConfiguration worldConfiguration,
|
||||
@WorldFile @Nonnull final File worldFile,
|
||||
@Nonnull final HybridPlotWorldFactory hybridPlotWorldFactory,
|
||||
@Nonnull final SetupUtils setupUtils,
|
||||
@Nonnull final WorldUtil worldUtil,
|
||||
@Nonnull final RegionManager regionManager,
|
||||
@Nonnull final GlobalBlockQueue blockQueue) {
|
||||
@Inject
|
||||
public Area(
|
||||
final @NonNull PlotAreaManager plotAreaManager,
|
||||
@WorldConfig final @NonNull YamlConfiguration worldConfiguration,
|
||||
@WorldFile final @NonNull File worldFile,
|
||||
final @NonNull HybridPlotWorldFactory hybridPlotWorldFactory,
|
||||
final @NonNull SetupUtils setupUtils,
|
||||
final @NonNull WorldUtil worldUtil,
|
||||
final @NonNull RegionManager regionManager,
|
||||
final @NonNull GlobalBlockQueue blockQueue
|
||||
) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.worldConfiguration = worldConfiguration;
|
||||
this.worldFile = worldFile;
|
||||
@ -132,7 +135,8 @@ public class Area extends SubCommand {
|
||||
this.blockQueue = blockQueue;
|
||||
}
|
||||
|
||||
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
if (args.length == 0) {
|
||||
sendUsage(player);
|
||||
return false;
|
||||
@ -144,11 +148,17 @@ public class Area extends SubCommand {
|
||||
return false;
|
||||
}
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(TranslatableCaption.of("single.single_area_needs_name"), Template.of("command", "/plot area single <name>"));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("single.single_area_needs_name"),
|
||||
Template.of("command", "/plot area single <name>")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
final PlotArea existingArea = this.plotAreaManager.getPlotArea(player.getLocation().getWorldName(), args[1]);
|
||||
@ -174,8 +184,10 @@ public class Area extends SubCommand {
|
||||
player.sendMessage(TranslatableCaption.of("single.single_area_not_square"));
|
||||
return false;
|
||||
}
|
||||
if (this.plotAreaManager.getPlotAreas(Objects.requireNonNull(playerSelectedRegion.getWorld()).getName(),
|
||||
CuboidRegion.makeCuboid(playerSelectedRegion)).length != 0) {
|
||||
if (this.plotAreaManager.getPlotAreas(
|
||||
Objects.requireNonNull(playerSelectedRegion.getWorld()).getName(),
|
||||
CuboidRegion.makeCuboid(playerSelectedRegion)
|
||||
).length != 0) {
|
||||
player.sendMessage(TranslatableCaption.of("single.single_area_overlapping"));
|
||||
}
|
||||
// Alter the region
|
||||
@ -183,13 +195,19 @@ public class Area extends SubCommand {
|
||||
final BlockVector3 playerSelectionMax = playerSelectedRegion.getMaximumPoint();
|
||||
// Create a new selection that spans the entire vertical range of the world
|
||||
final CuboidRegion selectedRegion =
|
||||
new CuboidRegion(playerSelectedRegion.getWorld(), BlockVector3.at(playerSelectionMin.getX(), 0, playerSelectionMin.getZ()),
|
||||
BlockVector3.at(playerSelectionMax.getX(), 255, playerSelectionMax.getZ()));
|
||||
new CuboidRegion(playerSelectedRegion.getWorld(),
|
||||
BlockVector3.at(playerSelectionMin.getX(), 0, playerSelectionMin.getZ()),
|
||||
BlockVector3.at(playerSelectionMax.getX(), 255, playerSelectionMax.getZ())
|
||||
);
|
||||
// There's only one plot in the area...
|
||||
final PlotId plotId = PlotId.of(1, 1);
|
||||
final HybridPlotWorld hybridPlotWorld = this.hybridPlotWorldFactory
|
||||
.create(player.getLocation().getWorldName(), args[1], Objects.requireNonNull(PlotSquared.platform()).defaultGenerator(),
|
||||
plotId, plotId);
|
||||
.create(player.getLocation().getWorldName(),
|
||||
args[1],
|
||||
Objects.requireNonNull(PlotSquared.platform()).defaultGenerator(),
|
||||
plotId,
|
||||
plotId
|
||||
);
|
||||
// Plot size is the same as the region width
|
||||
hybridPlotWorld.PLOT_WIDTH = hybridPlotWorld.SIZE = (short) selectedRegion.getWidth();
|
||||
// We use a schematic generator
|
||||
@ -204,17 +222,23 @@ public class Area extends SubCommand {
|
||||
hybridPlotWorld.PLOT_HEIGHT = hybridPlotWorld.ROAD_HEIGHT = hybridPlotWorld.WALL_HEIGHT = playerSelectionMin.getBlockY();
|
||||
// No sign plz
|
||||
hybridPlotWorld.setAllowSigns(false);
|
||||
final File parentFile = FileUtils.getFile(PlotSquared.platform().getDirectory(),
|
||||
final File parentFile = FileUtils.getFile(
|
||||
PlotSquared.platform().getDirectory(),
|
||||
"schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + hybridPlotWorld.getWorldName() + File.separator
|
||||
+ hybridPlotWorld.getId());
|
||||
+ hybridPlotWorld.getId()
|
||||
);
|
||||
if (!parentFile.exists() && !parentFile.mkdirs()) {
|
||||
player.sendMessage(TranslatableCaption.of("single.single_area_could_not_make_directories"));
|
||||
return false;
|
||||
}
|
||||
final File file = new File(parentFile, "plot.schem");
|
||||
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(file))) {
|
||||
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(
|
||||
file))) {
|
||||
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
||||
final EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(selectedRegion.getWorld(), -1);
|
||||
final EditSession editSession = WorldEdit
|
||||
.getInstance()
|
||||
.getEditSessionFactory()
|
||||
.getEditSession(selectedRegion.getWorld(), -1);
|
||||
final ForwardExtentCopy forwardExtentCopy =
|
||||
new ForwardExtentCopy(editSession, selectedRegion, clipboard, selectedRegion.getMinimumPoint());
|
||||
forwardExtentCopy.setCopyingBiomes(true);
|
||||
@ -238,11 +262,14 @@ public class Area extends SubCommand {
|
||||
final BlockVector3 singlePos1 = selectedRegion.getMinimumPoint();
|
||||
|
||||
// Now the schematic is saved, which is wonderful!
|
||||
PlotAreaBuilder singleBuilder = PlotAreaBuilder.ofPlotArea(hybridPlotWorld).plotManager(PlotSquared.platform().pluginName())
|
||||
PlotAreaBuilder singleBuilder = PlotAreaBuilder.ofPlotArea(hybridPlotWorld).plotManager(PlotSquared
|
||||
.platform()
|
||||
.pluginName())
|
||||
.generatorName(PlotSquared.platform().pluginName()).maximumId(plotId).minimumId(plotId);
|
||||
Runnable singleRun = () -> {
|
||||
final String path =
|
||||
"worlds." + hybridPlotWorld.getWorldName() + ".areas." + hybridPlotWorld.getId() + '-' + singleBuilder.minimumId() + '-'
|
||||
"worlds." + hybridPlotWorld.getWorldName() + ".areas." + hybridPlotWorld.getId() + '-' + singleBuilder
|
||||
.minimumId() + '-'
|
||||
+ singleBuilder.maximumId();
|
||||
final int offsetX = singlePos1.getX();
|
||||
final int offsetZ = singlePos1.getZ();
|
||||
@ -257,7 +284,10 @@ public class Area extends SubCommand {
|
||||
PlotSquared.get().loadWorld(world, null);
|
||||
player.sendMessage(TranslatableCaption.of("single.single_area_created"));
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("errors.error_create"), Template.of("world", hybridPlotWorld.getWorldName()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("errors.error_create"),
|
||||
Template.of("world", hybridPlotWorld.getWorldName())
|
||||
);
|
||||
}
|
||||
};
|
||||
singleRun.run();
|
||||
@ -266,43 +296,67 @@ public class Area extends SubCommand {
|
||||
case "setup":
|
||||
case "create":
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]..."));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
|
||||
);
|
||||
return false;
|
||||
case 2:
|
||||
switch (args[1].toLowerCase()) {
|
||||
case "pos1": { // Set position 1
|
||||
HybridPlotWorld area = (HybridPlotWorld) metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>())
|
||||
HybridPlotWorld area = (HybridPlotWorld) metaData.computeIfAbsent(
|
||||
player.getUUID(),
|
||||
missingUUID -> new HashMap<>()
|
||||
)
|
||||
.get("area_create_area");
|
||||
if (area == null) {
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]..."));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
Location location = player.getLocation();
|
||||
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_pos1", location);
|
||||
player.sendMessage(TranslatableCaption.of("set.set_attribute"), Template.of("attribute", "area_pos1"),
|
||||
Template.of("value", location.getX() + "," + location.getZ()));
|
||||
player.sendMessage(TranslatableCaption.of("area.set_pos2"), Template.of("command", "/plot area create pos2"));
|
||||
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put(
|
||||
"area_pos1",
|
||||
location
|
||||
);
|
||||
player.sendMessage(TranslatableCaption.of("set.set_attribute"),
|
||||
Template.of("attribute", "area_pos1"),
|
||||
Template.of("value", location.getX() + "," + location.getZ())
|
||||
);
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("area.set_pos2"),
|
||||
Template.of("command", "/plot area create pos2")
|
||||
);
|
||||
return true;
|
||||
}
|
||||
case "pos2": // Set position 2 and finish creation for type=2 (partial)
|
||||
final HybridPlotWorld area =
|
||||
(HybridPlotWorld) metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>())
|
||||
(HybridPlotWorld) metaData.computeIfAbsent(
|
||||
player.getUUID(),
|
||||
missingUUID -> new HashMap<>()
|
||||
)
|
||||
.get("area_create_area");
|
||||
if (area == null) {
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]..."));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
Location pos1 = player.getLocation();
|
||||
Location pos2 =
|
||||
(Location) metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).get("area_pos1");
|
||||
(Location) metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).get(
|
||||
"area_pos1");
|
||||
int dx = Math.abs(pos1.getX() - pos2.getX());
|
||||
int dz = Math.abs(pos1.getZ() - pos2.getZ());
|
||||
int numX = Math.max(1, (dx + 1 + area.ROAD_WIDTH + area.SIZE / 2) / area.SIZE);
|
||||
@ -319,11 +373,15 @@ public class Area extends SubCommand {
|
||||
final CuboidRegion region = RegionUtil.createRegion(bx, tx, bz, tz);
|
||||
final Set<PlotArea> areas = this.plotAreaManager.getPlotAreasSet(area.getWorldName(), region);
|
||||
if (!areas.isEmpty()) {
|
||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_intersection"),
|
||||
Template.of("cluster", areas.iterator().next().toString()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("cluster.cluster_intersection"),
|
||||
Template.of("cluster", areas.iterator().next().toString())
|
||||
);
|
||||
return false;
|
||||
}
|
||||
PlotAreaBuilder builder = PlotAreaBuilder.ofPlotArea(area).plotManager(PlotSquared.platform().pluginName())
|
||||
PlotAreaBuilder builder = PlotAreaBuilder.ofPlotArea(area).plotManager(PlotSquared
|
||||
.platform()
|
||||
.pluginName())
|
||||
.generatorName(PlotSquared.platform().pluginName()).minimumId(PlotId.of(1, 1))
|
||||
.maximumId(PlotId.of(numX, numZ));
|
||||
final String path =
|
||||
@ -343,12 +401,21 @@ public class Area extends SubCommand {
|
||||
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND);
|
||||
if (area.getTerrain() != PlotAreaTerrainType.ALL) {
|
||||
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(world));
|
||||
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(null, world, chunk.getX(), chunk.getZ(), null));
|
||||
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(
|
||||
null,
|
||||
world,
|
||||
chunk.getX(),
|
||||
chunk.getZ(),
|
||||
null
|
||||
));
|
||||
queue.addReadChunks(region.getChunks());
|
||||
queue.enqueue();
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("errors.error_create"), Template.of("world", area.getWorldName()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("errors.error_create"),
|
||||
Template.of("world", area.getWorldName())
|
||||
);
|
||||
}
|
||||
};
|
||||
if (hasConfirmation(player)) {
|
||||
@ -369,10 +436,19 @@ public class Area extends SubCommand {
|
||||
PlotAreaBuilder builder = PlotAreaBuilder.newBuilder();
|
||||
builder.worldName(split[0]);
|
||||
final HybridPlotWorld pa =
|
||||
this.hybridPlotWorldFactory.create(builder.worldName(), id, PlotSquared.platform().defaultGenerator(), null, null);
|
||||
this.hybridPlotWorldFactory.create(
|
||||
builder.worldName(),
|
||||
id,
|
||||
PlotSquared.platform().defaultGenerator(),
|
||||
null,
|
||||
null
|
||||
);
|
||||
PlotArea other = this.plotAreaManager.getPlotArea(pa.getWorldName(), id);
|
||||
if (other != null && Objects.equals(pa.getId(), other.getId())) {
|
||||
player.sendMessage(TranslatableCaption.of("setup.setup_world_taken"), Template.of("value", pa.toString()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("setup.setup_world_taken"),
|
||||
Template.of("value", pa.toString())
|
||||
);
|
||||
return false;
|
||||
}
|
||||
Set<PlotArea> areas = this.plotAreaManager.getPlotAreasSet(pa.getWorldName());
|
||||
@ -384,9 +460,11 @@ public class Area extends SubCommand {
|
||||
for (int i = 2; i < args.length; i++) {
|
||||
String[] pair = args[i].split("=");
|
||||
if (pair.length != 2) {
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
Template.of("value1,", getCommandString()),
|
||||
Template.of("value2", " create [world[:id]] [<modifier>=<value>]..."));
|
||||
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
switch (pair[0].toLowerCase()) {
|
||||
@ -434,15 +512,20 @@ public class Area extends SubCommand {
|
||||
builder.plotAreaType(pa.getType());
|
||||
break;
|
||||
default:
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
Template.of("value1", getCommandString()),
|
||||
Template.of("value2", " create [world[:id]] [<modifier>=<value>]..."));
|
||||
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (pa.getType() != PlotAreaType.PARTIAL) {
|
||||
if (this.worldUtil.isWorld(pa.getWorldName())) {
|
||||
player.sendMessage(TranslatableCaption.of("setup.setup_world_taken"), Template.of("value", pa.getWorldName()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("setup.setup_world_taken"),
|
||||
Template.of("value", pa.getWorldName())
|
||||
);
|
||||
return false;
|
||||
}
|
||||
Runnable run = () -> {
|
||||
@ -460,7 +543,10 @@ public class Area extends SubCommand {
|
||||
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
|
||||
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND);
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("errors.error_create"), Template.of("world", pa.getWorldName()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("errors.error_create"),
|
||||
Template.of("world", pa.getWorldName())
|
||||
);
|
||||
}
|
||||
try {
|
||||
this.worldConfiguration.save(this.worldFile);
|
||||
@ -476,9 +562,14 @@ public class Area extends SubCommand {
|
||||
return true;
|
||||
}
|
||||
if (pa.getId() == null) {
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax"), Template.of("value", getUsage()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Template.of("value", getUsage())
|
||||
);
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
Template.of("value1", getCommandString()), Template.of("value2", " create [world[:id]] [<modifier>=<value>]..."));
|
||||
Template.of("value1", getCommandString()),
|
||||
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (this.worldUtil.isWorld(pa.getWorldName())) {
|
||||
@ -492,14 +583,20 @@ public class Area extends SubCommand {
|
||||
player.teleport(this.worldUtil.getSpawn(pa.getWorldName()), TeleportCause.COMMAND);
|
||||
}
|
||||
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_create_area", pa);
|
||||
player.sendMessage(TranslatableCaption.of("single.get_position"), Template.of("command", getCommandString()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("single.get_position"),
|
||||
Template.of("command", getCommandString())
|
||||
);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
case "i":
|
||||
case "info": {
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", String.valueOf(Permission.PERMISSION_AREA_INFO)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_INFO))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
PlotArea area;
|
||||
@ -511,8 +608,10 @@ public class Area extends SubCommand {
|
||||
area = this.plotAreaManager.getPlotAreaByString(args[1]);
|
||||
break;
|
||||
default:
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"), Template.of("value1", getCommandString()),
|
||||
Template.of("value2", " info [area]"));
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
Template.of("value1", getCommandString()),
|
||||
Template.of("value2", " info [area]")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (area == null) {
|
||||
@ -541,7 +640,10 @@ public class Area extends SubCommand {
|
||||
percent = claimed == 0 ? 0 : 100d * claimed / Integer.MAX_VALUE;
|
||||
region = "N/A";
|
||||
}
|
||||
Template headerTemplate = Template.of("header", TranslatableCaption.of("info.plot_info_header").getComponent(player));
|
||||
Template headerTemplate = Template.of(
|
||||
"header",
|
||||
TranslatableCaption.of("info.plot_info_header").getComponent(player)
|
||||
);
|
||||
Template nameTemplate = Template.of("name", name);
|
||||
Template typeTemplate = Template.of("type", area.getType().name());
|
||||
Template terrainTemplate = Template.of("terrain", area.getTerrain().name());
|
||||
@ -550,15 +652,31 @@ public class Area extends SubCommand {
|
||||
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
|
||||
Template regionTemplate = Template.of("region", region);
|
||||
Template generatorTemplate = Template.of("generator", generator);
|
||||
Template footerTemplate = Template.of("footer", TranslatableCaption.of("info.plot_info_footer").getComponent(player));
|
||||
player.sendMessage(TranslatableCaption.of("info.area_info_format"), headerTemplate, nameTemplate, typeTemplate, terrainTemplate,
|
||||
usageTemplate, claimedTemplate, clustersTemplate, regionTemplate, generatorTemplate, footerTemplate);
|
||||
Template footerTemplate = Template.of(
|
||||
"footer",
|
||||
TranslatableCaption.of("info.plot_info_footer").getComponent(player)
|
||||
);
|
||||
player.sendMessage(TranslatableCaption.of("info.area_info_format"),
|
||||
headerTemplate,
|
||||
nameTemplate,
|
||||
typeTemplate,
|
||||
terrainTemplate,
|
||||
usageTemplate,
|
||||
claimedTemplate,
|
||||
clustersTemplate,
|
||||
regionTemplate,
|
||||
generatorTemplate,
|
||||
footerTemplate
|
||||
);
|
||||
return true;
|
||||
}
|
||||
case "l":
|
||||
case "list":
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_LIST)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", String.valueOf(Permission.PERMISSION_AREA_LIST)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_LIST))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
int page;
|
||||
@ -572,13 +690,16 @@ public class Area extends SubCommand {
|
||||
break;
|
||||
}
|
||||
default:
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"), Template.of("value1", getCommandString()),
|
||||
Template.of("value2", " list [#]"));
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||
Template.of("value1", getCommandString()),
|
||||
Template.of("value2", " list [#]")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
final List<PlotArea> areas = new ArrayList<>(Arrays.asList(this.plotAreaManager.getAllPlotAreas()));
|
||||
paginate(player, areas, 8, page, new RunnableVal3<Integer, PlotArea, CaptionHolder>() {
|
||||
@Override public void run(Integer i, PlotArea area, CaptionHolder caption) {
|
||||
@Override
|
||||
public void run(Integer i, PlotArea area, CaptionHolder caption) {
|
||||
String name;
|
||||
double percent;
|
||||
int claimed = area.getPlotCount();
|
||||
@ -603,8 +724,13 @@ public class Area extends SubCommand {
|
||||
Template regionTemplate = Template.of("region", region);
|
||||
Template generatorTemplate = Template.of("generator", generator);
|
||||
String tooltip = MINI_MESSAGE.serialize(MINI_MESSAGE
|
||||
.parse(TranslatableCaption.of("info.area_list_tooltip").getComponent(player), claimedTemplate, usageTemplate,
|
||||
clustersTemplate, regionTemplate, generatorTemplate));
|
||||
.parse(TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
|
||||
claimedTemplate,
|
||||
usageTemplate,
|
||||
clustersTemplate,
|
||||
regionTemplate,
|
||||
generatorTemplate
|
||||
));
|
||||
Template tooltipTemplate = Template.of("hover_info", tooltip);
|
||||
Template visitcmdTemplate = Template.of("command_tp", "/plot area tp " + area.toString());
|
||||
Template infocmdTemplate = Template.of("command_info", "/plot area info " + area.toString());
|
||||
@ -613,8 +739,14 @@ public class Area extends SubCommand {
|
||||
Template typeTemplate = Template.of("area_type", area.getType().name());
|
||||
Template terrainTemplate = Template.of("area_terrain", area.getTerrain().name());
|
||||
caption.set(TranslatableCaption.of("info.area_list_item"));
|
||||
caption.setTemplates(tooltipTemplate, visitcmdTemplate, numberTemplate, nameTemplate, typeTemplate, terrainTemplate,
|
||||
infocmdTemplate);
|
||||
caption.setTemplates(tooltipTemplate,
|
||||
visitcmdTemplate,
|
||||
numberTemplate,
|
||||
nameTemplate,
|
||||
typeTemplate,
|
||||
terrainTemplate,
|
||||
infocmdTemplate
|
||||
);
|
||||
}
|
||||
}, "/plot area list", TranslatableCaption.of("list.area_list_header_paged"));
|
||||
return true;
|
||||
@ -623,7 +755,10 @@ public class Area extends SubCommand {
|
||||
case "reset":
|
||||
case "regenerate": {
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_REGEN)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", String.valueOf(Permission.PERMISSION_AREA_REGEN)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_REGEN))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
final PlotArea area = player.getApplicablePlotArea();
|
||||
@ -632,11 +767,20 @@ public class Area extends SubCommand {
|
||||
return false;
|
||||
}
|
||||
if (area.getType() != PlotAreaType.PARTIAL) {
|
||||
player.sendMessage(TranslatableCaption.of("single.delete_world_region"), Template.of("world", area.getWorldName()));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("single.delete_world_region"),
|
||||
Template.of("world", area.getWorldName())
|
||||
);
|
||||
return false;
|
||||
}
|
||||
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
|
||||
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(null, area.getWorldName(), chunk.getX(), chunk.getZ(), null));
|
||||
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(
|
||||
null,
|
||||
area.getWorldName(),
|
||||
chunk.getX(),
|
||||
chunk.getZ(),
|
||||
null
|
||||
));
|
||||
queue.addReadChunks(area.getRegion().getChunks());
|
||||
queue.setCompleteTask(() -> player.sendMessage(TranslatableCaption.of("single.regeneration_complete")));
|
||||
queue.enqueue();
|
||||
@ -648,11 +792,17 @@ public class Area extends SubCommand {
|
||||
case "visit":
|
||||
case "tp":
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_TP)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", String.valueOf(Permission.PERMISSION_AREA_TP)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_TP))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (args.length != 2) {
|
||||
player.sendMessage(TranslatableCaption.of("commandconfig.command_syntax"), Template.of("value", "/plot area tp [area]"));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
Template.of("value", "/plot area tp [area]")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
PlotArea area = this.plotAreaManager.getPlotAreaByString(args[1]);
|
||||
@ -671,10 +821,16 @@ public class Area extends SubCommand {
|
||||
} else {
|
||||
CuboidRegion region = area.getRegion();
|
||||
center = Location.at(area.getWorldName(),
|
||||
region.getMinimumPoint().getX() + (region.getMaximumPoint().getX() - region.getMinimumPoint().getX()) / 2, 0,
|
||||
region.getMinimumPoint().getZ() + (region.getMaximumPoint().getZ() - region.getMinimumPoint().getZ()) / 2);
|
||||
region.getMinimumPoint().getX() + (region.getMaximumPoint().getX() - region
|
||||
.getMinimumPoint()
|
||||
.getX()) / 2, 0,
|
||||
region.getMinimumPoint().getZ() + (region.getMaximumPoint().getZ() - region
|
||||
.getMinimumPoint()
|
||||
.getZ()) / 2
|
||||
);
|
||||
this.worldUtil.getHighestBlock(area.getWorldName(), center.getX(), center.getZ(),
|
||||
y -> player.teleport(center.withY(1 + y), TeleportCause.COMMAND));
|
||||
y -> player.teleport(center.withY(1 + y), TeleportCause.COMMAND)
|
||||
);
|
||||
}
|
||||
return true;
|
||||
case "delete":
|
||||
@ -685,6 +841,7 @@ public class Area extends SubCommand {
|
||||
sendUsage(player);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||
if (args.length == 1) {
|
||||
@ -704,8 +861,17 @@ public class Area extends SubCommand {
|
||||
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_TP)) {
|
||||
completions.add("tp");
|
||||
}
|
||||
final List<Command> commands = completions.stream().filter(completion -> completion.toLowerCase().startsWith(args[0].toLowerCase()))
|
||||
.map(completion -> new Command(null, true, completion, "", RequiredType.NONE, CommandCategory.ADMINISTRATION) {
|
||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||
.toLowerCase()
|
||||
.startsWith(args[0].toLowerCase()))
|
||||
.map(completion -> new Command(
|
||||
null,
|
||||
true,
|
||||
completion,
|
||||
"",
|
||||
RequiredType.NONE,
|
||||
CommandCategory.ADMINISTRATION
|
||||
) {
|
||||
}).collect(Collectors.toCollection(LinkedList::new));
|
||||
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA) && args[0].length() > 0) {
|
||||
commands.addAll(TabCompletions.completePlayers(args[0], Collections.emptyList()));
|
||||
@ -714,4 +880,5 @@ public class Area extends SubCommand {
|
||||
}
|
||||
return TabCompletions.completePlayers(String.join(",", args).trim(), Collections.emptyList());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -30,7 +30,8 @@ import com.plotsquared.core.plot.PlotId;
|
||||
public abstract class Argument<T> {
|
||||
|
||||
public static final Argument<Integer> Integer = new Argument<Integer>("int", 16) {
|
||||
@Override public Integer parse(String in) {
|
||||
@Override
|
||||
public Integer parse(String in) {
|
||||
Integer value = null;
|
||||
try {
|
||||
value = java.lang.Integer.parseInt(in);
|
||||
@ -40,7 +41,8 @@ public abstract class Argument<T> {
|
||||
}
|
||||
};
|
||||
public static final Argument<Boolean> Boolean = new Argument<Boolean>("boolean", true) {
|
||||
@Override public Boolean parse(String in) {
|
||||
@Override
|
||||
public Boolean parse(String in) {
|
||||
Boolean value = null;
|
||||
if (in.equalsIgnoreCase("true") || in.equalsIgnoreCase("Yes") || in
|
||||
.equalsIgnoreCase("1")) {
|
||||
@ -53,19 +55,22 @@ public abstract class Argument<T> {
|
||||
}
|
||||
};
|
||||
public static final Argument<String> String = new Argument<String>("String", "Example") {
|
||||
@Override public String parse(String in) {
|
||||
@Override
|
||||
public String parse(String in) {
|
||||
return in;
|
||||
}
|
||||
};
|
||||
public static final Argument<String> PlayerName =
|
||||
new Argument<String>("PlayerName", "<player | *>") {
|
||||
@Override public String parse(String in) {
|
||||
@Override
|
||||
public String parse(String in) {
|
||||
return in.length() <= 16 ? in : null;
|
||||
}
|
||||
};
|
||||
public static final Argument<PlotId> PlotID =
|
||||
new Argument<PlotId>("PlotID", PlotId.of(-6, 3)) {
|
||||
@Override public PlotId parse(String in) {
|
||||
@Override
|
||||
public PlotId parse(String in) {
|
||||
return PlotId.fromString(in);
|
||||
}
|
||||
};
|
||||
@ -79,7 +84,8 @@ public abstract class Argument<T> {
|
||||
|
||||
public abstract T parse(String in);
|
||||
|
||||
@Override public final String toString() {
|
||||
@Override
|
||||
public final String toString() {
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
@ -90,4 +96,5 @@ public abstract class Argument<T> {
|
||||
public final T getExample() {
|
||||
return this.example;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -52,9 +52,9 @@ import com.plotsquared.core.util.task.AutoClaimFinishTask;
|
||||
import com.plotsquared.core.util.task.RunnableVal;
|
||||
import com.plotsquared.core.util.task.TaskManager;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@ -73,10 +73,13 @@ public class Auto extends SubCommand {
|
||||
private final EconHandler econHandler;
|
||||
private final ServicePipeline servicePipeline;
|
||||
|
||||
@Inject public Auto(@Nonnull final PlotAreaManager plotAreaManager,
|
||||
@Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final EconHandler econHandler,
|
||||
@Nonnull final ServicePipeline servicePipeline) {
|
||||
@Inject
|
||||
public Auto(
|
||||
final @NonNull PlotAreaManager plotAreaManager,
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull EconHandler econHandler,
|
||||
final @NonNull ServicePipeline servicePipeline
|
||||
) {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.econHandler = econHandler;
|
||||
@ -84,14 +87,18 @@ public class Auto extends SubCommand {
|
||||
this.servicePipeline.registerServiceType(TypeToken.of(AutoService.class), new AutoService.DefaultAutoService());
|
||||
final AutoService.MultiPlotService multiPlotService = new AutoService.MultiPlotService();
|
||||
this.servicePipeline.registerServiceImplementation(AutoService.class, multiPlotService,
|
||||
Collections.singletonList(multiPlotService));
|
||||
Collections.singletonList(multiPlotService)
|
||||
);
|
||||
final AutoService.SinglePlotService singlePlotService = new AutoService.SinglePlotService();
|
||||
this.servicePipeline.registerServiceImplementation(AutoService.class, singlePlotService,
|
||||
Collections.singletonList(singlePlotService));
|
||||
Collections.singletonList(singlePlotService)
|
||||
);
|
||||
}
|
||||
|
||||
public static boolean checkAllowedPlots(PlotPlayer player, PlotArea plotarea,
|
||||
@Nullable Integer allowedPlots, int sizeX, int sizeZ) {
|
||||
public static boolean checkAllowedPlots(
|
||||
PlotPlayer player, PlotArea plotarea,
|
||||
@Nullable Integer allowedPlots, int sizeX, int sizeZ
|
||||
) {
|
||||
if (allowedPlots == null) {
|
||||
allowedPlots = player.getAllowedPlots();
|
||||
}
|
||||
@ -108,12 +115,16 @@ public class Auto extends SubCommand {
|
||||
if (metaDataAccess.isPresent()) {
|
||||
int grantedPlots = metaDataAccess.get().orElse(0);
|
||||
if (diff < 0 && grantedPlots < sizeX * sizeZ) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(diff + grantedPlots)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(diff + grantedPlots))
|
||||
);
|
||||
return false;
|
||||
} else if (diff >= 0 && grantedPlots + diff < sizeX * sizeZ) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(diff + grantedPlots)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(diff + grantedPlots))
|
||||
);
|
||||
return false;
|
||||
} else {
|
||||
int left = grantedPlots + diff < 0 ? 0 : diff - sizeX * sizeZ;
|
||||
@ -122,13 +133,17 @@ public class Auto extends SubCommand {
|
||||
} else {
|
||||
metaDataAccess.set(left);
|
||||
}
|
||||
player.sendMessage(TranslatableCaption.of("economy.removed_granted_plot"),
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||
Template.of("usedGrants", String.valueOf(grantedPlots - left)),
|
||||
Template.of("remainingGrants", String.valueOf(left)));
|
||||
Template.of("remainingGrants", String.valueOf(left))
|
||||
);
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", "0"));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", "0")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -136,8 +151,10 @@ public class Auto extends SubCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void claimSingle(@Nonnull final PlotPlayer<?> player, @Nonnull final Plot plot,
|
||||
@Nonnull final PlotArea plotArea, @Nullable final String schematic) {
|
||||
private void claimSingle(
|
||||
final @NonNull PlotPlayer<?> player, final @NonNull Plot plot,
|
||||
final @NonNull PlotArea plotArea, final @Nullable String schematic
|
||||
) {
|
||||
try (final MetaDataAccess<Boolean> metaDataAccess =
|
||||
player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_AUTO)) {
|
||||
metaDataAccess.set(true);
|
||||
@ -149,11 +166,13 @@ public class Auto extends SubCommand {
|
||||
this.value = plot;
|
||||
}
|
||||
|
||||
@Override public void run(final Plot plot) {
|
||||
@Override
|
||||
public void run(final Plot plot) {
|
||||
try {
|
||||
TaskManager.getPlatformImplementation().sync(
|
||||
new AutoClaimFinishTask(player, plot, plotArea, schematic,
|
||||
PlotSquared.get().getEventDispatcher()));
|
||||
PlotSquared.get().getEventDispatcher()
|
||||
));
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -164,7 +183,8 @@ public class Auto extends SubCommand {
|
||||
|
||||
}
|
||||
|
||||
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
PlotArea plotarea = player.getApplicablePlotArea();
|
||||
if (plotarea == null) {
|
||||
final PermissionHandler permissionHandler = PlotSquared.platform().permissionHandler();
|
||||
@ -232,7 +252,8 @@ public class Auto extends SubCommand {
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("events.event_denied"),
|
||||
Template.of("value", "Auto claim"));
|
||||
Template.of("value", "Auto claim")
|
||||
);
|
||||
return true;
|
||||
}
|
||||
boolean force = event.getEventResult() == Result.FORCE;
|
||||
@ -240,19 +261,24 @@ public class Auto extends SubCommand {
|
||||
size_z = event.getSize_z();
|
||||
schematic = event.getSchematic();
|
||||
if (!force && mega && !Permissions.hasPermission(player, Permission.PERMISSION_AUTO_MEGA)) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
|
||||
);
|
||||
}
|
||||
if (!force && size_x * size_z > Settings.Claim.MAX_AUTO_AREA) {
|
||||
player.sendMessage(TranslatableCaption.of("permission.cant_claim_more_plots_num"),
|
||||
Template.of("amount", String.valueOf(Settings.Claim.MAX_AUTO_AREA)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots_num"),
|
||||
Template.of("amount", String.valueOf(Settings.Claim.MAX_AUTO_AREA))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
final int allowed_plots = player.getAllowedPlots();
|
||||
try (final MetaDataAccess<Boolean> metaDataAccess =
|
||||
player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_AUTO)) {
|
||||
if (!force && (metaDataAccess.get().orElse(false) || !checkAllowedPlots(player,
|
||||
plotarea, allowed_plots, size_x, size_z))) {
|
||||
plotarea, allowed_plots, size_x, size_z
|
||||
))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -266,7 +292,10 @@ public class Auto extends SubCommand {
|
||||
);
|
||||
return true;
|
||||
}
|
||||
if (!force && !Permissions.hasPermission(player, Permission.PERMISSION_CLAIM_SCHEMATIC.format(schematic)) && !Permissions
|
||||
if (!force && !Permissions.hasPermission(
|
||||
player,
|
||||
Permission.PERMISSION_CLAIM_SCHEMATIC.format(schematic)
|
||||
) && !Permissions
|
||||
.hasPermission(player, "plots.admin.command.schematic")) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
@ -313,8 +342,10 @@ public class Auto extends SubCommand {
|
||||
while (plotIterator.hasNext()) {
|
||||
plotIterator.next().claim(player, !plotIterator.hasNext(), null);
|
||||
}
|
||||
final PlotAutoMergeEvent mergeEvent = this.eventDispatcher.callAutoMerge(plots.get(0),
|
||||
plots.stream().map(Plot::getId).collect(Collectors.toList()));
|
||||
final PlotAutoMergeEvent mergeEvent = this.eventDispatcher.callAutoMerge(
|
||||
plots.get(0),
|
||||
plots.stream().map(Plot::getId).collect(Collectors.toList())
|
||||
);
|
||||
if (!force && mergeEvent.getEventResult() == Result.DENY) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("events.event_denied"),
|
||||
@ -326,4 +357,5 @@ public class Auto extends SubCommand {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -38,8 +38,8 @@ import com.plotsquared.core.util.Permissions;
|
||||
import com.plotsquared.core.util.task.RunnableVal2;
|
||||
import com.plotsquared.core.util.task.RunnableVal3;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.nio.file.Files;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
@ -65,7 +65,8 @@ public final class Backup extends Command {
|
||||
|
||||
private final BackupManager backupManager;
|
||||
|
||||
@Inject public Backup(@Nonnull final BackupManager backupManager) {
|
||||
@Inject
|
||||
public Backup(final @NonNull BackupManager backupManager) {
|
||||
super(MainCommand.getInstance(), true);
|
||||
this.backupManager = backupManager;
|
||||
}
|
||||
@ -79,9 +80,11 @@ public final class Backup extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
|
||||
public CompletableFuture<Boolean> execute(
|
||||
PlotPlayer<?> player, String[] args,
|
||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
|
||||
RunnableVal2<Command, CommandResult> whenDone
|
||||
) throws CommandException {
|
||||
if (args.length == 0 || !Arrays.asList("save", "list", "load")
|
||||
.contains(args[0].toLowerCase(Locale.ENGLISH))) {
|
||||
return CompletableFuture.completedFuture(sendMessage(player));
|
||||
@ -89,7 +92,8 @@ public final class Backup extends Command {
|
||||
return super.execute(player, args, confirm, whenDone);
|
||||
}
|
||||
|
||||
@Override public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||
@Override
|
||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||
if (args.length == 1) {
|
||||
return Stream.of("save", "list", "load")
|
||||
.filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH)))
|
||||
@ -111,7 +115,8 @@ public final class Backup extends Command {
|
||||
}
|
||||
return IntStream.range(1, 1 + backups.size()).mapToObj(
|
||||
i -> new Command(null, false, Integer.toString(i), "",
|
||||
RequiredType.NONE, null) {
|
||||
RequiredType.NONE, null
|
||||
) {
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
}
|
||||
@ -126,9 +131,11 @@ public final class Backup extends Command {
|
||||
category = CommandCategory.SETTINGS,
|
||||
requiredType = RequiredType.PLAYER,
|
||||
permission = "plots.backup.save")
|
||||
public void save(final Command command, final PlotPlayer<?> player, final String[] args,
|
||||
public void save(
|
||||
final Command command, final PlotPlayer<?> player, final String[] args,
|
||||
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||
final RunnableVal2<Command, CommandResult> whenDone
|
||||
) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
@ -178,9 +185,11 @@ public final class Backup extends Command {
|
||||
category = CommandCategory.SETTINGS,
|
||||
requiredType = RequiredType.PLAYER,
|
||||
permission = "plots.backup.list")
|
||||
public void list(final Command command, final PlotPlayer<?> player, final String[] args,
|
||||
public void list(
|
||||
final Command command, final PlotPlayer<?> player, final String[] args,
|
||||
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||
final RunnableVal2<Command, CommandResult> whenDone
|
||||
) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
@ -227,7 +236,8 @@ public final class Backup extends Command {
|
||||
Template.of("number", Integer.toString(i + 1)),
|
||||
Template.of("value", DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.ofInstant(
|
||||
Instant.ofEpochMilli(backups.get(i).getCreationTime()),
|
||||
ZoneId.systemDefault())))
|
||||
ZoneId.systemDefault()
|
||||
)))
|
||||
);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
@ -244,9 +254,11 @@ public final class Backup extends Command {
|
||||
category = CommandCategory.SETTINGS,
|
||||
requiredType = RequiredType.PLAYER,
|
||||
permission = "plots.backup.load")
|
||||
public void load(final Command command, final PlotPlayer<?> player, final String[] args,
|
||||
public void load(
|
||||
final Command command, final PlotPlayer<?> player, final String[] args,
|
||||
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||
final RunnableVal2<Command, CommandResult> whenDone
|
||||
) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
@ -327,7 +339,8 @@ public final class Backup extends Command {
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("backups.backup_load_success"));
|
||||
}
|
||||
}));
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,19 +46,25 @@ import java.util.stream.Collectors;
|
||||
requiredType = RequiredType.NONE)
|
||||
public class Biome extends SetCommand {
|
||||
|
||||
@Override public boolean set(final PlotPlayer player, final Plot plot, final String value) {
|
||||
@Override
|
||||
public boolean set(final PlotPlayer player, final Plot plot, final String value) {
|
||||
BiomeType biome = null;
|
||||
try {
|
||||
biome = BiomeTypes.get(value.toLowerCase());
|
||||
} catch (final Exception ignore) {
|
||||
}
|
||||
if (biome == null) {
|
||||
String biomes = StringMan.join(BiomeType.REGISTRY.values(),
|
||||
MINI_MESSAGE.serialize(MINI_MESSAGE.parse(TranslatableCaption.of("blocklist.block_list_separator").getComponent(player))));
|
||||
String biomes = StringMan.join(
|
||||
BiomeType.REGISTRY.values(),
|
||||
MINI_MESSAGE.serialize(MINI_MESSAGE.parse(TranslatableCaption
|
||||
.of("blocklist.block_list_separator")
|
||||
.getComponent(player)))
|
||||
);
|
||||
player.sendMessage(TranslatableCaption.of("biome.need_biome"));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
|
||||
Template.of("values", biomes));
|
||||
Template.of("values", biomes)
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (plot.getRunning() > 0) {
|
||||
|
@ -40,8 +40,8 @@ import com.plotsquared.core.util.EventDispatcher;
|
||||
import com.plotsquared.core.util.task.RunnableVal2;
|
||||
import com.plotsquared.core.util.task.RunnableVal3;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@ -55,17 +55,22 @@ public class Buy extends Command {
|
||||
private final EventDispatcher eventDispatcher;
|
||||
private final EconHandler econHandler;
|
||||
|
||||
@Inject public Buy(@Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final EconHandler econHandler) {
|
||||
@Inject
|
||||
public Buy(
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull EconHandler econHandler
|
||||
) {
|
||||
super(MainCommand.getInstance(), true);
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.econHandler = econHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
|
||||
public CompletableFuture<Boolean> execute(
|
||||
final PlotPlayer<?> player, String[] args,
|
||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||
final RunnableVal2<Command, CommandResult> whenDone
|
||||
) {
|
||||
|
||||
PlotArea area = player.getPlotAreaAbs();
|
||||
check(area, TranslatableCaption.of("errors.not_in_plot_world"));
|
||||
@ -83,17 +88,21 @@ public class Buy extends Command {
|
||||
checkTrue(plot.hasOwner(), TranslatableCaption.of("info.plot_unowned"));
|
||||
checkTrue(!plot.isOwner(player.getUUID()), TranslatableCaption.of("economy.cannot_buy_own"));
|
||||
Set<Plot> plots = plot.getConnectedPlots();
|
||||
checkTrue(player.getPlotCount() + plots.size() <= player.getAllowedPlots(),
|
||||
checkTrue(
|
||||
player.getPlotCount() + plots.size() <= player.getAllowedPlots(),
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(player.getAllowedPlots())));
|
||||
Template.of("amount", String.valueOf(player.getAllowedPlots()))
|
||||
);
|
||||
double price = plot.getFlag(PriceFlag.class);
|
||||
if (price <= 0) {
|
||||
throw new CommandException(TranslatableCaption.of("economy.not_for_sale"));
|
||||
}
|
||||
checkTrue(this.econHandler.getMoney(player) >= price,
|
||||
checkTrue(
|
||||
this.econHandler.getMoney(player) >= price,
|
||||
TranslatableCaption.of("economy.cannot_afford_plot"),
|
||||
Template.of("money", this.econHandler.format(price)),
|
||||
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player))));
|
||||
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
|
||||
);
|
||||
this.econHandler.withdrawMoney(player, price);
|
||||
// Failure
|
||||
// Success
|
||||
@ -128,4 +137,5 @@ public class Buy extends Command {
|
||||
});
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -51,7 +51,8 @@ import static com.plotsquared.core.util.entity.EntityCategories.CAP_VEHICLE;
|
||||
usage = "/plot caps")
|
||||
public class Caps extends SubCommand {
|
||||
|
||||
@Override public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
@ -61,7 +62,8 @@ public class Caps extends SubCommand {
|
||||
.hasPermission(player, Permission.PERMISSION_ADMIN_CAPS_OTHER)) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_CAPS_OTHER)));
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_CAPS_OTHER))
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||
@ -79,9 +81,11 @@ public class Caps extends SubCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
private <T extends PlotFlag<Integer, T>> void sendFormatted(final Plot plot,
|
||||
private <T extends PlotFlag<Integer, T>> void sendFormatted(
|
||||
final Plot plot,
|
||||
final PlotPlayer<?> player, final Class<T> capFlag, final int[] countedEntities,
|
||||
final String name, final int type) {
|
||||
final String name, final int type
|
||||
) {
|
||||
final int current = countedEntities[type];
|
||||
final int max = plot.getFlag(capFlag);
|
||||
final String percentage = String.format("%.1f", 100 * ((float) current / max));
|
||||
@ -90,6 +94,8 @@ public class Caps extends SubCommand {
|
||||
Template.of("cap", name),
|
||||
Template.of("current", String.valueOf(current)),
|
||||
Template.of("limit", String.valueOf(max)),
|
||||
Template.of("percentage", percentage));
|
||||
Template.of("percentage", percentage)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -35,7 +35,8 @@ import com.plotsquared.core.player.PlotPlayer;
|
||||
requiredType = RequiredType.PLAYER)
|
||||
public class Chat extends SubCommand {
|
||||
|
||||
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
if (player.getPlotAreaAbs().isForcingPlotChat()) {
|
||||
player.sendMessage(TranslatableCaption.of("chat.plot_chat_forced"));
|
||||
return true;
|
||||
@ -43,4 +44,5 @@ public class Chat extends SubCommand {
|
||||
MainCommand.getInstance().toggle.chat(this, player, args, null, null);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -46,11 +46,10 @@ import com.plotsquared.core.util.Permissions;
|
||||
import com.plotsquared.core.util.PlotExpression;
|
||||
import com.plotsquared.core.util.task.TaskManager;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
@CommandDeclaration(
|
||||
command = "claim",
|
||||
aliases = "c",
|
||||
@ -65,13 +64,17 @@ public class Claim extends SubCommand {
|
||||
private final EventDispatcher eventDispatcher;
|
||||
private final EconHandler econHandler;
|
||||
|
||||
@Inject public Claim(@Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final EconHandler econHandler) {
|
||||
@Inject
|
||||
public Claim(
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull EconHandler econHandler
|
||||
) {
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.econHandler = econHandler;
|
||||
}
|
||||
|
||||
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
String schematic = null;
|
||||
if (args.length >= 1) {
|
||||
schematic = args[0];
|
||||
@ -87,7 +90,8 @@ public class Claim extends SubCommand {
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("events.event_denied"),
|
||||
Template.of("value", "Claim"));
|
||||
Template.of("value", "Claim")
|
||||
);
|
||||
return true;
|
||||
}
|
||||
boolean force = event.getEventResult() == Result.FORCE;
|
||||
@ -104,12 +108,16 @@ public class Claim extends SubCommand {
|
||||
grants = metaDataAccess.get().orElse(0);
|
||||
if (grants <= 0) {
|
||||
metaDataAccess.remove();
|
||||
player.sendMessage(TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(grants)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(grants))
|
||||
);
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(grants)));
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
Template.of("amount", String.valueOf(grants))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -127,7 +135,10 @@ public class Claim extends SubCommand {
|
||||
);
|
||||
}
|
||||
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLAIM_SCHEMATIC
|
||||
.format(schematic)) && !Permissions.hasPermission(player, "plots.admin.command.schematic") && !force) {
|
||||
.format(schematic)) && !Permissions.hasPermission(
|
||||
player,
|
||||
"plots.admin.command.schematic"
|
||||
) && !force) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_schematic_permission"),
|
||||
Template.of("value", schematic)
|
||||
@ -163,7 +174,7 @@ public class Claim extends SubCommand {
|
||||
}
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||
Template.of("usedGrants", String.valueOf((grants -1))),
|
||||
Template.of("usedGrants", String.valueOf((grants - 1))),
|
||||
Template.of("remainingGrants", String.valueOf(grants))
|
||||
);
|
||||
}
|
||||
@ -191,7 +202,13 @@ public class Claim extends SubCommand {
|
||||
Template.of("value", "Auto merge on claim")
|
||||
);
|
||||
} else {
|
||||
plot.getPlotModificationManager().autoMerge(mergeEvent.getDir(), mergeEvent.getMax(), player.getUUID(), player, true);
|
||||
plot.getPlotModificationManager().autoMerge(
|
||||
mergeEvent.getDir(),
|
||||
mergeEvent.getMax(),
|
||||
player.getUUID(),
|
||||
player,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@ -206,4 +223,5 @@ public class Claim extends SubCommand {
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -42,9 +42,10 @@ import com.plotsquared.core.util.EventDispatcher;
|
||||
import com.plotsquared.core.util.Permissions;
|
||||
import com.plotsquared.core.util.task.RunnableVal2;
|
||||
import com.plotsquared.core.util.task.RunnableVal3;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import com.plotsquared.core.util.task.TaskManager;
|
||||
import javax.annotation.Nonnull;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@CommandDeclaration(command = "clear",
|
||||
@ -59,17 +60,22 @@ public class Clear extends Command {
|
||||
private final EventDispatcher eventDispatcher;
|
||||
private final GlobalBlockQueue blockQueue;
|
||||
|
||||
@Inject public Clear(@Nonnull final EventDispatcher eventDispatcher,
|
||||
@Nonnull final GlobalBlockQueue blockQueue) {
|
||||
@Inject
|
||||
public Clear(
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull GlobalBlockQueue blockQueue
|
||||
) {
|
||||
super(MainCommand.getInstance(), true);
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.blockQueue = blockQueue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
|
||||
public CompletableFuture<Boolean> execute(
|
||||
final PlotPlayer<?> player, String[] args,
|
||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
|
||||
RunnableVal2<Command, CommandResult> whenDone
|
||||
) throws CommandException {
|
||||
if (args.length != 0) {
|
||||
sendUsage(player);
|
||||
return CompletableFuture.completedFuture(false);
|
||||
@ -79,7 +85,8 @@ public class Clear extends Command {
|
||||
if (eventResult == Result.DENY) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("events.event_denied"),
|
||||
Template.of("value", "Clear"));
|
||||
Template.of("value", "Clear")
|
||||
);
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||
@ -87,9 +94,11 @@ public class Clear extends Command {
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
boolean force = eventResult == Result.FORCE;
|
||||
checkTrue(force || plot.isOwner(player.getUUID()) || Permissions
|
||||
checkTrue(
|
||||
force || plot.isOwner(player.getUUID()) || Permissions
|
||||
.hasPermission(player, "plots.admin.command.clear"),
|
||||
TranslatableCaption.of("permission.no_plot_perms"));
|
||||
TranslatableCaption.of("permission.no_plot_perms")
|
||||
);
|
||||
checkTrue(plot.getRunning() == 0, TranslatableCaption.of("errors.wait_for_timer"));
|
||||
checkTrue(force || !Settings.Done.RESTRICT_BUILDING || !DoneFlag.isDone(plot) || Permissions
|
||||
.hasPermission(player, "plots.continue"), TranslatableCaption.of("done.done_already_done"));
|
||||
@ -139,4 +148,5 @@ public class Clear extends Command {
|
||||
}, null);
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user