mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 21:26:45 +01:00
Clean up some events and utility classes. Try to use as general type
declarations as possible. Add configurable override for the unsafe block checker.
This commit is contained in:
parent
660754511b
commit
12b8ae3eed
@ -2,18 +2,26 @@ package com.github.intellectualsites.plotsquared.bukkit.events;
|
|||||||
|
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import javax.annotation.Nonnull;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class PlotMergeEvent extends PlotEvent implements Cancellable {
|
/**
|
||||||
|
* Event called when several plots are merged
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public final class PlotMergeEvent extends PlotEvent implements Cancellable {
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
private final ArrayList<PlotId> plots;
|
private final List<PlotId> plots;
|
||||||
private final World world;
|
@Getter private final World world;
|
||||||
private boolean cancelled;
|
@Getter @Setter private boolean cancelled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PlotMergeEvent: Called when plots are merged
|
* PlotMergeEvent: Called when plots are merged
|
||||||
@ -22,7 +30,8 @@ public class PlotMergeEvent extends PlotEvent implements Cancellable {
|
|||||||
* @param plot Plot that was merged
|
* @param plot Plot that was merged
|
||||||
* @param plots A list of plots involved in the event
|
* @param plots A list of plots involved in the event
|
||||||
*/
|
*/
|
||||||
public PlotMergeEvent(World world, Plot plot, ArrayList<PlotId> plots) {
|
public PlotMergeEvent(@Nonnull final World world, @Nonnull final Plot plot,
|
||||||
|
@Nonnull final List<PlotId> plots) {
|
||||||
super(plot);
|
super(plot);
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.plots = plots;
|
this.plots = plots;
|
||||||
@ -35,25 +44,13 @@ public class PlotMergeEvent extends PlotEvent implements Cancellable {
|
|||||||
/**
|
/**
|
||||||
* Get the plots being added.
|
* Get the plots being added.
|
||||||
*
|
*
|
||||||
* @return Plot
|
* @return Unmodifiable list containing the merging plots
|
||||||
*/
|
*/
|
||||||
public ArrayList<PlotId> getPlots() {
|
public List<PlotId> getPlots() {
|
||||||
return this.plots;
|
return Collections.unmodifiableList(this.plots);
|
||||||
}
|
|
||||||
|
|
||||||
public World getWorld() {
|
|
||||||
return this.world;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public HandlerList getHandlers() {
|
@Override public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean isCancelled() {
|
|
||||||
return this.cancelled;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public void setCancelled(boolean b) {
|
|
||||||
this.cancelled = b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,20 +2,28 @@ package com.github.intellectualsites.plotsquared.bukkit.events;
|
|||||||
|
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import javax.annotation.Nonnull;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class PlotUnlinkEvent extends Event implements Cancellable {
|
/**
|
||||||
|
* Event called when several merged plots are unlinked
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public final class PlotUnlinkEvent extends Event implements Cancellable {
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
private final ArrayList<PlotId> plots;
|
private final List<PlotId> plots;
|
||||||
private final World world;
|
@Getter private final World world;
|
||||||
private final PlotArea area;
|
@Getter private final PlotArea area;
|
||||||
private boolean cancelled;
|
@Getter @Setter private boolean cancelled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a mega-plot is unlinked.
|
* Called when a mega-plot is unlinked.
|
||||||
@ -23,7 +31,8 @@ public class PlotUnlinkEvent extends Event implements Cancellable {
|
|||||||
* @param world World in which the event occurred
|
* @param world World in which the event occurred
|
||||||
* @param plots Plots that are involved in the event
|
* @param plots Plots that are involved in the event
|
||||||
*/
|
*/
|
||||||
public PlotUnlinkEvent(World world, PlotArea area, ArrayList<PlotId> plots) {
|
public PlotUnlinkEvent(@Nonnull final World world, @Nonnull final PlotArea area,
|
||||||
|
@Nonnull final List<PlotId> plots) {
|
||||||
this.plots = plots;
|
this.plots = plots;
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.area = area;
|
this.area = area;
|
||||||
@ -36,29 +45,13 @@ public class PlotUnlinkEvent extends Event implements Cancellable {
|
|||||||
/**
|
/**
|
||||||
* Get the plots involved.
|
* Get the plots involved.
|
||||||
*
|
*
|
||||||
* @return The {@link PlotId}'s of the plots involved
|
* @return Unmodifiable list containing {@link PlotId PlotIds} of the plots involved
|
||||||
*/
|
*/
|
||||||
public ArrayList<PlotId> getPlots() {
|
public List<PlotId> getPlots() {
|
||||||
return this.plots;
|
return Collections.unmodifiableList(this.plots);
|
||||||
}
|
|
||||||
|
|
||||||
public World getWorld() {
|
|
||||||
return this.world;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlotArea getArea() {
|
|
||||||
return this.area;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public HandlerList getHandlers() {
|
@Override public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean isCancelled() {
|
|
||||||
return this.cancelled;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public void setCancelled(boolean b) {
|
|
||||||
this.cancelled = b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -10,20 +10,24 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class BukkitEventUtil extends EventUtil {
|
/**
|
||||||
|
* Utility class for handling Bukkit {@link Event events}
|
||||||
|
*/
|
||||||
|
public final class BukkitEventUtil extends EventUtil {
|
||||||
|
|
||||||
public Player getPlayer(PlotPlayer player) {
|
@Nullable public Player getPlayer(final PlotPlayer player) {
|
||||||
if (player instanceof BukkitPlayer) {
|
if (player instanceof BukkitPlayer) {
|
||||||
return ((BukkitPlayer) player).player;
|
return ((BukkitPlayer) player).player;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean callEvent(Event event) {
|
private boolean callEvent(@Nonnull final Event event) {
|
||||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
return !(event instanceof Cancellable) || !((Cancellable) event).isCancelled();
|
return !(event instanceof Cancellable) || !((Cancellable) event).isCancelled();
|
||||||
}
|
}
|
||||||
@ -56,11 +60,11 @@ public class BukkitEventUtil extends EventUtil {
|
|||||||
return callEvent(new PlotFlagRemoveEvent(flag, plot));
|
return callEvent(new PlotFlagRemoveEvent(flag, plot));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean callMerge(Plot plot, ArrayList<PlotId> plots) {
|
@Override public boolean callMerge(Plot plot, List<PlotId> plots) {
|
||||||
return callEvent(new PlotMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, plots));
|
return callEvent(new PlotMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, plots));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean callUnlink(PlotArea area, ArrayList<PlotId> plots) {
|
@Override public boolean callUnlink(PlotArea area, List<PlotId> plots) {
|
||||||
return callEvent(new PlotUnlinkEvent(BukkitUtil.getWorld(area.worldname), area, plots));
|
return callEvent(new PlotUnlinkEvent(BukkitUtil.getWorld(area.worldname), area, plots));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ public class Auto extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!plotarea
|
if (!plotarea
|
||||||
.mergePlots(MainUtil.getPlotSelectionIds(start, end), true, true)) {
|
.mergePlots(MainUtil.getPlotSelectionIds(start, end), true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -244,10 +244,12 @@ import java.util.UUID;
|
|||||||
MainUtil.sendMessage(player, C.CLUSTER_INTERSECTION, intersect.getName());
|
MainUtil.sendMessage(player, C.CLUSTER_INTERSECTION, intersect.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
HashSet<Plot> existing =
|
Set<Plot> existing =
|
||||||
area.getPlotSelectionOwned(cluster.getP1(), cluster.getP2());
|
area.getPlotSelectionOwned(cluster.getP1(), cluster.getP2());
|
||||||
HashSet<Plot> newPlots = area.getPlotSelectionOwned(pos1, pos2);
|
Set<Plot> newPlots = area.getPlotSelectionOwned(pos1, pos2);
|
||||||
HashSet<Plot> removed = (HashSet<Plot>) existing.clone();
|
// Set<Plot> removed = (HashSet<Plot>) existing.clone();
|
||||||
|
Set<Plot> removed = new HashSet<>(existing);
|
||||||
|
|
||||||
removed.removeAll(newPlots);
|
removed.removeAll(newPlots);
|
||||||
// Check expand / shrink
|
// Check expand / shrink
|
||||||
if (!removed.isEmpty()) {
|
if (!removed.isEmpty()) {
|
||||||
|
@ -12,25 +12,6 @@ import lombok.NonNull;
|
|||||||
*/
|
*/
|
||||||
public class Configuration {
|
public class Configuration {
|
||||||
|
|
||||||
public static final SettingValue<String> STRING = new SettingValue<String>("STRING") {
|
|
||||||
@Override public boolean validateValue(String string) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public String parseString(String string) {
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
public static final SettingValue<String[]> STRINGLIST =
|
|
||||||
new SettingValue<String[]>("STRINGLIST") {
|
|
||||||
@Override public boolean validateValue(String string) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public String[] parseString(String string) {
|
|
||||||
return string.split(",");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
public static final SettingValue<Integer> INTEGER = new SettingValue<Integer>("INTEGER") {
|
public static final SettingValue<Integer> INTEGER = new SettingValue<Integer>("INTEGER") {
|
||||||
@Override public boolean validateValue(String string) {
|
@Override public boolean validateValue(String string) {
|
||||||
try {
|
try {
|
||||||
@ -47,6 +28,7 @@ public class Configuration {
|
|||||||
};
|
};
|
||||||
public static final SettingValue<Boolean> BOOLEAN = new SettingValue<Boolean>("BOOLEAN") {
|
public static final SettingValue<Boolean> BOOLEAN = new SettingValue<Boolean>("BOOLEAN") {
|
||||||
@Override public boolean validateValue(String string) {
|
@Override public boolean validateValue(String string) {
|
||||||
|
//noinspection ResultOfMethodCallIgnored
|
||||||
Boolean.parseBoolean(string);
|
Boolean.parseBoolean(string);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -55,20 +37,6 @@ public class Configuration {
|
|||||||
return Boolean.parseBoolean(string);
|
return Boolean.parseBoolean(string);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
public static final SettingValue<Double> DOUBLE = new SettingValue<Double>("DOUBLE") {
|
|
||||||
@Override public boolean validateValue(String string) {
|
|
||||||
try {
|
|
||||||
Double.parseDouble(string);
|
|
||||||
return true;
|
|
||||||
} catch (NumberFormatException ignored) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public Double parseString(String string) {
|
|
||||||
return Double.parseDouble(string);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
public static final SettingValue<String> BIOME = new SettingValue<String>("BIOME") {
|
public static final SettingValue<String> BIOME = new SettingValue<String>("BIOME") {
|
||||||
@Override public boolean validateValue(String string) {
|
@Override public boolean validateValue(String string) {
|
||||||
try {
|
try {
|
||||||
@ -112,7 +80,8 @@ public class Configuration {
|
|||||||
WorldUtil.IMP.getClosestBlock(block);
|
WorldUtil.IMP.getClosestBlock(block);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
throw new UnknownBlockException(block);
|
throw new UnknownBlockException(block);
|
||||||
} else if (!value.best.isAir() && !WorldUtil.IMP.isBlockSolid(value.best)) {
|
} else if (Settings.Enabled_Components.PREVENT_UNSAFE && !value.best.isAir() &&
|
||||||
|
!WorldUtil.IMP.isBlockSolid(value.best)) {
|
||||||
throw new UnsafeBlockException(value.best);
|
throw new UnsafeBlockException(value.best);
|
||||||
}
|
}
|
||||||
blockBucket.addBlock(value.best, chance);
|
blockBucket.addBlock(value.best, chance);
|
||||||
@ -145,7 +114,7 @@ public class Configuration {
|
|||||||
WorldUtil.IMP.getClosestBlock(block);
|
WorldUtil.IMP.getClosestBlock(block);
|
||||||
if (value == null || value.match > 1) {
|
if (value == null || value.match > 1) {
|
||||||
return false;
|
return false;
|
||||||
} else if (!value.best.isAir() && !WorldUtil.IMP.isBlockSolid(value.best)) {
|
} else if (Settings.Enabled_Components.PREVENT_UNSAFE && !value.best.isAir() && !WorldUtil.IMP.isBlockSolid(value.best)) {
|
||||||
throw new UnsafeBlockException(value.best);
|
throw new UnsafeBlockException(value.best);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,27 +125,12 @@ public class Configuration {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static int gcd(int a, int b) {
|
|
||||||
if (b == 0) {
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
return gcd(b, a % b);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int gcd(int[] a) {
|
|
||||||
int result = a[0];
|
|
||||||
for (int i = 1; i < a.length; i++) {
|
|
||||||
result = gcd(result, a[i]);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static final class UnknownBlockException extends IllegalArgumentException {
|
public static final class UnknownBlockException extends IllegalArgumentException {
|
||||||
|
|
||||||
@Getter private final String unknownValue;
|
@Getter private final String unknownValue;
|
||||||
|
|
||||||
public UnknownBlockException(@NonNull final String unknownValue) {
|
UnknownBlockException(@NonNull final String unknownValue) {
|
||||||
super(String.format("\"%s\" is not a valid block", unknownValue));
|
super(String.format("\"%s\" is not a valid block", unknownValue));
|
||||||
this.unknownValue = unknownValue;
|
this.unknownValue = unknownValue;
|
||||||
}
|
}
|
||||||
@ -191,7 +145,7 @@ public class Configuration {
|
|||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
|
|
||||||
public SettingValue(String type) {
|
SettingValue(String type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +163,7 @@ public class Configuration {
|
|||||||
|
|
||||||
@Getter private final PlotBlock unsafeBlock;
|
@Getter private final PlotBlock unsafeBlock;
|
||||||
|
|
||||||
public UnsafeBlockException(@NonNull final PlotBlock unsafeBlock) {
|
UnsafeBlockException(@NonNull final PlotBlock unsafeBlock) {
|
||||||
super(String.format("%s is not a valid block", unsafeBlock));
|
super(String.format("%s is not a valid block", unsafeBlock));
|
||||||
this.unsafeBlock = unsafeBlock;
|
this.unsafeBlock = unsafeBlock;
|
||||||
}
|
}
|
||||||
|
@ -354,5 +354,7 @@ public class Settings extends Config {
|
|||||||
@Comment("Actively purge invalid database entries") public static boolean DATABASE_PURGER =
|
@Comment("Actively purge invalid database entries") public static boolean DATABASE_PURGER =
|
||||||
false;
|
false;
|
||||||
@Comment("Delete plots when a player is banned") public static boolean BAN_DELETER = false;
|
@Comment("Delete plots when a player is banned") public static boolean BAN_DELETER = false;
|
||||||
|
@Comment("Prevent possibly unsafe blocks from being used in plot components") public static
|
||||||
|
boolean PREVENT_UNSAFE = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import com.github.intellectualsites.plotsquared.plot.util.MathMan;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A plot manager with square plots which tessellate on a square grid with the following sections: ROAD, WALL, BORDER (wall), PLOT, FLOOR (plot).
|
* A plot manager with square plots which tessellate on a square grid with the following sections: ROAD, WALL, BORDER (wall), PLOT, FLOOR (plot).
|
||||||
@ -424,23 +424,23 @@ public class ClassicPlotManager extends SquarePlotManager {
|
|||||||
/**
|
/**
|
||||||
* Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED).
|
* Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED).
|
||||||
*/
|
*/
|
||||||
@Override public boolean finishPlotMerge(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean finishPlotMerge(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
final BlockBucket block = ((ClassicPlotWorld) plotArea).CLAIMED_WALL_BLOCK;
|
final BlockBucket block = ((ClassicPlotWorld) plotArea).CLAIMED_WALL_BLOCK;
|
||||||
plotIds.forEach(id -> setWall(plotArea, id, block));
|
plotIds.forEach(id -> setWall(plotArea, id, block));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean finishPlotUnlink(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean finishPlotUnlink(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
final BlockBucket block = ((ClassicPlotWorld) plotArea).CLAIMED_WALL_BLOCK;
|
final BlockBucket block = ((ClassicPlotWorld) plotArea).CLAIMED_WALL_BLOCK;
|
||||||
plotIds.forEach(id -> setWall(plotArea, id, block));
|
plotIds.forEach(id -> setWall(plotArea, id, block));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean startPlotMerge(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean startPlotMerge(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean startPlotUnlink(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean startPlotUnlink(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,19 @@
|
|||||||
package com.github.intellectualsites.plotsquared.plot.generator;
|
package com.github.intellectualsites.plotsquared.plot.generator;
|
||||||
|
|
||||||
import com.github.intellectualsites.plotsquared.configuration.ConfigurationSection;
|
import com.github.intellectualsites.plotsquared.configuration.ConfigurationSection;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.PlotSquared;
|
||||||
import com.github.intellectualsites.plotsquared.plot.config.Configuration;
|
import com.github.intellectualsites.plotsquared.plot.config.Configuration;
|
||||||
import com.github.intellectualsites.plotsquared.plot.config.ConfigurationNode;
|
import com.github.intellectualsites.plotsquared.plot.config.ConfigurationNode;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.config.Settings;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.BlockBucket;
|
import com.github.intellectualsites.plotsquared.plot.object.BlockBucket;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@SuppressWarnings("WeakerAccess")
|
||||||
public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
||||||
|
|
||||||
public int ROAD_HEIGHT = 62;
|
public int ROAD_HEIGHT = 62;
|
||||||
@ -38,7 +45,7 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
|||||||
* command - this may be useful if a config value can be changed at a later date, and has no impact on the actual
|
* command - this may be useful if a config value can be changed at a later date, and has no impact on the actual
|
||||||
* world generation</p>
|
* world generation</p>
|
||||||
*/
|
*/
|
||||||
@Override public ConfigurationNode[] getSettingNodes() {
|
@Nonnull @Override public ConfigurationNode[] getSettingNodes() {
|
||||||
return new ConfigurationNode[] {
|
return new ConfigurationNode[] {
|
||||||
new ConfigurationNode("plot.height", this.PLOT_HEIGHT, "Plot height",
|
new ConfigurationNode("plot.height", this.PLOT_HEIGHT, "Plot height",
|
||||||
Configuration.INTEGER),
|
Configuration.INTEGER),
|
||||||
@ -84,5 +91,24 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
|||||||
this.WALL_HEIGHT = Math.min(254, config.getInt("wall.height"));
|
this.WALL_HEIGHT = Math.min(254, config.getInt("wall.height"));
|
||||||
this.CLAIMED_WALL_BLOCK =
|
this.CLAIMED_WALL_BLOCK =
|
||||||
Configuration.BLOCK_BUCKET.parseString(config.getString("wall.block_claimed"));
|
Configuration.BLOCK_BUCKET.parseString(config.getString("wall.block_claimed"));
|
||||||
|
|
||||||
|
// Dump world settings
|
||||||
|
if (Settings.DEBUG) {
|
||||||
|
PlotSquared.debug(String.format("- Dumping settings for ClassicPlotWorld with name %s", this.worldname));
|
||||||
|
final Field[] fields = this.getClass().getFields();
|
||||||
|
for (final Field field : fields) {
|
||||||
|
final String name = field.getName().toLowerCase(Locale.ENGLISH);
|
||||||
|
Object value;
|
||||||
|
try {
|
||||||
|
final boolean accessible = field.isAccessible();
|
||||||
|
field.setAccessible(true);
|
||||||
|
value = field.get(this);
|
||||||
|
field.setAccessible(accessible);
|
||||||
|
} catch (final IllegalAccessException e) {
|
||||||
|
value = String.format("Failed to parse: %s", e.getMessage());
|
||||||
|
}
|
||||||
|
PlotSquared.debug(String.format("-- %s = %s", name, value));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import com.google.common.collect.BiMap;
|
|||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.awt.geom.Area;
|
import java.awt.geom.Area;
|
||||||
import java.awt.geom.PathIterator;
|
import java.awt.geom.PathIterator;
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
@ -2052,7 +2053,7 @@ public class Plot {
|
|||||||
* @param player the claiming player
|
* @param player the claiming player
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean canClaim(PlotPlayer player) {
|
public boolean canClaim(@Nullable PlotPlayer player) {
|
||||||
PlotCluster cluster = this.getCluster();
|
PlotCluster cluster = this.getCluster();
|
||||||
if (cluster != null && player != null) {
|
if (cluster != null && player != null) {
|
||||||
if (!cluster.isAdded(player.getUUID()) && !Permissions
|
if (!cluster.isAdded(player.getUUID()) && !Permissions
|
||||||
|
@ -15,13 +15,14 @@ import com.github.intellectualsites.plotsquared.plot.util.area.QuadMap;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Jesse Boyd
|
* @author Jesse Boyd, Alexander Söderberg
|
||||||
*/
|
*/
|
||||||
public abstract class PlotArea {
|
public abstract class PlotArea {
|
||||||
|
|
||||||
@ -65,8 +66,8 @@ public abstract class PlotArea {
|
|||||||
private ConcurrentHashMap<String, Object> meta;
|
private ConcurrentHashMap<String, Object> meta;
|
||||||
private QuadMap<PlotCluster> clusters;
|
private QuadMap<PlotCluster> clusters;
|
||||||
|
|
||||||
public PlotArea(String worldName, String id, IndependentPlotGenerator generator, PlotId min,
|
public PlotArea(@Nonnull final String worldName, @Nullable final String id, @Nullable IndependentPlotGenerator generator,
|
||||||
PlotId max) {
|
@Nullable final PlotId min, @Nullable final PlotId max) {
|
||||||
this.worldname = worldName;
|
this.worldname = worldName;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.manager = generator != null ? generator.getNewPlotManager() : null;
|
this.manager = generator != null ? generator.getNewPlotManager() : null;
|
||||||
@ -88,11 +89,8 @@ public abstract class PlotArea {
|
|||||||
/**
|
/**
|
||||||
* Create a new PlotArea object with no functionality/information.
|
* Create a new PlotArea object with no functionality/information.
|
||||||
* - Mainly used during startup before worlds are created as a temporary object
|
* - Mainly used during startup before worlds are created as a temporary object
|
||||||
*
|
|
||||||
* @param world
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public static PlotArea createGeneric(String world) {
|
public static PlotArea createGeneric(@Nonnull final String world) {
|
||||||
return new PlotArea(world, null, null, null, null) {
|
return new PlotArea(world, null, null, null, null) {
|
||||||
@Override public void loadConfiguration(ConfigurationSection config) {
|
@Override public void loadConfiguration(ConfigurationSection config) {
|
||||||
}
|
}
|
||||||
@ -103,7 +101,7 @@ public abstract class PlotArea {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalBlockQueue getQueue(boolean autoQueue) {
|
public LocalBlockQueue getQueue(final boolean autoQueue) {
|
||||||
return GlobalBlockQueue.IMP.getNewQueue(worldname, autoQueue);
|
return GlobalBlockQueue.IMP.getNewQueue(worldname, autoQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +125,7 @@ public abstract class PlotArea {
|
|||||||
*
|
*
|
||||||
* @return RegionWrapper or null if no applicable region
|
* @return RegionWrapper or null if no applicable region
|
||||||
*/
|
*/
|
||||||
public RegionWrapper getRegionAbs() {
|
private RegionWrapper getRegionAbs() {
|
||||||
if (this.region == null) {
|
if (this.region == null) {
|
||||||
if (this.min != null) {
|
if (this.min != null) {
|
||||||
Location bot = getPlotManager().getPlotBottomLocAbs(this, this.min);
|
Location bot = getPlotManager().getPlotBottomLocAbs(this, this.min);
|
||||||
@ -179,7 +177,7 @@ public abstract class PlotArea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Set<PlotCluster> getClusters() {
|
public Set<PlotCluster> getClusters() {
|
||||||
return this.clusters == null ? new HashSet<PlotCluster>() : this.clusters.getAll();
|
return this.clusters == null ? new HashSet<>() : this.clusters.getAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -377,7 +375,7 @@ public abstract class PlotArea {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public String toString() {
|
@Nonnull @Override public String toString() {
|
||||||
if (this.id == null) {
|
if (this.id == null) {
|
||||||
return this.worldname;
|
return this.worldname;
|
||||||
} else {
|
} else {
|
||||||
@ -405,8 +403,8 @@ public abstract class PlotArea {
|
|||||||
* @param location the location
|
* @param location the location
|
||||||
* @return the {@code Plot} or null if none exists
|
* @return the {@code Plot} or null if none exists
|
||||||
*/
|
*/
|
||||||
public Plot getPlotAbs(Location location) {
|
@Nullable public Plot getPlotAbs(@Nonnull final Location location) {
|
||||||
PlotId pid =
|
final PlotId pid =
|
||||||
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -420,8 +418,8 @@ public abstract class PlotArea {
|
|||||||
* @param location the location
|
* @param location the location
|
||||||
* @return base Plot
|
* @return base Plot
|
||||||
*/
|
*/
|
||||||
public Plot getPlot(Location location) {
|
@Nullable public Plot getPlot(@Nonnull final Location location) {
|
||||||
PlotId pid =
|
final PlotId pid =
|
||||||
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -435,8 +433,8 @@ public abstract class PlotArea {
|
|||||||
* @param location the location
|
* @param location the location
|
||||||
* @return the base plot or null
|
* @return the base plot or null
|
||||||
*/
|
*/
|
||||||
public Plot getOwnedPlot(Location location) {
|
@Nullable public Plot getOwnedPlot(@Nonnull final Location location) {
|
||||||
PlotId pid =
|
final PlotId pid =
|
||||||
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -451,8 +449,8 @@ public abstract class PlotArea {
|
|||||||
* @param location the location
|
* @param location the location
|
||||||
* @return Plot or null
|
* @return Plot or null
|
||||||
*/
|
*/
|
||||||
public Plot getOwnedPlotAbs(Location location) {
|
@Nullable public Plot getOwnedPlotAbs(@Nonnull final Location location) {
|
||||||
PlotId pid =
|
final PlotId pid =
|
||||||
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
this.manager.getPlotId(this, location.getX(), location.getY(), location.getZ());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -466,30 +464,30 @@ public abstract class PlotArea {
|
|||||||
* @param id the {@code PlotId}
|
* @param id the {@code PlotId}
|
||||||
* @return the plot or null
|
* @return the plot or null
|
||||||
*/
|
*/
|
||||||
public Plot getOwnedPlotAbs(PlotId id) {
|
@Nullable public Plot getOwnedPlotAbs(@Nonnull final PlotId id) {
|
||||||
return this.plots.get(id);
|
return this.plots.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plot getOwnedPlot(PlotId id) {
|
@Nullable public Plot getOwnedPlot(@Nonnull final PlotId id) {
|
||||||
Plot plot = this.plots.get(id);
|
Plot plot = this.plots.get(id);
|
||||||
return plot == null ? null : plot.getBasePlot(false);
|
return plot == null ? null : plot.getBasePlot(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean contains(int x, int z) {
|
public boolean contains(final int x, final int z) {
|
||||||
return this.TYPE != 2 || getRegionAbs().isIn(x, z);
|
return this.TYPE != 2 || getRegionAbs().isIn(x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean contains(PlotId id) {
|
public boolean contains(@Nonnull final PlotId id) {
|
||||||
return this.min == null || (id.x >= this.min.x && id.x <= this.max.x && id.y >= this.min.y
|
return this.min == null || (id.x >= this.min.x && id.x <= this.max.x && id.y >= this.min.y
|
||||||
&& id.y <= this.max.y);
|
&& id.y <= this.max.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean contains(Location location) {
|
public boolean contains(@Nonnull final Location location) {
|
||||||
return StringMan.isEqual(location.getWorld(), this.worldname) && (getRegionAbs() == null
|
return StringMan.isEqual(location.getWorld(), this.worldname) && (getRegionAbs() == null
|
||||||
|| this.region.isIn(location.getX(), location.getZ()));
|
|| this.region.isIn(location.getX(), location.getZ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Plot> getPlotsAbs(final UUID uuid) {
|
@Nonnull Set<Plot> getPlotsAbs(final UUID uuid) {
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
@ -504,19 +502,17 @@ public abstract class PlotArea {
|
|||||||
return myPlots;
|
return myPlots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Plot> getPlots(UUID uuid) {
|
@Nonnull public Set<Plot> getPlots(@Nonnull final UUID uuid) {
|
||||||
HashSet<Plot> myplots = new HashSet<>();
|
final Set<Plot> myplots = new HashSet<>();
|
||||||
for (Plot plot : getPlots()) {
|
for (final Plot plot : getPlots()) {
|
||||||
if (plot.isBasePlot()) {
|
if (plot.isBasePlot() && plot.isOwner(uuid)) {
|
||||||
if (plot.isOwner(uuid)) {
|
|
||||||
myplots.add(plot);
|
myplots.add(plot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return myplots;
|
return myplots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Plot> getPlots(PlotPlayer player) {
|
public Set<Plot> getPlots(@Nonnull final PlotPlayer player) {
|
||||||
return getPlots(player.getUUID());
|
return getPlots(player.getUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,11 +525,7 @@ public abstract class PlotArea {
|
|||||||
return this.plots.values();
|
return this.plots.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Plot> getPlotsAbs(PlotPlayer player) {
|
public int getPlotCount(@Nonnull final UUID uuid) {
|
||||||
return player != null ? getPlotsAbs(player.getUUID()) : new HashSet<Plot>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPlotCount(UUID uuid) {
|
|
||||||
if (!Settings.Done.COUNTS_TOWARDS_LIMIT) {
|
if (!Settings.Done.COUNTS_TOWARDS_LIMIT) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (Plot plot : getPlotsAbs(uuid)) {
|
for (Plot plot : getPlotsAbs(uuid)) {
|
||||||
@ -546,7 +538,7 @@ public abstract class PlotArea {
|
|||||||
return getPlotsAbs(uuid).size();
|
return getPlotsAbs(uuid).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasPlot(UUID uuid) {
|
public boolean hasPlot(@Nonnull final UUID uuid) {
|
||||||
for (Entry<PlotId, Plot> entry : this.plots.entrySet()) {
|
for (Entry<PlotId, Plot> entry : this.plots.entrySet()) {
|
||||||
if (entry.getValue().isOwner(uuid))
|
if (entry.getValue().isOwner(uuid))
|
||||||
return true;
|
return true;
|
||||||
@ -554,11 +546,11 @@ public abstract class PlotArea {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPlotCount(PlotPlayer player) {
|
public int getPlotCount(@Nullable final PlotPlayer player) {
|
||||||
return player != null ? getPlotCount(player.getUUID()) : 0;
|
return player != null ? getPlotCount(player.getUUID()) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plot getPlotAbs(PlotId id) {
|
@Nullable public Plot getPlotAbs(@Nonnull final PlotId id) {
|
||||||
Plot plot = getOwnedPlotAbs(id);
|
Plot plot = getOwnedPlotAbs(id);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y
|
if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y
|
||||||
@ -570,8 +562,8 @@ public abstract class PlotArea {
|
|||||||
return plot;
|
return plot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plot getPlot(PlotId id) {
|
@Nullable public Plot getPlot(@Nonnull final PlotId id) {
|
||||||
Plot plot = getOwnedPlotAbs(id);
|
final Plot plot = getOwnedPlotAbs(id);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y
|
if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y
|
||||||
|| id.y > this.max.y)) {
|
|| id.y > this.max.y)) {
|
||||||
@ -591,15 +583,15 @@ public abstract class PlotArea {
|
|||||||
return this.plots.size();
|
return this.plots.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlotCluster getCluster(Location location) {
|
@Nullable public PlotCluster getCluster(@Nonnull final Location location) {
|
||||||
Plot plot = getPlot(location);
|
final Plot plot = getPlot(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return this.clusters != null ? this.clusters.get(plot.getId().x, plot.getId().y) : null;
|
return this.clusters != null ? this.clusters.get(plot.getId().x, plot.getId().y) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlotCluster getFirstIntersectingCluster(PlotId pos1, PlotId pos2) {
|
@Nullable public PlotCluster getFirstIntersectingCluster(@Nonnull final PlotId pos1, @Nonnull final PlotId pos2) {
|
||||||
if (this.clusters == null) {
|
if (this.clusters == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -611,7 +603,7 @@ public abstract class PlotArea {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlotCluster getCluster(PlotId id) {
|
@Nullable PlotCluster getCluster(@Nonnull final PlotId id) {
|
||||||
return this.clusters != null ? this.clusters.get(id.x, id.y) : null;
|
return this.clusters != null ? this.clusters.get(id.x, id.y) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,20 +615,17 @@ public abstract class PlotArea {
|
|||||||
* Session only plot metadata (session is until the server stops).
|
* Session only plot metadata (session is until the server stops).
|
||||||
* <br>
|
* <br>
|
||||||
* For persistent metadata use the flag system
|
* For persistent metadata use the flag system
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @see FlagManager
|
* @see FlagManager
|
||||||
*/
|
*/
|
||||||
public void setMeta(String key, Object value) {
|
public void setMeta(@Nonnull final String key, @Nullable final Object value) {
|
||||||
if (this.meta == null) {
|
if (this.meta == null) {
|
||||||
this.meta = new ConcurrentHashMap<>();
|
this.meta = new ConcurrentHashMap<>();
|
||||||
}
|
}
|
||||||
this.meta.put(key, value);
|
this.meta.put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T getMeta(String key, T def) {
|
@Nullable public <T> T getMeta(@Nullable final String key, @Nullable final T def) {
|
||||||
Object v = getMeta(key);
|
final Object v = getMeta(key);
|
||||||
return v == null ? def : (T) v;
|
return v == null ? def : (T) v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -644,59 +633,50 @@ public abstract class PlotArea {
|
|||||||
* Get the metadata for a key<br>
|
* Get the metadata for a key<br>
|
||||||
* <br>
|
* <br>
|
||||||
* For persistent metadata use the flag system
|
* For persistent metadata use the flag system
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public Object getMeta(String key) {
|
@Nullable public Object getMeta(@Nonnull final String key) {
|
||||||
if (this.meta != null) {
|
if (this.meta != null) {
|
||||||
return this.meta.get(key);
|
return this.meta.get(key);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Plot> getBasePlots() {
|
@SuppressWarnings("unused") @Nonnull public Set<Plot> getBasePlots() {
|
||||||
HashSet<Plot> myPlots = new HashSet<>(getPlots());
|
final HashSet<Plot> myPlots = new HashSet<>(getPlots());
|
||||||
Iterator<Plot> iterator = myPlots.iterator();
|
myPlots.removeIf(plot -> !plot.isBasePlot());
|
||||||
while (iterator.hasNext()) {
|
|
||||||
if (!iterator.next().isBasePlot()) {
|
|
||||||
iterator.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return myPlots;
|
return myPlots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void foreachPlotAbs(RunnableVal<Plot> run) {
|
private void foreachPlotAbs(@Nonnull final RunnableVal<Plot> run) {
|
||||||
for (Entry<PlotId, Plot> entry : this.plots.entrySet()) {
|
for (final Entry<PlotId, Plot> entry : this.plots.entrySet()) {
|
||||||
run.run(entry.getValue());
|
run.run(entry.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void foreachBasePlot(RunnableVal<Plot> run) {
|
public void foreachBasePlot(@Nonnull final RunnableVal<Plot> run) {
|
||||||
for (Plot plot : getPlots()) {
|
for (final Plot plot : getPlots()) {
|
||||||
if (plot.isBasePlot()) {
|
if (plot.isBasePlot()) {
|
||||||
run.run(plot);
|
run.run(plot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<PlotId, Plot> getPlotsRaw() {
|
@Nonnull public Map<PlotId, Plot> getPlotsRaw() {
|
||||||
return this.plots;
|
return this.plots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Entry<PlotId, Plot>> getPlotEntries() {
|
@Nonnull public Set<Entry<PlotId, Plot>> getPlotEntries() {
|
||||||
return this.plots.entrySet();
|
return this.plots.entrySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addPlot(Plot plot) {
|
public boolean addPlot(@Nonnull final Plot plot) {
|
||||||
for (PlotPlayer pp : plot.getPlayersInPlot()) {
|
for (PlotPlayer pp : plot.getPlayersInPlot()) {
|
||||||
pp.setMeta(PlotPlayer.META_LAST_PLOT, plot);
|
pp.setMeta(PlotPlayer.META_LAST_PLOT, plot);
|
||||||
}
|
}
|
||||||
return this.plots.put(plot.getId(), plot) == null;
|
return this.plots.put(plot.getId(), plot) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plot getNextFreePlot(PlotPlayer player, @Nullable PlotId start) {
|
public Plot getNextFreePlot(final PlotPlayer player, @Nullable PlotId start) {
|
||||||
int plots;
|
int plots;
|
||||||
PlotId center;
|
PlotId center;
|
||||||
PlotId min = getMin();
|
PlotId min = getMin();
|
||||||
@ -710,7 +690,7 @@ public abstract class PlotArea {
|
|||||||
center = new PlotId(0, 0);
|
center = new PlotId(0, 0);
|
||||||
plots = Integer.MAX_VALUE;
|
plots = Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
PlotId currentId = new PlotId(0, 0);
|
PlotId currentId;
|
||||||
for (int i = 0; i < plots; i++) {
|
for (int i = 0; i < plots; i++) {
|
||||||
if (start == null) {
|
if (start == null) {
|
||||||
start = getMeta("lastPlot", new PlotId(0, 0));
|
start = getMeta("lastPlot", new PlotId(0, 0));
|
||||||
@ -727,7 +707,7 @@ public abstract class PlotArea {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addPlotIfAbsent(Plot plot) {
|
public boolean addPlotIfAbsent(@Nonnull final Plot plot) {
|
||||||
if (this.plots.putIfAbsent(plot.getId(), plot) == null) {
|
if (this.plots.putIfAbsent(plot.getId(), plot) == null) {
|
||||||
for (PlotPlayer pp : plot.getPlayersInPlot()) {
|
for (PlotPlayer pp : plot.getPlayersInPlot()) {
|
||||||
pp.setMeta(PlotPlayer.META_LAST_PLOT, plot);
|
pp.setMeta(PlotPlayer.META_LAST_PLOT, plot);
|
||||||
@ -737,46 +717,17 @@ public abstract class PlotArea {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addPlotAbs(Plot plot) {
|
public boolean addPlotAbs(@Nonnull final Plot plot) {
|
||||||
return this.plots.put(plot.getId(), plot) == null;
|
return this.plots.put(plot.getId(), plot) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the plots in a selection are unowned.
|
|
||||||
*
|
|
||||||
* @param pos1 first corner of selection
|
|
||||||
* @param pos2 second corner of selection
|
|
||||||
* @return are plots in selection unowned
|
|
||||||
*/
|
|
||||||
public boolean isUnowned(PlotId pos1, PlotId pos2) {
|
|
||||||
int area = (pos2.x - pos1.x + 1) * (pos2.y - pos1.y + 1);
|
|
||||||
if (area > getPlotCount()) {
|
|
||||||
for (Plot plot : getPlots()) {
|
|
||||||
if (plot.getId().x >= pos1.x && plot.getId().x <= pos2.x && plot.getId().y >= pos1.y
|
|
||||||
&& plot.getId().y <= pos2.y) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int x = pos1.x; x <= pos2.x; x++) {
|
|
||||||
for (int y = pos1.y; y <= pos2.y; y++) {
|
|
||||||
PlotId id = new PlotId(x, y);
|
|
||||||
if (this.plots.get(id) != null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the plot border distance for a world<br>
|
* Get the plot border distance for a world<br>
|
||||||
*
|
*
|
||||||
* @return The border distance or Integer.MAX_VALUE if no border is set
|
* @return The border distance or Integer.MAX_VALUE if no border is set
|
||||||
*/
|
*/
|
||||||
public int getBorder() {
|
public int getBorder() {
|
||||||
Integer meta = (Integer) getMeta("worldBorder");
|
final Integer meta = (Integer) getMeta("worldBorder");
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
int border = meta + 1;
|
int border = meta + 1;
|
||||||
if (border == 0) {
|
if (border == 0) {
|
||||||
@ -795,11 +746,11 @@ public abstract class PlotArea {
|
|||||||
if (!this.WORLD_BORDER) {
|
if (!this.WORLD_BORDER) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Integer meta = (Integer) getMeta("worldBorder");
|
final Integer meta = (Integer) getMeta("worldBorder");
|
||||||
if (meta == null) {
|
if (meta == null) {
|
||||||
setMeta("worldBorder", 1);
|
setMeta("worldBorder", 1);
|
||||||
}
|
}
|
||||||
for (Plot plot : getPlots()) {
|
for (final Plot plot : getPlots()) {
|
||||||
plot.updateWorldBorder();
|
plot.updateWorldBorder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -809,30 +760,33 @@ public abstract class PlotArea {
|
|||||||
* - metadata is session only
|
* - metadata is session only
|
||||||
* - deleting other plugin's metadata may cause issues
|
* - deleting other plugin's metadata may cause issues
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key Meta data key
|
||||||
*/
|
*/
|
||||||
public void deleteMeta(String key) {
|
public void deleteMeta(@Nonnull final String key) {
|
||||||
if (this.meta != null) {
|
if (this.meta != null) {
|
||||||
this.meta.remove(key);
|
this.meta.remove(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canClaim(PlotPlayer player, PlotId pos1, PlotId pos2) {
|
public boolean canClaim(@Nullable final PlotPlayer player, @Nonnull final PlotId pos1,
|
||||||
|
@Nonnull final PlotId pos2) {
|
||||||
if (pos1.x == pos2.x && pos1.y == pos2.y) {
|
if (pos1.x == pos2.x && pos1.y == pos2.y) {
|
||||||
if (getOwnedPlot(pos1) != null) {
|
if (getOwnedPlot(pos1) != null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Plot plot = getPlotAbs(pos1);
|
final Plot plot = getPlotAbs(pos1);
|
||||||
if (plot == null)
|
if (plot == null) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
return plot.canClaim(player);
|
return plot.canClaim(player);
|
||||||
}
|
}
|
||||||
for (int x = pos1.x; x <= pos2.x; x++) {
|
for (int x = pos1.x; x <= pos2.x; x++) {
|
||||||
for (int y = pos1.y; y <= pos2.y; y++) {
|
for (int y = pos1.y; y <= pos2.y; y++) {
|
||||||
PlotId id = new PlotId(x, y);
|
final PlotId id = new PlotId(x, y);
|
||||||
Plot plot = getPlotAbs(id);
|
final Plot plot = getPlotAbs(id);
|
||||||
if (plot == null)
|
if (plot == null) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
if (!plot.canClaim(player)) {
|
if (!plot.canClaim(player)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -841,27 +795,27 @@ public abstract class PlotArea {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean removePlot(PlotId id) {
|
public boolean removePlot(@Nonnull final PlotId id) {
|
||||||
return this.plots.remove(id) != null;
|
return this.plots.remove(id) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean mergePlots(ArrayList<PlotId> plotIds, boolean removeRoads,
|
public boolean mergePlots(@Nonnull final List<PlotId> plotIds, final boolean removeRoads) {
|
||||||
boolean updateDatabase) {
|
|
||||||
if (plotIds.size() < 2) {
|
if (plotIds.size() < 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PlotId pos1 = plotIds.get(0);
|
|
||||||
PlotId pos2 = plotIds.get(plotIds.size() - 1);
|
|
||||||
PlotManager manager = getPlotManager();
|
|
||||||
|
|
||||||
boolean result = EventUtil.manager.callMerge(getPlotAbs(pos1), plotIds);
|
final PlotId pos1 = plotIds.get(0);
|
||||||
|
final PlotId pos2 = plotIds.get(plotIds.size() - 1);
|
||||||
|
final PlotManager manager = getPlotManager();
|
||||||
|
|
||||||
|
final boolean result = EventUtil.manager.callMerge(getPlotAbs(pos1), plotIds);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
HashSet<UUID> trusted = new HashSet<>();
|
final Set<UUID> trusted = new HashSet<>();
|
||||||
HashSet<UUID> members = new HashSet<>();
|
final Set<UUID> members = new HashSet<>();
|
||||||
HashSet<UUID> denied = new HashSet<>();
|
final Set<UUID> denied = new HashSet<>();
|
||||||
|
|
||||||
manager.startPlotMerge(this, plotIds);
|
manager.startPlotMerge(this, plotIds);
|
||||||
for (int x = pos1.x; x <= pos2.x; x++) {
|
for (int x = pos1.x; x <= pos2.x; x++) {
|
||||||
@ -881,13 +835,15 @@ public abstract class PlotArea {
|
|||||||
denied.removeAll(members);
|
denied.removeAll(members);
|
||||||
for (int x = pos1.x; x <= pos2.x; x++) {
|
for (int x = pos1.x; x <= pos2.x; x++) {
|
||||||
for (int y = pos1.y; y <= pos2.y; y++) {
|
for (int y = pos1.y; y <= pos2.y; y++) {
|
||||||
boolean lx = x < pos2.x;
|
final boolean lx = x < pos2.x;
|
||||||
boolean ly = y < pos2.y;
|
final boolean ly = y < pos2.y;
|
||||||
PlotId id = new PlotId(x, y);
|
final PlotId id = new PlotId(x, y);
|
||||||
Plot plot = getPlotAbs(id);
|
final Plot plot = getPlotAbs(id);
|
||||||
|
|
||||||
plot.setTrusted(trusted);
|
plot.setTrusted(trusted);
|
||||||
plot.setMembers(members);
|
plot.setMembers(members);
|
||||||
plot.setDenied(denied);
|
plot.setDenied(denied);
|
||||||
|
|
||||||
Plot plot2;
|
Plot plot2;
|
||||||
if (lx) {
|
if (lx) {
|
||||||
if (ly) {
|
if (ly) {
|
||||||
@ -922,12 +878,12 @@ public abstract class PlotArea {
|
|||||||
* @param pos2 second corner of selection
|
* @param pos2 second corner of selection
|
||||||
* @return the plots in the selection which are owned
|
* @return the plots in the selection which are owned
|
||||||
*/
|
*/
|
||||||
public HashSet<Plot> getPlotSelectionOwned(PlotId pos1, PlotId pos2) {
|
public Set<Plot> getPlotSelectionOwned(@Nonnull final PlotId pos1, @Nonnull final PlotId pos2) {
|
||||||
int size = (1 + pos2.x - pos1.x) * (1 + pos2.y - pos1.y);
|
final int size = (1 + pos2.x - pos1.x) * (1 + pos2.y - pos1.y);
|
||||||
HashSet<Plot> result = new HashSet<>();
|
final Set<Plot> result = new HashSet<>();
|
||||||
if (size < 16 || size < getPlotCount()) {
|
if (size < 16 || size < getPlotCount()) {
|
||||||
for (PlotId pid : MainUtil.getPlotSelectionIds(pos1, pos2)) {
|
for (final PlotId pid : MainUtil.getPlotSelectionIds(pos1, pos2)) {
|
||||||
Plot plot = getPlotAbs(pid);
|
final Plot plot = getPlotAbs(pid);
|
||||||
if (plot.hasOwner()) {
|
if (plot.hasOwner()) {
|
||||||
if (plot.getId().x > pos1.x || plot.getId().y > pos1.y
|
if (plot.getId().x > pos1.x || plot.getId().y > pos1.y
|
||||||
|| plot.getId().x < pos2.x || plot.getId().y < pos2.y) {
|
|| plot.getId().x < pos2.x || plot.getId().y < pos2.y) {
|
||||||
@ -936,7 +892,7 @@ public abstract class PlotArea {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Plot plot : getPlots()) {
|
for (final Plot plot : getPlots()) {
|
||||||
if (plot.getId().x > pos1.x || plot.getId().y > pos1.y || plot.getId().x < pos2.x
|
if (plot.getId().x > pos1.x || plot.getId().y > pos1.y || plot.getId().x < pos2.x
|
||||||
|| plot.getId().y < pos2.y) {
|
|| plot.getId().y < pos2.y) {
|
||||||
result.add(plot);
|
result.add(plot);
|
||||||
@ -946,14 +902,15 @@ public abstract class PlotArea {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeCluster(PlotCluster plotCluster) {
|
@SuppressWarnings("WeakerAccess")
|
||||||
|
public void removeCluster(@Nullable final PlotCluster plotCluster) {
|
||||||
if (this.clusters == null) {
|
if (this.clusters == null) {
|
||||||
throw new IllegalAccessError("Clusters not enabled!");
|
throw new IllegalAccessError("Clusters not enabled!");
|
||||||
}
|
}
|
||||||
this.clusters.remove(plotCluster);
|
this.clusters.remove(plotCluster);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addCluster(PlotCluster plotCluster) {
|
public void addCluster(@Nullable final PlotCluster plotCluster) {
|
||||||
if (this.clusters == null) {
|
if (this.clusters == null) {
|
||||||
this.clusters = new QuadMap<PlotCluster>(Integer.MAX_VALUE, 0, 0, 62) {
|
this.clusters = new QuadMap<PlotCluster>(Integer.MAX_VALUE, 0, 0, 62) {
|
||||||
@Override public RegionWrapper getRegion(PlotCluster value) {
|
@Override public RegionWrapper getRegion(PlotCluster value) {
|
||||||
@ -965,7 +922,7 @@ public abstract class PlotArea {
|
|||||||
this.clusters.add(plotCluster);
|
this.clusters.add(plotCluster);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlotCluster getCluster(String string) {
|
@Nullable public PlotCluster getCluster(final String string) {
|
||||||
for (PlotCluster cluster : getClusters()) {
|
for (PlotCluster cluster : getClusters()) {
|
||||||
if (cluster.getName().equalsIgnoreCase(string)) {
|
if (cluster.getName().equalsIgnoreCase(string)) {
|
||||||
return cluster;
|
return cluster;
|
||||||
@ -973,4 +930,5 @@ public abstract class PlotArea {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,9 @@ import com.github.intellectualsites.plotsquared.plot.commands.Template;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.config.Settings;
|
import com.github.intellectualsites.plotsquared.plot.config.Settings;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class PlotManager {
|
public abstract class PlotManager {
|
||||||
|
|
||||||
@ -60,13 +60,13 @@ public abstract class PlotManager {
|
|||||||
|
|
||||||
public abstract boolean removeRoadSouthEast(PlotArea plotArea, Plot plot);
|
public abstract boolean removeRoadSouthEast(PlotArea plotArea, Plot plot);
|
||||||
|
|
||||||
public abstract boolean startPlotMerge(PlotArea plotArea, ArrayList<PlotId> plotIds);
|
public abstract boolean startPlotMerge(PlotArea plotArea, List<PlotId> plotIds);
|
||||||
|
|
||||||
public abstract boolean startPlotUnlink(PlotArea plotArea, ArrayList<PlotId> plotIds);
|
public abstract boolean startPlotUnlink(PlotArea plotArea, List<PlotId> plotIds);
|
||||||
|
|
||||||
public abstract boolean finishPlotMerge(PlotArea plotArea, ArrayList<PlotId> plotIds);
|
public abstract boolean finishPlotMerge(PlotArea plotArea, List<PlotId> plotIds);
|
||||||
|
|
||||||
public abstract boolean finishPlotUnlink(PlotArea plotArea, ArrayList<PlotId> plotIds);
|
public abstract boolean finishPlotUnlink(PlotArea plotArea, List<PlotId> plotIds);
|
||||||
|
|
||||||
public void exportTemplate(PlotArea plotArea) throws IOException {
|
public void exportTemplate(PlotArea plotArea) throws IOException {
|
||||||
HashSet<FileBytes> files = new HashSet<>(Collections.singletonList(
|
HashSet<FileBytes> files = new HashSet<>(Collections.singletonList(
|
||||||
|
@ -9,6 +9,9 @@ import com.github.intellectualsites.plotsquared.plot.util.SetupUtils;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
|
import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class SinglePlotArea extends GridPlotWorld {
|
public class SinglePlotArea extends GridPlotWorld {
|
||||||
|
|
||||||
public boolean VOID = false;
|
public boolean VOID = false;
|
||||||
@ -58,7 +61,7 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
new ConfigurationNode("void", this.VOID, "Void world", Configuration.BOOLEAN)};
|
new ConfigurationNode("void", this.VOID, "Void world", Configuration.BOOLEAN)};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Plot getOwnedPlot(Location location) {
|
@Nullable @Override public Plot getOwnedPlot(@Nonnull final Location location) {
|
||||||
PlotId pid = PlotId.fromString(location.getWorld());
|
PlotId pid = PlotId.fromString(location.getWorld());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -67,7 +70,7 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
return plot == null ? null : plot.getBasePlot(false);
|
return plot == null ? null : plot.getBasePlot(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Plot getOwnedPlotAbs(Location location) {
|
@Nullable @Override public Plot getOwnedPlotAbs(@Nonnull Location location) {
|
||||||
PlotId pid = PlotId.fromString(location.getWorld());
|
PlotId pid = PlotId.fromString(location.getWorld());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -75,7 +78,7 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
return plots.get(pid);
|
return plots.get(pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Plot getPlot(Location location) {
|
@Nullable @Override public Plot getPlot(@Nonnull final Location location) {
|
||||||
PlotId pid = PlotId.fromString(location.getWorld());
|
PlotId pid = PlotId.fromString(location.getWorld());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -83,30 +86,30 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
return getPlot(pid);
|
return getPlot(pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Plot getPlotAbs(Location location) {
|
@Nullable @Override public Plot getPlotAbs(@Nonnull final Location location) {
|
||||||
PlotId pid = PlotId.fromString(location.getWorld());
|
final PlotId pid = PlotId.fromString(location.getWorld());
|
||||||
if (pid == null) {
|
if (pid == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getPlotAbs(pid);
|
return getPlotAbs(pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addPlot(Plot plot) {
|
public boolean addPlot(@Nonnull Plot plot) {
|
||||||
plot = adapt(plot);
|
plot = adapt(plot);
|
||||||
return super.addPlot(plot);
|
return super.addPlot(plot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean addPlotAbs(Plot plot) {
|
@Override public boolean addPlotAbs(@Nonnull Plot plot) {
|
||||||
plot = adapt(plot);
|
plot = adapt(plot);
|
||||||
return super.addPlotAbs(plot);
|
return super.addPlotAbs(plot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean addPlotIfAbsent(Plot plot) {
|
@Override public boolean addPlotIfAbsent(@Nonnull Plot plot) {
|
||||||
plot = adapt(plot);
|
plot = adapt(plot);
|
||||||
return super.addPlotIfAbsent(plot);
|
return super.addPlotIfAbsent(plot);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Plot adapt(Plot p) {
|
private Plot adapt(Plot p) {
|
||||||
if (p instanceof SinglePlot) {
|
if (p instanceof SinglePlot) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@ -117,7 +120,7 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plot getPlotAbs(PlotId id) {
|
@Nullable public Plot getPlotAbs(@Nonnull final PlotId id) {
|
||||||
Plot plot = getOwnedPlotAbs(id);
|
Plot plot = getOwnedPlotAbs(id);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
return new SinglePlot(this, id);
|
return new SinglePlot(this, id);
|
||||||
@ -125,7 +128,7 @@ public class SinglePlotArea extends GridPlotWorld {
|
|||||||
return plot;
|
return plot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plot getPlot(PlotId id) {
|
@Nullable public Plot getPlot(@Nonnull PlotId id) {
|
||||||
// TODO
|
// TODO
|
||||||
Plot plot = getOwnedPlotAbs(id);
|
Plot plot = getOwnedPlotAbs(id);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
|
@ -7,7 +7,7 @@ import com.github.intellectualsites.plotsquared.plot.util.SetupUtils;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
|
|
||||||
public class SinglePlotManager extends PlotManager {
|
public class SinglePlotManager extends PlotManager {
|
||||||
@Override public PlotId getPlotIdAbs(PlotArea plotArea, int x, int y, int z) {
|
@Override public PlotId getPlotIdAbs(PlotArea plotArea, int x, int y, int z) {
|
||||||
@ -88,19 +88,19 @@ public class SinglePlotManager extends PlotManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean startPlotMerge(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean startPlotMerge(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean startPlotUnlink(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean startPlotUnlink(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean finishPlotMerge(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean finishPlotMerge(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean finishPlotUnlink(PlotArea plotArea, ArrayList<PlotId> plotIds) {
|
@Override public boolean finishPlotUnlink(PlotArea plotArea, List<PlotId> plotIds) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager;
|
|||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public abstract class EventUtil {
|
public abstract class EventUtil {
|
||||||
@ -45,9 +45,9 @@ public abstract class EventUtil {
|
|||||||
|
|
||||||
public abstract boolean callFlagRemove(Flag<?> flag, Object value, PlotCluster cluster);
|
public abstract boolean callFlagRemove(Flag<?> flag, Object value, PlotCluster cluster);
|
||||||
|
|
||||||
public abstract boolean callMerge(Plot plot, ArrayList<PlotId> plots);
|
public abstract boolean callMerge(Plot plot, List<PlotId> plots);
|
||||||
|
|
||||||
public abstract boolean callUnlink(PlotArea area, ArrayList<PlotId> plots);
|
public abstract boolean callUnlink(PlotArea area, List<PlotId> plots);
|
||||||
|
|
||||||
public abstract void callEntry(PlotPlayer player, Plot plot);
|
public abstract void callEntry(PlotPlayer player, Plot plot);
|
||||||
|
|
||||||
@ -90,11 +90,7 @@ public abstract class EventUtil {
|
|||||||
public void doRespawnTask(final PlotPlayer player) {
|
public void doRespawnTask(final PlotPlayer player) {
|
||||||
final Plot plot = player.getCurrentPlot();
|
final Plot plot = player.getCurrentPlot();
|
||||||
if (Settings.Teleport.ON_DEATH && plot != null) {
|
if (Settings.Teleport.ON_DEATH && plot != null) {
|
||||||
TaskManager.runTask(new Runnable() {
|
TaskManager.runTask(() -> plot.teleportPlayer(player));
|
||||||
@Override public void run() {
|
|
||||||
plot.teleportPlayer(player);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
MainUtil.sendMessage(player, C.TELEPORTED_TO_ROAD);
|
MainUtil.sendMessage(player, C.TELEPORTED_TO_ROAD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package com.github.intellectualsites.plotsquared.plot.util;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.flag.Flag;
|
import com.github.intellectualsites.plotsquared.plot.flag.Flag;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.*;
|
import com.github.intellectualsites.plotsquared.plot.object.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class EventUtilTest extends EventUtil {
|
public class EventUtilTest extends EventUtil {
|
||||||
@ -43,11 +43,11 @@ public class EventUtilTest extends EventUtil {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean callMerge(Plot plot, ArrayList<PlotId> plots) {
|
@Override public boolean callMerge(Plot plot, List<PlotId> plots) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean callUnlink(PlotArea area, ArrayList<PlotId> plots) {
|
@Override public boolean callUnlink(PlotArea area, List<PlotId> plots) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user