Merge branch 'master' into breaking

# Conflicts:
#	Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/events/PlotRateEvent.java
#	Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitEventUtil.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Add.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Auto.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Delete.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Kick.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Load.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Music.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Owner.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Rate.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Reload.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/SchematicCmd.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Trust.java
#	Core/src/main/java/com/github/intellectualsites/plotsquared/plot/flag/GameModeFlag.java
#	Core/src/main/java/com/intellectualcrafters/plot/commands/Clear.java
#	Core/src/main/java/com/intellectualcrafters/plot/commands/PluginCmd.java
#	Core/src/main/java/com/intellectualcrafters/plot/commands/Relight.java
#	Core/src/main/java/com/intellectualcrafters/plot/commands/SetHome.java
#	Core/src/main/java/com/intellectualcrafters/plot/config/C.java
#	Core/src/main/java/com/intellectualcrafters/plot/config/Configuration.java
#	Core/src/main/java/com/intellectualcrafters/plot/config/Settings.java
#	Core/src/test/java/com/github/intellectualsites/plotsquared/plot/util/EventUtilTest.java
#	Nukkit/src/main/java/com/plotsquared/nukkit/util/NukkitEventUtil.java
#	README.md
#	Sponge/src/main/java/com/github/intellectualsites/plotsquared/sponge/events/PlotRateEvent.java
#	Sponge/src/main/java/com/github/intellectualsites/plotsquared/sponge/util/SpongeSchematicHandler.java
#	Sponge/src/main/java/com/github/intellectualsites/plotsquared/sponge/util/block/SpongeLocalQueue.java
#	Sponge/src/main/java/com/plotsquared/sponge/util/SpongeEventUtil.java
This commit is contained in:
dordsor21 2018-11-14 14:44:07 +00:00
commit 8cd54929e7
120 changed files with 1644 additions and 1216 deletions

View File

@ -1,7 +1,7 @@
# Bug report template # Bug report template
<!--- In order to create a valid issue report you have to follow this template. --> <!--- In order to create a valid issue report you have to follow this template. -->
<!--- Incomplete reports might be marked as invalid. --> <!--- Incomplete reports might be marked as invalid. -->
<!--- You may remove it if you are posting a feature request. --> <!-- Feature requests and enhancements may be suggested at https://github.com/IntellectualSites/PlotSquaredSuggestions. -->
**Debug paste link:** **Debug paste link:**
<!--- Enter /plot debugpaste in game or in your console and copy the output here --> <!--- Enter /plot debugpaste in game or in your console and copy the output here -->

15
.github/auto-comment.yml vendored Normal file
View File

@ -0,0 +1,15 @@
# Comment to a new issue.
issueOpened: >
Thank your for raising a issue. We will try and get back to you as soon as possible.
Please make sure that you followed the issue template, and provied all neccessary information.
Failure to do so will prevent us from resolving the issue in a timely manner.
Please note that suggestions are now to be submitted to https://git.io/fN5B4 rather than this issue tracker!
pullRequestOpened: >
Thank your for raising your pull request.
Please make sure you have followed our contributing guidelines and to take an extra look at the code to make sure that it is functional!
We will review it as soon as possible!

16
.github/stale.yml vendored Normal file
View File

@ -0,0 +1,16 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- [‼] high priority
# Label to use when marking an issue as stale
staleLabel: Old
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@ -56,8 +56,7 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain { public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
@Getter @Getter private static WorldEdit worldEdit;
private static WorldEdit worldEdit;
private static Map<String, Plugin> pluginMap; private static Map<String, Plugin> pluginMap;
static { static {
@ -125,7 +124,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
e.printStackTrace(); e.printStackTrace();
PlotSquared.debug(StringMan.getString(Bukkit.getBukkitVersion())); PlotSquared.debug(StringMan.getString(Bukkit.getBukkitVersion()));
PlotSquared.debug(StringMan.getString(Bukkit.getBukkitVersion().split("-")[0].split("\\."))); PlotSquared.debug(
StringMan.getString(Bukkit.getBukkitVersion().split("-")[0].split("\\.")));
return new int[] {1, 13, 0}; return new int[] {1, 13, 0};
} }
} }
@ -451,7 +451,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
Entity passenger = entity.getPassenger(); Entity passenger = entity.getPassenger();
if (!(passenger instanceof Player) && entity if (!(passenger instanceof Player) && entity
.getMetadata("keep").isEmpty()) { .getMetadata("keep").isEmpty()) {
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity
.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
iterator.remove(); iterator.remove();
@ -502,7 +503,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
&& (currentPlotId == null || !area && (currentPlotId == null || !area
.getPlot(originalPlotId) .getPlot(originalPlotId)
.equals(area.getPlot(currentPlotId)))) { .equals(area.getPlot(currentPlotId)))) {
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity
.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
iterator.remove(); iterator.remove();
@ -540,12 +542,13 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
}, 20); }, 20);
} }
@Override @Nullable public final ChunkGenerator getDefaultWorldGenerator(final String world, final String id) { @Override @Nullable
public final ChunkGenerator getDefaultWorldGenerator(final String world, final String id) {
if (Settings.Enabled_Components.PLOTME_CONVERTER) { if (Settings.Enabled_Components.PLOTME_CONVERTER) {
initPlotMeConverter(); initPlotMeConverter();
Settings.Enabled_Components.PLOTME_CONVERTER = false; Settings.Enabled_Components.PLOTME_CONVERTER = false;
} }
final IndependentPlotGenerator result; final IndependentPlotGenerator result;
if (id != null && id.equalsIgnoreCase("single")) { if (id != null && id.equalsIgnoreCase("single")) {
result = new SingleWorldGenerator(); result = new SingleWorldGenerator();
} else { } else {
@ -671,7 +674,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
return false; return false;
} }
@Override @Nullable public GeneratorWrapper<?> getGenerator(@NonNull final String world, @Nullable final String name) { @Override @Nullable public GeneratorWrapper<?> getGenerator(@NonNull final String world,
@Nullable final String name) {
if (name == null) { if (name == null) {
return null; return null;
} }
@ -854,8 +858,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
} }
} }
@Override @Override public GeneratorWrapper<?> wrapPlotGenerator(@Nullable final String world,
public GeneratorWrapper<?> wrapPlotGenerator(@Nullable final String world, @NonNull final IndependentPlotGenerator generator) { @NonNull final IndependentPlotGenerator generator) {
return new BukkitPlotGenerator(generator); return new BukkitPlotGenerator(generator);
} }

View File

@ -155,7 +155,8 @@ public class FancyMessage
// Assume composite type // Assume composite type
// The only composite type we currently store is another FancyMessage // The only composite type we currently store is another FancyMessage
// Therefore, recursion time! // Therefore, recursion time!
component.hoverActionData = deserialize(object.get("value").toString() /* This should properly serialize the JSON object as a JSON string */); component.hoverActionData = deserialize(object.get("value")
.toString() /* This should properly serialize the JSON object as a JSON string */);
} }
} else if (entry.getKey().equals("insertion")) { } else if (entry.getKey().equals("insertion")) {
component.insertionData = entry.getValue().getAsString(); component.insertionData = entry.getValue().getAsString();
@ -622,8 +623,7 @@ public class FancyMessage
* @return This builder instance. * @return This builder instance.
*/ */
public FancyMessage formattedTooltip(final Iterable<FancyMessage> lines) { public FancyMessage formattedTooltip(final Iterable<FancyMessage> lines) {
return formattedTooltip( return formattedTooltip(ArrayWrapper.toArray(lines, FancyMessage.class));
ArrayWrapper.toArray(lines, FancyMessage.class));
} }
/** /**
@ -664,8 +664,7 @@ public class FancyMessage
* @return This builder instance. * @return This builder instance.
*/ */
public FancyMessage translationReplacements(final Iterable<FancyMessage> replacements) { public FancyMessage translationReplacements(final Iterable<FancyMessage> replacements) {
return translationReplacements( return translationReplacements(ArrayWrapper.toArray(replacements, FancyMessage.class));
ArrayWrapper.toArray(replacements, FancyMessage.class));
} }
/** /**

View File

@ -48,7 +48,7 @@ public abstract class TextualComponent implements Cloneable {
/** /**
* Create a textual component representing a string literal. * Create a textual component representing a string literal.
* <p> *
* <p>This is the default type of textual component when a single string * <p>This is the default type of textual component when a single string
* literal is given to a method. * literal is given to a method.
* *
@ -98,7 +98,7 @@ public abstract class TextualComponent implements Cloneable {
/** /**
* Create a textual component representing a scoreboard value. * Create a textual component representing a scoreboard value.
* The client will see the score of the specified player for the specified objective as the text represented by this component. * The client will see the score of the specified player for the specified objective as the text represented by this component.
* <p> *
* <p><b>This method is currently guaranteed to throw an {@code UnsupportedOperationException} * <p><b>This method is currently guaranteed to throw an {@code UnsupportedOperationException}
* as it is only supported on snapshot clients.</b> * as it is only supported on snapshot clients.</b>
* *
@ -234,7 +234,7 @@ public abstract class TextualComponent implements Cloneable {
/** /**
* Internal class used to represent a text component with a nested JSON * Internal class used to represent a text component with a nested JSON
* value. * value.
* <p> *
* <p>Exception validating done is on keys and values. * <p>Exception validating done is on keys and values.
*/ */
private static final class ComplexTextTypeComponent extends TextualComponent private static final class ComplexTextTypeComponent extends TextualComponent

View File

@ -113,8 +113,8 @@ public class ClassicPlotMeConnector extends APlotMeConnector {
} }
} }
if (name.isEmpty()) { if (name.isEmpty()) {
PlotSquared PlotSquared.log(
.log("&cCould not identify owner for plot: " + id + " -> '" + name + "'"); "&cCould not identify owner for plot: " + id + " -> '" + name + "'");
missing++; missing++;
continue; continue;
} }
@ -129,8 +129,10 @@ public class ClassicPlotMeConnector extends APlotMeConnector {
} }
if (missing > 0) { if (missing > 0) {
PlotSquared.log("&cSome names could not be identified:"); PlotSquared.log("&cSome names could not be identified:");
PlotSquared.log("&7 - Empty quotes mean PlotMe just stored an unowned plot in the database"); PlotSquared
PlotSquared.log("&7 - Names you have never seen before could be from people mistyping commands"); .log("&7 - Empty quotes mean PlotMe just stored an unowned plot in the database");
PlotSquared.log(
"&7 - Names you have never seen before could be from people mistyping commands");
PlotSquared.log( PlotSquared.log(
"&7 - Converting from a non-uuid version of PlotMe can't identify owners if the playerdata files are deleted (these plots will " "&7 - Converting from a non-uuid version of PlotMe can't identify owners if the playerdata files are deleted (these plots will "
+ "remain unknown until the player connects)"); + "remain unknown until the player connects)");
@ -232,7 +234,7 @@ public class ClassicPlotMeConnector extends APlotMeConnector {
} }
@Override public boolean accepts(String version) { @Override public boolean accepts(String version) {
return version == null || PlotSquared.get().canUpdate(version, "0.17.0") || PlotSquared.get() return version == null || PlotSquared.get().canUpdate(version, "0.17.0") || PlotSquared
.canUpdate("0.999.999", version); .get().canUpdate("0.999.999", version);
} }
} }

View File

@ -47,7 +47,8 @@ public class LikePlotMeConverter {
} }
private void sendMessage(String message) { private void sendMessage(String message) {
PlotSquared.debug("&3PlotMe&8->&3" + PlotSquared.imp().getPluginName() + "&8: &7" + message); PlotSquared
.debug("&3PlotMe&8->&3" + PlotSquared.imp().getPluginName() + "&8: &7" + message);
} }
public String getPlotMePath() { public String getPlotMePath() {
@ -126,7 +127,8 @@ public class LikePlotMeConverter {
PlotSquared.get().worlds.set("worlds." + world + ".wall.block_claimed", claimed); PlotSquared.get().worlds.set("worlds." + world + ".wall.block_claimed", claimed);
String floor = String floor =
plotmeDgYml.getString("worlds." + plotMeWorldName + ".PlotFloorBlock", "2"); // plotmeDgYml.getString("worlds." + plotMeWorldName + ".PlotFloorBlock", "2"); //
PlotSquared.get().worlds.set("worlds." + world + ".plot.floor", Collections.singletonList(floor)); PlotSquared.get().worlds
.set("worlds." + world + ".plot.floor", Collections.singletonList(floor));
String filling = plotmeDgYml.getString("worlds." + plotMeWorldName + ".FillBlock", "3"); // String filling = plotmeDgYml.getString("worlds." + plotMeWorldName + ".FillBlock", "3"); //
PlotSquared.get().worlds PlotSquared.get().worlds
.set("worlds." + world + ".plot.filling", Collections.singletonList(filling)); .set("worlds." + world + ".plot.filling", Collections.singletonList(filling));
@ -330,8 +332,8 @@ public class LikePlotMeConverter {
// load world with MV // load world with MV
Bukkit.getServer() Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(), .dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mv import " + actualWorldName + " normal -g " + PlotSquared "mv import " + actualWorldName + " normal -g "
.imp().getPluginName()); + PlotSquared.imp().getPluginName());
} else if (mw) { } else if (mw) {
// unload world with MW // unload world with MW
Bukkit.getServer() Bukkit.getServer()
@ -345,15 +347,15 @@ public class LikePlotMeConverter {
// load world with MW // load world with MW
Bukkit.getServer() Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(), .dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mw create " + actualWorldName + " plugin:" + PlotSquared "mw create " + actualWorldName + " plugin:"
.imp() + PlotSquared.imp().getPluginName());
.getPluginName());
} else { } else {
// Load using Bukkit API // Load using Bukkit API
// - User must set generator manually // - User must set generator manually
Bukkit.getServer().unloadWorld(world, true); Bukkit.getServer().unloadWorld(world, true);
World myWorld = WorldCreator.name(actualWorldName).generator( World myWorld = WorldCreator.name(actualWorldName).generator(
new BukkitPlotGenerator(PlotSquared.get().IMP.getDefaultGenerator())) new BukkitPlotGenerator(
PlotSquared.get().IMP.getDefaultGenerator()))
.createWorld(); .createWorld();
myWorld.save(); myWorld.save();
} }

View File

@ -58,7 +58,8 @@ public class PlotMeConnector_017 extends APlotMeConnector {
PlotSquared.debug("======================================="); PlotSquared.debug("=======================================");
PlotSquared.debug( PlotSquared.debug(
"&8 - &7The database does not match the version specified in the PlotMe config"); "&8 - &7The database does not match the version specified in the PlotMe config");
PlotSquared.debug("&8 - &7Please correct this, or if you are unsure, the most common is 0.16.3"); PlotSquared.debug(
"&8 - &7Please correct this, or if you are unsure, the most common is 0.16.3");
return null; return null;
} }
boolean checkUUID = DBFunc.hasColumn(resultSet, "ownerID"); boolean checkUUID = DBFunc.hasColumn(resultSet, "ownerID");
@ -142,7 +143,8 @@ public class PlotMeConnector_017 extends APlotMeConnector {
int key = resultSet.getInt("plot_id"); int key = resultSet.getInt("plot_id");
Plot plot = plots.get(key); Plot plot = plots.get(key);
if (plot == null) { if (plot == null) {
PlotSquared.log("&6Denied (" + key + ") references deleted plot; ignoring entry."); PlotSquared
.log("&6Denied (" + key + ") references deleted plot; ignoring entry.");
continue; continue;
} }
String player = resultSet.getString("player"); String player = resultSet.getString("player");
@ -159,7 +161,8 @@ public class PlotMeConnector_017 extends APlotMeConnector {
int key = resultSet.getInt("plot_id"); int key = resultSet.getInt("plot_id");
Plot plot = plots.get(key); Plot plot = plots.get(key);
if (plot == null) { if (plot == null) {
PlotSquared.log("&6Allowed (" + key + ") references deleted plot; ignoring entry."); PlotSquared
.log("&6Allowed (" + key + ") references deleted plot; ignoring entry.");
continue; continue;
} }
String player = resultSet.getString("player"); String player = resultSet.getString("player");

View File

@ -0,0 +1,105 @@
package com.github.intellectualsites.plotsquared.bukkit.events;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import java.util.UUID;
public class PlotChangeOwnerEvent extends PlotEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private final Player initiator;
private final UUID newOwner;
private final UUID oldOwner;
private boolean hasOldOwner;
private boolean cancelled;
/**
* PlotChangeOwnerEvent: Called when a plot's owner is change.
*
* @param newOwner The new owner of the plot
* @param oldOwner The old owner of the plot
* @param plot The plot having its owner changed
*/
public PlotChangeOwnerEvent(Player initiator, Plot plot, UUID oldOwner, UUID newOwner,
boolean hasOldOwner) {
super(plot);
this.initiator = initiator;
this.newOwner = newOwner;
this.oldOwner = oldOwner;
this.hasOldOwner = hasOldOwner;
}
public static HandlerList getHandlerList() {
return handlers;
}
/**
* Get the PlotId.
*
* @return PlotId
*/
public PlotId getPlotId() {
return getPlot().getId();
}
/**
* Get the world name.
*
* @return String
*/
public String getWorld() {
return getPlot().getWorldName();
}
/**
* Get the change-owner initator
*
* @return Player
*/
public Player getInitiator() {
return this.initiator;
}
/**
* Get the old owner of the plot. Null if not exists.
*
* @return UUID
*/
public UUID getOldOwner() {
return this.oldOwner;
}
/**
* Get the new owner of the plot
*
* @return UUID
*/
public UUID getNewOwner() {
return this.newOwner;
}
/**
* Get if the plot had an old owner
*
* @return boolean
*/
public boolean hasOldOwner() {
return this.hasOldOwner;
}
@Override public HandlerList getHandlers() {
return handlers;
}
@Override public boolean isCancelled() {
return this.cancelled;
}
@Override public void setCancelled(boolean b) {
this.cancelled = b;
}
}

View File

@ -3,13 +3,15 @@ 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.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.object.Rating; import com.github.intellectualsites.plotsquared.plot.object.Rating;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
public class PlotRateEvent extends PlotEvent { public class PlotRateEvent extends PlotEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
private final PlotPlayer rater; private final PlotPlayer rater;
private Rating rating; private Rating rating;
private boolean cancelled = false;
public PlotRateEvent(PlotPlayer rater, Rating rating, Plot plot) { public PlotRateEvent(PlotPlayer rater, Rating rating, Plot plot) {
super(plot); super(plot);
@ -37,4 +39,11 @@ public class PlotRateEvent extends PlotEvent {
return handlers; return handlers;
} }
@Override public boolean isCancelled() {
return this.cancelled;
}
@Override public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
} }

View File

@ -117,7 +117,8 @@ public class BukkitPlotGenerator extends ChunkGenerator
@Override @Override
public PlotArea getNewPlotArea(String world, String id, PlotId min, PlotId max) { public PlotArea getNewPlotArea(String world, String id, PlotId min, PlotId max) {
return PlotSquared.get().IMP.getDefaultGenerator().getNewPlotArea(world, id, min, max); return PlotSquared.get().IMP.getDefaultGenerator()
.getNewPlotArea(world, id, min, max);
} }
@Override @Override

View File

@ -226,7 +226,8 @@ public class ChunkListener implements Listener {
if (!chunk.isLoaded()) { if (!chunk.isLoaded()) {
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex)); Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex); TaskManager.tasks.remove(currentIndex);
PlotSquared.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!"); PlotSquared
.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true); chunk.unload(true, true);
return; return;
} }
@ -234,7 +235,8 @@ public class ChunkListener implements Listener {
if (tiles.length == 0) { if (tiles.length == 0) {
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex)); Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex); TaskManager.tasks.remove(currentIndex);
PlotSquared.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!"); PlotSquared
.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true); chunk.unload(true, true);
return; return;
} }
@ -244,7 +246,8 @@ public class ChunkListener implements Listener {
if (i >= tiles.length) { if (i >= tiles.length) {
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex)); Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex); TaskManager.tasks.remove(currentIndex);
PlotSquared.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!"); PlotSquared
.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true); chunk.unload(true, true);
return; return;
} }
@ -268,15 +271,15 @@ public class ChunkListener implements Listener {
ent.remove(); ent.remove();
} }
} }
PlotSquared PlotSquared.debug(
.debug(C.PREFIX.s() + "&a detected unsafe chunk and processed: " + (chunk.getX() << 4) C.PREFIX.s() + "&a detected unsafe chunk and processed: " + (chunk.getX() << 4)
+ "," + (chunk.getX() << 4)); + "," + (chunk.getX() << 4));
} }
if (tiles.length > Settings.Chunk_Processor.MAX_TILES) { if (tiles.length > Settings.Chunk_Processor.MAX_TILES) {
if (unload) { if (unload) {
PlotSquared PlotSquared.debug(
.debug(C.PREFIX.s() + "&c detected unsafe chunk: " + (chunk.getX() << 4) + "," + ( C.PREFIX.s() + "&c detected unsafe chunk: " + (chunk.getX() << 4) + "," + (
chunk.getX() << 4)); chunk.getX() << 4));
cleanChunk(chunk); cleanChunk(chunk);
return true; return true;
} }

View File

@ -909,8 +909,10 @@ public class PlayerEvents extends PlotListener implements Listener {
} }
} }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW) public void onChat(AsyncPlayerChatEvent event) {
public void onChat(AsyncPlayerChatEvent event) { if (event.isCancelled())
return;
PlotPlayer plotPlayer = BukkitUtil.getPlayer(event.getPlayer()); PlotPlayer plotPlayer = BukkitUtil.getPlayer(event.getPlayer());
Location location = plotPlayer.getLocation(); Location location = plotPlayer.getLocation();
PlotArea area = location.getPlotArea(); PlotArea area = location.getPlotArea();
@ -2100,7 +2102,8 @@ public class PlayerEvents extends PlotListener implements Listener {
return; return;
} }
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) { if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
entity.setMetadata("plot", new FixedMetadataValue((Plugin) PlotSquared.get().IMP, plot)); entity
.setMetadata("plot", new FixedMetadataValue((Plugin) PlotSquared.get().IMP, plot));
} }
} }
@ -2332,7 +2335,8 @@ public class PlayerEvents extends PlotListener implements Listener {
@SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST) @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST)
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) { public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
EntityDamageByEntityEvent eventChange = null; EntityDamageByEntityEvent eventChange = null;
if (PlotSquared.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_11_0)) { if (PlotSquared.get()
.checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_11_0)) {
eventChange = new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(), eventChange = new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(),
EntityDamageEvent.DamageCause.FIRE_TICK, (double) event.getDuration()); EntityDamageEvent.DamageCause.FIRE_TICK, (double) event.getDuration());
} else { } else {

View File

@ -42,7 +42,8 @@ public class PlayerEvents_1_8 extends PlotListener implements Listener {
return; return;
} }
HumanEntity entity = event.getWhoClicked(); HumanEntity entity = event.getWhoClicked();
if (!(entity instanceof Player) || !PlotSquared.get().hasPlotArea(entity.getWorld().getName())) { if (!(entity instanceof Player) || !PlotSquared.get()
.hasPlotArea(entity.getWorld().getName())) {
return; return;
} }
Player player = (Player) entity; Player player = (Player) entity;

View File

@ -7,18 +7,15 @@ import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@Getter @Getter public abstract class EntityWrapper {
public abstract class EntityWrapper {
private final Entity entity;
private final EntityType type;
public double x;
public double y;
public double z;
protected final float yaw; protected final float yaw;
protected final float pitch; protected final float pitch;
private final Entity entity;
private final EntityType type;
public double x;
public double y;
public double z;
EntityWrapper(@NonNull final Entity entity) { EntityWrapper(@NonNull final Entity entity) {
this.entity = entity; this.entity = entity;

View File

@ -53,7 +53,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
if (depth == 1) { if (depth == 1) {
return; return;
} }
if (PlotSquared.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_10_0) if (PlotSquared.get()
.checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_10_0)
|| entity instanceof ArmorStand) { || entity instanceof ArmorStand) {
if (!entity.hasGravity()) { if (!entity.hasGravity()) {
this.noGravity = true; this.noGravity = true;
@ -62,8 +63,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
switch (entity.getType()) { switch (entity.getType()) {
case ARROW: case ARROW:
case BOAT: case BOAT:
if (PlotSquared if (PlotSquared.get()
.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) { .checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) {
Boat boat = (Boat) entity; Boat boat = (Boat) entity;
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType()); this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
} }
@ -188,8 +189,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
case SKELETON: case SKELETON:
this.dataByte = this.dataByte = getOrdinal(Skeleton.SkeletonType.values(),
getOrdinal(Skeleton.SkeletonType.values(), ((Skeleton) entity).getSkeletonType()); ((Skeleton) entity).getSkeletonType());
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
case ARMOR_STAND: case ARMOR_STAND:
@ -323,7 +324,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
void restoreEquipment(LivingEntity entity) { void restoreEquipment(LivingEntity entity) {
EntityEquipment equipment = entity.getEquipment(); EntityEquipment equipment = entity.getEquipment();
if (PlotSquared.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) { if (PlotSquared.get()
.checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) {
equipment.setItemInMainHand(this.lived.mainHand); equipment.setItemInMainHand(this.lived.mainHand);
equipment.setItemInOffHand(this.lived.offHand); equipment.setItemInOffHand(this.lived.offHand);
} else { } else {
@ -367,7 +369,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
void storeEquipment(EntityEquipment equipment) { void storeEquipment(EntityEquipment equipment) {
if (PlotSquared.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) { if (PlotSquared.get()
.checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) {
this.lived.mainHand = equipment.getItemInMainHand().clone(); this.lived.mainHand = equipment.getItemInMainHand().clone();
this.lived.offHand = equipment.getItemInOffHand().clone(); this.lived.offHand = equipment.getItemInOffHand().clone();
} else { } else {
@ -412,8 +415,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.tamed.tamed = tamed.isTamed(); this.tamed.tamed = tamed.isTamed();
} }
@Override @Override public Entity spawn(World world, int xOffset, int zOffset) {
public Entity spawn(World world, int xOffset, int zOffset) {
Location location = new Location(world, this.x + xOffset, this.y, this.z + zOffset); Location location = new Location(world, this.x + xOffset, this.y, this.z + zOffset);
location.setYaw(this.yaw); location.setYaw(this.yaw);
location.setPitch(this.pitch); location.setPitch(this.pitch);
@ -459,7 +461,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
if (this.depth == 1) { if (this.depth == 1) {
return entity; return entity;
} }
if (PlotSquared.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_10_0) if (PlotSquared.get()
.checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_10_0)
|| entity instanceof ArmorStand) { || entity instanceof ArmorStand) {
if (this.noGravity) { if (this.noGravity) {
entity.setGravity(false); entity.setGravity(false);
@ -468,8 +471,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
switch (entity.getType()) { switch (entity.getType()) {
case ARROW: case ARROW:
case BOAT: case BOAT:
if (PlotSquared if (PlotSquared.get()
.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) { .checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_0)) {
Boat boat = (Boat) entity; Boat boat = (Boat) entity;
boat.setWoodType(TreeSpecies.values()[dataByte]); boat.setWoodType(TreeSpecies.values()[dataByte]);
} }
@ -592,7 +595,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
return entity; return entity;
case SKELETON: case SKELETON:
if (this.dataByte != 0) { if (this.dataByte != 0) {
((Skeleton) entity).setSkeletonType(Skeleton.SkeletonType.values()[this.dataByte]); ((Skeleton) entity)
.setSkeletonType(Skeleton.SkeletonType.values()[this.dataByte]);
} }
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return entity; return entity;
@ -703,7 +707,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
} }
public void saveEntity() {} public void saveEntity() {
}
private byte getOrdinal(Object[] list, Object value) { private byte getOrdinal(Object[] list, Object value) {
for (byte i = 0; i < list.length; i++) { for (byte i = 0; i < list.length; i++) {

View File

@ -52,10 +52,11 @@ public class TeleportEntityWrapper extends EntityWrapper {
this.getEntity().setInvulnerable(true); this.getEntity().setInvulnerable(true);
this.fireTicksOld = this.getEntity().getFireTicks(); this.fireTicksOld = this.getEntity().getFireTicks();
this.livingTicksOld = this.getEntity().getTicksLived(); this.livingTicksOld = this.getEntity().getTicksLived();
this.getEntity().setMetadata("ps-tmp-teleport", new FixedMetadataValue( this.getEntity().setMetadata("ps-tmp-teleport",
BukkitMain.getPlugin(BukkitMain.class), oldLocation)); new FixedMetadataValue(BukkitMain.getPlugin(BukkitMain.class), oldLocation));
final Chunk newChunk = getNewChunk(); final Chunk newChunk = getNewChunk();
this.getEntity().teleport(new Location(newChunk.getWorld(), newChunk.getX() << 4, 5000, newChunk.getZ() << 4)); this.getEntity().teleport(
new Location(newChunk.getWorld(), newChunk.getX() << 4, 5000, newChunk.getZ() << 4));
} }
private Chunk getNewChunk() { private Chunk getNewChunk() {

View File

@ -12,8 +12,8 @@ import org.bukkit.entity.Player;
private final boolean valid; private final boolean valid;
public DefaultTitle_111() { public DefaultTitle_111() {
this.valid = PlotSquared this.valid = PlotSquared.get()
.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_11_0); .checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_11_0);
} }
@Override @Override

View File

@ -101,13 +101,16 @@ public class BukkitChunkManager extends ChunkManager {
return chunks; return chunks;
} }
@Override public boolean copyRegion( @Override
com.github.intellectualsites.plotsquared.plot.object.Location pos1, com.github.intellectualsites.plotsquared.plot.object.Location pos2, com.github.intellectualsites.plotsquared.plot.object.Location newPos, public boolean copyRegion(com.github.intellectualsites.plotsquared.plot.object.Location pos1,
com.github.intellectualsites.plotsquared.plot.object.Location pos2,
com.github.intellectualsites.plotsquared.plot.object.Location newPos,
final Runnable whenDone) { final Runnable whenDone) {
final int relX = newPos.getX() - pos1.getX(); final int relX = newPos.getX() - pos1.getX();
final int relZ = newPos.getZ() - pos1.getZ(); final int relZ = newPos.getZ() - pos1.getZ();
com.github.intellectualsites.plotsquared.plot.object.Location pos4 = com.github.intellectualsites.plotsquared.plot.object.Location pos4 =
new com.github.intellectualsites.plotsquared.plot.object.Location(newPos.getWorld(), newPos.getX() + relX, 256, newPos.getZ() + relZ); new com.github.intellectualsites.plotsquared.plot.object.Location(newPos.getWorld(),
newPos.getX() + relX, 256, newPos.getZ() + relZ);
final RegionWrapper region = final RegionWrapper region =
new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
@ -159,7 +162,9 @@ public class BukkitChunkManager extends ChunkManager {
return true; return true;
} }
@Override public boolean regenerateRegion(final com.github.intellectualsites.plotsquared.plot.object.Location pos1, final com.github.intellectualsites.plotsquared.plot.object.Location pos2, @Override public boolean regenerateRegion(
final com.github.intellectualsites.plotsquared.plot.object.Location pos1,
final com.github.intellectualsites.plotsquared.plot.object.Location pos2,
final boolean ignoreAugment, final Runnable whenDone) { final boolean ignoreAugment, final Runnable whenDone) {
final String world = pos1.getWorld(); final String world = pos1.getWorld();
@ -315,8 +320,9 @@ public class BukkitChunkManager extends ChunkManager {
return true; return true;
} }
@Override public void clearAllEntities( @Override
com.github.intellectualsites.plotsquared.plot.object.Location pos1, com.github.intellectualsites.plotsquared.plot.object.Location pos2) { public void clearAllEntities(com.github.intellectualsites.plotsquared.plot.object.Location pos1,
com.github.intellectualsites.plotsquared.plot.object.Location pos2) {
String world = pos1.getWorld(); String world = pos1.getWorld();
List<Entity> entities = BukkitUtil.getEntities(world); List<Entity> entities = BukkitUtil.getEntities(world);
int bx = pos1.getX(); int bx = pos1.getX();
@ -355,7 +361,10 @@ public class BukkitChunkManager extends ChunkManager {
} }
} }
@Override public void swap(com.github.intellectualsites.plotsquared.plot.object.Location bot1, com.github.intellectualsites.plotsquared.plot.object.Location top1, com.github.intellectualsites.plotsquared.plot.object.Location bot2, com.github.intellectualsites.plotsquared.plot.object.Location top2, @Override public void swap(com.github.intellectualsites.plotsquared.plot.object.Location bot1,
com.github.intellectualsites.plotsquared.plot.object.Location top1,
com.github.intellectualsites.plotsquared.plot.object.Location bot2,
com.github.intellectualsites.plotsquared.plot.object.Location top2,
final Runnable whenDone) { final Runnable whenDone) {
RegionWrapper region1 = RegionWrapper region1 =
new RegionWrapper(bot1.getX(), top1.getX(), bot1.getZ(), top1.getZ()); new RegionWrapper(bot1.getX(), top1.getX(), bot1.getZ(), top1.getZ());
@ -655,7 +664,8 @@ public class BukkitChunkManager extends ChunkManager {
public void saveEntitiesOut(Chunk chunk, RegionWrapper region) { public void saveEntitiesOut(Chunk chunk, RegionWrapper region) {
for (Entity entity : chunk.getEntities()) { for (Entity entity : chunk.getEntities()) {
com.github.intellectualsites.plotsquared.plot.object.Location loc = BukkitUtil.getLocation(entity); com.github.intellectualsites.plotsquared.plot.object.Location loc =
BukkitUtil.getLocation(entity);
int x = loc.getX(); int x = loc.getX();
int z = loc.getZ(); int z = loc.getZ();
if (isIn(region, x, z)) { if (isIn(region, x, z)) {
@ -673,7 +683,8 @@ public class BukkitChunkManager extends ChunkManager {
public void saveEntitiesIn(Chunk chunk, RegionWrapper region, int offsetX, int offsetZ, public void saveEntitiesIn(Chunk chunk, RegionWrapper region, int offsetX, int offsetZ,
boolean delete) { boolean delete) {
for (Entity entity : chunk.getEntities()) { for (Entity entity : chunk.getEntities()) {
com.github.intellectualsites.plotsquared.plot.object.Location loc = BukkitUtil.getLocation(entity); com.github.intellectualsites.plotsquared.plot.object.Location loc =
BukkitUtil.getLocation(entity);
int x = loc.getX(); int x = loc.getX();
int z = loc.getZ(); int z = loc.getZ();
if (!isIn(region, x, z)) { if (!isIn(region, x, z)) {
@ -894,14 +905,16 @@ public class BukkitChunkManager extends ChunkManager {
((NoteBlock) state).setNote(blockLocNoteEntry.getValue()); ((NoteBlock) state).setNote(blockLocNoteEntry.getValue());
state.update(true); state.update(true);
} else { } else {
PlotSquared.debug("&c[WARN] Plot clear failed to regenerate note block: " + ( PlotSquared.debug(
blockLocNoteEntry.getKey().x + xOffset) + ',' + blockLocNoteEntry "&c[WARN] Plot clear failed to regenerate note block: " + (
.getKey().y + ',' + (blockLocNoteEntry.getKey().z + zOffset)); blockLocNoteEntry.getKey().x + xOffset) + ',' + blockLocNoteEntry
.getKey().y + ',' + (blockLocNoteEntry.getKey().z + zOffset));
} }
} catch (Exception ignored) { } catch (Exception ignored) {
PlotSquared.debug("&c[WARN] Plot clear failed to regenerate note block (e): " + ( PlotSquared.debug(
blockLocNoteEntry.getKey().x + xOffset) + ',' + blockLocNoteEntry.getKey().y "&c[WARN] Plot clear failed to regenerate note block (e): " + (
+ ',' + (blockLocNoteEntry.getKey().z + zOffset)); blockLocNoteEntry.getKey().x + xOffset) + ',' + blockLocNoteEntry
.getKey().y + ',' + (blockLocNoteEntry.getKey().z + zOffset));
} }
} }
for (Entry<BlockLoc, Short> blockLocShortEntry : this.brewTime.entrySet()) { for (Entry<BlockLoc, Short> blockLocShortEntry : this.brewTime.entrySet()) {
@ -912,16 +925,16 @@ public class BukkitChunkManager extends ChunkManager {
if (state instanceof BrewingStand) { if (state instanceof BrewingStand) {
((BrewingStand) state).setBrewingTime(blockLocShortEntry.getValue()); ((BrewingStand) state).setBrewingTime(blockLocShortEntry.getValue());
} else { } else {
PlotSquared PlotSquared.debug(
.debug("&c[WARN] Plot clear failed to restore brewing stand cooking: " + ( "&c[WARN] Plot clear failed to restore brewing stand cooking: " + (
blockLocShortEntry.getKey().x + xOffset) + ',' + blockLocShortEntry blockLocShortEntry.getKey().x + xOffset) + ',' + blockLocShortEntry
.getKey().y + ',' + (blockLocShortEntry.getKey().z + zOffset)); .getKey().y + ',' + (blockLocShortEntry.getKey().z + zOffset));
} }
} catch (Exception ignored) { } catch (Exception ignored) {
PlotSquared PlotSquared.debug(
.debug("&c[WARN] Plot clear failed to restore brewing stand cooking (e): " + ( "&c[WARN] Plot clear failed to restore brewing stand cooking (e): " + (
blockLocShortEntry.getKey().x + xOffset) + ',' + blockLocShortEntry blockLocShortEntry.getKey().x + xOffset) + ',' + blockLocShortEntry
.getKey().y + ',' + (blockLocShortEntry.getKey().z + zOffset)); .getKey().y + ',' + (blockLocShortEntry.getKey().z + zOffset));
} }
} }
for (Entry<BlockLoc, EntityType> blockLocEntityTypeEntry : this.spawnerData for (Entry<BlockLoc, EntityType> blockLocEntityTypeEntry : this.spawnerData
@ -957,14 +970,17 @@ public class BukkitChunkManager extends ChunkManager {
((CommandBlock) state).setCommand(blockLocStringEntry.getValue()); ((CommandBlock) state).setCommand(blockLocStringEntry.getValue());
state.update(true); state.update(true);
} else { } else {
PlotSquared.debug("&c[WARN] Plot clear failed to restore command block: " + ( PlotSquared.debug(
blockLocStringEntry.getKey().x + xOffset) + ',' + blockLocStringEntry "&c[WARN] Plot clear failed to restore command block: " + (
.getKey().y + ',' + (blockLocStringEntry.getKey().z + zOffset)); blockLocStringEntry.getKey().x + xOffset) + ','
+ blockLocStringEntry.getKey().y + ',' + (
blockLocStringEntry.getKey().z + zOffset));
} }
} catch (Exception ignored) { } catch (Exception ignored) {
PlotSquared.debug("&c[WARN] Plot clear failed to restore command block (e): " + ( PlotSquared.debug(
blockLocStringEntry.getKey().x + xOffset) + ',' + blockLocStringEntry "&c[WARN] Plot clear failed to restore command block (e): " + (
.getKey().y + ',' + (blockLocStringEntry.getKey().z + zOffset)); blockLocStringEntry.getKey().x + xOffset) + ',' + blockLocStringEntry
.getKey().y + ',' + (blockLocStringEntry.getKey().z + zOffset));
} }
} }
for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.brewingStandContents for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.brewingStandContents
@ -979,16 +995,16 @@ public class BukkitChunkManager extends ChunkManager {
.setContents(blockLocEntry.getValue()); .setContents(blockLocEntry.getValue());
state.update(true); state.update(true);
} else { } else {
PlotSquared PlotSquared.debug(
.debug("&c[WARN] Plot clear failed to regenerate brewing stand: " + ( "&c[WARN] Plot clear failed to regenerate brewing stand: " + (
blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y
+ ',' + (blockLocEntry.getKey().z + zOffset)); + ',' + (blockLocEntry.getKey().z + zOffset));
} }
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
PlotSquared PlotSquared.debug(
.debug("&c[WARN] Plot clear failed to regenerate brewing stand (e): " + ( "&c[WARN] Plot clear failed to regenerate brewing stand (e): " + (
blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y + ',' blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y
+ (blockLocEntry.getKey().z + zOffset)); + ',' + (blockLocEntry.getKey().z + zOffset));
} }
} }
for (Entry<BlockLoc, Short[]> blockLocEntry : this.furnaceTime.entrySet()) { for (Entry<BlockLoc, Short[]> blockLocEntry : this.furnaceTime.entrySet()) {
@ -1002,16 +1018,16 @@ public class BukkitChunkManager extends ChunkManager {
((Furnace) state).setBurnTime(time[0]); ((Furnace) state).setBurnTime(time[0]);
((Furnace) state).setCookTime(time[1]); ((Furnace) state).setCookTime(time[1]);
} else { } else {
PlotSquared PlotSquared.debug(
.debug("&c[WARN] Plot clear failed to restore furnace cooking: " + ( "&c[WARN] Plot clear failed to restore furnace cooking: " + (
blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y
+ ',' + (blockLocEntry.getKey().z + zOffset)); + ',' + (blockLocEntry.getKey().z + zOffset));
} }
} catch (Exception ignored) { } catch (Exception ignored) {
PlotSquared PlotSquared.debug(
.debug("&c[WARN] Plot clear failed to restore furnace cooking (e): " + ( "&c[WARN] Plot clear failed to restore furnace cooking (e): " + (
blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y + ',' blockLocEntry.getKey().x + xOffset) + ',' + blockLocEntry.getKey().y
+ (blockLocEntry.getKey().z + zOffset)); + ',' + (blockLocEntry.getKey().z + zOffset));
} }
} }
for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.furnaceContents.entrySet()) { for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.furnaceContents.entrySet()) {

View File

@ -10,6 +10,7 @@ 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.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
@ -83,14 +84,23 @@ public class BukkitEventUtil extends EventUtil {
callEvent(new PlayerPlotHelperEvent(getPlayer(initiator), plot, player, added)); callEvent(new PlayerPlotHelperEvent(getPlayer(initiator), plot, player, added));
} }
@Override
public boolean callOwnerChange(PlotPlayer initiator, Plot plot, UUID oldOwner, UUID newOwner,
boolean hasOldOwner) {
return callEvent(
new PlotChangeOwnerEvent(getPlayer(initiator), plot, oldOwner, newOwner, hasOldOwner));
}
@Override public boolean callFlagRemove(Flag flag, Object object, PlotCluster cluster) { @Override public boolean callFlagRemove(Flag flag, Object object, PlotCluster cluster) {
return callEvent(new ClusterFlagRemoveEvent(flag, cluster)); return callEvent(new ClusterFlagRemoveEvent(flag, cluster));
} }
@Override public Rating callRating(PlotPlayer player, Plot plot, Rating rating) { @Override @Nullable public Rating callRating(PlotPlayer player, Plot plot, Rating rating) {
PlotRateEvent event = new PlotRateEvent(player, rating, plot); PlotRateEvent event = new PlotRateEvent(player, rating, plot);
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return null;
}
return event.getRating(); return event.getRating();
} }
} }

View File

@ -132,8 +132,10 @@ public class BukkitSetupUtils extends SetupUtils {
worldSection.set(step.getConstant(), step.getValue()); worldSection.set(step.getConstant(), step.getValue());
} }
PlotSquared.get().worlds.set("worlds." + world + ".generator.type", object.type); PlotSquared.get().worlds.set("worlds." + world + ".generator.type", object.type);
PlotSquared.get().worlds.set("worlds." + world + ".generator.terrain", object.terrain); PlotSquared.get().worlds
PlotSquared.get().worlds.set("worlds." + world + ".generator.plugin", object.plotManager); .set("worlds." + world + ".generator.terrain", object.terrain);
PlotSquared.get().worlds
.set("worlds." + world + ".generator.plugin", object.plotManager);
if (object.setupGenerator != null && !object.setupGenerator if (object.setupGenerator != null && !object.setupGenerator
.equals(object.plotManager)) { .equals(object.plotManager)) {
PlotSquared.get().worlds PlotSquared.get().worlds

View File

@ -24,8 +24,7 @@ import org.bukkit.material.*;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
@SuppressWarnings({"unused", "WeakerAccess"}) @SuppressWarnings({"unused", "WeakerAccess"}) public class BukkitUtil extends WorldUtil {
public class BukkitUtil extends WorldUtil {
private static String lastString = null; private static String lastString = null;
private static World lastWorld = null; private static World lastWorld = null;
@ -86,7 +85,7 @@ public class BukkitUtil extends WorldUtil {
/** /**
* Get the PlotPlayer for an offline player. * Get the PlotPlayer for an offline player.
* <p> *
* <p>Note that this will work if the player is offline, however not all * <p>Note that this will work if the player is offline, however not all
* functionality will work. * functionality will work.
* *
@ -242,8 +241,9 @@ public class BukkitUtil extends WorldUtil {
return getWorld(world).getBiome(x, z).name(); return getWorld(world).getBiome(x, z).name();
} }
@Override @SuppressWarnings("deprecation") public void setSign(@NonNull final String worldName, @Override @SuppressWarnings("deprecation")
final int x, final int y, final int z, @NonNull final String[] lines) { public void setSign(@NonNull final String worldName, final int x, final int y, final int z,
@NonNull final String[] lines) {
final World world = getWorld(worldName); final World world = getWorld(worldName);
final Block block = world.getBlockAt(x, y, z); final Block block = world.getBlockAt(x, y, z);
// block.setType(Material.AIR); // block.setType(Material.AIR);
@ -351,7 +351,8 @@ public class BukkitUtil extends WorldUtil {
return list; return list;
} }
@Override public boolean addItems(@NonNull final String worldName, @NonNull final PlotItem items) { @Override
public boolean addItems(@NonNull final String worldName, @NonNull final PlotItem items) {
final World world = getWorld(worldName); final World world = getWorld(worldName);
final Block block = world.getBlockAt(items.x, items.y, items.z); final Block block = world.getBlockAt(items.x, items.y, items.z);
if (block == null) { if (block == null) {
@ -403,7 +404,8 @@ public class BukkitUtil extends WorldUtil {
} }
} }
@Override @Nullable public StringComparison<PlotBlock>.ComparisonResult getClosestBlock(String name) { @Override @Nullable
public StringComparison<PlotBlock>.ComparisonResult getClosestBlock(String name) {
try { try {
final Material material = Material.valueOf(name.toUpperCase()); final Material material = Material.valueOf(name.toUpperCase());
return new StringComparison<PlotBlock>().new ComparisonResult(0, return new StringComparison<PlotBlock>().new ComparisonResult(0,
@ -439,7 +441,8 @@ public class BukkitUtil extends WorldUtil {
return null; return null;
} }
@Override public void setBiomes(@NonNull final String worldName, @NonNull final RegionWrapper region, @Override
public void setBiomes(@NonNull final String worldName, @NonNull final RegionWrapper region,
@NonNull final String biomeString) { @NonNull final String biomeString) {
final World world = getWorld(worldName); final World world = getWorld(worldName);
final Biome biome = Biome.valueOf(biomeString.toUpperCase()); final Biome biome = Biome.valueOf(biomeString.toUpperCase());

View File

@ -50,7 +50,8 @@ public class SendChunk {
RefClass classChunk = getRefClass("{nms}.Chunk"); RefClass classChunk = getRefClass("{nms}.Chunk");
this.methodInitLighting = classChunk.getMethod("initLighting"); this.methodInitLighting = classChunk.getMethod("initLighting");
RefClass classMapChunk = getRefClass("{nms}.PacketPlayOutMapChunk"); RefClass classMapChunk = getRefClass("{nms}.PacketPlayOutMapChunk");
if (PlotSquared.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_4)) { if (PlotSquared.get()
.checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_4)) {
//this works for 1.9.4 and 1.10 //this works for 1.9.4 and 1.10
tempMapChunk = classMapChunk.getConstructor(classChunk.getRealClass(), int.class); tempMapChunk = classMapChunk.getConstructor(classChunk.getRealClass(), int.class);
} else { } else {
@ -118,8 +119,8 @@ public class SendChunk {
chunks.remove(chunk); chunks.remove(chunk);
Object con = this.connection.of(entity).get(); Object con = this.connection.of(entity).get();
Object packet = null; Object packet = null;
if (PlotSquared if (PlotSquared.get()
.get().checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_4)) { .checkVersion(PlotSquared.get().IMP.getServerVersion(), BukkitVersion.v1_9_4)) {
try { try {
packet = this.mapChunk.create(c, 65535); packet = this.mapChunk.create(c, 65535);
} catch (Exception ignored) { } catch (Exception ignored) {
@ -148,10 +149,11 @@ public class SendChunk {
chunk.unload(true, false); chunk.unload(true, false);
} catch (Throwable ignored) { } catch (Throwable ignored) {
String worldName = chunk.getWorld().getName(); String worldName = chunk.getWorld().getName();
PlotSquared.debug(
"$4Could not save chunk: " + worldName + ';' + chunk.getX() + ";"
+ chunk.getZ());
PlotSquared PlotSquared
.debug("$4Could not save chunk: " + worldName + ';' + chunk.getX() + ";" .debug("$3 - $4File may be open in another process (e.g. MCEdit)");
+ chunk.getZ());
PlotSquared.debug("$3 - $4File may be open in another process (e.g. MCEdit)");
PlotSquared.debug("$3 - $4" + worldName + "/level.dat or " + worldName PlotSquared.debug("$3 - $4" + worldName + "/level.dat or " + worldName
+ "/level_old.dat may be corrupt (try repairing or removing these)"); + "/level_old.dat may be corrupt (try repairing or removing these)");
} }

View File

@ -52,6 +52,7 @@ public class SetGenCB {
} }
} }
} }
PlotSquared.get().loadWorld(world.getName(), PlotSquared.get().IMP.getGenerator(world.getName(), null)); PlotSquared.get()
.loadWorld(world.getName(), PlotSquared.get().IMP.getGenerator(world.getName(), null));
} }
} }

View File

@ -203,7 +203,8 @@ public class FileUUIDHandler extends UUIDHandlerImplementation {
} }
} }
} catch (Exception ignored) { } catch (Exception ignored) {
PlotSquared.debug(C.PREFIX + "&6Invalid PlayerData: " + uuid.toString() + ".dat"); PlotSquared
.debug(C.PREFIX + "&6Invalid PlayerData: " + uuid.toString() + ".dat");
} }
} }
for (String name : names) { for (String name : names) {

View File

@ -43,7 +43,8 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
public SQLUUIDHandler(UUIDWrapper wrapper) { public SQLUUIDHandler(UUIDWrapper wrapper) {
super(wrapper); super(wrapper);
this.sqlite = new SQLite(MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), "usercache.db")); this.sqlite =
new SQLite(MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), "usercache.db"));
try { try {
this.sqlite.openConnection(); this.sqlite.openConnection();
} catch (ClassNotFoundException | SQLException e) { } catch (ClassNotFoundException | SQLException e) {
@ -221,7 +222,8 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
statement.setString(1, uuid.toString()); statement.setString(1, uuid.toString());
statement.setString(2, name.toString()); statement.setString(2, name.toString());
statement.execute(); statement.execute();
PlotSquared.debug(C.PREFIX + "&cAdded '&6" + uuid + "&c' - '&6" + name + "&c'"); PlotSquared
.debug(C.PREFIX + "&cAdded '&6" + uuid + "&c' - '&6" + name + "&c'");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -244,8 +246,8 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
statement.setString(1, name.value); statement.setString(1, name.value);
statement.setString(2, uuid.toString()); statement.setString(2, uuid.toString());
statement.execute(); statement.execute();
PlotSquared PlotSquared.debug(
.debug(C.PREFIX + "Name change for '" + uuid + "' to '" + name.value + '\''); C.PREFIX + "Name change for '" + uuid + "' to '" + name.value + '\'');
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -22,7 +22,7 @@ import java.util.UUID;
/** /**
* PlotSquared API. * PlotSquared API.
* <p> *
* <p>Useful classes: * <p>Useful classes:
* <ul> * <ul>
* <li>{@link PlotPlayer}</li> * <li>{@link PlotPlayer}</li>
@ -34,9 +34,7 @@ import java.util.UUID;
* *
* @version 3.3.3 * @version 3.3.3
*/ */
@SuppressWarnings({"unused", "WeakerAccess"}) @SuppressWarnings({"unused", "WeakerAccess"}) @NoArgsConstructor public class PlotAPI {
@NoArgsConstructor
public class PlotAPI {
/** /**
* Get all plots. * Get all plots.
@ -201,7 +199,7 @@ public class PlotAPI {
/** /**
* Get the PlotPlayer for a UUID. * Get the PlotPlayer for a UUID.
* <p> *
* <p><i>Please note that PlotSquared can be configured to provide * <p><i>Please note that PlotSquared can be configured to provide
* different UUIDs than bukkit</i> * different UUIDs than bukkit</i>
* *

View File

@ -166,8 +166,8 @@ public abstract class Command {
options.put("usage", declaration.usage()); options.put("usage", declaration.usage());
options.put("confirmation", declaration.confirmation()); options.put("confirmation", declaration.confirmation());
boolean set = false; boolean set = false;
YamlConfiguration commands = PlotSquared.get() == null ? new YamlConfiguration() : PlotSquared YamlConfiguration commands =
.get().commands; PlotSquared.get() == null ? new YamlConfiguration() : PlotSquared.get().commands;
for (Map.Entry<String, Object> entry : options.entrySet()) { for (Map.Entry<String, Object> entry : options.entrySet()) {
String key = this.getFullId() + "." + entry.getKey(); String key = this.getFullId() + "." + entry.getKey();
if (!commands.contains(key)) { if (!commands.contains(key)) {

View File

@ -25,7 +25,7 @@ class ConfigurationOptions {
/** /**
* Gets the char that will be used to separate {@link * Gets the char that will be used to separate {@link
* ConfigurationSection}s. * ConfigurationSection}s.
* <p> *
* <p>This value does not affect how the {@link Configuration} is stored, * <p>This value does not affect how the {@link Configuration} is stored,
* only in how you access the data. The default value is '.'. * only in how you access the data. The default value is '.'.
* *
@ -38,7 +38,7 @@ class ConfigurationOptions {
/** /**
* Sets the char that will be used to separate {@link * Sets the char that will be used to separate {@link
* ConfigurationSection}s. * ConfigurationSection}s.
* <p> *
* <p>This value does not affect how the {@link Configuration} is stored, * <p>This value does not affect how the {@link Configuration} is stored,
* only in how you access the data. The default value is '.'. * only in how you access the data. The default value is '.'.
* *
@ -53,7 +53,7 @@ class ConfigurationOptions {
/** /**
* Checks if the {@link Configuration} should copy values from its default * Checks if the {@link Configuration} should copy values from its default
* {@link Configuration} directly. * {@link Configuration} directly.
* <p> *
* <p>If this is true, all values in the default Configuration will be * <p>If this is true, all values in the default Configuration will be
* directly copied, making it impossible to distinguish between values * directly copied, making it impossible to distinguish between values
* that were set and values that are provided by default. As a result, * that were set and values that are provided by default. As a result,
@ -71,7 +71,7 @@ class ConfigurationOptions {
/** /**
* Sets if the {@link Configuration} should copy values from its default * Sets if the {@link Configuration} should copy values from its default
* {@link Configuration} directly. * {@link Configuration} directly.
* <p> *
* <p>If this is true, all values in the default Configuration will be * <p>If this is true, all values in the default Configuration will be
* directly copied, making it impossible to distinguish between values * directly copied, making it impossible to distinguish between values
* that were set and values that are provided by default. As a result, * that were set and values that are provided by default. As a result,

View File

@ -11,11 +11,11 @@ public interface ConfigurationSection {
/** /**
* Gets a set containing all keys in this section. * Gets a set containing all keys in this section.
* <p> *
* <p>If deep is set to true, then this will contain all the keys within any * <p>If deep is set to true, then this will contain all the keys within any
* child {@link ConfigurationSection}s (and their children, etc). These * child {@link ConfigurationSection}s (and their children, etc). These
* will be in a valid path notation for you to use. * will be in a valid path notation for you to use.
* <p> *
* <p>If deep is set to false, then this will contain only the keys of any * <p>If deep is set to false, then this will contain only the keys of any
* direct children, and not their own children. * direct children, and not their own children.
* *
@ -27,11 +27,11 @@ public interface ConfigurationSection {
/** /**
* Gets a Map containing all keys and their values for this section. * Gets a Map containing all keys and their values for this section.
* <p> *
* <p>If deep is set to true, then this will contain all the keys and values * <p>If deep is set to true, then this will contain all the keys and values
* within any child {@link ConfigurationSection}s (and their children, * within any child {@link ConfigurationSection}s (and their children,
* etc). These keys will be in a valid path notation for you to use. * etc). These keys will be in a valid path notation for you to use.
* <p> *
* <p>If deep is set to false, then this will contain only the keys and * <p>If deep is set to false, then this will contain only the keys and
* values of any direct children, and not their own children. * values of any direct children, and not their own children.
* *
@ -43,7 +43,7 @@ public interface ConfigurationSection {
/** /**
* Checks if this {@link ConfigurationSection} contains the given path. * Checks if this {@link ConfigurationSection} contains the given path.
* <p> *
* <p>If the value for the requested path does not exist but a default value * <p>If the value for the requested path does not exist but a default value
* has been specified, this will return true. * has been specified, this will return true.
* *
@ -57,7 +57,7 @@ public interface ConfigurationSection {
/** /**
* Checks if this {@link ConfigurationSection} has a value set for the * Checks if this {@link ConfigurationSection} has a value set for the
* given path. * given path.
* <p> *
* <p>If the value for the requested path does not exist but a default value * <p>If the value for the requested path does not exist but a default value
* has been specified, this will still return false. * has been specified, this will still return false.
* *
@ -71,14 +71,14 @@ public interface ConfigurationSection {
/** /**
* Gets the path of this {@link ConfigurationSection} from its root {@link * Gets the path of this {@link ConfigurationSection} from its root {@link
* Configuration}. * Configuration}.
* <p> *
* <p>For any {@link Configuration} themselves, this will return an empty * <p>For any {@link Configuration} themselves, this will return an empty
* string. * string.
* <p> *
* <p>If the section is no longer contained within its root for any reason, * <p>If the section is no longer contained within its root for any reason,
* such as being replaced with a different value, * such as being replaced with a different value,
* this may return {@code null}. * this may return {@code null}.
* <p> *
* <p>To retrieve the single name of this section, that is, the final part * <p>To retrieve the single name of this section, that is, the final part
* of the path returned by this method, you may use {@link #getName()}. * of the path returned by this method, you may use {@link #getName()}.
* *
@ -89,7 +89,7 @@ public interface ConfigurationSection {
/** /**
* Gets the name of this individual {@link ConfigurationSection}, in the * Gets the name of this individual {@link ConfigurationSection}, in the
* path. * path.
* <p> *
* <p>This will always be the final part of {@link #getCurrentPath()}, unless * <p>This will always be the final part of {@link #getCurrentPath()}, unless
* the section is orphaned. * the section is orphaned.
* *
@ -100,10 +100,10 @@ public interface ConfigurationSection {
/** /**
* Gets the root {@link Configuration} that contains this {@link * Gets the root {@link Configuration} that contains this {@link
* ConfigurationSection} * ConfigurationSection}
* <p> *
* <p>For any {@link Configuration} themselves, this will return its own * <p>For any {@link Configuration} themselves, this will return its own
* object. * object.
* <p> *
* <p>If the section is no longer contained within its root for any reason, * <p>If the section is no longer contained within its root for any reason,
* such as being replaced with a different value, * such as being replaced with a different value,
* this may return {@code null}. * this may return {@code null}.
@ -115,10 +115,10 @@ public interface ConfigurationSection {
/** /**
* Gets the parent {@link ConfigurationSection} that directly contains * Gets the parent {@link ConfigurationSection} that directly contains
* this {@link ConfigurationSection}. * this {@link ConfigurationSection}.
* <p> *
* <p>For any {@link Configuration} themselves, this will return * <p>For any {@link Configuration} themselves, this will return
* {@code null}. * {@code null}.
* <p> *
* <p>If the section is no longer contained within its parent for any * <p>If the section is no longer contained within its parent for any
* reason, such as being replaced with a different value, this may * reason, such as being replaced with a different value, this may
* return {@code null}. * return {@code null}.
@ -129,7 +129,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested Object by path. * Gets the requested Object by path.
* <p> *
* <p>If the Object does not exist but a default value has been specified, * <p>If the Object does not exist but a default value has been specified,
* this will return the default value. If the Object does not exist and no * this will return the default value. If the Object does not exist and no
* default value was specified, this will return {@code null}. * default value was specified, this will return {@code null}.
@ -142,7 +142,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested Object by path, returning a default value if not * Gets the requested Object by path, returning a default value if not
* found. * found.
* <p> *
* <p>If the Object does not exist then the specified default value will * <p>If the Object does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -155,10 +155,10 @@ public interface ConfigurationSection {
/** /**
* Sets the specified path to the given value. * Sets the specified path to the given value.
* <p> *
* <p>If value is {@code null}, the entry will be removed. Any * <p>If value is {@code null}, the entry will be removed. Any
* existing entry will be replaced, regardless of what the new value is. * existing entry will be replaced, regardless of what the new value is.
* <p> *
* <p>Some implementations may have limitations on what you may store. See * <p>Some implementations may have limitations on what you may store. See
* their individual javadoc for details. No implementations should allow * their individual javadoc for details. No implementations should allow
* you to store {@link Configuration}s or {@link ConfigurationSection}s, * you to store {@link Configuration}s or {@link ConfigurationSection}s,
@ -171,7 +171,7 @@ public interface ConfigurationSection {
/** /**
* Creates an empty {@link ConfigurationSection} at the specified path. * Creates an empty {@link ConfigurationSection} at the specified path.
* <p> *
* <p>Any value that was previously set at this path will be overwritten. If * <p>Any value that was previously set at this path will be overwritten. If
* the previous value was itself a {@link ConfigurationSection}, it will * the previous value was itself a {@link ConfigurationSection}, it will
* be orphaned. * be orphaned.
@ -184,7 +184,7 @@ public interface ConfigurationSection {
/** /**
* Creates a {@link ConfigurationSection} at the specified path, with * Creates a {@link ConfigurationSection} at the specified path, with
* specified values. * specified values.
* <p> *
* <p>Any value that was previously set at this path will be overwritten. If * <p>Any value that was previously set at this path will be overwritten. If
* the previous value was itself a {@link ConfigurationSection}, it will * the previous value was itself a {@link ConfigurationSection}, it will
* be orphaned. * be orphaned.
@ -199,7 +199,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested String by path. * Gets the requested String by path.
* <p> *
* <p>If the String does not exist but a default value has been specified, * <p>If the String does not exist but a default value has been specified,
* this will return the default value. If the String does not exist and no * this will return the default value. If the String does not exist and no
* default value was specified, this will return {@code null}. * default value was specified, this will return {@code null}.
@ -212,7 +212,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested String by path, returning a default value if not * Gets the requested String by path, returning a default value if not
* found. * found.
* <p> *
* <p>If the String does not exist then the specified default value will * <p>If the String does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -226,7 +226,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is a String. * Checks if the specified path is a String.
* <p> *
* <p>If the path exists but is not a String, this will return false. If * <p>If the path exists but is not a String, this will return false. If
* the path does not exist, this will return false. If the path does not * the path does not exist, this will return false. If the path does not
* exist but a default value has been specified, this will check if that * exist but a default value has been specified, this will check if that
@ -239,7 +239,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested int by path. * Gets the requested int by path.
* <p> *
* <p>If the int does not exist but a default value has been specified, this * <p>If the int does not exist but a default value has been specified, this
* will return the default value. If the int does not exist and no default * will return the default value. If the int does not exist and no default
* value was specified, this will return 0. * value was specified, this will return 0.
@ -251,7 +251,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested int by path, returning a default value if not found. * Gets the requested int by path, returning a default value if not found.
* <p> *
* <p>If the int does not exist then the specified default value will * <p>If the int does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -265,7 +265,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is an int. * Checks if the specified path is an int.
* <p> *
* <p>If the path exists but is not a int, this will return false. If the * <p>If the path exists but is not a int, this will return false. If the
* path does not exist, this will return false. If the path does not exist * path does not exist, this will return false. If the path does not exist
* but a default value has been specified, this will check if that default * but a default value has been specified, this will check if that default
@ -278,7 +278,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested boolean by path. * Gets the requested boolean by path.
* <p> *
* <p>If the boolean does not exist but a default value has been specified, * <p>If the boolean does not exist but a default value has been specified,
* this will return the default value. If the boolean does not exist and * this will return the default value. If the boolean does not exist and
* no default value was specified, this will return false. * no default value was specified, this will return false.
@ -291,7 +291,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested boolean by path, returning a default value if not * Gets the requested boolean by path, returning a default value if not
* found. * found.
* <p> *
* <p>If the boolean does not exist then the specified default value will * <p>If the boolean does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -305,7 +305,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is a boolean. * Checks if the specified path is a boolean.
* <p> *
* <p>If the path exists but is not a boolean, this will return false. If the * <p>If the path exists but is not a boolean, this will return false. If the
* path does not exist, this will return false. If the path does not exist * path does not exist, this will return false. If the path does not exist
* but a default value has been specified, this will check if that default * but a default value has been specified, this will check if that default
@ -318,7 +318,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested double by path. * Gets the requested double by path.
* <p> *
* <p>If the double does not exist but a default value has been specified, * <p>If the double does not exist but a default value has been specified,
* this will return the default value. If the double does not exist and no * this will return the default value. If the double does not exist and no
* default value was specified, this will return 0. * default value was specified, this will return 0.
@ -331,7 +331,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested double by path, returning a default value if not * Gets the requested double by path, returning a default value if not
* found. * found.
* <p> *
* <p>If the double does not exist then the specified default value will * <p>If the double does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -345,7 +345,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is a double. * Checks if the specified path is a double.
* <p> *
* <p>If the path exists but is not a double, this will return false. If the * <p>If the path exists but is not a double, this will return false. If the
* path does not exist, this will return false. If the path does not exist * path does not exist, this will return false. If the path does not exist
* but a default value has been specified, this will check if that default * but a default value has been specified, this will check if that default
@ -358,7 +358,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested long by path. * Gets the requested long by path.
* <p> *
* <p>If the long does not exist but a default value has been specified, this * <p>If the long does not exist but a default value has been specified, this
* will return the default value. If the long does not exist and no * will return the default value. If the long does not exist and no
* default value was specified, this will return 0. * default value was specified, this will return 0.
@ -371,7 +371,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested long by path, returning a default value if not * Gets the requested long by path, returning a default value if not
* found. * found.
* <p> *
* <p>If the long does not exist then the specified default value will * <p>If the long does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -385,7 +385,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is a long. * Checks if the specified path is a long.
* <p> *
* <p>If the path exists but is not a long, this will return false. If the * <p>If the path exists but is not a long, this will return false. If the
* path does not exist, this will return false. If the path does not exist * path does not exist, this will return false. If the path does not exist
* but a default value has been specified, this will check if that default * but a default value has been specified, this will check if that default
@ -400,7 +400,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List by path. * Gets the requested List by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, this * <p>If the List does not exist but a default value has been specified, this
* will return the default value. If the List does not exist and no * will return the default value. If the List does not exist and no
* default value was specified, this will return null. * default value was specified, this will return null.
@ -413,7 +413,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List by path, returning a default value if not * Gets the requested List by path, returning a default value if not
* found. * found.
* <p> *
* <p>If the List does not exist then the specified default value will * <p>If the List does not exist then the specified default value will
* returned regardless of if a default has been identified in the root * returned regardless of if a default has been identified in the root
* {@link Configuration}. * {@link Configuration}.
@ -427,7 +427,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is a List. * Checks if the specified path is a List.
* <p> *
* <p>If the path exists but is not a List, this will return false. If the * <p>If the path exists but is not a List, this will return false. If the
* path does not exist, this will return false. If the path does not exist * path does not exist, this will return false. If the path does not exist
* but a default value has been specified, this will check if that default * but a default value has been specified, this will check if that default
@ -440,11 +440,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of String by path. * Gets the requested List of String by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a String if possible, * <p>This method will attempt to cast any values into a String if possible,
* but may miss any values out if they are not compatible. * but may miss any values out if they are not compatible.
* *
@ -455,11 +455,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Integer by path. * Gets the requested List of Integer by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Integer if * <p>This method will attempt to cast any values into a Integer if
* possible, but may miss any values out if they are not compatible. * possible, but may miss any values out if they are not compatible.
* *
@ -470,11 +470,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Boolean by path. * Gets the requested List of Boolean by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Boolean if * <p>This method will attempt to cast any values into a Boolean if
* possible, but may miss any values out if they are not compatible. * possible, but may miss any values out if they are not compatible.
* *
@ -485,11 +485,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Double by path. * Gets the requested List of Double by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Double if possible, * <p>This method will attempt to cast any values into a Double if possible,
* but may miss any values out if they are not compatible. * but may miss any values out if they are not compatible.
* *
@ -500,11 +500,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Float by path. * Gets the requested List of Float by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Float if possible, * <p>This method will attempt to cast any values into a Float if possible,
* but may miss any values out if they are not compatible. * but may miss any values out if they are not compatible.
* *
@ -515,11 +515,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Long by path. * Gets the requested List of Long by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Long if possible, * <p>This method will attempt to cast any values into a Long if possible,
* but may miss any values out if they are not compatible. * but may miss any values out if they are not compatible.
* *
@ -530,11 +530,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Byte by path. * Gets the requested List of Byte by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Byte if possible, * <p>This method will attempt to cast any values into a Byte if possible,
* but may miss any values out if they are not compatible. * but may miss any values out if they are not compatible.
* *
@ -545,11 +545,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Character by path. * Gets the requested List of Character by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Character if * <p>This method will attempt to cast any values into a Character if
* possible, but may miss any values out if they are not compatible. * possible, but may miss any values out if they are not compatible.
* *
@ -560,11 +560,11 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Short by path. * Gets the requested List of Short by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
* <p> *
* <p>This method will attempt to cast any values into a Short if * <p>This method will attempt to cast any values into a Short if
* possible, but may miss any values out if they are not compatible. * possible, but may miss any values out if they are not compatible.
* *
@ -575,7 +575,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested List of Maps by path. * Gets the requested List of Maps by path.
* <p> *
* <p>If the List does not exist but a default value has been specified, * <p>If the List does not exist but a default value has been specified,
* this will return the default value. If the List does not exist and no * this will return the default value. If the List does not exist and no
* default value was specified, this will return an empty List. * default value was specified, this will return an empty List.
@ -589,7 +589,7 @@ public interface ConfigurationSection {
/** /**
* Gets the requested ConfigurationSection by path. * Gets the requested ConfigurationSection by path.
* <p> *
* <p>If the ConfigurationSection does not exist but a default value has * <p>If the ConfigurationSection does not exist but a default value has
* been specified, this will return the default value. If the * been specified, this will return the default value. If the
* ConfigurationSection does not exist and no default value was specified, * ConfigurationSection does not exist and no default value was specified,
@ -602,7 +602,7 @@ public interface ConfigurationSection {
/** /**
* Checks if the specified path is a ConfigurationSection. * Checks if the specified path is a ConfigurationSection.
* <p> *
* <p>If the path exists but is not a ConfigurationSection, this will return * <p>If the path exists but is not a ConfigurationSection, this will return
* false. If the path does not exist, this will return false. If the path * false. If the path does not exist, this will return false. If the path
* does not exist but a default value has been specified, this will check * does not exist but a default value has been specified, this will check
@ -617,7 +617,7 @@ public interface ConfigurationSection {
/** /**
* Gets the equivalent {@link ConfigurationSection} from the default * Gets the equivalent {@link ConfigurationSection} from the default
* {@link Configuration} defined in {@link #getRoot()}. * {@link Configuration} defined in {@link #getRoot()}.
* <p> *
* <p>If the root contains no defaults, or the defaults doesn't contain a * <p>If the root contains no defaults, or the defaults doesn't contain a
* value for this path, or the value at this path is not a {@link * value for this path, or the value at this path is not a {@link
* ConfigurationSection} then this will return {@code null}. * ConfigurationSection} then this will return {@code null}.
@ -628,14 +628,14 @@ public interface ConfigurationSection {
/** /**
* Sets the default value in the root at the given path as provided. * Sets the default value in the root at the given path as provided.
* <p> *
* <p>If no source {@link Configuration} was provided as a default * <p>If no source {@link Configuration} was provided as a default
* collection, then a new {@link MemoryConfiguration} will be created to * collection, then a new {@link MemoryConfiguration} will be created to
* hold the new default value. * hold the new default value.
* <p> *
* <p>If value is {@code null}, the value will be removed from the * <p>If value is {@code null}, the value will be removed from the
* default Configuration source. * default Configuration source.
* <p> *
* <p>If the value as returned by {@link #getDefaultSection()} is * <p>If the value as returned by {@link #getDefaultSection()} is
* {@code null}, then this will create a new section at the path, * {@code null}, then this will create a new section at the path,
* replacing anything that may have existed there previously. * replacing anything that may have existed there previously.

View File

@ -16,7 +16,7 @@ public class MemorySection implements ConfigurationSection {
/** /**
* Creates an empty MemorySection for use as a root {@link Configuration} * Creates an empty MemorySection for use as a root {@link Configuration}
* section. * section.
* <p> *
* <p>Note that calling this without being yourself a {@link Configuration} * <p>Note that calling this without being yourself a {@link Configuration}
* will throw an exception! * will throw an exception!
* *
@ -113,7 +113,7 @@ public class MemorySection implements ConfigurationSection {
/** /**
* Creates a full path to the given {@link ConfigurationSection} from its * Creates a full path to the given {@link ConfigurationSection} from its
* root {@link Configuration}. * root {@link Configuration}.
* <p> *
* <p>You may use this method for any given {@link ConfigurationSection}, not * <p>You may use this method for any given {@link ConfigurationSection}, not
* only {@link MemorySection}. * only {@link MemorySection}.
* *
@ -128,7 +128,7 @@ public class MemorySection implements ConfigurationSection {
/** /**
* Creates a relative path to the given {@link ConfigurationSection} from * Creates a relative path to the given {@link ConfigurationSection} from
* the given relative section. * the given relative section.
* <p> *
* <p>You may use this method for any given {@link ConfigurationSection}, not * <p>You may use this method for any given {@link ConfigurationSection}, not
* only {@link MemorySection}. * only {@link MemorySection}.
* *

View File

@ -31,11 +31,11 @@ public abstract class FileConfiguration extends MemoryConfiguration {
/** /**
* Saves this {@link FileConfiguration} to the specified location. * Saves this {@link FileConfiguration} to the specified location.
* <p> *
* <p>If the file does not exist, it will be created. If already exists, it * <p>If the file does not exist, it will be created. If already exists, it
* will be overwritten. If it cannot be overwritten or created, an * will be overwritten. If it cannot be overwritten or created, an
* exception will be thrown. * exception will be thrown.
* <p> *
* <p>This method will save using the system default encoding, or possibly * <p>This method will save using the system default encoding, or possibly
* using UTF8. * using UTF8.
* *
@ -66,11 +66,11 @@ public abstract class FileConfiguration extends MemoryConfiguration {
/** /**
* Loads this {@link FileConfiguration} from the specified location. * Loads this {@link FileConfiguration} from the specified location.
* <p> *
* <p>All the values contained within this configuration will be removed, * <p>All the values contained within this configuration will be removed,
* leaving only settings and defaults, and the new values will be loaded * leaving only settings and defaults, and the new values will be loaded
* from the given file. * from the given file.
* <p> *
* <p>If the file cannot be loaded for any reason, an exception will be * <p>If the file cannot be loaded for any reason, an exception will be
* thrown. * thrown.
* *
@ -91,7 +91,7 @@ public abstract class FileConfiguration extends MemoryConfiguration {
/** /**
* Loads this {@link FileConfiguration} from the specified reader. * Loads this {@link FileConfiguration} from the specified reader.
* <p> *
* <p>All the values contained within this configuration will be removed, * <p>All the values contained within this configuration will be removed,
* leaving only settings and defaults, and the new values will be loaded * leaving only settings and defaults, and the new values will be loaded
* from the given stream. * from the given stream.
@ -122,11 +122,11 @@ public abstract class FileConfiguration extends MemoryConfiguration {
/** /**
* Loads this {@link FileConfiguration} from the specified string, as * Loads this {@link FileConfiguration} from the specified string, as
* opposed to from file. * opposed to from file.
* <p> *
* <p>All the values contained within this configuration will be removed, * <p>All the values contained within this configuration will be removed,
* leaving only settings and defaults, and the new values will be loaded * leaving only settings and defaults, and the new values will be loaded
* from the given string. * from the given string.
* <p> *
* <p>If the string is invalid in any way, an exception will be thrown. * <p>If the string is invalid in any way, an exception will be thrown.
* *
* @param contents Contents of a Configuration to load. * @param contents Contents of a Configuration to load.
@ -138,7 +138,7 @@ public abstract class FileConfiguration extends MemoryConfiguration {
/** /**
* Compiles the header for this {@link FileConfiguration} and returns the * Compiles the header for this {@link FileConfiguration} and returns the
* result. * result.
* <p> *
* <p>This will use the header from {@link #options()} -> {@link * <p>This will use the header from {@link #options()} -> {@link
* FileConfigurationOptions#header()}, respecting the rules of {@link * FileConfigurationOptions#header()}, respecting the rules of {@link
* FileConfigurationOptions#copyHeader()} if set. * FileConfigurationOptions#copyHeader()} if set.

View File

@ -32,13 +32,13 @@ public class FileConfigurationOptions extends MemoryConfigurationOptions {
/** /**
* Gets the header that will be applied to the top of the saved output. * Gets the header that will be applied to the top of the saved output.
* <p> *
* <p>This header will be commented out and applied directly at the top of * <p>This header will be commented out and applied directly at the top of
* the generated output of the {@link FileConfiguration}. It is not * the generated output of the {@link FileConfiguration}. It is not
* required to include a newline at the end of the header as it will * required to include a newline at the end of the header as it will
* automatically be applied, but you may include one if you wish for extra * automatically be applied, but you may include one if you wish for extra
* spacing. * spacing.
* <p> *
* <p>{@code null} is a valid value which will indicate that no header] * <p>{@code null} is a valid value which will indicate that no header]
* is to be applied. The default value is {@code null}. * is to be applied. The default value is {@code null}.
* *
@ -50,13 +50,13 @@ public class FileConfigurationOptions extends MemoryConfigurationOptions {
/** /**
* Sets the header that will be applied to the top of the saved output. * Sets the header that will be applied to the top of the saved output.
* <p> *
* <p>This header will be commented out and applied directly at the top of * <p>This header will be commented out and applied directly at the top of
* the generated output of the {@link FileConfiguration}. It is not * the generated output of the {@link FileConfiguration}. It is not
* required to include a newline at the end of the header as it will * required to include a newline at the end of the header as it will
* automatically be applied, but you may include one if you wish for extra * automatically be applied, but you may include one if you wish for extra
* spacing. * spacing.
* <p> *
* <p>{@code null} is a valid value which will indicate that no header * <p>{@code null} is a valid value which will indicate that no header
* is to be applied. * is to be applied.
* *
@ -70,17 +70,17 @@ public class FileConfigurationOptions extends MemoryConfigurationOptions {
/** /**
* Gets whether or not the header should be copied from a default source. * Gets whether or not the header should be copied from a default source.
* <p> *
* <p>If this is true, if a default {@link FileConfiguration} is passed to * <p>If this is true, if a default {@link FileConfiguration} is passed to
* {@link FileConfiguration#setDefaults(Configuration)} * {@link FileConfiguration#setDefaults(Configuration)}
* then upon saving it will use the header from that config, instead of * then upon saving it will use the header from that config, instead of
* the one provided here. * the one provided here.
* <p> *
* <p>If no default is set on the configuration, or the default is not of * <p>If no default is set on the configuration, or the default is not of
* type FileConfiguration, or that config has no header ({@link #header()} * type FileConfiguration, or that config has no header ({@link #header()}
* returns null) then the header specified in this configuration will be * returns null) then the header specified in this configuration will be
* used. * used.
* <p> *
* <p>Defaults to true. * <p>Defaults to true.
* *
* @return Whether or not to copy the header * @return Whether or not to copy the header
@ -91,17 +91,17 @@ public class FileConfigurationOptions extends MemoryConfigurationOptions {
/** /**
* Sets whether or not the header should be copied from a default source. * Sets whether or not the header should be copied from a default source.
* <p> *
* <p>If this is true, if a default {@link FileConfiguration} is passed to * <p>If this is true, if a default {@link FileConfiguration} is passed to
* {@link FileConfiguration#setDefaults(Configuration)} * {@link FileConfiguration#setDefaults(Configuration)}
* then upon saving it will use the header from that config, instead of * then upon saving it will use the header from that config, instead of
* the one provided here. * the one provided here.
* <p> *
* <p>If no default is set on the configuration, or the default is not of * <p>If no default is set on the configuration, or the default is not of
* type FileConfiguration, or that config has no header ({@link #header()} * type FileConfiguration, or that config has no header ({@link #header()}
* returns null) then the header specified in this configuration will be * returns null) then the header specified in this configuration will be
* used. * used.
* <p> *
* <p>Defaults to true. * <p>Defaults to true.
* *
* @param value Whether or not to copy the header * @param value Whether or not to copy the header

View File

@ -28,11 +28,11 @@ public class YamlConfiguration extends FileConfiguration {
/** /**
* Creates a new {@link YamlConfiguration}, loading from the given file. * Creates a new {@link YamlConfiguration}, loading from the given file.
* <p> *
* <p>Any errors loading the Configuration will be logged and then ignored. * <p>Any errors loading the Configuration will be logged and then ignored.
* If the specified input is not a valid config, a blank config will be * If the specified input is not a valid config, a blank config will be
* returned. * returned.
* <p> *
* <p>The encoding used may follow the system dependent default. * <p>The encoding used may follow the system dependent default.
* *
* @param file Input file * @param file Input file

View File

@ -37,7 +37,7 @@ public class YamlConfigurationOptions extends FileConfigurationOptions {
/** /**
* Gets how much spaces should be used to indent each line. * Gets how much spaces should be used to indent each line.
* <p> *
* <p>The minimum value this may be is 2, and the maximum is 9. * <p>The minimum value this may be is 2, and the maximum is 9.
* *
* @return How much to indent by * @return How much to indent by
@ -48,7 +48,7 @@ public class YamlConfigurationOptions extends FileConfigurationOptions {
/** /**
* Sets how much spaces should be used to indent each line. * Sets how much spaces should be used to indent each line.
* <p> *
* <p>The minimum value this may be is 2, and the maximum is 9. * <p>The minimum value this may be is 2, and the maximum is 9.
* *
* @param value New indent * @param value New indent

View File

@ -24,7 +24,7 @@ public interface ConfigurationSerializable {
/** /**
* Creates a Map representation of this class. * Creates a Map representation of this class.
* <p> *
* <p>This class must provide a method to restore this class, as defined in * <p>This class must provide a method to restore this class, as defined in
* the {@link ConfigurationSerializable} interface javadoc. * the {@link ConfigurationSerializable} interface javadoc.
* *

View File

@ -43,8 +43,8 @@ public class HTTP {
/** /**
* Convert a JSONObject into an HTTP header. A request header must contain * Convert a JSONObject into an HTTP header. A request header must contain
* <p> *
* <p> *
* <pre> * <pre>
* { * {
* Method: "POST" (for example), * Method: "POST" (for example),
@ -54,8 +54,8 @@ public class HTTP {
* </pre> * </pre>
* <p> * <p>
* A response header must contain * A response header must contain
* <p> *
* <p> *
* <pre> * <pre>
* { * {
* "HTTP-Version": "HTTP/1.1" (for example), * "HTTP-Version": "HTTP/1.1" (for example),

View File

@ -14,16 +14,16 @@ import java.util.Map;
* accessing the values by index, and {@code put} methods for adding or replacing values. The values can be any of * accessing the values by index, and {@code put} methods for adding or replacing values. The values can be any of
* these types: {@code Boolean}, {@code JSONArray}, {@code JSONObject}, {@code Number}, * these types: {@code Boolean}, {@code JSONArray}, {@code JSONObject}, {@code Number},
* {@code String}, or the {@code JSONObject.NULL object}. * {@code String}, or the {@code JSONObject.NULL object}.
* <p> *
* <p>The constructor can convert a JSON text into a Java object. The {@code toString} method converts to JSON text. * <p>The constructor can convert a JSON text into a Java object. The {@code toString} method converts to JSON text.
* <p> *
* <p>A {@code get} method returns a value if one can be found, and throws an exception if one cannot be found. An * <p>A {@code get} method returns a value if one can be found, and throws an exception if one cannot be found. An
* {@code opt} method returns a default value instead of throwing an exception, and so is useful for obtaining * {@code opt} method returns a default value instead of throwing an exception, and so is useful for obtaining
* optional values. * optional values.
* <p> *
* <p>The generic {@code get()} and {@code opt()} methods return an object which you can cast or query for type. * <p>The generic {@code get()} and {@code opt()} methods return an object which you can cast or query for type.
* There are also typed {@code get} and {@code opt} methods that do type checking and type coercion for you. * There are also typed {@code get} and {@code opt} methods that do type checking and type coercion for you.
* <p> *
* <p>The texts produced by the {@code toString} methods strictly conform to JSON syntax rules. The constructors are * <p>The texts produced by the {@code toString} methods strictly conform to JSON syntax rules. The constructors are
* more forgiving in the texts they will accept: <ul> <li>An extra {@code ,}&nbsp;<small>(comma)</small> may appear * more forgiving in the texts they will accept: <ul> <li>An extra {@code ,}&nbsp;<small>(comma)</small> may appear
* just before the closing bracket.</li> <li>The {@code null} value will be inserted when there is {@code ,} * just before the closing bracket.</li> <li>The {@code null} value will be inserted when there is {@code ,}

View File

@ -28,8 +28,8 @@ import java.util.Map.Entry;
* as null. * as null.
* <p> * <p>
* The <code>put</code> methods add or replace values in an object. For example, * The <code>put</code> methods add or replace values in an object. For example,
* <p> *
* <p> *
* <pre> * <pre>
* myString = new JSONObject().put(&quot;JSON&quot;, &quot;Hello, World!&quot;).toString(); * myString = new JSONObject().put(&quot;JSON&quot;, &quot;Hello, World!&quot;).toString();
* </pre> * </pre>

View File

@ -11,16 +11,16 @@ import java.io.StringWriter;
* method for adding keys before values in objects. There are <code>array</code> and <code>endArray</code> methods that * method for adding keys before values in objects. There are <code>array</code> and <code>endArray</code> methods that
* make and bound array values, and <code>object</code> and <code>endObject</code> methods which make and bound object * make and bound array values, and <code>object</code> and <code>endObject</code> methods which make and bound object
* values. All of these methods return the JSONWriter instance, permitting cascade style. For example, * values. All of these methods return the JSONWriter instance, permitting cascade style. For example,
* <p> *
* <p> *
* <pre> * <pre>
* myString = new JSONStringer().object().key(&quot;JSON&quot;).value(&quot;Hello, * myString = new JSONStringer().object().key(&quot;JSON&quot;).value(&quot;Hello,
* World!&quot;).endObject().toString(); * World!&quot;).endObject().toString();
* </pre> * </pre>
* <p> * <p>
* which produces the string * which produces the string
* <p> *
* <p> *
* <pre> * <pre>
* {"JSON":"Hello, World!"} * {"JSON":"Hello, World!"}
* </pre> * </pre>

View File

@ -12,15 +12,15 @@ import java.io.Writer;
* method for adding keys before values in objects. There are <code>array</code> and <code>endArray</code> methods that * method for adding keys before values in objects. There are <code>array</code> and <code>endArray</code> methods that
* make and bound array values, and <code>object</code> and <code>endObject</code> methods which make and bound object * make and bound array values, and <code>object</code> and <code>endObject</code> methods which make and bound object
* values. All of these methods return the JSONWriter instance, permitting a cascade style. For example, * values. All of these methods return the JSONWriter instance, permitting a cascade style. For example,
* <p> *
* <p> *
* <pre> * <pre>
* new JSONWriter(myWriter).object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;).endObject(); * new JSONWriter(myWriter).object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;).endObject();
* </pre> * </pre>
* <p> * <p>
* which writes * which writes
* <p> *
* <p> *
* <pre> * <pre>
* {"JSON":"Hello, World!"} * {"JSON":"Hello, World!"}
* </pre> * </pre>

View File

@ -44,7 +44,7 @@ public interface IPlotMain extends ILogger {
/** /**
* Disable the implementation. * Disable the implementation.
* <p> *
* <ul> * <ul>
* <li>If a full disable isn't feasibly, just disable what it can. * <li>If a full disable isn't feasibly, just disable what it can.
* </ul> * </ul>

View File

@ -75,8 +75,7 @@ import java.util.zip.ZipInputStream;
@Getter private Updater updater; @Getter private Updater updater;
private PlotVersion version; private PlotVersion version;
// Files and configuration // Files and configuration
@Getter @Getter private File jarFile = null; // This file
private File jarFile = null; // This file
private File storageFile; private File storageFile;
@Getter private PlotAreaManager plotAreaManager; @Getter private PlotAreaManager plotAreaManager;
@ -266,10 +265,12 @@ import java.util.zip.ZipInputStream;
copyFile("automerge.js", Settings.Paths.SCRIPTS); copyFile("automerge.js", Settings.Paths.SCRIPTS);
copyFile("town.template", Settings.Paths.TEMPLATES); copyFile("town.template", Settings.Paths.TEMPLATES);
copyFile("skyblock.template", Settings.Paths.TEMPLATES); copyFile("skyblock.template", Settings.Paths.TEMPLATES);
copyFile("german.yml", Settings.Paths.TRANSLATIONS); copyFile("bridge.template", Settings.Paths.TEMPLATES);
copyFile("s_chinese_unescaped.yml", Settings.Paths.TRANSLATIONS); copyFile("de-DE.yml", Settings.Paths.TRANSLATIONS);
copyFile("s_chinese.yml", Settings.Paths.TRANSLATIONS); copyFile("es-ES.yml", Settings.Paths.TRANSLATIONS);
copyFile("italian.yml", Settings.Paths.TRANSLATIONS); copyFile("zh-CN.yml", Settings.Paths.TRANSLATIONS);
copyFile("it-IT.yml", Settings.Paths.TRANSLATIONS);
copyFile("ko-KR.yml", Settings.Paths.TRANSLATIONS);
showDebug(); showDebug();
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
@ -778,8 +779,12 @@ import java.util.zip.ZipInputStream;
List<PlotArea> areas = Arrays.asList(plotAreaManager.getAllPlotAreas()); List<PlotArea> areas = Arrays.asList(plotAreaManager.getAllPlotAreas());
Collections.sort(areas, new Comparator<PlotArea>() { Collections.sort(areas, new Comparator<PlotArea>() {
@Override public int compare(PlotArea a, PlotArea b) { @Override public int compare(PlotArea a, PlotArea b) {
if (priorityArea != null && StringMan.isEqual(a.toString(), b.toString())) { if (priorityArea != null) {
return -1; if (a.equals(priorityArea)) {
return -1;
} else if (b.equals(priorityArea)) {
return 1;
}
} }
return a.hashCode() - b.hashCode(); return a.hashCode() - b.hashCode();
} }
@ -1089,7 +1094,7 @@ import java.util.zip.ZipInputStream;
* <li>Loads (and/or generates) the PlotArea configuration * <li>Loads (and/or generates) the PlotArea configuration
* <li>Sets up the world border if configured * <li>Sets up the world border if configured
* </ul> * </ul>
* <p> *
* <p>If loading an augmented plot world: * <p>If loading an augmented plot world:
* <ul> * <ul>
* <li>Creates the AugmentedPopulator classes * <li>Creates the AugmentedPopulator classes
@ -1151,7 +1156,8 @@ import java.util.zip.ZipInputStream;
PlotSquared.log(C.PREFIX + "&aDetected world load for '" + world + "'"); PlotSquared.log(C.PREFIX + "&aDetected world load for '" + world + "'");
PlotSquared.log(C.PREFIX + "&3 - generator: &7" + baseGenerator + ">" + plotGenerator); PlotSquared.log(C.PREFIX + "&3 - generator: &7" + baseGenerator + ">" + plotGenerator);
PlotSquared.log(C.PREFIX + "&3 - plotworld: &7" + plotArea.getClass().getName()); PlotSquared.log(C.PREFIX + "&3 - plotworld: &7" + plotArea.getClass().getName());
PlotSquared.log(C.PREFIX + "&3 - plotAreaManager: &7" + plotManager.getClass().getName()); PlotSquared
.log(C.PREFIX + "&3 - plotAreaManager: &7" + plotManager.getClass().getName());
if (!this.worlds.contains(path)) { if (!this.worlds.contains(path)) {
this.worlds.createSection(path); this.worlds.createSection(path);
worldSection = this.worlds.getConfigurationSection(path); worldSection = this.worlds.getConfigurationSection(path);
@ -1323,8 +1329,8 @@ import java.util.zip.ZipInputStream;
/** /**
* Setup the configuration for a plot world based on world arguments. * Setup the configuration for a plot world based on world arguments.
* <p> *
* <p> *
* <i>e.g. /mv create &lt;world&gt; normal -g PlotSquared:&lt;args&gt;</i> * <i>e.g. /mv create &lt;world&gt; normal -g PlotSquared:&lt;args&gt;</i>
* *
* @param world The name of the world * @param world The name of the world
@ -1784,7 +1790,8 @@ import java.util.zip.ZipInputStream;
} }
} }
public void foreachPlotArea(@NonNull final String world, @NonNull final RunnableVal<PlotArea> runnable) { public void foreachPlotArea(@NonNull final String world,
@NonNull final RunnableVal<PlotArea> runnable) {
final PlotArea[] array = this.plotAreaManager.getPlotAreas(world, null); final PlotArea[] array = this.plotAreaManager.getPlotAreas(world, null);
if (array == null) { if (array == null) {
return; return;
@ -1925,9 +1932,10 @@ import java.util.zip.ZipInputStream;
* *
* @param alias to search plots * @param alias to search plots
* @param worldname to filter alias to a specific world [optional] null means all worlds * @param worldname to filter alias to a specific world [optional] null means all worlds
* @return Set<{@link Plot}> empty if nothing found * @return Set<{ @ link Plot }> empty if nothing found
*/ */
public Set<Plot> getPlotsByAlias(@Nullable final String alias, @NonNull final String worldname) { public Set<Plot> getPlotsByAlias(@Nullable final String alias,
@NonNull final String worldname) {
final Set<Plot> result = new HashSet<>(); final Set<Plot> result = new HashSet<>();
if (alias != null) { if (alias != null) {
for (final Plot plot : getPlots()) { for (final Plot plot : getPlots()) {

View File

@ -17,9 +17,8 @@ public class Updater {
public String getChanges() { public String getChanges() {
if (changes == null) { if (changes == null) {
try (Scanner scanner = new Scanner(new URL( try (Scanner scanner = new Scanner(new URL("http://empcraft.com/plots/cl?" + Integer
"http://empcraft.com/plots/cl?" + Integer.toHexString(PlotSquared.get().getVersion().hash)) .toHexString(PlotSquared.get().getVersion().hash)).openStream(), "UTF-8")) {
.openStream(), "UTF-8")) {
changes = scanner.useDelimiter("\\A").next(); changes = scanner.useDelimiter("\\A").next();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -16,7 +16,7 @@ import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@CommandDeclaration(command = "add", description = "Allow a user to build while you are online", usage = "/plot add <player>", category = CommandCategory.SETTINGS, permission = "plots.add", requiredType = RequiredType.NONE) @CommandDeclaration(command = "add", description = "Allow a user to build in a plot while you are online", usage = "/plot add <player>", category = CommandCategory.SETTINGS, permission = "plots.add", requiredType = RequiredType.NONE)
public class Add extends Command { public class Add extends Command {
public Add() { public Add() {

View File

@ -94,7 +94,8 @@ public class Alias extends SubCommand {
return false; return false;
} }
} }
if (UUIDHandler.nameExists(new StringWrapper(alias)) || PlotSquared.get().hasPlotArea(alias)) { if (UUIDHandler.nameExists(new StringWrapper(alias)) || PlotSquared.get()
.hasPlotArea(alias)) {
MainUtil.sendMessage(player, C.ALIAS_IS_TAKEN); MainUtil.sendMessage(player, C.ALIAS_IS_TAKEN);
return false; return false;
} }

View File

@ -81,8 +81,8 @@ public class Area extends SubCommand {
final int offsetX = bx - (area.ROAD_WIDTH == 0 ? 0 : lower); final int offsetX = bx - (area.ROAD_WIDTH == 0 ? 0 : lower);
final int offsetZ = bz - (area.ROAD_WIDTH == 0 ? 0 : lower); final int offsetZ = bz - (area.ROAD_WIDTH == 0 ? 0 : lower);
final RegionWrapper region = new RegionWrapper(bx, tx, bz, tz); final RegionWrapper region = new RegionWrapper(bx, tx, bz, tz);
Set<PlotArea> areas = PlotSquared Set<PlotArea> areas =
.get().getPlotAreas(area.worldname, region); PlotSquared.get().getPlotAreas(area.worldname, region);
if (!areas.isEmpty()) { if (!areas.isEmpty()) {
C.CLUSTER_INTERSECTION C.CLUSTER_INTERSECTION
.send(player, areas.iterator().next().toString()); .send(player, areas.iterator().next().toString());
@ -104,10 +104,12 @@ public class Area extends SubCommand {
Runnable run = new Runnable() { Runnable run = new Runnable() {
@Override public void run() { @Override public void run() {
if (offsetX != 0) { if (offsetX != 0) {
PlotSquared.get().worlds.set(path + ".road.offset.x", offsetX); PlotSquared.get().worlds
.set(path + ".road.offset.x", offsetX);
} }
if (offsetZ != 0) { if (offsetZ != 0) {
PlotSquared.get().worlds.set(path + ".road.offset.z", offsetZ); PlotSquared.get().worlds
.set(path + ".road.offset.z", offsetZ);
} }
final String world = SetupUtils.manager.setupWorld(object); final String world = SetupUtils.manager.setupWorld(object);
if (WorldUtil.IMP.isWorld(world)) { if (WorldUtil.IMP.isWorld(world)) {
@ -458,8 +460,8 @@ public class Area extends SubCommand {
case "remove": case "remove":
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"$1World creation settings may be stored in multiple locations:" "$1World creation settings may be stored in multiple locations:"
+ "\n$3 - $2Bukkit bukkit.yml" + "\n$3 - $2" + PlotSquared.imp().getPluginName() + "\n$3 - $2Bukkit bukkit.yml" + "\n$3 - $2" + PlotSquared.imp()
+ " settings.yml" .getPluginName() + " settings.yml"
+ "\n$3 - $2Multiverse worlds.yml (or any world management plugin)" + "\n$3 - $2Multiverse worlds.yml (or any world management plugin)"
+ "\n$1Stop the server and delete it from these locations."); + "\n$1Stop the server and delete it from these locations.");
return true; return true;

View File

@ -14,7 +14,7 @@ import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.Permissions; import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
@CommandDeclaration(command = "clear", description = "Clear a plot", permission = "plots.clear", category = CommandCategory.APPEARANCE, usage = "/plot clear", aliases = "reset", confirmation = true) @CommandDeclaration(command = "clear", description = "Clear the plot you stand on", permission = "plots.clear", category = CommandCategory.APPEARANCE, usage = "/plot clear", aliases = "reset", confirmation = true)
public class Clear extends Command { public class Clear extends Command {
// Note: To clear a specific plot use /plot <plot> clear // Note: To clear a specific plot use /plot <plot> clear

View File

@ -103,8 +103,9 @@ public class Database extends SubCommand {
if (newPlot != null) { if (newPlot != null) {
PlotId newId = newPlot.getId(); PlotId newId = newPlot.getId();
PlotId id = plot.getId(); PlotId id = plot.getId();
File worldFile = new File(PlotSquared.imp().getWorldContainer(), File worldFile =
id.toCommaSeparatedString()); new File(PlotSquared.imp().getWorldContainer(),
id.toCommaSeparatedString());
if (worldFile.exists()) { if (worldFile.exists()) {
File newFile = File newFile =
new File(PlotSquared.imp().getWorldContainer(), new File(PlotSquared.imp().getWorldContainer(),
@ -127,7 +128,8 @@ public class Database extends SubCommand {
plots.add(plot); plots.add(plot);
} }
} else { } else {
HashMap<PlotId, Plot> plotmap = PlotSquared.get().plots_tmp.get(areaname); HashMap<PlotId, Plot> plotmap =
PlotSquared.get().plots_tmp.get(areaname);
if (plotmap == null) { if (plotmap == null) {
plotmap = new HashMap<>(); plotmap = new HashMap<>();
PlotSquared.get().plots_tmp.put(areaname, plotmap); PlotSquared.get().plots_tmp.put(areaname, plotmap);

View File

@ -25,8 +25,8 @@ public class Debug extends SubCommand {
String section = C.DEBUG_SECTION.s(); String section = C.DEBUG_SECTION.s();
information.append(header); information.append(header);
information.append(getSection(section, "PlotArea")); information.append(getSection(section, "PlotArea"));
information information.append(
.append(getLine(line, "Plot Worlds", StringMan.join(PlotSquared.get().getPlotAreas(), ", "))); getLine(line, "Plot Worlds", StringMan.join(PlotSquared.get().getPlotAreas(), ", ")));
information.append(getLine(line, "Owned Plots", PlotSquared.get().getPlots().size())); information.append(getLine(line, "Owned Plots", PlotSquared.get().getPlots().size()));
information.append(getSection(section, "Messages")); information.append(getSection(section, "Messages"));
information.append(getLine(line, "Total Messages", C.values().length)); information.append(getLine(line, "Total Messages", C.values().length));

View File

@ -37,8 +37,9 @@ import java.util.*;
if (file.exists()) { if (file.exists()) {
init(); init();
String script = StringMan.join(Files.readLines(new File(new File( String script = StringMan.join(Files.readLines(new File(new File(
PlotSquared.get().IMP.getDirectory() + File.separator + Settings.Paths.SCRIPTS), PlotSquared.get().IMP.getDirectory() + File.separator
"start.js"), StandardCharsets.UTF_8), System.getProperty("line.separator")); + Settings.Paths.SCRIPTS), "start.js"), StandardCharsets.UTF_8),
System.getProperty("line.separator"));
this.scope.put("THIS", this); this.scope.put("THIS", this);
this.scope.put("PlotPlayer", ConsolePlayer.getConsole()); this.scope.put("PlotPlayer", ConsolePlayer.getConsole());
this.engine.eval(script, this.scope); this.engine.eval(script, this.scope);
@ -261,8 +262,8 @@ import java.util.*;
case "addcmd": case "addcmd":
try { try {
final String cmd = StringMan.join(Files.readLines(MainUtil.getFile(new File( final String cmd = StringMan.join(Files.readLines(MainUtil.getFile(new File(
PlotSquared.get().IMP.getDirectory() + File.separator + Settings.Paths.SCRIPTS), PlotSquared.get().IMP.getDirectory() + File.separator
args[1]), StandardCharsets.UTF_8), + Settings.Paths.SCRIPTS), args[1]), StandardCharsets.UTF_8),
System.getProperty("line.separator")); System.getProperty("line.separator"));
new Command(MainCommand.getInstance(), true, args[1].split("\\.")[0], null, new Command(MainCommand.getInstance(), true, args[1].split("\\.")[0], null,
RequiredType.NONE, CommandCategory.DEBUG) { RequiredType.NONE, CommandCategory.DEBUG) {
@ -291,8 +292,8 @@ import java.util.*;
case "run": case "run":
try { try {
script = StringMan.join(Files.readLines(MainUtil.getFile(new File( script = StringMan.join(Files.readLines(MainUtil.getFile(new File(
PlotSquared.get().IMP.getDirectory() + File.separator + Settings.Paths.SCRIPTS), PlotSquared.get().IMP.getDirectory() + File.separator
args[1]), StandardCharsets.UTF_8), + Settings.Paths.SCRIPTS), args[1]), StandardCharsets.UTF_8),
System.getProperty("line.separator")); System.getProperty("line.separator"));
if (args.length > 2) { if (args.length > 2) {
HashMap<String, String> replacements = new HashMap<>(); HashMap<String, String> replacements = new HashMap<>();
@ -307,8 +308,8 @@ import java.util.*;
} }
break; break;
case "list-scripts": case "list-scripts":
String path = String path = PlotSquared.get().IMP.getDirectory() + File.separator
PlotSquared.get().IMP.getDirectory() + File.separator + Settings.Paths.SCRIPTS; + Settings.Paths.SCRIPTS;
File folder = new File(path); File folder = new File(path);
File[] filesArray = folder.listFiles(); File[] filesArray = folder.listFiles();
@ -411,13 +412,15 @@ import java.util.*;
} catch (ScriptException e) { } catch (ScriptException e) {
e.printStackTrace(); e.printStackTrace();
} }
PlotSquared.log("> " + (System.currentTimeMillis() - start) + "ms -> " + result); PlotSquared.log(
"> " + (System.currentTimeMillis() - start) + "ms -> " + result);
} }
}); });
} else { } else {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Object result = this.engine.eval(script, this.scope); Object result = this.engine.eval(script, this.scope);
PlotSquared.log("> " + (System.currentTimeMillis() - start) + "ms -> " + result); PlotSquared
.log("> " + (System.currentTimeMillis() - start) + "ms -> " + result);
} }
return true; return true;
} catch (ScriptException e) { } catch (ScriptException e) {

View File

@ -25,8 +25,9 @@ public class DebugPaste extends SubCommand {
String commandsYML = HastebinUtility.upload(PlotSquared.get().commandsFile); String commandsYML = HastebinUtility.upload(PlotSquared.get().commandsFile);
String latestLOG; String latestLOG;
try { try {
latestLOG = HastebinUtility latestLOG = HastebinUtility.upload(
.upload(new File(PlotSquared.get().IMP.getDirectory(), "../../logs/latest.log")); new File(PlotSquared.get().IMP.getDirectory(),
"../../logs/latest.log"));
} catch (IOException ignored) { } catch (IOException ignored) {
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"&clatest.log is too big to be pasted, will ignore"); "&clatest.log is too big to be pasted, will ignore");

View File

@ -6,11 +6,15 @@ import com.github.intellectualsites.plotsquared.plot.config.Settings;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.*; import com.github.intellectualsites.plotsquared.plot.util.*;
@CommandDeclaration(command = "delete", permission = "plots.delete", description = "Delete a plot", usage = "/plot delete", aliases = {
"dispose", "del", @CommandDeclaration(command = "delete", permission = "plots.delete", description = "Delete the plot you stand on", usage = "/plot delete", aliases = {
"reset"}, category = CommandCategory.CLAIMING, requiredType = RequiredType.NONE, confirmation = true) "dispose",
"del"}, category = CommandCategory.CLAIMING, requiredType = RequiredType.NONE, confirmation = true)
public class Delete extends SubCommand { public class Delete extends SubCommand {
// Note: To delete a specific plot use /plot <plot> delete
// The syntax also works with any command: /plot <plot> <command>
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location loc = player.getLocation();

View File

@ -18,7 +18,7 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
@CommandDeclaration(command = "kick", aliases = { @CommandDeclaration(command = "kick", aliases = {
"k"}, description = "Kick a player from your plot", permission = "plots.kick", usage = "<player>", category = CommandCategory.TELEPORT, requiredType = RequiredType.NONE) "k"}, description = "Kick a player from your plot", permission = "plots.kick", usage = "/plot kick <player>", category = CommandCategory.TELEPORT, requiredType = RequiredType.NONE)
public class Kick extends SubCommand { public class Kick extends SubCommand {
public Kick() { public Kick() {
@ -75,8 +75,8 @@ public class Kick extends SubCommand {
Location spawn = WorldUtil.IMP.getSpawn(location.getWorld()); Location spawn = WorldUtil.IMP.getSpawn(location.getWorld());
C.YOU_GOT_KICKED.send(player2); C.YOU_GOT_KICKED.send(player2);
if (plot.equals(spawn.getPlot())) { if (plot.equals(spawn.getPlot())) {
Location newSpawn = Location newSpawn = WorldUtil.IMP
WorldUtil.IMP.getSpawn(PlotSquared.get().getPlotAreaManager().getAllWorlds()[0]); .getSpawn(PlotSquared.get().getPlotAreaManager().getAllWorlds()[0]);
if (plot.equals(newSpawn.getPlot())) { if (plot.equals(newSpawn.getPlot())) {
// Kick from server if you can't be teleported to spawn // Kick from server if you can't be teleported to spawn
player2.kick(C.YOU_GOT_KICKED.s()); player2.kick(C.YOU_GOT_KICKED.s());

View File

@ -15,7 +15,7 @@ import java.net.URL;
import java.util.List; import java.util.List;
@CommandDeclaration(command = "load", aliases = { @CommandDeclaration(command = "load", aliases = {
"restore"}, category = CommandCategory.SCHEMATIC, requiredType = RequiredType.NONE, description = "Load your plot", permission = "plots.load", usage = "/plot restore") "restore"}, category = CommandCategory.SCHEMATIC, requiredType = RequiredType.NONE, description = "Load your plot", permission = "plots.load", usage = "/plot load")
public class Load extends SubCommand { public class Load extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
@ -70,7 +70,8 @@ public class Load extends SubCommand {
MainUtil.sendMessage(player, C.GENERATING_COMPONENT); MainUtil.sendMessage(player, C.GENERATING_COMPONENT);
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override public void run() { @Override public void run() {
SchematicHandler.Schematic schematic = SchematicHandler.manager.getSchematic(url); SchematicHandler.Schematic schematic =
SchematicHandler.manager.getSchematic(url);
if (schematic == null) { if (schematic == null) {
plot.removeRunning(); plot.removeRunning();
sendMessage(player, C.SCHEMATIC_INVALID, sendMessage(player, C.SCHEMATIC_INVALID,

View File

@ -6,7 +6,7 @@ import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.WorldUtil; import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
@CommandDeclaration(command = "music", permission = "plots.music", description = "Player music in a plot", usage = "/plot music", category = CommandCategory.APPEARANCE, requiredType = RequiredType.PLAYER) @CommandDeclaration(command = "music", permission = "plots.music", description = "Play music in your plot", usage = "/plot music", category = CommandCategory.APPEARANCE, requiredType = RequiredType.PLAYER)
public class Music extends SubCommand { public class Music extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) { @Override public boolean onCommand(PlotPlayer player, String[] args) {

View File

@ -73,14 +73,17 @@ public class Owner extends SetCommand {
final boolean removeDenied = plot.isDenied(finalUUID); final boolean removeDenied = plot.isDenied(finalUUID);
Runnable run = new Runnable() { Runnable run = new Runnable() {
@Override public void run() { @Override public void run() {
if (removeDenied) if (plot.setOwner(finalUUID, player)) {
plot.removeDenied(finalUUID); if (removeDenied)
plot.setOwner(finalUUID); plot.removeDenied(finalUUID);
plot.setSign(finalName); plot.setSign(finalName);
MainUtil.sendMessage(player, C.SET_OWNER); MainUtil.sendMessage(player, C.SET_OWNER);
if (other != null) { if (other != null) {
MainUtil.sendMessage(other, C.NOW_OWNER, plot.getArea() + ";" + plot.getId()); MainUtil
} .sendMessage(other, C.NOW_OWNER, plot.getArea() + ";" + plot.getId());
}
} else
MainUtil.sendMessage(player, C.SET_OWNER_CANCELLED);
} }
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {

View File

@ -8,15 +8,15 @@ import com.github.intellectualsites.plotsquared.plot.util.HttpUtil;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
@CommandDeclaration(command = "plugin", permission = "plots.use", description = "Show plugin information", aliases = "version", category = CommandCategory.INFO) @CommandDeclaration(command = "plugin", permission = "plots.use", description = "Show plugin information", usage = "/plot plugin", aliases = "version", category = CommandCategory.INFO)
public class PluginCmd extends SubCommand { public class PluginCmd extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
TaskManager.IMP.taskAsync(new Runnable() { TaskManager.IMP.taskAsync(new Runnable() {
@Override public void run() { @Override public void run() {
MainUtil.sendMessage(player, String MainUtil.sendMessage(player, String.format(
.format("$2>> $1&l" + PlotSquared.imp().getPluginName() + " $2($1Version$2: $1%s$2)", "$2>> $1&l" + PlotSquared.imp().getPluginName() + " $2($1Version$2: $1%s$2)",
PlotSquared.get().getVersion())); PlotSquared.get().getVersion()));
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev"); "$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev");
MainUtil.sendMessage(player, MainUtil.sendMessage(player,

View File

@ -110,7 +110,8 @@ public class Purge extends SubCommand {
} }
} }
if (PlotSquared.get().plots_tmp != null) { if (PlotSquared.get().plots_tmp != null) {
for (Entry<String, HashMap<PlotId, Plot>> entry : PlotSquared.get().plots_tmp.entrySet()) { for (Entry<String, HashMap<PlotId, Plot>> entry : PlotSquared.get().plots_tmp
.entrySet()) {
String worldName = entry.getKey(); String worldName = entry.getKey();
if (world != null && !world.equalsIgnoreCase(worldName)) { if (world != null && !world.equalsIgnoreCase(worldName)) {
continue; continue;

View File

@ -102,14 +102,18 @@ public class Rate extends SubCommand {
int rV = rating.getValue(); int rV = rating.getValue();
Rating result = Rating result =
EventUtil.manager.callRating(this.player, plot, new Rating(rV)); EventUtil.manager.callRating(this.player, plot, new Rating(rV));
plot.addRating(this.player.getUUID(), result); if (result != null) {
sendMessage(this.player, C.RATING_APPLIED, plot.getId().toString()); plot.addRating(this.player.getUUID(), result);
if (Permissions.hasPermission(this.player, C.PERMISSION_COMMENT)) { sendMessage(this.player, C.RATING_APPLIED,
Command command = plot.getId().toString());
MainCommand.getInstance().getCommand(Comment.class); if (Permissions
if (command != null) { .hasPermission(this.player, C.PERMISSION_COMMENT)) {
MainUtil.sendMessage(this.player, C.COMMENT_THIS, Command command =
command.getUsage()); MainCommand.getInstance().getCommand(Comment.class);
if (command != null) {
MainUtil.sendMessage(this.player, C.COMMENT_THIS,
command.getUsage());
}
} }
} }
return false; return false;
@ -169,8 +173,10 @@ public class Rate extends SubCommand {
return; return;
} }
Rating result = EventUtil.manager.callRating(player, plot, new Rating(rating)); Rating result = EventUtil.manager.callRating(player, plot, new Rating(rating));
plot.addRating(uuid, result); if (result != null) {
sendMessage(player, C.RATING_APPLIED, plot.getId().toString()); plot.addRating(uuid, result);
sendMessage(player, C.RATING_APPLIED, plot.getId().toString());
}
} }
}; };
if (plot.getSettings().ratings == null) { if (plot.getSettings().ratings == null) {

View File

@ -9,7 +9,7 @@ import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
import java.util.HashSet; import java.util.HashSet;
@CommandDeclaration(command = "relight", description = "Relight your plot", category = CommandCategory.DEBUG) @CommandDeclaration(command = "relight", description = "Relight your plot", usage = "/plot relight", category = CommandCategory.DEBUG)
public class Relight extends Command { public class Relight extends Command {
public Relight() { public Relight() {
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);

View File

@ -14,7 +14,7 @@ import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
@CommandDeclaration(command = "reload", permission = "plots.admin.command.reload", description = "Reload configurations", usage = "/plot reload", category = CommandCategory.ADMINISTRATION) @CommandDeclaration(command = "reload", aliases = "rl", permission = "plots.admin.command.reload", description = "Reload translations and world settings", usage = "/plot reload", category = CommandCategory.ADMINISTRATION)
public class Reload extends SubCommand { public class Reload extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) { @Override public boolean onCommand(PlotPlayer player, String[] args) {
@ -25,8 +25,8 @@ public class Reload extends SubCommand {
C.load(PlotSquared.get().translationFile); C.load(PlotSquared.get().translationFile);
PlotSquared.get().foreachPlotArea(new RunnableVal<PlotArea>() { PlotSquared.get().foreachPlotArea(new RunnableVal<PlotArea>() {
@Override public void run(PlotArea area) { @Override public void run(PlotArea area) {
ConfigurationSection worldSection = ConfigurationSection worldSection = PlotSquared.get().worlds
PlotSquared.get().worlds.getConfigurationSection("worlds." + area.worldname); .getConfigurationSection("worlds." + area.worldname);
if (worldSection == null) { if (worldSection == null) {
return; return;
} }

View File

@ -17,7 +17,7 @@ import java.util.Collection;
import java.util.UUID; import java.util.UUID;
@CommandDeclaration(command = "schematic", permission = "plots.schematic", description = "Schematic command", aliases = { @CommandDeclaration(command = "schematic", permission = "plots.schematic", description = "Schematic command", aliases = {
"sch"}, category = CommandCategory.SCHEMATIC, usage = "/plot schematic <arg...>") "sch", "schem"}, category = CommandCategory.SCHEMATIC, usage = "/plot schematic <arg...>")
public class SchematicCmd extends SubCommand { public class SchematicCmd extends SubCommand {
private boolean running = false; private boolean running = false;

View File

@ -8,13 +8,14 @@ import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
@CommandDeclaration(command = "sethome", permission = "plots.set.home", description = "Set the plot home", usage = "/plot sethome [none]", aliases = { @CommandDeclaration(command = "sethome", permission = "plots.set.home", description = "Set the plot home to your current position", usage = "/plot sethome [none]", aliases = {
"sh", "seth"}, category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE) "sh", "seth"}, category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE)
public class SetHome extends SetCommand { public class SetHome extends SetCommand {
@Override public boolean set(PlotPlayer player, Plot plot, String value) { @Override public boolean set(PlotPlayer player, Plot plot, String value) {
switch (value.toLowerCase()) { switch (value.toLowerCase()) {
case "unset": case "unset":
case "reset":
case "remove": case "remove":
case "none": { case "none": {
Plot base = plot.getBasePlot(false); Plot base = plot.getBasePlot(false);

View File

@ -74,7 +74,8 @@ import java.util.Map.Entry;
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"&cYou must choose a generator!" + prefix + StringMan "&cYou must choose a generator!" + prefix + StringMan
.join(SetupUtils.generators.keySet(), prefix) .join(SetupUtils.generators.keySet(), prefix)
.replaceAll(PlotSquared.imp().getPluginName(), "&2" + PlotSquared.imp().getPluginName())); .replaceAll(PlotSquared.imp().getPluginName(),
"&2" + PlotSquared.imp().getPluginName()));
sendMessage(player, C.SETUP_INIT); sendMessage(player, C.SETUP_INIT);
return false; return false;
} }

View File

@ -26,7 +26,8 @@ public class Template extends SubCommand {
public static boolean extractAllFiles(String world, String template) { public static boolean extractAllFiles(String world, String template) {
try { try {
File folder = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.TEMPLATES); File folder =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.TEMPLATES);
if (!folder.exists()) { if (!folder.exists()) {
return false; return false;
} }
@ -84,7 +85,8 @@ public class Template extends SubCommand {
} }
public static void zipAll(String world, Set<FileBytes> files) throws IOException { public static void zipAll(String world, Set<FileBytes> files) throws IOException {
File output = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.TEMPLATES); File output =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.TEMPLATES);
output.mkdirs(); output.mkdirs();
try (FileOutputStream fos = new FileOutputStream( try (FileOutputStream fos = new FileOutputStream(
output + File.separator + world + ".template"); output + File.separator + world + ".template");

View File

@ -17,7 +17,7 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
@CommandDeclaration(command = "trust", aliases = { @CommandDeclaration(command = "trust", aliases = {
"t"}, requiredType = RequiredType.NONE, usage = "/plot trust <player>", description = "Allow a player to build in a plot", category = CommandCategory.SETTINGS) "t"}, requiredType = RequiredType.NONE, usage = "/plot trust <player>", description = "Allow a user to build in a plot while you are offline", category = CommandCategory.SETTINGS)
public class Trust extends Command { public class Trust extends Command {
public Trust() { public Trust() {

View File

@ -106,8 +106,8 @@ import java.util.*;
} }
List<Plot> plots; List<Plot> plots;
if (shouldSortByArea) { if (shouldSortByArea) {
plots = PlotSquared plots = PlotSquared.get()
.get().sortPlots(unsorted, PlotSquared.SortType.CREATION_DATE, sortByArea); .sortPlots(unsorted, PlotSquared.SortType.CREATION_DATE, sortByArea);
} else { } else {
plots = PlotSquared.get().sortPlotsByTemp(unsorted); plots = PlotSquared.get().sortPlotsByTemp(unsorted);
} }

View File

@ -160,7 +160,7 @@ public enum C {
* Confirm * Confirm
*/ */
EXPIRED_CONFIRM("$2Confirmation has expired, please run the command again!", EXPIRED_CONFIRM("$2Confirmation has expired, please run the command again!",
"Confirm"), FAILED_CONFIRM("$2You have no pending actions to confirm!", "Confirm"), FAILED_CONFIRM("$2You have no pending actions to confirm!",
"Confirm"), REQUIRES_CONFIRM( "Confirm"), REQUIRES_CONFIRM(
"$2Are you sure you wish to execute: $1%s$2?&-$2This cannot be undone! If you are sure: $1/plot confirm", "$2Are you sure you wish to execute: $1%s$2?&-$2This cannot be undone! If you are sure: $1/plot confirm",
"Confirm"), /* "Confirm"), /*
@ -185,8 +185,8 @@ public enum C {
* Cluster * Cluster
*/ */
CLUSTER_AVAILABLE_ARGS( CLUSTER_AVAILABLE_ARGS(
"$1The following sub commands are available: $4list$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, " "$1The following sub commands are available: $4list$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, "
+ "$4members$2, $4info$2, $4tp$2, $4sethome", "Cluster"), CLUSTER_LIST_HEADING( + "$4members$2, $4info$2, $4tp$2, $4sethome", "Cluster"), CLUSTER_LIST_HEADING(
"$2There are $1%s$2 clusters in this world", "Cluster"), CLUSTER_LIST_ELEMENT("$2 - $1%s&-", "$2There are $1%s$2 clusters in this world", "Cluster"), CLUSTER_LIST_ELEMENT("$2 - $1%s&-",
"Cluster"), CLUSTER_INTERSECTION("$2The proposed area overlaps with: %s0", "Cluster"), CLUSTER_INTERSECTION("$2The proposed area overlaps with: %s0",
"Cluster"), CLUSTER_OUTSIDE("$2The proposed area is outside the plot area: %s0", "Cluster"), CLUSTER_OUTSIDE("$2The proposed area is outside the plot area: %s0",
@ -217,7 +217,7 @@ public enum C {
* WorldEdit masks * WorldEdit masks
*/ */
WORLDEDIT_DELAYED("$2Please wait while we process your WorldEdit action...", WORLDEDIT_DELAYED("$2Please wait while we process your WorldEdit action...",
"WorldEdit Masks"), WORLDEDIT_RUN("$2Apologies for the delay. Now executing: %s", "WorldEdit Masks"), WORLDEDIT_RUN("$2Apologies for the delay. Now executing: %s",
"WorldEdit Masks"), REQUIRE_SELECTION_IN_MASK( "WorldEdit Masks"), REQUIRE_SELECTION_IN_MASK(
"$2%s of your selection is not within your plot mask. You can only make edits within your plot.", "$2%s of your selection is not within your plot mask. You can only make edits within your plot.",
"WorldEdit Masks"), WORLDEDIT_VOLUME( "WorldEdit Masks"), WORLDEDIT_VOLUME(
@ -262,7 +262,7 @@ public enum C {
* Console * Console
*/ */
NOT_CONSOLE("$2For safety reasons, this command can only be executed by console.", NOT_CONSOLE("$2For safety reasons, this command can only be executed by console.",
"Console"), IS_CONSOLE("$2This command can only be executed by a player.", "Console"), "Console"), IS_CONSOLE("$2This command can only be executed by a player.", "Console"),
/* /*
Inventory Inventory
@ -337,16 +337,18 @@ public enum C {
* Schematic Stuff * Schematic Stuff
*/ */
SCHEMATIC_TOO_LARGE("$2The plot is too large for this action!", SCHEMATIC_TOO_LARGE("$2The plot is too large for this action!",
"Schematics"), SCHEMATIC_MISSING_ARG( "Schematics"), SCHEMATIC_MISSING_ARG(
"$2You need to specify an argument. Possible values: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall", "$2You need to specify an argument. Possible values: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall",
"Schematics"), SCHEMATIC_INVALID("$2That is not a valid schematic. Reason: $2%s", "Schematics"), SCHEMATIC_INVALID("$2That is not a valid schematic. Reason: $2%s",
"Schematics"), SCHEMATIC_VALID("$2That is a valid schematic", "Schematics"), SCHEMATIC_VALID("$2That is a valid schematic",
"Schematics"), SCHEMATIC_PASTE_FAILED("$2Failed to paste the schematic", "Schematics"), SCHEMATIC_PASTE_FAILED("$2Failed to paste the schematic",
"Schematics"), SCHEMATIC_PASTE_SUCCESS("$4The schematic pasted successfully", "Schematics"), /* "Schematics"), SCHEMATIC_PASTE_SUCCESS("$4The schematic pasted successfully",
"Schematics"), /*
* Title Stuff * Title Stuff
*/ */
TITLE_ENTERED_PLOT("$1Plot: %world%;%x%;%z%", "Titles"), TITLE_ENTERED_PLOT_SUB("$4Owned by %s", TITLE_ENTERED_PLOT("$1Plot: %world%;%x%;%z%", "Titles"), TITLE_ENTERED_PLOT_SUB("$4Owned by %s",
"Titles"), PREFIX_GREETING("$1%id%$2> ", "Titles"), PREFIX_FAREWELL("$1%id%$2> ", "Titles"), /* "Titles"), PREFIX_GREETING("$1%id%$2> ", "Titles"), PREFIX_FAREWELL("$1%id%$2> ",
"Titles"), /*
* Core Stuff * Core Stuff
*/ */
TASK_START("Starting task...", "Core"), PREFIX("$3[$1P2$3] $2", "Core"), ENABLED( TASK_START("Starting task...", "Core"), PREFIX("$3[$1P2$3] $2", "Core"), ENABLED(
@ -354,7 +356,7 @@ public enum C {
* Reload * Reload
*/ */
RELOADED_CONFIGS("$1Translations and world settings have been reloaded", RELOADED_CONFIGS("$1Translations and world settings have been reloaded",
"Reload"), RELOAD_FAILED("$2Failed to reload file configurations", "Reload"), "Reload"), RELOAD_FAILED("$2Failed to reload file configurations", "Reload"),
/* /*
* BarAPI * BarAPI
*/ */
@ -372,7 +374,7 @@ public enum C {
* Position * Position
*/ */
MISSING_POSITION("$2You need to specify a position. Possible values: $1none", MISSING_POSITION("$2You need to specify a position. Possible values: $1none",
"Position"), POSITION_SET("$1Home position set to your current location", "Position"), POSITION_SET("$1Home position set to your current location",
"Position"), POSITION_UNSET("$1Home position reset to the default location", "Position"), POSITION_UNSET("$1Home position reset to the default location",
"Position"), HOME_ARGUMENT("$2Use /plot set home [none]", "Position"), INVALID_POSITION( "Position"), HOME_ARGUMENT("$2Use /plot set home [none]", "Position"), INVALID_POSITION(
"$2That is not a valid position value", "Position"), /* "$2That is not a valid position value", "Position"), /*
@ -385,7 +387,7 @@ public enum C {
* Permission * Permission
*/ */
NO_SCHEMATIC_PERMISSION("$2You don't have the permission required to use schematic $1%s", NO_SCHEMATIC_PERMISSION("$2You don't have the permission required to use schematic $1%s",
"Permission"), NO_PERMISSION("$2You are lacking the permission node: $1%s", "Permission"), NO_PERMISSION("$2You are lacking the permission node: $1%s",
"Permission"), NO_PERMISSION_EVENT("$2You are lacking the permission node: $1%s", "Permission"), NO_PERMISSION_EVENT("$2You are lacking the permission node: $1%s",
"Permission"), NO_PLOT_PERMS("$2You must be the plot owner to perform this action", "Permission"), NO_PLOT_PERMS("$2You must be the plot owner to perform this action",
"Permission"), CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots.", "Permission"), CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots.",
@ -418,15 +420,15 @@ public enum C {
* Player not found * Player not found
*/ */
INVALID_PLAYER_WAIT("$2Player not found: $1%s$2, fetching it. Try again soon.", INVALID_PLAYER_WAIT("$2Player not found: $1%s$2, fetching it. Try again soon.",
"Errors"), INVALID_PLAYER("$2Player not found: $1%s$2.", "Errors"), INVALID_PLAYER("$2Player not found: $1%s$2.", "Errors"), INVALID_PLAYER_OFFLINE(
"Errors"), INVALID_PLAYER_OFFLINE("$2The player must be online: $1%s.", "Errors"), /* "$2The player must be online: $1%s.", "Errors"), /*
* Command flag * Command flag
*/ */
INVALID_COMMAND_FLAG("$2Invalid command flag: %s0", "Errors"), /* INVALID_COMMAND_FLAG("$2Invalid command flag: %s0", "Errors"), /*
* Unknown Error * Unknown Error
*/ */
ERROR("$2An error occurred: %s", ERROR("$2An error occurred: %s",
"Errors"), // SETTINGS_PASTE_UPLOADED("$2settings.yml was uploaded to: $1%url%", "Paste"), "Errors"), // SETTINGS_PASTE_UPLOADED("$2settings.yml was uploaded to: $1%url%", "Paste"),
// LATEST_LOG_UPLOADED("$2latest.log was uploaded to: $1%url%", "Paste"), // LATEST_LOG_UPLOADED("$2latest.log was uploaded to: $1%url%", "Paste"),
DEBUG_REPORT_CREATED("$1Uploaded a full debug to: $1%url%", "Paste"), /* DEBUG_REPORT_CREATED("$1Uploaded a full debug to: $1%url%", "Paste"), /*
* *
@ -438,7 +440,7 @@ public enum C {
* trim * trim
*/ */
TRIM_IN_PROGRESS("A world trim task is already in progress!", TRIM_IN_PROGRESS("A world trim task is already in progress!",
"Trim"), NOT_VALID_HYBRID_PLOT_WORLD( "Trim"), NOT_VALID_HYBRID_PLOT_WORLD(
"The hybrid plot manager is required to perform this action", "Trim"), /* "The hybrid plot manager is required to perform this action", "Trim"), /*
* No <plot> * No <plot>
*/ */
@ -538,7 +540,7 @@ public enum C {
* List * List
*/ */
COMMENT_LIST_HEADER_PAGED("$2(Page $1%cur$2/$1%max$2) $1List of %amount% comments", COMMENT_LIST_HEADER_PAGED("$2(Page $1%cur$2/$1%max$2) $1List of %amount% comments",
"List"), CLICKABLE(" (interactive)", "List"), AREA_LIST_HEADER_PAGED( "List"), CLICKABLE(" (interactive)", "List"), AREA_LIST_HEADER_PAGED(
"$2(Page $1%cur$2/$1%max$2) $1List of %amount% areas", "List"), PLOT_LIST_HEADER_PAGED( "$2(Page $1%cur$2/$1%max$2) $1List of %amount% areas", "List"), PLOT_LIST_HEADER_PAGED(
"$2(Page $1%cur$2/$1%max$2) $1List of %amount% plots", "List"), PLOT_LIST_HEADER( "$2(Page $1%cur$2/$1%max$2) $1List of %amount% plots", "List"), PLOT_LIST_HEADER(
"$1List of %word% plots", "List"), PLOT_LIST_ITEM("$2>> $1%id$2:$1%world $2- $1%owner", "$1List of %word% plots", "List"), PLOT_LIST_ITEM("$2>> $1%id$2:$1%world $2- $1%owner",
@ -550,12 +552,12 @@ public enum C {
* Wait * Wait
*/ */
WAIT_FOR_TIMER( WAIT_FOR_TIMER(
"$2A setblock timer is bound to either the current plot or you. Please wait for it to finish", "$2A setblock timer is bound to either the current plot or you. Please wait for it to finish",
"Errors"), /* "Errors"), /*
* Chat * Chat
*/ */
PLOT_CHAT_SPY_FORMAT("$2[$1Plot Spy$2][$1%plot_id%$2] $1%sender%$2: $1%msg%", PLOT_CHAT_SPY_FORMAT("$2[$1Plot Spy$2][$1%plot_id%$2] $1%sender%$2: $1%msg%",
"Chat"), PLOT_CHAT_FORMAT("$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%", "Chat"), PLOT_CHAT_FORMAT("$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%",
"Chat"), PLOT_CHAT_FORCED("$2This world forces everyone to use plot chat.", "Chat"), PLOT_CHAT_FORCED("$2This world forces everyone to use plot chat.",
"Chat"), PLOT_CHAT_ON("$4Plot chat enabled.", "Chat"), PLOT_CHAT_OFF( "Chat"), PLOT_CHAT_ON("$4Plot chat enabled.", "Chat"), PLOT_CHAT_OFF(
"$4Plot chat disabled.", "Chat"), /* "$4Plot chat disabled.", "Chat"), /*
@ -574,7 +576,7 @@ public enum C {
* Rain * Rain
*/ */
NEED_ON_OFF("$2You need to specify a value. Possible values: $1on$2, $1off", NEED_ON_OFF("$2You need to specify a value. Possible values: $1on$2, $1off",
"Rain"), SETTING_UPDATED("$4You successfully updated the setting", "Rain"), /* "Rain"), SETTING_UPDATED("$4You successfully updated the setting", "Rain"), /*
* Flag * Flag
*/ */
FLAG_KEY("$2Key: %s", "Flag"), FLAG_TYPE("$2Type: %s", "Flag"), FLAG_DESC("$2Desc: %s", FLAG_KEY("$2Key: %s", "Flag"), FLAG_TYPE("$2Type: %s", "Flag"), FLAG_DESC("$2Desc: %s",
@ -591,7 +593,8 @@ public enum C {
TRUSTED_ADDED("$4You successfully trusted a user to the plot", "Trusted"), TRUSTED_REMOVED( TRUSTED_ADDED("$4You successfully trusted a user to the plot", "Trusted"), TRUSTED_REMOVED(
"$4You successfully removed a trusted user from the plot", "Trusted"), WAS_NOT_ADDED( "$4You successfully removed a trusted user from the plot", "Trusted"), WAS_NOT_ADDED(
"$2That player was not trusted on this plot", "Trusted"), PLOT_REMOVED_USER( "$2That player was not trusted on this plot", "Trusted"), PLOT_REMOVED_USER(
"$1Plot %s of which you were added to has been deleted due to owner inactivity", "Trusted"), /* "$1Plot %s of which you were added to has been deleted due to owner inactivity",
"Trusted"), /*
* Member * Member
*/ */
REMOVED_PLAYERS("$2Removed %s players from this plot.", "Member"), ALREADY_OWNER( REMOVED_PLAYERS("$2Removed %s players from this plot.", "Member"), ALREADY_OWNER(
@ -603,8 +606,9 @@ public enum C {
"$2You are not allowed to add any more players to this plot", "Member"), /* "$2You are not allowed to add any more players to this plot", "Member"), /*
* Set Owner * Set Owner
*/ */
SET_OWNER("$4You successfully set the plot owner", "Owner"), NOW_OWNER( SET_OWNER("$4You successfully set the plot owner", "Owner"), SET_OWNER_CANCELLED(
"$4You are now owner of plot %s", "Owner"), /* "$2The setowner action was cancelled", "Owner"), NOW_OWNER("$4You are now owner of plot %s",
"Owner"), /*
* Signs * Signs
*/ */
OWNER_SIGN_LINE_1("$1ID: $1%id%", "Signs"), OWNER_SIGN_LINE_2("$1Owner:", OWNER_SIGN_LINE_1("$1ID: $1%id%", "Signs"), OWNER_SIGN_LINE_2("$1Owner:",

View File

@ -68,9 +68,9 @@ public class Config {
field.set(instance, value); field.set(instance, value);
return; return;
} catch (Throwable e) { } catch (Throwable e) {
PlotSquared PlotSquared.debug(
.debug("Invalid configuration value: " + key + ": " + value + " in " + root "Invalid configuration value: " + key + ": " + value + " in " + root
.getSimpleName()); .getSimpleName());
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -262,8 +262,9 @@ public class Config {
setAccessible(field); setAccessible(field);
return field; return field;
} catch (Throwable e) { } catch (Throwable e) {
PlotSquared.debug("Invalid config field: " + StringMan.join(split, ".") + " for " + toNodeName( PlotSquared.debug(
instance.getClass().getSimpleName())); "Invalid config field: " + StringMan.join(split, ".") + " for " + toNodeName(
instance.getClass().getSimpleName()));
return null; return null;
} }
} }

View File

@ -87,7 +87,7 @@ public class Configuration {
}; };
public static final SettingValue<PlotBlock> BLOCK = new SettingValue<PlotBlock>("BLOCK") { public static final SettingValue<PlotBlock> BLOCK = new SettingValue<PlotBlock>("BLOCK") {
@Override public boolean validateValue(String string) { @Override public boolean validateValue(String string) {
StringComparison.ComparisonResult value = StringComparison<PlotBlock>.ComparisonResult value =
WorldUtil.IMP.getClosestBlock(string); WorldUtil.IMP.getClosestBlock(string);
return !(value == null || value.match > 1); return !(value == null || value.match > 1);
} }

View File

@ -14,9 +14,11 @@ public class Settings extends Config {
NOTE: Fields are saved in declaration order, classes in reverse order NOTE: Fields are saved in declaration order, classes in reverse order
*/ */
@Comment("These first 4 aren't configurable") // This is a comment @Comment("These first 7 aren't configurable") // This is a comment
@Final // Indicates that this value isn't configurable @Final // Indicates that this value isn't configurable
public static final String ISSUES = "https://github.com/IntellectualSites/PlotSquared/issues"; public static final String ISSUES = "https://github.com/IntellectualSites/PlotSquared/issues";
@Final public static final String SUGGESTION =
"https://github.com/IntellectualSites/PlotSquaredSuggestions";
@Final public static final String WIKI = @Final public static final String WIKI =
"https://github.com/IntellectualSites/PlotSquared/wiki"; "https://github.com/IntellectualSites/PlotSquared/wiki";
@Final public static String DATE; // These values are set from P2 before loading @Final public static String DATE; // These values are set from P2 before loading
@ -31,7 +33,7 @@ public class Settings extends Config {
@Create // This value will be generated automatically @Create // This value will be generated automatically
public static ConfigBlock<Auto_Clear> AUTO_CLEAR = null; public static ConfigBlock<Auto_Clear> AUTO_CLEAR = null;
// A ConfigBlock is a section that can have multiple instances e.g. multiple expiry tasks // A ConfigBlock is a section that can have multiple instances e.g. multiple expiry tasks
public static void save(File file) { public static void save(File file) {
save(file, Settings.class); save(file, Settings.class);

View File

@ -320,7 +320,7 @@ public interface AbstractDB {
/** /**
* Replace a old uuid with a new one in the database. * Replace a old uuid with a new one in the database.
* <p> *
* <ul> * <ul>
* <li> Useful for replacing a few uuids (not the entire database).</li> * <li> Useful for replacing a few uuids (not the entire database).</li>
* <li>or entire conversion, the uuidconvert command scales better.</li> * <li>or entire conversion, the uuidconvert command scales better.</li>

View File

@ -754,7 +754,8 @@ import java.util.concurrent.atomic.AtomicInteger;
last = subList.size(); last = subList.size();
preparedStmt.addBatch(); preparedStmt.addBatch();
} }
PlotSquared.debug("&aBatch 1: " + count + " | " + objList.get(0).getClass().getCanonicalName()); PlotSquared.debug(
"&aBatch 1: " + count + " | " + objList.get(0).getClass().getCanonicalName());
preparedStmt.executeBatch(); preparedStmt.executeBatch();
preparedStmt.clearParameters(); preparedStmt.clearParameters();
preparedStmt.close(); preparedStmt.close();
@ -797,7 +798,8 @@ import java.util.concurrent.atomic.AtomicInteger;
last = subList.size(); last = subList.size();
preparedStmt.addBatch(); preparedStmt.addBatch();
} }
PlotSquared.debug("&aBatch 2: " + count + " | " + objList.get(0).getClass().getCanonicalName()); PlotSquared.debug(
"&aBatch 2: " + count + " | " + objList.get(0).getClass().getCanonicalName());
preparedStmt.executeBatch(); preparedStmt.executeBatch();
preparedStmt.clearParameters(); preparedStmt.clearParameters();
preparedStmt.close(); preparedStmt.close();
@ -1693,8 +1695,9 @@ import java.util.concurrent.atomic.AtomicInteger;
if (Settings.Enabled_Components.DATABASE_PURGER) { if (Settings.Enabled_Components.DATABASE_PURGER) {
toDelete.add(last.temp); toDelete.add(last.temp);
} else { } else {
PlotSquared.debug("&cPLOT #" + id + "(" + last + ") in `" + this.prefix PlotSquared.debug(
+ "plot` is a duplicate. Delete this plot or set `database-purger: true` in the settings.yml."); "&cPLOT #" + id + "(" + last + ") in `" + this.prefix
+ "plot` is a duplicate. Delete this plot or set `database-purger: true` in the settings.yml.");
} }
} }
} else { } else {
@ -1734,9 +1737,9 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
} }
/* /*
* Getting helpers * Getting helpers
*/ */
try (ResultSet r = statement.executeQuery( try (ResultSet r = statement.executeQuery(
"SELECT `user_uuid`, `plot_plot_id` FROM `" + this.prefix + "plot_helpers`")) { "SELECT `user_uuid`, `plot_plot_id` FROM `" + this.prefix + "plot_helpers`")) {
ArrayList<Integer> toDelete = new ArrayList<>(); ArrayList<Integer> toDelete = new ArrayList<>();
@ -1762,9 +1765,9 @@ import java.util.concurrent.atomic.AtomicInteger;
deleteRows(toDelete, this.prefix + "plot_helpers", "plot_plot_id"); deleteRows(toDelete, this.prefix + "plot_helpers", "plot_plot_id");
} }
/* /*
* Getting trusted * Getting trusted
*/ */
try (ResultSet r = statement.executeQuery( try (ResultSet r = statement.executeQuery(
"SELECT `user_uuid`, `plot_plot_id` FROM `" + this.prefix + "plot_trusted`")) { "SELECT `user_uuid`, `plot_plot_id` FROM `" + this.prefix + "plot_trusted`")) {
ArrayList<Integer> toDelete = new ArrayList<>(); ArrayList<Integer> toDelete = new ArrayList<>();
@ -1790,9 +1793,9 @@ import java.util.concurrent.atomic.AtomicInteger;
deleteRows(toDelete, this.prefix + "plot_trusted", "plot_plot_id"); deleteRows(toDelete, this.prefix + "plot_trusted", "plot_plot_id");
} }
/* /*
* Getting denied * Getting denied
*/ */
try (ResultSet r = statement.executeQuery( try (ResultSet r = statement.executeQuery(
"SELECT `user_uuid`, `plot_plot_id` FROM `" + this.prefix + "plot_denied`")) { "SELECT `user_uuid`, `plot_plot_id` FROM `" + this.prefix + "plot_denied`")) {
ArrayList<Integer> toDelete = new ArrayList<>(); ArrayList<Integer> toDelete = new ArrayList<>();
@ -2378,7 +2381,8 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
} }
} catch (SQLException e) { } catch (SQLException e) {
PlotSquared.debug("&7[WARN] Failed to fetch rating for plot " + plot.getId().toString()); PlotSquared
.debug("&7[WARN] Failed to fetch rating for plot " + plot.getId().toString());
e.printStackTrace(); e.printStackTrace();
} }
return map; return map;
@ -2970,7 +2974,8 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
// owner // owner
if (!plot.owner.equals(dataPlot.owner)) { if (!plot.owner.equals(dataPlot.owner)) {
PlotSquared.debug("&8 - &7Setting owner: " + plot + " -> " + MainUtil.getName(plot.owner)); PlotSquared
.debug("&8 - &7Setting owner: " + plot + " -> " + MainUtil.getName(plot.owner));
setOwner(plot, plot.owner); setOwner(plot, plot.owner);
} }
// trusted // trusted
@ -2979,8 +2984,9 @@ import java.util.concurrent.atomic.AtomicInteger;
HashSet<UUID> toRemove = (HashSet<UUID>) dataPlot.getTrusted().clone(); HashSet<UUID> toRemove = (HashSet<UUID>) dataPlot.getTrusted().clone();
toRemove.removeAll(plot.getTrusted()); toRemove.removeAll(plot.getTrusted());
toAdd.removeAll(dataPlot.getTrusted()); toAdd.removeAll(dataPlot.getTrusted());
PlotSquared.debug("&8 - &7Correcting " + (toAdd.size() + toRemove.size()) + " trusted for: " PlotSquared.debug(
+ plot); "&8 - &7Correcting " + (toAdd.size() + toRemove.size()) + " trusted for: "
+ plot);
if (!toRemove.isEmpty()) { if (!toRemove.isEmpty()) {
for (UUID uuid : toRemove) { for (UUID uuid : toRemove) {
removeTrusted(plot, uuid); removeTrusted(plot, uuid);
@ -2997,8 +3003,9 @@ import java.util.concurrent.atomic.AtomicInteger;
HashSet<UUID> toRemove = (HashSet<UUID>) dataPlot.getMembers().clone(); HashSet<UUID> toRemove = (HashSet<UUID>) dataPlot.getMembers().clone();
toRemove.removeAll(plot.getMembers()); toRemove.removeAll(plot.getMembers());
toAdd.removeAll(dataPlot.getMembers()); toAdd.removeAll(dataPlot.getMembers());
PlotSquared.debug("&8 - &7Correcting " + (toAdd.size() + toRemove.size()) + " members for: " PlotSquared.debug(
+ plot); "&8 - &7Correcting " + (toAdd.size() + toRemove.size()) + " members for: "
+ plot);
if (!toRemove.isEmpty()) { if (!toRemove.isEmpty()) {
for (UUID uuid : toRemove) { for (UUID uuid : toRemove) {
removeMember(plot, uuid); removeMember(plot, uuid);
@ -3015,8 +3022,9 @@ import java.util.concurrent.atomic.AtomicInteger;
HashSet<UUID> toRemove = (HashSet<UUID>) dataPlot.getDenied().clone(); HashSet<UUID> toRemove = (HashSet<UUID>) dataPlot.getDenied().clone();
toRemove.removeAll(plot.getDenied()); toRemove.removeAll(plot.getDenied());
toAdd.removeAll(dataPlot.getDenied()); toAdd.removeAll(dataPlot.getDenied());
PlotSquared.debug("&8 - &7Correcting " + (toAdd.size() + toRemove.size()) + " denied for: " PlotSquared.debug(
+ plot); "&8 - &7Correcting " + (toAdd.size() + toRemove.size()) + " denied for: "
+ plot);
if (!toRemove.isEmpty()) { if (!toRemove.isEmpty()) {
for (UUID uuid : toRemove) { for (UUID uuid : toRemove) {
removeDenied(plot, uuid); removeDenied(plot, uuid);

View File

@ -117,7 +117,8 @@ public class FlagManager {
.replaceAll(",", "´")); .replaceAll(",", "´"));
i++; i++;
} catch (Exception e) { } catch (Exception e) {
PlotSquared.debug("Failed to parse flag: " + entry.getKey() + "->" + entry.getValue()); PlotSquared
.debug("Failed to parse flag: " + entry.getKey() + "->" + entry.getValue());
e.printStackTrace(); e.printStackTrace();
} }
} }

View File

@ -136,8 +136,9 @@ public final class Flags {
} }
Flag flag = (Flag) fieldValue; Flag flag = (Flag) fieldValue;
if (!flag.getName().equals(fieldName)) { if (!flag.getName().equals(fieldName)) {
PlotSquared.debug(Flags.class + "Field doesn't match: " + fieldName + " != " + flag PlotSquared.debug(
.getName()); Flags.class + "Field doesn't match: " + fieldName + " != " + flag
.getName());
} }
flags.put(flag.getName(), flag); flags.put(flag.getName(), flag);
} }

View File

@ -35,6 +35,6 @@ public class GameModeFlag extends Flag<PlotGameMode> {
} }
@Override public String getValueDescription() { @Override public String getValueDescription() {
return "Flag value must be a gamemode: 'creative' , 'survival', 'adventure' or 'spectator'"; return "Flag value must be a gamemode: 'survival', 'creative', 'adventure' or 'spectator'";
} }
} }

View File

@ -26,6 +26,6 @@ public class IntegerListFlag extends ListFlag<List<Integer>> {
} }
@Override public String getValueDescription() { @Override public String getValueDescription() {
return "Flag value must be a integer list"; return "Flag value must be an integer list";
} }
} }

View File

@ -30,6 +30,6 @@ public class PlotWeatherFlag extends Flag<PlotWeather> {
} }
@Override public String getValueDescription() { @Override public String getValueDescription() {
return ""; return "Flag must be a weather: 'rain' or 'sun'";
} }
} }

View File

@ -42,7 +42,8 @@ public class HybridPlotManager extends ClassicPlotManager {
files.add(new FileBytes(newDir + "intersection.schematic", files.add(new FileBytes(newDir + "intersection.schematic",
Files.readAllBytes(intersection.toPath()))); Files.readAllBytes(intersection.toPath())));
} }
File plot = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "plot.schematic"); File plot =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "plot.schematic");
if (plot.exists()) { if (plot.exists()) {
files.add( files.add(
new FileBytes(newDir + "plot.schematic", Files.readAllBytes(plot.toPath()))); new FileBytes(newDir + "plot.schematic", Files.readAllBytes(plot.toPath())));

View File

@ -192,8 +192,10 @@ public class HybridPlotWorld extends ClassicPlotWorld {
"schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/intersection.schematic"); "schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/intersection.schematic");
File schem3File = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), File schem3File = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(),
"schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/plot.schematic"); "schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/plot.schematic");
SchematicHandler.Schematic schematic1 = SchematicHandler.manager.getSchematic(schematic1File); SchematicHandler.Schematic schematic1 =
SchematicHandler.Schematic schematic2 = SchematicHandler.manager.getSchematic(schematic2File); SchematicHandler.manager.getSchematic(schematic1File);
SchematicHandler.Schematic schematic2 =
SchematicHandler.manager.getSchematic(schematic2File);
SchematicHandler.Schematic schematic3 = SchematicHandler.manager.getSchematic(schem3File); SchematicHandler.Schematic schematic3 = SchematicHandler.manager.getSchematic(schem3File);
int shift = this.ROAD_WIDTH / 2; int shift = this.ROAD_WIDTH / 2;
int oddshift = (this.ROAD_WIDTH & 1) == 0 ? 0 : 1; int oddshift = (this.ROAD_WIDTH & 1) == 0 ? 0 : 1;

View File

@ -198,7 +198,8 @@ public abstract class SquarePlotManager extends GridPlotManager {
} }
PlotSquared.debug("invalid location: " + Arrays.toString(merged)); PlotSquared.debug("invalid location: " + Arrays.toString(merged));
} catch (Exception ignored) { } catch (Exception ignored) {
PlotSquared.debug("Invalid plot / road width in settings.yml for world: " + plotArea.worldname); PlotSquared.debug(
"Invalid plot / road width in settings.yml for world: " + plotArea.worldname);
} }
return null; return null;
} }

View File

@ -96,9 +96,9 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
this.BScount++; this.BScount++;
if (this.BScount > Settings.Chunk_Processor.MAX_TILES) { if (this.BScount > Settings.Chunk_Processor.MAX_TILES) {
this.BSblocked = true; this.BSblocked = true;
PlotSquared PlotSquared.debug(
.debug(C.PREFIX + "&cdetected unsafe WorldEdit: " + location.getBlockX() + "," C.PREFIX + "&cdetected unsafe WorldEdit: " + location.getBlockX() + ","
+ location.getBlockZ()); + location.getBlockZ());
} }
if (WEManager.maskContains(this.mask, location.getBlockX(), location.getBlockY(), if (WEManager.maskContains(this.mask, location.getBlockX(), location.getBlockY(),
location.getBlockZ())) { location.getBlockZ())) {

View File

@ -39,8 +39,9 @@ public class WESubscriber {
Player player = (Player) actor; Player player = (Player) actor;
Location loc = player.getLocation(); Location loc = player.getLocation();
com.github.intellectualsites.plotsquared.plot.object.Location pLoc = com.github.intellectualsites.plotsquared.plot.object.Location pLoc =
new com.github.intellectualsites.plotsquared.plot.object.Location(player.getWorld().getName(), new com.github.intellectualsites.plotsquared.plot.object.Location(
loc.getBlockX(), loc.getBlockX(), loc.getBlockZ()); player.getWorld().getName(), loc.getBlockX(), loc.getBlockX(),
loc.getBlockZ());
Plot plot = pLoc.getPlot(); Plot plot = pLoc.getPlot();
if (plot == null) { if (plot == null) {
event.setExtent(new NullExtent()); event.setExtent(new NullExtent());

View File

@ -745,6 +745,39 @@ public class Plot {
} }
} }
/**
* Set the plot owner (and update the database)
*
* @param owner
* @param initiator
* @return boolean
*/
public boolean setOwner(UUID owner, PlotPlayer initiator) {
boolean result = EventUtil.manager
.callOwnerChange(initiator, this, owner, hasOwner() ? this.owner : null, hasOwner());
if (!result)
return false;
if (!hasOwner()) {
this.owner = owner;
create();
return true;
}
if (!isMerged()) {
if (!this.owner.equals(owner)) {
this.owner = owner;
DBFunc.setOwner(this, owner);
}
return true;
}
for (Plot current : getConnectedPlots()) {
if (!owner.equals(current.owner)) {
current.owner = owner;
DBFunc.setOwner(current, owner);
}
}
return true;
}
/** /**
* Clear a plot. * Clear a plot.
* *
@ -2417,7 +2450,8 @@ public class Plot {
if (current.owner == null || current.settings == null) { if (current.owner == null || current.settings == null) {
// Invalid plot // Invalid plot
// merged onto unclaimed plot // merged onto unclaimed plot
PlotSquared.debug("Ignoring invalid merged plot: " + current + " | " + current.owner); PlotSquared
.debug("Ignoring invalid merged plot: " + current + " | " + current.owner);
continue; continue;
} }
tmpSet.add(current); tmpSet.add(current);

View File

@ -15,8 +15,7 @@ public class PlotMessage {
} catch (Throwable e) { } catch (Throwable e) {
PlotSquared.debug( PlotSquared.debug(
PlotSquared.imp().getPluginName() + " doesn't support fancy chat for " + PlotSquared PlotSquared.imp().getPluginName() + " doesn't support fancy chat for " + PlotSquared
.get().IMP .get().IMP.getServerVersion());
.getServerVersion());
ChatManager.manager = new PlainChatManager(); ChatManager.manager = new PlainChatManager();
reset(ChatManager.manager); reset(ChatManager.manager);
} }

View File

@ -28,7 +28,8 @@ public class SinglePlotManager extends PlotManager {
@Override public boolean clearPlot(PlotArea plotArea, Plot plot, final Runnable whenDone) { @Override public boolean clearPlot(PlotArea plotArea, Plot plot, final Runnable whenDone) {
SetupUtils.manager.unload(plot.getWorldName(), false); SetupUtils.manager.unload(plot.getWorldName(), false);
final File worldFolder = new File(PlotSquared.get().IMP.getWorldContainer(), plot.getWorldName()); final File worldFolder =
new File(PlotSquared.get().IMP.getWorldContainer(), plot.getWorldName());
TaskManager.IMP.taskAsync(new Runnable() { TaskManager.IMP.taskAsync(new Runnable() {
@Override public void run() { @Override public void run() {
MainUtil.deleteDirectory(worldFolder); MainUtil.deleteDirectory(worldFolder);

View File

@ -209,7 +209,8 @@ public abstract class ChunkManager {
public abstract void unloadChunk(String world, ChunkLoc loc, boolean save, boolean safe); public abstract void unloadChunk(String world, ChunkLoc loc, boolean save, boolean safe);
public Set<ChunkLoc> getChunkChunks(String world) { public Set<ChunkLoc> getChunkChunks(String world) {
File folder = new File(PlotSquared.get().IMP.getWorldContainer(), world + File.separator + "region"); File folder =
new File(PlotSquared.get().IMP.getWorldContainer(), world + File.separator + "region");
File[] regionFiles = folder.listFiles(); File[] regionFiles = folder.listFiles();
HashSet<ChunkLoc> chunks = new HashSet<>(); HashSet<ChunkLoc> chunks = new HashSet<>();
if (regionFiles == null) { if (regionFiles == null) {

View File

@ -10,6 +10,7 @@ import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager; 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 java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.UUID; import java.util.UUID;
@ -18,7 +19,15 @@ public abstract class EventUtil {
public static EventUtil manager = null; public static EventUtil manager = null;
public abstract Rating callRating(PlotPlayer player, Plot plot, Rating rating); /**
* Submit a plot rate event and return the updated rating
*
* @param player Player that rated the plot
* @param plot Plot that was rated
* @param rating Rating given to the plot
* @return Updated rating or null if the event was cancelled
*/
@Nullable public abstract Rating callRating(PlotPlayer player, Plot plot, Rating rating);
public abstract boolean callClaim(PlotPlayer player, Plot plot, boolean auto); public abstract boolean callClaim(PlotPlayer player, Plot plot, boolean auto);
@ -50,6 +59,9 @@ public abstract class EventUtil {
public abstract void callMember(PlotPlayer initiator, Plot plot, UUID player, boolean added); public abstract void callMember(PlotPlayer initiator, Plot plot, UUID player, boolean added);
public abstract boolean callOwnerChange(PlotPlayer initiator, Plot plot, UUID newOwner,
UUID oldOwner, boolean hasOldOwner);
public void doJoinTask(final PlotPlayer player) { public void doJoinTask(final PlotPlayer player) {
if (player == null) { if (player == null) {
return; //possible future warning message to figure out where we are retrieving null return; //possible future warning message to figure out where we are retrieving null

View File

@ -427,7 +427,8 @@ public abstract class SchematicHandler {
* @return schematic if found, else null * @return schematic if found, else null
*/ */
public Schematic getSchematic(String name) { public Schematic getSchematic(String name) {
File parent = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.SCHEMATICS); File parent =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.SCHEMATICS);
if (!parent.exists()) { if (!parent.exists()) {
if (!parent.mkdir()) { if (!parent.mkdir()) {
throw new RuntimeException("Could not create schematic parent directory"); throw new RuntimeException("Could not create schematic parent directory");

View File

@ -103,7 +103,7 @@ public abstract class UUIDHandlerImplementation {
/* /*
* lazy UUID conversion: * lazy UUID conversion:
* - Useful if the person misconfigured the database, or settings before * - Useful if the person misconfigured the database, or settings before
* PlotMe conversion * PlotMe conversion
*/ */
if (!Settings.UUID.OFFLINE && !this.unknown.isEmpty()) { if (!Settings.UUID.OFFLINE && !this.unknown.isEmpty()) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {

View File

@ -388,8 +388,10 @@ public class ExpireManager {
PlotAnalysis changed = plot.getComplexity(null); PlotAnalysis changed = plot.getComplexity(null);
int changes = changed == null ? 0 : changed.changes_sd; int changes = changed == null ? 0 : changed.changes_sd;
int modified = changed == null ? 0 : changed.changes; int modified = changed == null ? 0 : changed.changes;
PlotSquared.debug("$2[&5Expire&dManager$2] &cDeleted expired plot: " + plot + " User:" + plot.owner PlotSquared.debug(
+ " Delta:" + changes + "/" + modified + " Connected: " + StringMan.getString(plots)); "$2[&5Expire&dManager$2] &cDeleted expired plot: " + plot + " User:" + plot.owner
+ " Delta:" + changes + "/" + modified + " Connected: " + StringMan
.getString(plots));
PlotSquared.debug("$4 - Area: " + plot.getArea()); PlotSquared.debug("$4 - Area: " + plot.getArea());
if (plot.hasOwner()) { if (plot.hasOwner()) {
PlotSquared.debug("$4 - Owner: " + UUIDHandler.getName(plot.owner)); PlotSquared.debug("$4 - Owner: " + UUIDHandler.getName(plot.owner));

View File

@ -78,7 +78,8 @@ public class PlotAnalysis {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override public void run() { @Override public void run() {
Iterator<Plot> iterator = plots.iterator(); Iterator<Plot> iterator = plots.iterator();
PlotSquared.debug(" - $1Reducing " + plots.size() + " plots to those with sufficient data"); PlotSquared.debug(
" - $1Reducing " + plots.size() + " plots to those with sufficient data");
while (iterator.hasNext()) { while (iterator.hasNext()) {
Plot plot = iterator.next(); Plot plot = iterator.next();
if (plot.getSettings().ratings == null || plot.getSettings().getRatings() if (plot.getSettings().ratings == null || plot.getSettings().getRatings()
@ -168,15 +169,17 @@ public class PlotAnalysis {
} }
} }
PlotSquared.debug(" - $1Waiting on plot rating thread: " + mi.intValue() * 100 / plots.size() PlotSquared.debug(
+ "%"); " - $1Waiting on plot rating thread: " + mi.intValue() * 100 / plots.size()
+ "%");
try { try {
ratingAnalysis.join(); ratingAnalysis.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
PlotSquared.debug(" - $1Processing and grouping single plot analysis for bulk processing"); PlotSquared
.debug(" - $1Processing and grouping single plot analysis for bulk processing");
for (int i = 0; i < plots.size(); i++) { for (int i = 0; i < plots.size(); i++) {
Plot plot = plots.get(i); Plot plot = plots.get(i);
PlotSquared.debug(" | " + plot); PlotSquared.debug(" | " + plot);

Binary file not shown.

View File

@ -1,6 +1,7 @@
confirm: confirm:
failed_confirm: $2No tienes acciones pendientes por confirmar. failed_confirm: $2No tienes acciones pendientes por confirmar.
requires_confirm: '$2¿Estas seguro de realizar este comando?: $1%s$2?&-$2¡No hay vuelta atras! Si estas seguro escribe: $1/plot confirm' requires_confirm: '$2¿Estas seguro de realizar este comando?: $1%s$2?&-$2¡No hay vuelta atras! Si estas seguro escribe: $1/plot confirm'
expired_confirm: $2La confirmación ha expirado, por favor ejecute el comando otra vez!
move: move:
move_success: $4La parcela fue movida correctamente. move_success: $4La parcela fue movida correctamente.
copy_success: $4La parcela fue copiada correctamente. copy_success: $4La parcela fue copiada correctamente.
@ -16,27 +17,30 @@ web:
compass: compass:
compass_target: $4Parcela seleccionada con la brujula completada. compass_target: $4Parcela seleccionada con la brujula completada.
cluster: cluster:
cluster_available_args: '$1Los siguientes subcomandos estan disponibles: $4list$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4members$2, $4info$2, $4tp$2, $4sethome' cluster_available_args: '$1Los siguientes subcomandos estan disponibles: $4list$2,
$4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4members$2,
$4info$2, $4tp$2, $4sethome'
cluster_list_heading: $2Hay $1%s$2 agrupaciones en este mundo. cluster_list_heading: $2Hay $1%s$2 agrupaciones en este mundo.
cluster_list_element: $2 - $1%s&- cluster_list_element: $2 - $1%s&-
cluster_intersection: $2El area propuesta se solapa con $1%s$2 de la parcela existente. cluster_intersection: $2El area propuesta se solapa con $1%s$2 de la parcela existente.
cluster_added: $4Creacion de agrupaciones completado. cluster_added: $4Creacion de agrupaciones completado.
cluster_deleted: $4Borrado de agrupaciones completado. cluster_deleted: $4Borrado de agrupaciones completado.
cluster_resized: $4Reescalado de agrupaciones completado. cluster_resized: $4Reescalado de agrupaciones completado.
cluster_added_user: $4Añadido usuario a la agrupacion con exito. cluster_added_user: $4Añadido usuario a la agrupacion con exito.
cannot_kick_player: $2Tu no puedes expulsar a este jugador. cannot_kick_player: $2Tu no puedes expulsar a este jugador.
cluster_invited: '$1Has sido invitado a la siguiente agrupacion: $2%s' cluster_invited: '$1Has sido invitado a la siguiente agrupacion: $2%s'
cluster_removed: '$1Has sido eliminado de la agrupacion: $2%s' cluster_removed: '$1Has sido eliminado de la agrupacion: $2%s'
cluster_kicked_user: $4Usuario expulsado con exito. cluster_kicked_user: $4Usuario expulsado con exito.
invalid_cluster: '$1Nombre de agrupacion invalido: $2%s' invalid_cluster: '$1Nombre de agrupacion invalido: $2%s'
cluster_not_added: $2Este jugador no fue añadido a la agrupacion de parcelas. cluster_not_added: $2Este jugador no fue añadido a la agrupacion de parcelas.
cluster_cannot_leave: $1Debes eliminar o transferir el dueño antes de salir. cluster_cannot_leave: $1Debes eliminar o transferir el dueño antes de salir.
cluster_added_helper: $4Ayudante añadido a la agrupacion con exito. cluster_added_helper: $4Ayudante añadido a la agrupacion con exito.
cluster_removed_helper: $4Ayudante eliminado de la agrupacion con exito. cluster_removed_helper: $4Ayudante eliminado de la agrupacion con exito.
cluster_regenerated: $4Regeneracion de la agrupacion comenzada con exito. cluster_regenerated: $4Regeneracion de la agrupacion comenzada con exito.
cluster_teleporting: $4Teletransportando... cluster_teleporting: $4Teletransportando...
cluster_info: '$1Agrupacion actual: $2%id%&-$1Nombre: $2%name%&-$1Propietario: $2%owner%&-$1Tamaño: $2%size%&-$1Derechos: $2%rights%' cluster_info: '$1Agrupacion actual: $2%id%&-$1Nombre: $2%name%&-$1Propietario: $2%owner%&-$1Tamaño:
cluster_current_plotid: '$1Parcela actual: $2%s' $2%size%&-$1Derechos: $2%rights%'
cluster_outside: '$2El área propuesta está fuera del área de la parcela: %s0'
border: border:
border: $2Estas en las afueras del borde del mapa. border: $2Estas en las afueras del borde del mapa.
unclaim: unclaim:
@ -63,7 +67,7 @@ records:
notify_leave: $2%player $2abandona tu parcela ($1%plot$2) notify_leave: $2%player $2abandona tu parcela ($1%plot$2)
swap: swap:
swap_overlap: $2Las áreas propuestas no pueden superponerse. swap_overlap: $2Las áreas propuestas no pueden superponerse.
swap_dimensions: $2El area propuesta debe tener dimensiones comparables. swap_dimensions: $2El area propuesta debe tener dimensiones comparables.
swap_syntax: $2/plot swap <plot id> swap_syntax: $2/plot swap <plot id>
swap_success: $4Intercambio de parcelas completado swap_success: $4Intercambio de parcelas completado
started_swap: $2 Intercambiando las tareas de las parcelas. Serás notificado cuando el proceso haya terminado. started_swap: $2 Intercambiando las tareas de las parcelas. Serás notificado cuando el proceso haya terminado.
@ -77,7 +81,7 @@ comment:
no_perm_inbox_modify: $2No tienes permisos para modificar esta bandeja de entrada. no_perm_inbox_modify: $2No tienes permisos para modificar esta bandeja de entrada.
no_plot_inbox: $2Debes permanecer en la parcela para poder escribir el comentario. no_plot_inbox: $2Debes permanecer en la parcela para poder escribir el comentario.
comment_removed: $4Comentario eliminado satisfactoriamente/s:n$2 - '$3%s$2' comment_removed: $4Comentario eliminado satisfactoriamente/s:n$2 - '$3%s$2'
comment_added: $4Te han dejado un comentario. comment_added: $4Te han dejado un comentario.
comment_header: $2&m---------&r $1Comentarios $2&m---------&r comment_header: $2&m---------&r $1Comentarios $2&m---------&r
inbox_empty: $2No hay comentarios. inbox_empty: $2No hay comentarios.
console: console:
@ -100,7 +104,7 @@ blocked command:
command_blocked: $2El comando no esta permitido en esta parcela. command_blocked: $2El comando no esta permitido en esta parcela.
done: done:
done_already_done: $2Esta parcela esta finalizada. done_already_done: $2Esta parcela esta finalizada.
done_not_done: $2Esta parcela no esta finalizada. done_not_done: $2Esta parcela no esta finalizada.
done_insufficient_complexity: $2Esta parcela es muy simple. Porfavor añade mas detalles antes de usar este comando. done_insufficient_complexity: $2Esta parcela es muy simple. Porfavor añade mas detalles antes de usar este comando.
done_success: $1Parcela finalizada con exito. done_success: $1Parcela finalizada con exito.
done_removed: $1Ya puedes continuar construyendo en esta parcela. done_removed: $1Ya puedes continuar construyendo en esta parcela.
@ -111,6 +115,7 @@ ratings:
rating_not_your_own: $2No puedes valorar tu propia parcela. rating_not_your_own: $2No puedes valorar tu propia parcela.
rating_not_done: $2Solo puedes valorar parcelas terminadas. rating_not_done: $2Solo puedes valorar parcelas terminadas.
rating_not_owned: $2No puedes valorar una parcela que no pertenece a nadie. rating_not_owned: $2No puedes valorar una parcela que no pertenece a nadie.
ratings_purged: $2Calificaciones purgadas para esta parcela
tutorial: tutorial:
rate_this: $2¡Valora esta parcela! rate_this: $2¡Valora esta parcela!
comment_this: '$2Deja tu opinion de esta parcela: %s' comment_this: '$2Deja tu opinion de esta parcela: %s'
@ -121,8 +126,9 @@ economy:
cannot_buy_own: $2No puedes comprar tu propia parcela. cannot_buy_own: $2No puedes comprar tu propia parcela.
plot_sold: $4Tu parcela; $1%s0$4, se ha vendido por $1%s1$4 para $1$%s2 plot_sold: $4Tu parcela; $1%s0$4, se ha vendido por $1%s1$4 para $1$%s2
cannot_afford_merge: $2Tu no puedes permitirte combinar las parcelas. Cuesta $1%s cannot_afford_merge: $2Tu no puedes permitirte combinar las parcelas. Cuesta $1%s
added_balance: $1%s $2 fue añadido a tu fondo de dinero. added_balance: $1%s $2 fue añadido a tu fondo de dinero.
removed_balance: $1%s $2 fue removido de tu fondo de dinero. removed_balance: $1%s $2 fue removido de tu fondo de dinero.
removed_granted_plot: $2Usaste %s concesiones de trama, te quedan 5 $1%s
setup: setup:
setup_init: '$1Uso: $2/plot setup <cantidad>' setup_init: '$1Uso: $2/plot setup <cantidad>'
setup_step: '$3[$1Step %s0$3] $1%s1 $2- $1Espectando: $2%s2 $1Default: $2%s3' setup_step: '$3[$1Step %s0$3] $1%s1 $2- $1Espectando: $2%s2 $1Default: $2%s3'
@ -130,15 +136,21 @@ setup:
setup_valid_arg: $2Valor $1%s0 $2ajustado a %s1 setup_valid_arg: $2Valor $1%s0 $2ajustado a %s1
setup_finished: $4Deberias haber sido teletransportado al mundo creado, sino tendras que generarlo manualmente usando el bukkit.yml setup_finished: $4Deberias haber sido teletransportado al mundo creado, sino tendras que generarlo manualmente usando el bukkit.yml
setup_world_taken: $2%s este mundo ya esta registrado. setup_world_taken: $2%s este mundo ya esta registrado.
setup_missing_world: $2 Necesitas especificar el nombre del mundo ($1/plot setup &l<world>$1 <generator>$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup cancel setup_missing_world: $2 Necesitas especificar el nombre del mundo ($1/plot setup
setup_missing_generator: $2Tienes que especificar un generador ($1/plot setup <world> &l<generator>&r$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup cancel &l<world>$1 <generator>$2)&-$1Comandos adicionales:&-$2 - $1/plot setup <value>&-$2
- $1/plot setup back&-$2 - $1/plot setup cancel
setup_missing_generator: $2Tienes que especificar un generador ($1/plot setup <world>
&l<generator>&r$2)&-$1Comandos adicionales:&-$2 - $1/plot setup <value>&-$2 - $1/plot
setup back&-$2 - $1/plot setup cancel
setup_invalid_generator: '$2Generador inválido. Opciones posibles: %s' setup_invalid_generator: '$2Generador inválido. Opciones posibles: %s'
schematics: schematics:
schematic_missing_arg: '$2Necesitas especificar un argumento. Valores posibles: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall' schematic_missing_arg: '$2Necesitas especificar un argumento. Valores posibles:
$1test <name>$2 , $1save$2 , $1paste $2, $1exportall'
schematic_invalid: '$2Este no es un schematic valido. Razon: $2%s' schematic_invalid: '$2Este no es un schematic valido. Razon: $2%s'
schematic_valid: $2Este es un schematic valido. schematic_valid: $2Este es un schematic valido.
schematic_paste_failed: $2Fallo al pegar el schematic. schematic_paste_failed: $2Fallo al pegar el schematic.
schematic_paste_success: $4El schematic ha sido copiado correctamente. schematic_paste_success: $4El schematic ha sido copiado correctamente.
schematic_too_large: $2¡La trama es demasiado grande para esta acción!
titles: titles:
title_entered_plot: '$1Parcela: %world%;%x%;%z%' title_entered_plot: '$1Parcela: %world%;%x%;%z%'
title_entered_plot_sub: $4Propiedad de %s title_entered_plot_sub: $4Propiedad de %s
@ -148,12 +160,9 @@ core:
task_start: Comenzando la tarea... task_start: Comenzando la tarea...
prefix: $3[$1P2$3] $2 prefix: $3[$1P2$3] $2
enabled: $1PlotSquared esta activado. enabled: $1PlotSquared esta activado.
example_message: $2Esto es un ejemplo de mensaje &k!!!
reload: reload:
reloaded_configs: $1Las traducciones y opciones del mundo han sido cargados. reloaded_configs: $1Las traducciones y opciones del mundo han sido cargados.
reload_failed: $2Fallo al cargar las configuraciones de los archivos. reload_failed: $2Fallo al cargar las configuraciones de los archivos.
bar api:
bossbar_clearing: '$2Limpiando parcela: $1%id%'
desc: desc:
desc_set: $2Descripcion de la parcela. desc_set: $2Descripcion de la parcela.
desc_unset: $2Descripcion de la parcela no especificada. desc_unset: $2Descripcion de la parcela no especificada.
@ -163,6 +172,7 @@ alias:
missing_alias: $2Necesitas especificar un alias. missing_alias: $2Necesitas especificar un alias.
alias_too_long: $2El alias debe ser < de 50 caracteres alias_too_long: $2El alias debe ser < de 50 caracteres
alias_is_taken: $2Ese alias ya ha sido utilizado. alias_is_taken: $2Ese alias ya ha sido utilizado.
alias_removed: $2Parcela alias eliminado
position: position:
missing_position: '$2Necesitas especificar una posicion. Valores posibles: $1none' missing_position: '$2Necesitas especificar una posicion. Valores posibles: $1none'
position_set: $1Hogar establecido en tu posicion actual. position_set: $1Hogar establecido en tu posicion actual.
@ -181,6 +191,7 @@ permission:
cant_claim_more_plots_num: $2No puedes claimear mas de $1%s $2parcelas a la vez. cant_claim_more_plots_num: $2No puedes claimear mas de $1%s $2parcelas a la vez.
you_be_denied: $2No tienes permitido entrar en esta parcela. you_be_denied: $2No tienes permitido entrar en esta parcela.
merge_request_confirm: Peticion de agrupamiento de %s merge_request_confirm: Peticion de agrupamiento de %s
cant_claim_more_clusters: $2No puedes reclamar más grupos.
merge: merge:
merge_not_valid: $2La peticion de agrupacion ya no es valida. merge_not_valid: $2La peticion de agrupacion ya no es valida.
merge_accepted: $2La peticion de agrupacion ha sido aceptada. merge_accepted: $2La peticion de agrupacion ha sido aceptada.
@ -191,14 +202,6 @@ merge:
unlink_required: $2Se requiere una desconexion para hacer esto. unlink_required: $2Se requiere una desconexion para hacer esto.
unlink_impossible: $2Solo puedes desconectar una mega-parcela. unlink_impossible: $2Solo puedes desconectar una mega-parcela.
unlink_success: $2Se han desconectado las parcelas. unlink_success: $2Se han desconectado las parcelas.
commands:
not_valid_subcommand: $2No es un subcomando valido.
did_you_mean: '$2Quisiste decir: $1%s'
name_little: $2%s0 el nombre es muy corto, $1%s1$2<$1%s3
no_commands: $2No tienes permitido utilizar cualquier subcomando.
subcommand_set_options_header: '$2Valores posibles: '
command_syntax: '$1Usos: $2%s'
flag_tutorial_usage: '$1Haz que un administrador coloque la bandera: $2%s'
errors: errors:
invalid_player_wait: '$2Jugador no encontrado: $1%s$2, buscando. Prueba mas tarde.' invalid_player_wait: '$2Jugador no encontrado: $1%s$2, buscando. Prueba mas tarde.'
invalid_player: '$2Jugador no encontrado: $1%s$2.' invalid_player: '$2Jugador no encontrado: $1%s$2.'
@ -212,15 +215,15 @@ errors:
not_valid_world: $2Esto no es un mundo valido. (caso sensitivo) not_valid_world: $2Esto no es un mundo valido. (caso sensitivo)
not_valid_plot_world: $2Esta no es una parcela valida. (caso sensitivo) not_valid_plot_world: $2Esta no es una parcela valida. (caso sensitivo)
no_plots: $2No tienes ninguna parcela. no_plots: $2No tienes ninguna parcela.
not_using_plotme: $2Este server utiliza el $1PlotSquared $2plot sistema de mantenimiento. Utilice el $1/ps $2o $1/p2 $2o $1/plot $2en vez.
wait_for_timer: $2El temporizador del selector de bloque esta ligado a ti o a la parcela actual. Por favor espere a que termine. wait_for_timer: $2El temporizador del selector de bloque esta ligado a ti o a la parcela actual. Por favor espere a que termine.
invalid_command_flag: '$2Indicador de comando no válido: %s0'
error: '$2Ocurrió un error: %s'
not_loaded: $2No se pudo cargar la trama
paste: paste:
debug_report_created: '$1Se ha enviado una depuracion a: $1%url%' debug_report_created: '$1Se ha enviado una depuracion a: $1%url%'
purge: purge:
purge_syntax: Usa /plot purge <x;z|player|unowned|unknown|all> <world>
purge_success: $4Se ha limpiado %s parcelas. purge_success: $4Se ha limpiado %s parcelas.
trim: trim:
trim_syntax: Usa /plot trim <all|x;y> <world>
trim_in_progress: La tarea de recorte esta en proceso! trim_in_progress: La tarea de recorte esta en proceso!
not_valid_hybrid_plot_world: Es necesario el dueño de las parcelas para realizar esta accion. not_valid_hybrid_plot_world: Es necesario el dueño de las parcelas para realizar esta accion.
block list: block list:
@ -253,6 +256,7 @@ invalid:
no_such_plot: $2No existe dicha parcela. no_such_plot: $2No existe dicha parcela.
player_has_not_been_on: $2Este usuario no ha estado en el mundo de parcelas. player_has_not_been_on: $2Este usuario no ha estado en el mundo de parcelas.
found_no_plots: $2No se ha encontrado parcelas con esta informacion. found_no_plots: $2No se ha encontrado parcelas con esta informacion.
found_no_plots_for_player: '$2No se encontraron parcelas para jugador: %s'
camera: camera:
camera_started: $2Has entrado en modo camara para la parcela $1%s camera_started: $2Has entrado en modo camara para la parcela $1%s
camera_stopped: $2Ya no estas en modo camara. camera_stopped: $2Ya no estas en modo camara.
@ -263,13 +267,16 @@ need:
need_plot_world: $2Necesitas especificar un mundo de parcelas. need_plot_world: $2Necesitas especificar un mundo de parcelas.
need_user: $2Necesitas especificar un usuario. need_user: $2Necesitas especificar un usuario.
info: info:
none: Ninguno. none: Ninguno
unknown: Desconocido. unknown: Desconocido
everyone: Todos. everyone: Todos
plot_unowned: $2La parcela actual tiene que tener un propietario para ejecutar esa accion. plot_unowned: $2La parcela actual tiene que tener un propietario para ejecutar esa accion.
plot_info_unclaimed: $2Parcela $1%s$2 aun no esta claimeada. plot_info_unclaimed: $2Parcela $1%s$2 aun no esta claimeada.
plot_info_header: $3&m---------&r $1INFO $3&m--------- plot_info_header: $3&m---------&r $1INFO $3&m---------
plot_info: '$1ID: $2%id%$1&-$1Alias: $2%alias%$1&-$1Propietario: $2%owner%$1&-$1Bioma: $2%biome%$1&-$1Puede construir: $2%build%$1&-$1Clasificacion: $2%rating%&-$1Confianza: $2%trusted%$1&-$1Miembros: $2%members%$1&-$1Denegados: $2%denied%$1&-$1Flags: $2%flags%' plot_info: '$1ID: $2%id%$1&-$1Alias: $2%alias%$1&-$1Propietario: $2%owner%$1&-$1Bioma:
$2%biome%$1&-$1Puede construir: $2%build%$1&-$1Clasificacion: $2%rating%&-$1Confianza:
$2%trusted%$1&-$1Miembros: $2%members%$1&-$1Denegados: $2%denied%$1&-$1Flags:
$2%flags%'
plot_info_footer: $3&m---------&r $1INFO $3&m--------- plot_info_footer: $3&m---------&r $1INFO $3&m---------
plot_info_trusted: $1Confianza:$2 %trusted% plot_info_trusted: $1Confianza:$2 %trusted%
plot_info_members: $1Miembros:$2 %members% plot_info_members: $1Miembros:$2 %members%
@ -283,6 +290,10 @@ info:
plot_info_size: $1Tamaño:$2 %size% plot_info_size: $1Tamaño:$2 %size%
plot_user_list: ' $1%user%$2,' plot_user_list: ' $1%user%$2,'
info_syntax_console: $2/plot info X;Y info_syntax_console: $2/plot info X;Y
now: Ahora
never: Nunca
plot_info_seen: $1Seen:$2 %seen%
plot_flag_list: $1%s0:%s1$2
working: working:
generating_component: $1Empezando a generar componentes desde tus opciones. generating_component: $1Empezando a generar componentes desde tus opciones.
clearing_plot: $2Limpiando parcela async. clearing_plot: $2Limpiando parcela async.
@ -290,6 +301,7 @@ working:
plot_not_claimed: $2Parcela no reclamada. plot_not_claimed: $2Parcela no reclamada.
plot_is_claimed: $2Esta parcela ya esta reclamada. plot_is_claimed: $2Esta parcela ya esta reclamada.
claimed: $4Has reclamado con exito esta parcela. claimed: $4Has reclamado con exito esta parcela.
deleting_done: $4Eliminar completado! Tomó %sms.
list: list:
comment_list_header_paged: $2(Page $1%cur$2/$1%max$2) $1Lista de %amount% comentarios. comment_list_header_paged: $2(Page $1%cur$2/$1%max$2) $1Lista de %amount% comentarios.
clickable: ' (interactive)' clickable: ' (interactive)'
@ -298,6 +310,7 @@ list:
plot_list_item: $2>> $1%id$2:$1%world $2- $1%owner. plot_list_item: $2>> $1%id$2:$1%world $2- $1%owner.
plot_list_item_ordered: $2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner. plot_list_item_ordered: $2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner.
plot_list_footer: $2>> $1%word% un total $2%num% $1claimeado %plot%. plot_list_footer: $2>> $1%word% un total $2%num% $1claimeado %plot%.
area_list_header_paged: $2(Página $1%cur$2/$1%max$2) $1lista de %amount% areas
left: left:
left_plot: $2Has abandonado una parcela. left_plot: $2Has abandonado una parcela.
chat: chat:
@ -305,6 +318,7 @@ chat:
plot_chat_forced: $2Este mundo obliga a usar el chat de parcela. plot_chat_forced: $2Este mundo obliga a usar el chat de parcela.
plot_chat_on: $4Chat de parcela activado. plot_chat_on: $4Chat de parcela activado.
plot_chat_off: $4Chat de parcela desactivado. plot_chat_off: $4Chat de parcela desactivado.
plot_chat_spy_format: '$2[$1Plot Spy$2][$1%plot_id%$2] $1%sender%$2: $1%msg%'
deny: deny:
denied_removed: $4Este usuario ya no esta denegado en esta parcela. denied_removed: $4Este usuario ya no esta denegado en esta parcela.
denied_added: $4Has denegado este usuario de tu parcela. denied_added: $4Has denegado este usuario de tu parcela.
@ -325,6 +339,7 @@ flag:
flag_not_added: $2La flag no se ha podido añadir. flag_not_added: $2La flag no se ha podido añadir.
flag_removed: $4Flag removida con exito. flag_removed: $4Flag removida con exito.
flag_added: $4Flag añadida con exito. flag_added: $4Flag añadida con exito.
not_valid_flag_suggested: '$2Eso no es una bandera válida. Querías decir: $1%s'
trusted: trusted:
trusted_added: $4Has añadido un usuario de confianza en esta parcela. trusted_added: $4Has añadido un usuario de confianza en esta parcela.
trusted_removed: $4Has removido un usuario de confianza en esta parcela. trusted_removed: $4Has removido un usuario de confianza en esta parcela.
@ -341,17 +356,39 @@ member:
owner: owner:
set_owner: $4Has añadido con exito el dueño de la parcela. set_owner: $4Has añadido con exito el dueño de la parcela.
now_owner: $4Ahora eres dueño de esta parcela %s now_owner: $4Ahora eres dueño de esta parcela %s
set_owner_cancelled: $2La setowner la acción fue cancelada
signs: signs:
owner_sign_line_1: '$1ID: $1%id%' owner_sign_line_1: '$1ID: $1%id%'
owner_sign_line_2: '$1Propietario:' owner_sign_line_2: '$1Propietario:'
owner_sign_line_3: $2%plr% owner_sign_line_3: $2%plr%
owner_sign_line_4: $3Claimeado owner_sign_line_4: $3Claimeado
help: help:
help_header: "$3&m---------&r $1Plot\xb2 Ayuda $3&m---------" help_header: $3&m---------&r $1Plot² Ayuda $3&m---------
help_page_header: '$1Categoria: $2%category%$2,$1 Página: $2%current%$3/$2%max%$2' help_page_header: '$1Categoria: $2%category%$2,$1 Página: $2%current%$3/$2%max%$2'
help_footer: "$3&m---------&r $1Plot\xb2 Ayuda $3&m---------" help_footer: $3&m---------&r $1Plot² Ayuda $3&m---------
help_info_item: $1/plot help %category% $3- $2%category_desc% help_info_item: $1/plot help %category% $3- $2%category_desc%
help_item: $1%usage% [%alias%]&- $3- $2%desc%&- help_item: $1%usage% [%alias%]&- $3- $2%desc%&-
direction: '$1Direccion actual: %dir%' direction: '$1Direccion actual: %dir%'
'-': '-':
custom_string: '-' custom_string: '-'
commandconfig:
not_valid_subcommand: $2No es un subcomando valido.
did_you_mean: '$2Quisiste decir: $1%s'
name_little: $2%s0 el nombre es muy corto, $1%s1$2<$1%s3
no_commands: $2No tienes permitido utilizar cualquier subcomando.
subcommand_set_options_header: '$2Valores posibles: '
command_syntax: '$1Usos: $2%s'
flag_tutorial_usage: '$1Haz que un administrador coloque la bandera: $2%s'
bar api: {}
set:
set_attribute: $4Establecer con éxito %s0 ajustado a %s1
cap:
entity_cap: $2No tienes permitido engendrar más mobs
near:
plot_near: '$1Jugadores: %s0'
kick:
you_got_kicked: $4Te patearon!
grants:
granted_plots: '$1Resultado: $2%s $1grants left'
granted_plot: $1You granted %s0 plot to $2%s1
granted_plot_failed: '$1Subvención fallida: $2%s'

View File

@ -19,9 +19,9 @@ web:
compass: compass:
compass_target: $4Lotto mirato con successo con la bussola compass_target: $4Lotto mirato con successo con la bussola
cluster: cluster:
cluster_available_args: '$1Sono disponibili i seguenti sotto comandi: $4list$2, $4create$2, cluster_available_args: '$1Sono disponibili i seguenti sotto comandi: $4list$2,
$4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4members$2, $4info$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4members$2,
$4tp$2, $4sethome' $4info$2, $4tp$2, $4sethome'
cluster_list_heading: $2Ci sono $1%s$2 cluster in questo mondo cluster_list_heading: $2Ci sono $1%s$2 cluster in questo mondo
cluster_list_element: $2 - $1%s&- cluster_list_element: $2 - $1%s&-
cluster_intersection: '$2L''area proposta si sovrappone a: %s0' cluster_intersection: '$2L''area proposta si sovrappone a: %s0'
@ -50,12 +50,9 @@ unclaim:
worldedit masks: worldedit masks:
worldedit_delayed: $2Attendi durante l'elaborazione della tua azione WorldEdit... worldedit_delayed: $2Attendi durante l'elaborazione della tua azione WorldEdit...
worldedit_run: '$2Scuse per il ritardo. Ora in esecuzione: %s' worldedit_run: '$2Scuse per il ritardo. Ora in esecuzione: %s'
require_selection_in_mask: $2%s della tua selezione non è all'interno del tuo lotto. require_selection_in_mask: $2%s della tua selezione non è all'interno del tuo lotto. Puoi apportare modifiche solo dentro il tuo lotto.
Puoi apportare modifiche solo dentro il tuo lotto. worldedit_volume: $2Non puoi selezionare un volume di %current%. Il volume massimo che puoi modificare è %max%.
worldedit_volume: $2Non puoi selezionare un volume di %current%. Il volume massimo worldedit_iterations: $2Non puoi iterare %current% volte. Il massimo numero di iterazioni consentite è %max%.
che puoi modificare è %max%.
worldedit_iterations: $2Non puoi iterare %current% volte. Il massimo numero di
iterazioni consentite è %max%.
worldedit_unsafe: $2L'accesso a quel comando è stato bloccato worldedit_unsafe: $2L'accesso a quel comando è stato bloccato
worldedit_bypass: $2&oPer bypassare le tue restrizioni usa $4/plot wea worldedit_bypass: $2&oPer bypassare le tue restrizioni usa $4/plot wea
worldedit_bypassed: $2Attualmente bypassando le restrizioni di WorldEdit. worldedit_bypassed: $2Attualmente bypassando le restrizioni di WorldEdit.
@ -139,15 +136,15 @@ setup:
setup_invalid_arg: '$2%s0 non è un argomento valido per il passaggio %s1. Per cancellare il setup usa: $1/plot setup cancel' setup_invalid_arg: '$2%s0 non è un argomento valido per il passaggio %s1. Per cancellare il setup usa: $1/plot setup cancel'
setup_valid_arg: $2Valore $1%s0 $2impostato a %s1 setup_valid_arg: $2Valore $1%s0 $2impostato a %s1
setup_finished: $4Dovresti essere stato teletrasportato nel mondo creato. Altrimenti setup_finished: $4Dovresti essere stato teletrasportato nel mondo creato. Altrimenti
sarà necessario impostare manualmente il generatore usando il file bukkit.yml o il tuo plugin sarà necessario impostare manualmente il generatore usando il file bukkit.yml
di gestione dei mondi scelto. o il tuo plugin di gestione dei mondi scelto.
setup_world_taken: $2%s è già un mondo lotti setup_world_taken: $2%s è già un mondo lotti
setup_missing_world: $2Devi specificare un nome per il mondo ($1/plot setup &l<mondo>$1 setup_missing_world: $2Devi specificare un nome per il mondo ($1/plot setup &l<mondo>$1
<generatore>$2)&-$1Comandi aggiuntivi:&-$2 - $1/plot setup <valore>&-$2 - $1/plot <generatore>$2)&-$1Comandi aggiuntivi:&-$2 - $1/plot setup <valore>&-$2 - $1/plot
setup back&-$2 - $1/plot setup cancel setup back&-$2 - $1/plot setup cancel
setup_missing_generator: $2Devi specificare un generatore ($1/plot setup <mondo> setup_missing_generator: $2Devi specificare un generatore ($1/plot setup <mondo>
&l<generatore>&r$2)&-$1Comandi aggiuntivi:&-$2 - $1/plot setup <valore>&-$2 - $1/plot &l<generatore>&r$2)&-$1Comandi aggiuntivi:&-$2 - $1/plot setup <valore>&-$2 -
setup back&-$2 - $1/plot setup cancel $1/plot setup back&-$2 - $1/plot setup cancel
setup_invalid_generator: '$2Generatore non valido. Opzioni possibili: %s' setup_invalid_generator: '$2Generatore non valido. Opzioni possibili: %s'
schematics: schematics:
schematic_too_large: $2Il lotto è troppo grande per questa azione! schematic_too_large: $2Il lotto è troppo grande per questa azione!
@ -271,7 +268,7 @@ invalid:
no_such_plot: $2Quel lotto non esiste no_such_plot: $2Quel lotto non esiste
player_has_not_been_on: $2Quel giocatore non è mai stato nel mondo lotti player_has_not_been_on: $2Quel giocatore non è mai stato nel mondo lotti
found_no_plots: $2Non sono stati trovati lotti con la tua ricerca found_no_plots: $2Non sono stati trovati lotti con la tua ricerca
found_no_plots_for_player: $2Nessun lotto trovato per il giocatore: %s found_no_plots_for_player: '$2Nessun lotto trovato per il giocatore: %s'
camera: camera:
camera_started: $2Hai inserito la modalità telecamera per il lotto $1%s camera_started: $2Hai inserito la modalità telecamera per il lotto $1%s
camera_stopped: $2Non sei più in modalità telecamera camera_stopped: $2Non sei più in modalità telecamera
@ -293,8 +290,9 @@ info:
plot_info_unclaimed: $2Il lotto $1%s$2 non è ancora claimato plot_info_unclaimed: $2Il lotto $1%s$2 non è ancora claimato
plot_info_header: $3&m---------&r $1INFO $3&m--------- plot_info_header: $3&m---------&r $1INFO $3&m---------
plot_info: '$1ID: $2%id%$1&-$1Alias: $2%alias%$1&-$1Proprietario: $2%owner%$1&-$1Bioma: plot_info: '$1ID: $2%id%$1&-$1Alias: $2%alias%$1&-$1Proprietario: $2%owner%$1&-$1Bioma:
$2%biome%$1&-$1Puoi costruire: $2%build%$1&-$1Valutazione: $2%rating%&-$1Visto: $2%seen%&-$1Membri fidati: $2%biome%$1&-$1Puoi costruire: $2%build%$1&-$1Valutazione: $2%rating%&-$1Visto:
$2%trusted%$1&-$1Membri: $2%members%$1&-$1Bloccati: $2%denied%$1&-$1Flag: $2%flags%' $2%seen%&-$1Membri fidati: $2%trusted%$1&-$1Membri: $2%members%$1&-$1Bloccati:
$2%denied%$1&-$1Flag: $2%flags%'
plot_info_footer: $3&m---------&r $1INFO $3&m--------- plot_info_footer: $3&m---------&r $1INFO $3&m---------
plot_info_trusted: $1Membri fidati:$2 %trusted% plot_info_trusted: $1Membri fidati:$2 %trusted%
plot_info_members: $1Membri:$2 %members% plot_info_members: $1Membri:$2 %members%
@ -365,8 +363,8 @@ trusted:
plot_removed_user: $1Il lotto %s in cui eri aggiunto è stato eliminato a causa dell'inattività del proprietario plot_removed_user: $1Il lotto %s in cui eri aggiunto è stato eliminato a causa dell'inattività del proprietario
member: member:
removed_players: $2Rimossi %s giocatori dal lotto. removed_players: $2Rimossi %s giocatori dal lotto.
already_owner: '$2L''utente %s0 è già il proprietario di questo lotto.' already_owner: $2L'utente %s0 è già il proprietario di questo lotto.
already_added: '$2L''utente %s0 è già aggiunto a quella categoria.' already_added: $2L'utente %s0 è già aggiunto a quella categoria.
member_added: $4Quell'utente ora può costruire quando il proprietario è online member_added: $4Quell'utente ora può costruire quando il proprietario è online
member_removed: $1Hai rimosso con successo un utente dal lotto member_removed: $1Hai rimosso con successo un utente dal lotto
member_was_not_added: $2Quel giocatore non è aggiunto a questo lotto member_was_not_added: $2Quel giocatore non è aggiunto a questo lotto
@ -374,6 +372,7 @@ member:
owner: owner:
set_owner: $4Hai impostato correttamente il proprietario del lotto set_owner: $4Hai impostato correttamente il proprietario del lotto
now_owner: $4Sei ora proprietario del lotto %s now_owner: $4Sei ora proprietario del lotto %s
set_owner_cancelled: $2L'azione del proprietario è stata annullata
signs: signs:
owner_sign_line_1: '$1ID: $1%id%' owner_sign_line_1: '$1ID: $1%id%'
owner_sign_line_2: '$1Proprietario:' owner_sign_line_2: '$1Proprietario:'

View File

@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# Translate by Protocodyne Korean Translate team # Translate by Protocodyne Korean Translate team
# First Author <bmr02039@protocodyne.com>, 2015. # First Author <bmr02039@protocodyne.com>, 2015.
confirm: confirm:
failed_confirm: $2이 작업이 완료되기 위한 행동이 당신에게 존재하지 않습니다! failed_confirm: $2이 작업이 완료되기 위한 행동이 당신에게 존재하지 않습니다!
requires_confirm: '$2정말로 실행되길 원하나요: $1%s$2?&-$2이 작업은 되돌릴 수 requires_confirm: '$2정말로 실행되길 원하나요: $1%s$2?&-$2이 작업은 되돌릴 수 없습니다! 확실하다면 다음 명령어를 입력하세요:
없습니다! 확실하다면 다음 명령어를 입력하세요: $1/plot confirm' $1/plot confirm'
expired_confirm: $2확인이 만료되었습니다. 명령을 다시 실행하십시오.!
move: move:
move_success: $4성공적으로 땅이 옮겨졌습니다. move_success: $4성공적으로 땅이 옮겨졌습니다.
copy_success: $4성공적으로 땅이 복사되었습니다. copy_success: $4성공적으로 땅이 복사되었습니다.
@ -20,14 +20,13 @@ web:
load_list: '$2schematic로드를 원한다면, 다음명령어를 사용하세요 $1/plot load #' load_list: '$2schematic로드를 원한다면, 다음명령어를 사용하세요 $1/plot load #'
save_success: $1성공적으로 저장되었습니다! save_success: $1성공적으로 저장되었습니다!
compass: compass:
compass_target: $4Successfully targeted plot with compass compass_target: $4나침반과 함께 음모를 성공적으로 지정했습니다.
cluster: cluster:
cluster_available_args: '$1다음 하위명령어가 사용 가능합니다.: $4list$2, $4create$2, cluster_available_args: '$1다음 하위명령어가 사용 가능합니다.: $4list$2, $4create$2, $4delete$2,
$4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4members$2, $4info$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4members$2, $4info$2, $4tp$2, $4sethome'
$4tp$2, $4sethome'
cluster_list_heading: $2이 월드에 $1%s$2 cluster가 있습니다 cluster_list_heading: $2이 월드에 $1%s$2 cluster가 있습니다
cluster_list_element: $2 - $1%s&- cluster_list_element: $2 - $1%s&-
cluster_intersection: $2The proposed area overlaps with $1%s$2 existing cluster/s cluster_intersection: $2제안 된 영역이 겹칩니다 와 $1%s$2 기존의 cluster
cluster_added: $4cluster가 성공적으로 생성되었습니다. cluster_added: $4cluster가 성공적으로 생성되었습니다.
cluster_deleted: $4cluster가 성공적으로 삭제되었습니다. cluster_deleted: $4cluster가 성공적으로 삭제되었습니다.
cluster_resized: $4cluster가 성공적으로 재조정 되었습니다. cluster_resized: $4cluster가 성공적으로 재조정 되었습니다.
@ -43,9 +42,9 @@ cluster:
cluster_removed_helper: $4helper가 성공적으로 cluster에서 제거되었습니다 cluster_removed_helper: $4helper가 성공적으로 cluster에서 제거되었습니다
cluster_regenerated: $4성공적으로 cluster가 재생성 되었습니다 cluster_regenerated: $4성공적으로 cluster가 재생성 되었습니다
cluster_teleporting: $4이동중... cluster_teleporting: $4이동중...
cluster_info: '$1현재 cluster: $2%id%&-$1이름: $2%name%&-$1소유자: $2%owner%&-$1크기: cluster_info: '$1현재 cluster: $2%id%&-$1이름: $2%name%&-$1소유자: $2%owner%&-$1크기: $2%size%&-$1Rights:
$2%size%&-$1Rights: $2%rights%' $2%rights%'
cluster_current_plotid: '$1현재 땅: $2%s' cluster_outside: '$2제안 된 영역이 플롯 영역 밖에 있습니다: %s0'
border: border:
border: $2당신은 현재 지도의 경계 밖에 있습니다 border: $2당신은 현재 지도의 경계 밖에 있습니다
unclaim: unclaim:
@ -54,7 +53,8 @@ unclaim:
worldedit masks: worldedit masks:
worldedit_delayed: $2당신의 WorldEdit 행동을 처리중이니 기다려주시기 바랍니다... worldedit_delayed: $2당신의 WorldEdit 행동을 처리중이니 기다려주시기 바랍니다...
worldedit_run: '$2처리가 지연되어 죄송합니다. 해당 명령어를 실행합니다: %s' worldedit_run: '$2처리가 지연되어 죄송합니다. 해당 명령어를 실행합니다: %s'
require_selection_in_mask: $2%s of your selection is not within your plot mask. You can only make edits within your plot. require_selection_in_mask: $2%s 선택한 마스크가 플롯 마스크 안에 있지 않습니다..
플롯 내에서만 편집 할 수 있습니다..
worldedit_volume: $2당신은 a volume of %current%를 선택 할 수 없습니다. 당신이 수정할 수 있는 최대부피는 %max% 입니다. worldedit_volume: $2당신은 a volume of %current%를 선택 할 수 없습니다. 당신이 수정할 수 있는 최대부피는 %max% 입니다.
worldedit_iterations: $2당신은 %current%번 반복 적용시킬 수 없습니다. 당신이 수정가능한 최대 부피는 %max% 입니다. worldedit_iterations: $2당신은 %current%번 반복 적용시킬 수 없습니다. 당신이 수정가능한 최대 부피는 %max% 입니다.
worldedit_unsafe: $2해당 명령어는 실행 될 수 없습니다. worldedit_unsafe: $2해당 명령어는 실행 될 수 없습니다.
@ -84,10 +84,10 @@ comment:
invalid_inbox: '$2올바르지 않은 메일함 입니다..&-$1Accepted values: %s' invalid_inbox: '$2올바르지 않은 메일함 입니다..&-$1Accepted values: %s'
no_perm_inbox: $2당신은 해당 메일함에 권한이 없습니다 no_perm_inbox: $2당신은 해당 메일함에 권한이 없습니다
no_perm_inbox_modify: $2당신은 해당 메일함을 수정할 권한이 없습니다 no_perm_inbox_modify: $2당신은 해당 메일함을 수정할 권한이 없습니다
no_plot_inbox: $2You must stand in or supply a plot argument no_plot_inbox: $2당신은 서 있거나 줄거리를 제공해야합니다
comment_removed: $4comment가 성공적으로 삭제되었습니다/s:n$2 - '$3%s$2' comment_removed: $4comment가 성공적으로 삭제되었습니다/s:n$2 - '$3%s$2'
comment_added: $4A comment가 남아있습니다 comment_added: $4A comment가 남아있습니다
comment_header: $2&m---------&r $1Comments $2&m---------&r comment_header: $2&m---------&r $1댓글 $2&m---------&r
inbox_empty: $2comment가 없습니다 inbox_empty: $2comment가 없습니다
console: console:
not_console: $2보안상의 이유로, 이 명령어는 Console에서만 입력 가능합니다. not_console: $2보안상의 이유로, 이 명령어는 Console에서만 입력 가능합니다.
@ -101,8 +101,7 @@ clipboard:
pasted: $4해당 땅은 성공적으로 붙여넣어졌습니다. 해당 땅은 클립보드로부터 제거됩니다. pasted: $4해당 땅은 성공적으로 붙여넣어졌습니다. 해당 땅은 클립보드로부터 제거됩니다.
paste_failed: '$2선택된 땅의 복사가 실패했습니다. 사유: $2%s' paste_failed: '$2선택된 땅의 복사가 실패했습니다. 사유: $2%s'
no_clipboard: $2클립보드에 복사된 땅이 존재하지 않습니다 no_clipboard: $2클립보드에 복사된 땅이 존재하지 않습니다
clipboard_info: '$2현재 선택 - Plot ID: $1%id$2, Width: $1%width$2, Total clipboard_info: '$2현재 선택 - Plot ID: $1%id$2, Width: $1%width$2, Total Blocks: $1%total$2'
Blocks: $1%total$2'
toggle: toggle:
toggle_enabled: '$2가능한 세팅: %s' toggle_enabled: '$2가능한 세팅: %s'
toggle_disabled: '$2불가능한 세팅: %s' toggle_disabled: '$2불가능한 세팅: %s'
@ -121,6 +120,7 @@ ratings:
rating_not_your_own: $2당신은 자신의 땅에 투표 할 수 없습니다 rating_not_your_own: $2당신은 자신의 땅에 투표 할 수 없습니다
rating_not_done: $2당신은 완료된 땅에만 투표 할 수 있습니다. rating_not_done: $2당신은 완료된 땅에만 투표 할 수 있습니다.
rating_not_owned: $2당신은 소유자가 없는 땅에 투표 할 수 없습니다 rating_not_owned: $2당신은 소유자가 없는 땅에 투표 할 수 없습니다
ratings_purged: $2Purged ratings for this plot
tutorial: tutorial:
rate_this: $2이 땅에 투표해보세요! rate_this: $2이 땅에 투표해보세요!
comment_this: '$2이땅에 피드백을 남겨보세요: %s' comment_this: '$2이땅에 피드백을 남겨보세요: %s'
@ -129,43 +129,47 @@ economy:
cannot_afford_plot: $2당신은 이 땅을 구입 할 수 없습니다. 이 땅의 가격은 $1%s 입니다 cannot_afford_plot: $2당신은 이 땅을 구입 할 수 없습니다. 이 땅의 가격은 $1%s 입니다
not_for_sale: $2이 땅은 판매 불가능합니다 not_for_sale: $2이 땅은 판매 불가능합니다
cannot_buy_own: $2당신은 본인의 땅을 구입 불가능 합니다 cannot_buy_own: $2당신은 본인의 땅을 구입 불가능 합니다
plot_sold: $4당신의 땅; $1%s0$4, has been sold to $1%s1$4 for $1$%s2 plot_sold: $4당신의 땅; $1%s0$4, 판매 된 $1%s1$4 에 대한 $1$%s2
cannot_afford_merge: $2당신은 이 땅을 함칠 수 없습니다. 이 땅의 가격은 $1%s 입니다 cannot_afford_merge: $2당신은 이 땅을 함칠 수 없습니다. 이 땅의 가격은 $1%s 입니다
added_balance: $1%s $2이 당신의 통장에 추가되었습니다 added_balance: $1%s $2이 당신의 통장에 추가되었습니다
removed_balance: $1%s $2이 당신의 통장에서 빠져나갔습니다 removed_balance: $1%s $2이 당신의 통장에서 빠져나갔습니다
removed_granted_plot: $2너는 사용했다 %s 계획 교부금 (들), 당신이있어 $1%s $2왼쪽
setup: setup:
setup_init: '$1Usage: $2/plot setup <value>' setup_init: '$1용법: $2/plot setup <value>'
setup_step: '$3[$1Step %s0$3] $1%s1 $2- $1Expecting: $2%s2 $1Default: $2%s3' setup_step: '$3[$1Step %s0$3] $1%s1 $2- $1기대: $2%s2 $1태만: $2%s3'
setup_invalid_arg: '$2%s0 는 올바르지 않은 값입니다 %s1. 설정 취소를 원하시면 setup_invalid_arg: '$2%s0 는 올바르지 않은 값입니다 %s1. 설정 취소를 원하시면 다음 명령어를 사용하십시오: $1/plot
다음 명령어를 사용하십시오: $1/plot setup cancel' setup cancel'
setup_valid_arg: $2Value $1%s0 $2set to %s1 setup_valid_arg: $2Value $1%s0 $2set to %s1
setup_finished: $4당신은 만들어진 World로 이동되있어야 합니다. 그렇지 않으면 당신은 bukkit.yml를 통하여 워드를 설정하거나 다중월드 플러그인을 사용하여 월드를 생성하여야 합니다. setup_finished: $4당신은 만들어진 World로 이동되있어야 합니다. 그렇지 않으면 당신은 bukkit.yml를 통하여 워드를 설정하거나
다중월드 플러그인을 사용하여 월드를 생성하여야 합니다.
setup_world_taken: $2%s 는 이미 등록된 Plot World 입니다 setup_world_taken: $2%s 는 이미 등록된 Plot World 입니다
setup_missing_world: $2당신은 월드의 이름을 지정해야 합니다 ($1/plot setup &l<world>$1 <generator>$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup cancel setup_missing_world: $2당신은 월드의 이름을 지정해야 합니다 ($1/plot setup &l<world>$1 <generator>$2)&-$1Additional
setup_missing_generator: $2당신은 생성기를 지정해야 합니다 ($1/plot setup <world> &l<generator>&r$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup cancel commands:&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup
cancel
setup_missing_generator: $2당신은 생성기를 지정해야 합니다 ($1/plot setup <world> &l<generator>&r$2)&-$1Additional
commands:&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup
cancel
setup_invalid_generator: '$2올바르지 않은 생성기 입니다. 가능한 옵션: %s' setup_invalid_generator: '$2올바르지 않은 생성기 입니다. 가능한 옵션: %s'
schematics: schematics:
schematic_missing_arg: '$2당신은 인수를 지정해야 합니다. 가능한 값: $1test schematic_missing_arg: '$2당신은 인수를 지정해야 합니다. 가능한 값: $1test <name>$2 , $1save$2 ,
<name>$2 , $1save$2 , $1paste $2, $1exportall' $1paste $2, $1exportall'
schematic_invalid: '$2이것은 올바르지 않은 schematic파일 입니다. 사유: $2%s' schematic_invalid: '$2이것은 올바르지 않은 schematic파일 입니다. 사유: $2%s'
schematic_valid: $2이것은 올바른 schematic파일 입니다 schematic_valid: $2이것은 올바른 schematic파일 입니다
schematic_paste_failed: $2schematic 적용에 실패하엿습니다 schematic_paste_failed: $2schematic 적용에 실패하엿습니다
schematic_paste_success: $4schematic이 성공적으로 적용되었습니다 schematic_paste_success: $4schematic이 성공적으로 적용되었습니다
schematic_too_large: $2플롯이 너무 커서이 작업을 수행 할 수 없습니다!
titles: titles:
title_entered_plot: '$1Plot: %world%;%x%;%z%' title_entered_plot: '$1Plot: %world%;%x%;%z%'
title_entered_plot_sub: $4Owned by %s title_entered_plot_sub: $4에게 소유 된 %s
prefix_greeting: '$1%id%$2> ' prefix_greeting: '$1%id%$2> '
prefix_farewell: '$1%id%$2> ' prefix_farewell: '$1%id%$2> '
core: core:
task_start: 작업을 시작합니다... task_start: 작업을 시작합니다...
prefix: $3[$1P2$3] $2 prefix: $3[$1P2$3] $2
enabled: $1PlotSquared 가 실행됩니다 enabled: $1PlotSquared 가 실행됩니다
example_message: $2This Korean Translation Make by Protocodyne &k!!!
reload: reload:
reloaded_configs: $1번역 파일 및 월드 설정 파일이 성공적으로 리로드 되었습니다 reloaded_configs: $1번역 파일 및 월드 설정 파일이 성공적으로 리로드 되었습니다
reload_failed: $2설정파일의 리로드에 실패하였습니다 reload_failed: $2설정파일의 리로드에 실패하였습니다
bar api:
bossbar_clearing: '$2Clearing plot: $1%id%'
desc: desc:
desc_set: $2Plot 설명 설정 desc_set: $2Plot 설명 설정
desc_unset: $2Plot 설명 설정취소 desc_unset: $2Plot 설명 설정취소
@ -175,6 +179,7 @@ alias:
missing_alias: $2당신은 별명을 설정해야 합니다 missing_alias: $2당신은 별명을 설정해야 합니다
alias_too_long: $2별명은 50자 이내여야 합니다 alias_too_long: $2별명은 50자 이내여야 합니다
alias_is_taken: $2이 별명은 이미 존재합니다 alias_is_taken: $2이 별명은 이미 존재합니다
alias_removed: $2플롯 별칭이 제거되었습니다
position: position:
missing_position: '$2당신은 위치를 지정해야합니다. 가능한 값: $1none' missing_position: '$2당신은 위치를 지정해야합니다. 가능한 값: $1none'
position_set: $1Home 위치를 현재 위치로 지정합니다 position_set: $1Home 위치를 현재 위치로 지정합니다
@ -193,24 +198,18 @@ permission:
cant_claim_more_plots_num: $2당신은 한번에 $1%s $2plots보다 더 많이 소유할 수 없습니다 cant_claim_more_plots_num: $2당신은 한번에 $1%s $2plots보다 더 많이 소유할 수 없습니다
you_be_denied: $2당신은 이 땅에 들어갈 수 없습니다 you_be_denied: $2당신은 이 땅에 들어갈 수 없습니다
merge_request_confirm: 병합요청이 들어왔습니다 %s merge_request_confirm: 병합요청이 들어왔습니다 %s
cant_claim_more_clusters: $2더 많은 클러스터를 청구 할 수 없습니다.
merge: merge:
merge_not_valid: $2이 병합 요청은 더이상 유효하지 않습니다 merge_not_valid: $2이 병합 요청은 더이상 유효하지 않습니다
merge_accepted: $2병합 요청이 수락되었습니다 merge_accepted: $2병합 요청이 수락되었습니다
success_merge: $2땅이 병합되었습니다 success_merge: $2땅이 병합되었습니다
merge_requested: $2병합요청이 성공적으로 전송되었습니다 merge_requested: $2병합요청이 성공적으로 전송되었습니다
no_perm_merge: '$2당신은 이 땅의 소유자가 아닙니다: $1%plot%' no_perm_merge: '$2당신은 이 땅의 소유자가 아닙니다: $1%plot%'
no_available_automerge: $2당신은 지정한 방향으로 인접한 plots를 소유하지 않았거나 plots를 필요한 크기로 합병 할 수 없습니다. no_available_automerge: $2당신은 지정한 방향으로 인접한 plots를 소유하지 않았거나 plots를 필요한 크기로 합병 할
수 없습니다.
unlink_required: $2An unlink는 이것을 하는데 요구 됩니다. unlink_required: $2An unlink는 이것을 하는데 요구 됩니다.
unlink_impossible: $2당신은 오직 mega-plot만 unlink 할 수 있습니다 unlink_impossible: $2당신은 오직 mega-plot만 unlink 할 수 있습니다
unlink_success: $2성공적으로 plots을 unlink 하였습니다. unlink_success: $2성공적으로 plots을 unlink 하였습니다.
commands:
not_valid_subcommand: $2이것은 유효하지 않은 하위 명령어 입니다
did_you_mean: '$2이것을 명령어를 의미하나요: $1%s'
name_little: $2%s0 아름이 너무 짧습니다, $1%s1$2<$1%s3
no_commands: $2죄송합니다 당신은 하위명령어 사용을 허가받지 못했습니다.
subcommand_set_options_header: '$2Possible Values: '
command_syntax: '$1Usage: $2%s'
flag_tutorial_usage: '$1Have an admin set the flag: $2%s'
errors: errors:
invalid_player_wait: '$2플레이어를 찾지 못했습니다: $1%s$2, fetching it. 잠시 후 시도해주세요.' invalid_player_wait: '$2플레이어를 찾지 못했습니다: $1%s$2, fetching it. 잠시 후 시도해주세요.'
invalid_player_offline: '$2플레이어는 반드시 접속 중이어야 합니다: $1%s.' invalid_player_offline: '$2플레이어는 반드시 접속 중이어야 합니다: $1%s.'
@ -224,22 +223,22 @@ errors:
not_valid_world: $2옳바르지 않은 World 입니다 not_valid_world: $2옳바르지 않은 World 입니다
not_valid_plot_world: $2올바르지 않은 plot world 입니다 (case sensitive) not_valid_plot_world: $2올바르지 않은 plot world 입니다 (case sensitive)
no_plots: $2당신은 어떤 땅도 가지고 있지 않습니다 no_plots: $2당신은 어떤 땅도 가지고 있지 않습니다
not_using_plotme: $2이 서버는 상위버전의 $1PlotSquared $2plot 관리 시스템을 사용합니다. Please use the $1/ps $2or $1/p2 $2or $1/plot $2instead
wait_for_timer: $2A setblock 타이머는 현재의 땅 또는 당신에게 묶여있습니다. 완료까지 잠시 기다려주시기 바랍니다 wait_for_timer: $2A setblock 타이머는 현재의 땅 또는 당신에게 묶여있습니다. 완료까지 잠시 기다려주시기 바랍니다
invalid_command_flag: '$2잘못된 명령 플래그: %s0'
error: '$2오류가 발생했습니다: %s'
not_loaded: $2플롯을로드 할 수 없습니다
paste: paste:
debug_report_created: '$1Uploaded a full debug to: $1%url%' debug_report_created: '$1전체 디버그를에 업로드했습니다.: $1%url%'
purge: purge:
purge_syntax: Use /plot purge <x;z|player|unowned|unknown|all> <world>
purge_success: $4%s 땅들을 성공적으로 제거하였습니다 purge_success: $4%s 땅들을 성공적으로 제거하였습니다
trim: trim:
trim_syntax: Use /plot trim <all|x;y> <world>
trim_in_progress: 최적화 작업이 이미 진행중입니다! trim_in_progress: 최적화 작업이 이미 진행중입니다!
not_valid_hybrid_plot_world: 이 행동을 위하여 hybrid plot manager가 필요합니다. not_valid_hybrid_plot_world: 이 행동을 위하여 hybrid plot manager가 필요합니다.
block list: block list:
block_list_separater: '$1,$2 ' block_list_separater: '$1,$2 '
biome: biome:
need_biome: $2당신은 유효한 생태계를 지정해야 합니다. need_biome: $2당신은 유효한 생태계를 지정해야 합니다.
biome_set_to: $2Plot biome set to $2 biome_set_to: $2플롯 생물 설정 $2
teleport: teleport:
teleported_to_plot: $1당신은 이동 되었습니다. teleported_to_plot: $1당신은 이동 되었습니다.
teleported_to_road: $2당신은 길로 이동 되었습니다. teleported_to_road: $2당신은 길로 이동 되었습니다.
@ -258,13 +257,14 @@ invalid:
not_valid_data: $2그것은 유효한 데이터 ID가 아닙니다. not_valid_data: $2그것은 유효한 데이터 ID가 아닙니다.
not_valid_block: '$2그것은 유효한 블록이 아닙니다.: %s 그것은 유효한 블록이 아닙니다.' not_valid_block: '$2그것은 유효한 블록이 아닙니다.: %s 그것은 유효한 블록이 아닙니다.'
not_allowed_block: '$2그 블록은 허락되지 않았습니다 : %s' not_allowed_block: '$2그 블록은 허락되지 않았습니다 : %s'
not_valid_number: '$2그것은 %s범위내에서 유효하지 않은 숫자입니다.' not_valid_number: $2그것은 %s범위내에서 유효하지 않은 숫자입니다.
not_valid_plot_id: $2그 땅의 ID는 유효하지 않습니다. not_valid_plot_id: $2그 땅의 ID는 유효하지 않습니다.
plot_id_form: '$2땅의 ID는 반드시 형식에 있어야 합니다: $1X;Y $2e.g. $1-5;7' plot_id_form: '$2땅의 ID는 반드시 형식에 있어야 합니다: $1X;Y $2e.g. $1-5;7'
not_your_plot: $2그것은 당신의 땅이 아닙니다. not_your_plot: $2그것은 당신의 땅이 아닙니다.
no_such_plot: $2거기엔 어떤 땅도 없습니다. no_such_plot: $2거기엔 어떤 땅도 없습니다.
player_has_not_been_on: $2해당 플레이어는 plotworld에 없습니다. player_has_not_been_on: $2해당 플레이어는 plotworld에 없습니다.
found_no_plots: $2당신의 검색에서 아무 땅도 발견하지 못했습니다 found_no_plots: $2당신의 검색에서 아무 땅도 발견하지 못했습니다
found_no_plots_for_player: '$2No plots found for player: %s'
camera: camera:
camera_started: $2당신은 땅을 위한 카메라 모드에 입장했습니다 $1%s camera_started: $2당신은 땅을 위한 카메라 모드에 입장했습니다 $1%s
camera_stopped: $2카메라 모드를 종료합니다 camera_stopped: $2카메라 모드를 종료합니다
@ -297,32 +297,40 @@ info:
plot_info_size: $1Size:$2 %size% plot_info_size: $1Size:$2 %size%
plot_user_list: ' $1%user%$2,' plot_user_list: ' $1%user%$2,'
info_syntax_console: $2/plot info X;Y info_syntax_console: $2/plot info X;Y
now: 지금
never:
plot_info_seen: $1Seen:$2 %seen%
plot_flag_list: $1%s0:%s1$2
working: working:
generating_component: $1당신의 설정값으로부터 component 생성을 시작합니다 generating_component: $1당신의 설정값으로부터 component 생성을 시작합니다
clearing_plot: $2Clearing plot async. clearing_plot: $2플롯 비동기 지우기.
clearing_done: $4Clear completed! Took %sms. clearing_done: $4명확한 완료. 했다 %sms.
plot_not_claimed: $2땅이 판매되지 않았습니다 plot_not_claimed: $2땅이 판매되지 않았습니다
plot_is_claimed: $2이 땅은 이미 판매되었습니다 plot_is_claimed: $2이 땅은 이미 판매되었습니다
claimed: $4성공적으로 땅을 판매하였습니다 claimed: $4성공적으로 땅을 판매하였습니다
deleting_done: $4삭제가 완료되었습니다! 가져왔다 %sms.
list: list:
comment_list_header_paged: $2(Page $1%cur$2/$1%max$2) $1List of %amount% comments comment_list_header_paged: $2(페이지 $1%cur$2/$1%max$2) $1목록 %amount% 코멘트
clickable: ' (interactive)' clickable: ' (상호 작용하는)'
plot_list_header_paged: $2(Page $1%cur$2/$1%max$2) $1List of %amount% plots plot_list_header_paged: $2(페이지 $1%cur$2/$1%max$2) $1목록 %amount% plots
plot_list_header: $1List of %word% plots plot_list_header: $1목록 %word% plots
plot_list_item: $2>> $1%id$2:$1%world $2- $1%owner plot_list_item: $2>> $1%id$2:$1%world $2- $1%owner
plot_list_item_ordered: $2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner plot_list_item_ordered: $2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner
plot_list_footer: $2>> $1%word% a total of $2%num% $1claimed %plot%. plot_list_footer: $2>> $1%word% 총 $2%num% $1claimed %plot%.
area_list_header_paged: $2(페이지 $1%cur$2/$1%max$2) $1목록f %amount% areas
left: left:
left_plot: $2당신은 땅을 떠났습니다. left_plot: $2당신은 땅을 떠났습니다.
chat: chat:
plot_chat_format: '$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%' plot_chat_format: '$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%'
plot_chat_forced: $이 월드는 모두가 plot chat을 쓰도록 강제합니다 plot_chat_forced: $이 월드는 모두가 plot chat을 쓰도록 강제합니다
plot_chat_on: $4Plot chat enabled. plot_chat_on: $4플롯 채팅 사용 설정 됨.
plot_chat_off: $4Plot chat disabled. plot_chat_off: $4플롯 채팅 사용 중지됨.
plot_chat_spy_format: '$2[$1Plot Spy$2][$1%plot_id%$2] $1%sender%$2: $1%msg%'
deny: deny:
denied_removed: $4당신은 이 땅으로부터 플레이어를 차단 해제 했습니다. denied_removed: $4당신은 이 땅으로부터 플레이어를 차단 해제 했습니다.
denied_added: $4당신은 이 땅으로부터 플레이어를 성공적으로 차단 했습니다. denied_added: $4당신은 이 땅으로부터 플레이어를 성공적으로 차단 했습니다.
denied_need_argument: $2변수가 빠졌습니다. $1/plot denied add <name> $2or $1/plot denied remove <name> denied_need_argument: $2변수가 빠졌습니다. $1/plot denied add <name> $2or $1/plot denied
remove <name>
was_not_denied: $2해당 플레이어는 이 땅에서 차단되지 않았습니다. was_not_denied: $2해당 플레이어는 이 땅에서 차단되지 않았습니다.
you_got_denied: $4당신은 해당 땅으로부터 차단되었습니다 따라서 spawn으로 자동 이동 되었습니다. you_got_denied: $4당신은 해당 땅으로부터 차단되었습니다 따라서 spawn으로 자동 이동 되었습니다.
rain: rain:
@ -339,6 +347,7 @@ flag:
flag_not_added: $2그 깃발은 추가될 수 없습니다 flag_not_added: $2그 깃발은 추가될 수 없습니다
flag_removed: $4깃발이 성공적으로 제거되었습니다 flag_removed: $4깃발이 성공적으로 제거되었습니다
flag_added: $4깃발이 성공적으로 추가되었습니다 flag_added: $4깃발이 성공적으로 추가되었습니다
not_valid_flag_suggested: '$2That is not a valid flag. Did you mean: $1%s'
trusted: trusted:
trusted_added: $4당신은 그 땅에 유저를 성공적으로 위탁했습니다 trusted_added: $4당신은 그 땅에 유저를 성공적으로 위탁했습니다
trusted_removed: $4당신은 그 땅으로부터 신용(위탁)받은 유저를 성공적으로 제거했습니다. trusted_removed: $4당신은 그 땅으로부터 신용(위탁)받은 유저를 성공적으로 제거했습니다.
@ -355,18 +364,39 @@ member:
owner: owner:
set_owner: $4당신은 땅의 소유자를 성공적으로 설정했습니다 set_owner: $4당신은 땅의 소유자를 성공적으로 설정했습니다
now_owner: $4당신은 이제 %s땅의 소유자입니다 now_owner: $4당신은 이제 %s땅의 소유자입니다
set_owner_cancelled: $2The setowner action was cancelled
signs: signs:
owner_sign_line_1: '$1ID: $1%id%' owner_sign_line_1: '$1ID: $1%id%'
owner_sign_line_2: '$1소유자:' owner_sign_line_2: '$1소유자:'
owner_sign_line_3: $2%plr% owner_sign_line_3: $2%plr%
owner_sign_line_4: $3Claimed owner_sign_line_4: $3Claimed
help: help:
help_header: "$3&m---------&r $1Plot\xb2 도움말 $3&m---------" help_header: $3&m---------&r $1Plot² 도움말 $3&m---------
help_page_header: '$1Category: $2%category%$2,$1 Page: $2%current%$3/$2%max%$2' help_page_header: '$1범주: $2%category%$2,$1 페이지: $2%current%$3/$2%max%$2'
help_footer: "$3&m---------&r $1Plot\xb2 도움말 $3&m---------" help_footer: $3&m---------&r $1Plot² 도움말 $3&m---------
help_info_item: $1/plot help %category% $3- $2%category_desc% help_info_item: $1/plot help %category% $3- $2%category_desc%
help_item: $1%usage% [%alias%]&- $3- $2%desc%&- help_item: $1%usage% [%alias%]&- $3- $2%desc%&-
direction: '$1Current direction: %dir%' direction: '$1현재 방향: %dir%'
'-': '-':
custom_string: '-' custom_string: '-'
commandconfig:
not_valid_subcommand: $2이것은 유효하지 않은 하위 명령어 입니다
did_you_mean: '$2이것을 명령어를 의미하나요: $1%s'
name_little: $2%s0 아름이 너무 짧습니다, $1%s1$2<$1%s3
no_commands: $2죄송합니다 당신은 하위명령어 사용을 허가받지 못했습니다.
subcommand_set_options_header: '$2Possible Values: '
command_syntax: '$1Usage: $2%s'
flag_tutorial_usage: '$1관리자에게 국기를 설정하게하십시오: $2%s'
bar api: {}
set:
set_attribute: $4설정 완료 %s0 로 설정 %s1
cap:
entity_cap: $2더 많은 몹을 스폰하는 것은 허용되지 않습니다.
near:
plot_near: '$1선수: %s0'
kick:
you_got_kicked: $4너는 쫓겨났다
grants:
granted_plots: '$1결과: $2%s $1grants left'
granted_plot: $1You granted %s0 plot to $2%s1
granted_plot_failed: '$1Grant failed: $2%s'

View File

@ -1,378 +0,0 @@
#Translator: c7w/1345979462
confirm:
failed_confirm: $2\u4f60\u5f53\u524d\u6ca1\u6709\u53ef\u4ee5\u63a5\u53d7\u7684\u884c\u52a8\uff01
requires_confirm: '$2\u4f60\u662f\u5426\u8981\u6267\u884c: $1%s$2?&-$2\u8be5\u64cd\u4f5c\u4e0d\u53ef\u9006! \u5982\u679c\u786e\u5b9a\u8bf7\u8f93\u5165: $1/plot confirm'
move:
move_success: $4\u6210\u529f\u7684\u79fb\u52a8\u4e86\u5730\u76ae\u3002
copy_success: $4\u6210\u529f\u7684\u590d\u5236\u4e86\u5730\u76ae\u3002
requires_unowned: $2\u4f60\u6307\u5b9a\u7684\u4f4d\u7f6e\u5df2\u88ab\u5360\u7528\u3002
set:
set_attribute: $4\u6210\u529f\u5c06 %s0 \u8bbe\u7f6e\u4e3a %s1
web:
generating_link: $1\u5904\u7406\u5730\u76ae\u4e2d...
generating_link_failed: $2\u521b\u5efa\u4e0b\u8f7d\u94fe\u63a5\u5931\u8d25\u4e86\uff01
save_failed: $2\u4fdd\u5b58\u5931\u8d25
load_null: $2\u8bf7\u4f7f\u7528 $4/plot load $2\u6765\u83b7\u53d6\u6a21\u578b\u5217\u8868
load_failed: $2\u8bfb\u53d6\u6a21\u578b\u5931\u8d25
load_list: '$2\u82e5\u8981\u8bfb\u53d6\u4e00\u4e2a\u6a21\u578b\uff0c\u8bf7\u4f7f\u7528 $1/plot load #'
save_success: $1\u6210\u529f\u4fdd\u5b58\uff01
compass:
compass_target: $4\u6210\u529f\u7684\u7528\u6307\u5357\u9488\u6307\u5411\u4e86\u5730\u76ae\uff01
cluster:
cluster_available_args: '''$1\u4e0b\u9762\u7684\u5b50\u6307\u4ee4\u662f\u53ef\u884c\u7684: $4list$2, $4create$2, $4delete$2, $4resize$2,
$4invite$2, $4kick$2, $4leave$2, $4members$2, $4info$2, $4tp$2, $4sethome'''
cluster_list_heading: $2\u5728\u8fd9\u4e2a\u4e16\u754c\u4e2d\u6709 $1%s$2 \u4e2a\u5730\u76ae\u7fa4
cluster_list_element: $2 - $1%s&-
cluster_intersection: $2\u76ee\u6807\u533a\u57df\u88ab %s0 \u8986\u76d6'
cluster_added: $4\u6210\u529f\u7684\u521b\u5efa\u4e86\u7fa4\u3002
cluster_deleted: $4\u6210\u529f\u7684\u5220\u9664\u4e86\u7fa4\u3002
cluster_resized: $4\u6210\u529f\u4e3a\u7fa4\u91cd\u65b0\u8bbe\u7f6e\u5927\u5c0f\u3002
cluster_added_user: $4\u6210\u529f\u4e3a\u7fa4\u589e\u52a0\u7528\u6237\u3002
cannot_kick_player: $2\u4f60\u4e0d\u80fd\u4ece\u5730\u76ae\u4e2d\u79fb\u9664\u90a3\u4f4d\u73a9\u5bb6\uff01
cluster_invited: $1\u4f60\u88ab\u9080\u8bf7\u53bb\u4e0b\u5217\u7fa4\uff1a $2%s
cluster_removed: $1\u4f60\u88ab\u8be5\u7fa4\u79fb\u9664\uff1a $2%s
cluster_kicked_user: $4\u6210\u529f\u79fb\u9664\u4e86\u7528\u6237\u3002
invalid_cluster: '''$1\u4e0d\u5408\u6cd5\u7684\u7fa4\u540d\u79f0\uff1a $2%s'''
cluster_not_added: $2\u90a3\u4e2a\u73a9\u5bb6\u6ca1\u6709\u88ab\u6dfb\u52a0\u5230\u5730\u76ae\u7fa4\u4e2d
cluster_cannot_leave: $1\u4f60\u5728\u79bb\u5f00\u4e4b\u524d\u5fc5\u987b\u5220\u9664\u6216\u8f6c\u8ba9\u7fa4
cluster_added_helper: $4\u6210\u529f\u4e3a\u5730\u76ae\u7fa4\u589e\u52a0\u4e86\u63f4\u5efa\u8005
cluster_removed_helper: $4\u6210\u529f\u4e3a\u5730\u76ae\u7fa4\u79fb\u9664\u4e86\u4e00\u4f4d\u63f4\u5efa\u8005
cluster_regenerated: $4\u6210\u529f\u7684\u5f00\u59cb\u4e86\u5730\u76ae\u7fa4\u91cd\u5efa\u4efb\u52a1
cluster_teleporting: $4\u4f20\u9001\u4e2d...
cluster_info: '''$1\u5f53\u524d\u7fa4\uff1a $2%id%&-$1\u540d\u79f0\uff1a $2%name%&-$1\u6240\u6709\u8005\uff1a $2%owner%&-$1\u5927\u5c0f\uff1a $2%size%&-$1\u6743\u5229\uff1a
$2%rights%'''
cluster_outside: '$2The proposed area is outside the plot area: %s0'
border:
border: $2\u4f60\u5728\u5f53\u524d\u5730\u56fe\u8fb9\u754c\u4e4b\u5916
unclaim:
unclaim_success: $4\u4f60\u6210\u529f\u7684\u653e\u5f03\u4e86\u5730\u76ae
unclaim_failed: $2\u4e0d\u80fd\u653e\u5f03\u5730\u76ae
worldedit masks:
worldedit_delayed: $2\u8bf7\u7b49\u5f85\u6211\u4eec\u5904\u7406\u4f60\u7684 Worldedit \u884c\u52a8...
worldedit_run: '''$2\u8bf7\u7b49\u5f85\u5f53\u524d\u4efb\u52a1\u5b8c\u6210\u3002\u5f53\u524d\u6b63\u5728\u8fdb\u884c\u7684\u4efb\u52a1\uff1a%s'''
require_selection_in_mask: $2\u4f60\u5f53\u524d\u9009\u62e9\u8303\u56f4\u4e2d %s \u4e0d\u662f\u4f60\u7684\u5730\u76ae\uff0c\u4f60\u53ea\u80fd\u5728\u4f60\u81ea\u5df1\u7684\u5730\u76ae\u4e0a\u66f4\u6539\u3002
worldedit_volume: $2\u4f60\u76ee\u524d\u9009\u533a\u4e2d\u6709 %current%\u4e2a\u65b9\u5757\uff0c\u4f60\u6700\u5927\u53ef\u4ee5\u4e00\u6b21\u6027\u7f16\u8f91\u7684\u65b9\u5757\u6570\u76ee\u4e3a %max%\u3002
worldedit_iterations: $2\u4f60\u4e0d\u80fd\u91cd\u590d %current% \u6b21\u3002\u4f60\u53ef\u4ee5\u91cd\u590d\u7684\u6700\u5927\u6b21\u6570\u4e3a %max%\u6b21\u3002
worldedit_unsafe: $2\u90a3\u4e2a\u6307\u4ee4\u5df2\u88ab\u7981\u7528
worldedit_bypass: $2&o\u82e5\u8981\u89e3\u9664\u4f60\u7684 Worldedit \u9650\u5236\uff0c\u8f93\u5165 $4/plot wea
worldedit_bypassed: $2\u5f53\u524d\u89e3\u9664\u4e86\u4f60\u7684 WorldEdit \u9650\u5236
worldedit_unmasked: $1\u4f60\u7684 WorldEdit \u73b0\u5728\u88ab\u89e3\u9664\u9650\u5236\u3002
worldedit_restricted: $1\u4f60\u7684 WorldEdit \u73b0\u5728\u88ab\u9650\u5236\u3002
gamemode:
gamemode_was_bypassed: $1\u4f60\u4e3a\u5730\u76ae $2{plot} $1\u8df3\u8fc7\u4e86\u6e38\u620f\u6a21\u5f0f \u2014\u2014 ($2{gamemode}$1) $1
height limit:
height_limit: $1\u8fd9\u4e2a\u5730\u76ae\u7684\u5efa\u7b51\u9ad8\u5ea6\u9650\u5236\u4e3a $2{limit}
records:
record_play: $2%player $2\u5f00\u59cb\u4e86 $1%name \u7684\u8bb0\u5f55
notify_enter: $2%player $2\u8fdb\u5165\u4e86\u4f60\u7684\u5730\u76ae ($1%plot$2)
notify_leave: $2%player $2\u79bb\u5f00\u4e86\u4f60\u7684\u5730\u76ae ($1%plot$2)
swap:
swap_overlap: $2\u76ee\u6807\u533a\u57df\u4e0d\u5141\u8bb8\u88ab\u8986\u76d6
swap_dimensions: $2\u548c\u76ee\u6807\u533a\u57df\u5fc5\u987b\u62e5\u6709\u76f8\u540c\u7684\u4e16\u754c\u7c7b\u578b
swap_syntax: $2/plots swap <id>
swap_success: $4\u6210\u529f\u7684\u4ea4\u6362\u4e86\u5730\u76ae
started_swap: $2\u4ea4\u6362\u5730\u76ae\u4efb\u52a1\u5df2\u5f00\u59cb\uff0c\u4f60\u5c06\u4f1a\u5728\u5b8c\u6210\u540e\u6536\u5230\u901a\u77e5\u3002
comment:
inbox_notification: '%s \u6761\u672a\u8bfb\u4fe1\u606f\u3002\u4f7f\u7528 /plot inbox \u6765\u8bfb\u53d6'
not_valid_inbox_index: $2\u5728\u7b2c %s \u9875\u6ca1\u6709\u4fe1\u606f
inbox_item: $2 - $4%s
comment_syntax: $2\u8bf7\u4f7f\u7528 /plots comment [X;Z] <%s> <comment>
invalid_inbox: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6536\u4ef6\u7bb1&-$1\u5141\u8bb8\u7684\u503c\uff1a %s
no_perm_inbox: $2\u4f60\u6ca1\u6709\u67e5\u770b\u90a3\u4e2a\u6536\u4ef6\u7bb1\u7684\u6743\u9650
no_perm_inbox_modify: $2\u4f60\u6ca1\u6709\u66f4\u6539\u90a3\u4e2a\u6536\u4ef6\u7bb1\u7684\u6743\u9650
no_plot_inbox: $2\u4f60\u5fc5\u987b\u7ad9\u5728\u6216\u6307\u5b9a\u4e00\u4e2a\u5730\u76ae\u53c2\u6570
comment_removed: $4\u6210\u529f\u7684\u5220\u9664\u4e86\u8bc4\u8bba\uff1a$2 - '$3%s$2'
comment_added: $4\u4e00\u6761\u8bc4\u8bba\u88ab\u7559\u4e0b
comment_header: $2&m---------&r $1\u8bc4\u8bba $2&m---------&r
inbox_empty: $2\u6ca1\u6709\u8bc4\u8bba
console:
not_console: $2\u4e3a\u4e86\u5b89\u5168\uff0c\u8fd9\u4e2a\u6307\u4ee4\u53ea\u80fd\u7531\u63a7\u5236\u53f0\u6267\u884c\u3002
is_console: $2\u8fd9\u4e2a\u6307\u4ee4\u53ea\u80fd\u7531\u73a9\u5bb6\u6267\u884c\u3002
inventory:
inventory_usage: '&c\u4f7f\u7528\uff1a &6{usage}'
inventory_desc: '&c\u63cf\u8ff0\uff1a &6{desc}'
inventory_category: '&c\u7c7b\u578b\uff1a &6{category}'
clipboard:
clipboard_set: $2\u5f53\u524d\u5730\u76ae\u5df2\u88ab\u590d\u5236\u5230\u4f60\u7684\u526a\u5207\u677f\u4e2d\uff0c\u4f7f\u7528 $1/plot paste$2 \u6765\u7c98\u8d34\u3002
pasted: $4\u5730\u76ae\u5df2\u88ab\u6210\u529f\u7c98\u8d34\u3002\u5b83\u4ece\u4f60\u7684\u526a\u5207\u677f\u4e2d\u88ab\u79fb\u9664\u3002
paste_failed: $2\u7c98\u8d34\u9009\u4e2d\u533a\u57df\u65f6\u5931\u8d25\u4e86\uff0c\u5931\u8d25\u539f\u56e0\uff1a $2%s
no_clipboard: $2\u4f60\u7684\u526a\u5207\u677f\u4e2d\u6ca1\u6709\u9009\u62e9\u3002
clipboard_info: '$2\u5f53\u524d\u9009\u62e9 - \u5730\u76aeID: $1%id$2, \u5bbd\u5ea6: $1%width$2, \u603b\u8ba1\u65b9\u5757\u6570\uff1a$1%total$2'
toggle:
toggle_enabled: $2\u542f\u7528\u8bbe\u7f6e\uff1a %s
toggle_disabled: $2\u7981\u7528\u8bbe\u7f6e\uff1a %s
blocked command:
command_blocked: $2\u5728\u8fd9\u4e2a\u5730\u76ae\u4e2d\u90a3\u4e2a\u6307\u4ee4\u4e0d\u88ab\u5141\u8bb8
done:
done_already_done: $2\u8fd9\u4e2a\u5730\u76ae\u5df2\u7ecf\u88ab\u6807\u8bb0\u5b8c\u6210\u3002
done_not_done: $2\u8fd9\u4e2a\u5730\u76ae\u6ca1\u6709\u88ab\u6807\u8bb0\u5b8c\u6210\u3002
done_insufficient_complexity: $2\u8fd9\u4e2a\u5730\u76ae\u592a\u8fc7\u4e8e\u7b80\u5355\u3002\u8bf7\u5728\u4f7f\u7528\u8fd9\u4e2a\u6307\u4ee4\u4e4b\u524d\u589e\u52a0\u589e\u52a0\u66f4\u591a\u7ec6\u8282\u3002
done_success: $1\u6210\u529f\u5c06\u5730\u76ae\u6807\u8bb0\u5b8c\u6210\u3002
done_removed: $1\u4f60\u73b0\u5728\u53ef\u4ee5\u7ee7\u7eed\u5728\u5730\u76ae\u4e2d\u5efa\u7b51\u4e86\u3002
ratings:
rating_not_valid: $2\u4f60\u9700\u8981\u5728 1 - 10 \u4e4b\u524d\u6307\u5b9a\u4e00\u4e2a\u6570\u5b57
rating_already_exists: $2\u4f60\u5df2\u7ecf\u4e3a\u5730\u76ae $2%s \u6295\u8fc7\u7968\u4e86
rating_applied: $4\u4f60\u6210\u529f\u7684\u4e3a\u5730\u76ae $2%s \u6295\u4e86\u4e00\u7968
rating_not_your_own: $2\u4f60\u4e0d\u80fd\u4e3a\u81ea\u5df1\u7684\u5730\u76ae\u6295\u7968
rating_not_done: $2\u4f60\u53ea\u80fd\u4e3a\u5b8c\u6210\u7684\u5730\u76ae\u6295\u7968\u3002
rating_not_owned: $2\u4f60\u4e0d\u80fd\u4e3a\u65e0\u4e3b\u7684\u5730\u76ae\u6295\u7968\u3002
tutorial:
rate_this: $2\u4e3a\u8fd9\u4e2a\u5730\u76ae\u6295\u7968\uff01
comment_this: $2\u4e3a\u8fd9\u4e2a\u5730\u76ae\u7559\u4e00\u4e9b\u53cd\u9988\uff1a %s
economy:
econ_disabled: $2\u73b0\u5728\u6ca1\u6709\u542f\u52a8\u7ecf\u6d4e\u7cfb\u7edf
cannot_afford_plot: $2\u4f60\u6ca1\u6709\u8db3\u591f\u7684\u94b1\u4e70\u8fd9\u5757\u5730\u76ae\u3002\u5b83\u9700\u8981\u82b1\u8d39 $1%s
not_for_sale: $2\u8fd9\u5757\u5730\u76ae\u6ca1\u6709\u51fa\u552e
cannot_buy_own: $2\u4f60\u4e0d\u80fd\u8d2d\u4e70\u4f60\u81ea\u5df1\u7684\u5730\u76ae
plot_sold: $4\u4f60\u7684\u5730\u76ae $1%s0$4\uff0c\u4ee5 $1$%s2 \u7684\u4ef7\u683c\u88ab\u5356\u7ed9\u4e86 $1%s1$4
cannot_afford_merge: $2\u4f60\u6ca1\u6709\u8db3\u591f\u7684\u94b1\u6765\u5408\u5e76\u5730\u76ae\u3002\u5b83\u9700\u8981\u82b1\u8d39 $1%s
added_balance: $1%s $2\u88ab\u6253\u5165\u4f60\u7684\u8d26\u6237
removed_balance: $1%s $2\u4ece\u4f60\u7684\u8d26\u6237\u53d6\u51fa
removed_granted_plot: $2\u4f60\u4f7f\u7528\u4e86 %s \u4e2a\u5730\u76ae\u6388\u6743\uff0c\u4f60\u8fd8\u5269\u4e0b $1%s $2\u4e2a
setup:
setup_init: $1\u8bf7\u4f7f\u7528\uff1a $2/plot setup <value>
setup_step: $3[$1\u7b2c %s0 $1\u6b65$3] $1%s1 $2- $1\u53c2\u6570\u7c7b\u578b\uff1a $2%s2 $1\u9ed8\u8ba4\u503c\uff1a $2%s3
setup_invalid_arg: $2%s0 \u4e0d\u662f\u5bf9\u4e8e\u7b2c %s1 \u6b65\u7684\u6b63\u786e\u7684\u53c2\u6570\u3002\u8981\u60f3\u53d6\u6d88\u8bbe\u7f6e\u4f7f\u7528\uff1a $1/plot setup cancel
setup_valid_arg: $2\u4f60\u5c06\u503c $1%s0 $2\u8bbe\u7f6e\u4e3a\u4e86 %s1
setup_finished: $4\u4f60\u5e94\u8be5\u88ab\u4f20\u9001\u5230\u4e86\u521b\u5efa\u7684\u4e16\u754c\u3002\u5426\u5219\u4f60\u9700\u8981\u624b\u52a8\u8bbe\u7f6e\u5728 bukkit.yml \u4e2d\u7684\u4e16\u754c\u521b\u5efa\u5668\u6216\u8005\u4f60\u9009\u62e9\u7684\u4e16\u754c\u7684\u7ba1\u7406\u63d2\u4ef6\u3002
setup_world_taken: $2%s \u662f\u4e00\u4e2a\u5df2\u7ecf\u521b\u5efa\u7684\u5730\u76ae\u4e16\u754c
setup_missing_world: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u4e16\u754c\u540d($1/plot setup &l<world>$1 <generator>$2)&-$1\u9644\u52a0\u6307\u4ee4\uff1a&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup cancel
setup_missing_generator: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u4e16\u754c\u751f\u6210\u5668 ($1/plot setup <world> &l<generator>&r$2)&-$1\u9644\u52a0\u6307\u4ee4\uff1a&-$2 - $1/plot setup <value>&-$2 - $1/plot setup back&-$2 - $1/plot setup cancel
setup_invalid_generator: $2\u9519\u8bef\u7684\u751f\u6210\u5668\u3002\u6b63\u786e\u7684\u751f\u6210\u5668\u6709\uff1a %s
schematics:
schematic_too_large: $2\u8fd9\u4e2a\u5730\u76ae\u5bf9\u6b64\u884c\u52a8\u592a\u5927\u4e86\uff01
schematic_missing_arg: $2\u4f60\u9700\u8981\u5236\u5b9a\u4e00\u4e2a\u53c2\u6570\u3002\u6b63\u786e\u7684\u503c\uff1a $1test <name>$2 , $1save$2 , $1paste $2, $1exportall
schematic_invalid: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6a21\u677f\u3002\u539f\u56e0\uff1a $2%s
schematic_valid: $2\u90a3\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6a21\u677f
schematic_paste_failed: $2\u7c98\u8d34\u6a21\u677f\u5931\u8d25\u4e86
schematic_paste_success: $4\u6210\u529f\u7684\u7c98\u8d34\u4e86\u6a21\u677f
titles:
title_entered_plot: $1\u5730\u76ae\uff1a %world%;%x%;%z%
title_entered_plot_sub: $4\u5730\u76ae\u4e3b\u4eba %s
prefix_greeting: '$1%id%$2> '
prefix_farewell: '$1%id%$2> '
core:
task_start: \u4efb\u52a1\u5f00\u59cb...
prefix: $3[$1\u5730\u76ae\u7cfb\u7edf$3] $2
enabled: $1PlotSquared \u73b0\u5df2\u5f00\u542f
reload:
reloaded_configs: $1\u7ffb\u8bd1\u548c\u4e16\u754c\u8bbe\u7f6e\u88ab\u91cd\u65b0\u8bfb\u53d6
reload_failed: $2\u8bfb\u53d6\u6587\u4ef6\u914d\u7f6e\u5931\u8d25
desc:
desc_set: $2\u5730\u76ae\u7684\u63cf\u8ff0\u88ab\u8bbe\u7f6e
desc_unset: $2\u5730\u76ae\u7684\u63cf\u8ff0\u88ab\u91cd\u7f6e
missing_desc: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u63cf\u8ff0
alias:
alias_set_to: $2\u5730\u76ae\u7b80\u79f0\u8bbe\u7f6e\u4e3a $1%alias%
missing_alias: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u7b80\u79f0
alias_too_long: $2\u5728\u957f\u5ea6\u4e0a\u7b80\u79f0\u5fc5\u987b\u5c0f\u4e8e50\u5b57\u7b26
alias_is_taken: $2\u5df2\u7ecf\u6709\u5730\u76ae\u547d\u540d\u4e3a\u90a3\u4e2a\u7b80\u79f0\u4e86
position:
missing_position: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u65b9\u4f4d\u3002\u6b63\u786e\u7684\u503c\uff1a \u00d7\u65e0\u00d7
position_set: $1\u5c06\u5bb6\u8bbe\u7f6e\u4e3a\u5f53\u524d\u4f4d\u7f6e
position_unset: $1\u5bb6\u7684\u4f4d\u7f6e\u91cd\u7f6e\u5230\u9ed8\u8ba4\u4f4d\u7f6e
home_argument: $2\u8bf7\u4f7f\u7528 /plot set home [none]
invalid_position: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u4f4d\u7f6e\u7684\u503c
cap:
entity_cap: $2\u4f60\u4e0d\u80fd\u518d\u751f\u6210\u66f4\u591a\u602a\u7269\u4e86\uff01
time:
time_format: $1%hours%, %min%, %sec%
permission:
no_schematic_permission: $2\u4f60\u6ca1\u6709\u6743\u9650\u6765\u4f7f\u7528\u6a21\u677f $1%s
no_permission: $2\u4f60\u6ca1\u6709\u6743\u9650\uff01 ($1%s)
no_permission_event: $2\u4f60\u6ca1\u6709\u6743\u9650\u8fd9\u6837\u505a\uff01 ($1%s)
no_plot_perms: $2\u4f60\u9700\u8981\u5730\u76ae\u4e3b\u4eba\u6743\u9650
cant_claim_more_plots: $2\u4f60\u4e0d\u80fd\u518d\u9886\u53d6\u66f4\u591a\u5730\u76ae\u4e86
cant_transfer_more_plots: $2\u4f60\u4e0d\u80fd\u7ed9\u90a3\u4e2a\u73a9\u5bb6\u66f4\u591a\u5730\u76ae\u4e86
cant_claim_more_plots_num: $2\u4f60\u4e0d\u80fd\u540c\u65f6\u9886\u53d6\u8d85\u8fc7 $1%s $2\u4e2a\u5730\u76ae
you_be_denied: $2\u4f60\u4e0d\u80fd\u8fdb\u5165\u90a3\u4e2a\u5730\u76ae
merge_request_confirm: \u6765\u81ea %s \u7684\u5730\u76ae\u5408\u5e76\u7533\u8bf7
cant_claim_more_clusters: $2You can't claim more clusters.
merge:
merge_not_valid: $2\u8fd9\u4e2a\u5408\u5e76\u8bf7\u6c42\u4e0d\u518d\u5408\u6cd5
merge_accepted: $2\u5408\u5e76\u8bf7\u6c42\u88ab\u63a5\u53d7
success_merge: $2\u5730\u76ae\u6210\u529f\u88ab\u5408\u5e76\uff01
merge_requested: $2\u6210\u529f\u7684\u53d1\u9001\u4e86\u4e00\u4e2a\u5408\u5e76\u8bf7\u6c42
no_perm_merge: $2\u4f60\u4e0d\u662f\u5730\u76ae $1%plot% \u7684\u4e3b\u4eba
no_available_automerge: $2\u4f60\u5728\u6307\u5b9a\u4f4d\u7f6e\u6ca1\u6709\u90bb\u8fd1\u7684\u5730\u76ae\u6216\u4e0d\u5141\u8bb8\u4f60\u5408\u5e76\u6210\u90a3\u6837\u5927\u5c0f\u3002
unlink_required: $2\u4f60\u9700\u8981\u5148\u89e3\u9664\u5730\u76ae\u7684\u5408\u5e76\u3002
unlink_impossible: $2\u4f60\u53ea\u80fd\u89e3\u9664\u8d85\u7ea7\u5730\u76ae\u7684\u5408\u5e76
unlink_success: $2\u6210\u529f\u7684\u89e3\u9664\u4e86\u5730\u76ae\u7684\u5408\u5e76\u3002
commandconfig:
not_valid_subcommand: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u5b50\u547d\u4ee4
did_you_mean: $2\u4f60\u60f3\u8f93\u5165\uff1a $1%s$2\u5417
name_little: $2%s0 \u7684\u540d\u5b57\u592a\u77ed\u4e86\uff0c$1%s1$2<$1%s3
no_commands: $2\u5f88\u62b1\u6b49\uff0c\u4f60\u6ca1\u6709\u6743\u9650\u4f7f\u7528\u4efb\u4f55\u5b50\u6307\u4ee4\u3002
subcommand_set_options_header: '$2\u6b63\u786e\u7684\u503c\uff1a '
command_syntax: $1\u8bf7\u4f7f\u7528\uff1a $2%s
flag_tutorial_usage: $1\u4f7f\u4e00\u4f4d\u7ba1\u7406\u5458\u8bbe\u7f6e\u6807\u5fd7\uff1a $2%s
errors:
invalid_player_wait: $2\u6ca1\u6709\u627e\u5230\u73a9\u5bb6\uff1a$1%s$2\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002
invalid_player: $2\u6ca1\u6709\u627e\u5230\u73a9\u5bb6\uff1a $1%s$2.
invalid_player_offline: $2\u8fd9\u4e2a\u73a9\u5bb6\u5fc5\u987b\u5728\u7ebf\uff1a $1%s.
error: $2\u53d1\u751f\u4e86\u4e00\u4e2a\u9519\u8bef\uff1a %s
command_went_wrong: $2\u5f53\u4f7f\u7528\u6307\u4ee4\u65f6\u53d1\u751f\u4e86\u9519\u8bef...
no_free_plots: $2\u73b0\u5728\u6ca1\u6709\u53ef\u83b7\u5f97\u7684\u514d\u8d39\u5730\u76ae
not_in_plot: $2\u4f60\u4e0d\u5728\u4e00\u4e2a\u5730\u76ae\u4e2d
not_in_cluster: $2\u4f60\u5fc5\u987b\u5728\u4e00\u4e2a\u5730\u76ae\u7fa4\u7ec4\u4e2d\u624d\u80fd\u4f7f\u7528\u8fd9\u4e2a\u547d\u4ee4
not_in_plot_world: $2\u4f60\u4e0d\u5728\u4e00\u4e2a\u5730\u76ae\u4e16\u754c\u4e2d
plotworld_incompatible: $2\u4e24\u4e2a\u4e16\u754c\u5fc5\u987b\u662f\u517c\u5bb9\u7684
not_valid_world: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u4e16\u754c(\u533a\u5206\u5927\u5c0f\u5199)
not_valid_plot_world: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u5730\u76ae\u4e16\u754c(\u533a\u5206\u5927\u5c0f\u5199)
no_plots: $2\u4f60\u4e0d\u62e5\u6709\u4efb\u4f55\u5730\u76ae
wait_for_timer: $2A setblock timer is bound to either the current plot or you. Please wait for it to finish
invalid_command_flag: '$2Invalid command flag: %s0'
paste:
debug_report_created: $1U\u5c06DEBUG\u4fe1\u606f\u7c98\u8d34\u5230\u4e86\uff1a $1%url%
purge:
purge_success: $4\u6210\u529f\u7684\u5408\u5e76\u4e86 %s \u5757\u5730\u76ae
trim:
trim_in_progress: \u5df2\u7ecf\u6709\u4e00\u4e2a\u5730\u76ae\u6e05\u7406\u4efb\u52a1\u5728\u8fdb\u884c\uff01
not_valid_hybrid_plot_world: \u8981\u8fdb\u884c\u8fd9\u4e2a\u884c\u52a8\uff0c\u4f60\u9700\u8981\u7acb\u65b9\u4f53\u5730\u76ae\u7ba1\u7406\u7cfb\u7edf\u3002
block list:
block_list_separater: '$1,$2 '
biome:
need_biome: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u6b63\u786e\u7684\u751f\u7269\u7fa4\u7cfb
biome_set_to: $2\u5730\u76ae\u7684\u751f\u7269\u7fa4\u7cfb\u8bbe\u7f6e\u4e3a $2
teleport:
teleported_to_plot: $1\u4f60\u5df2\u88ab\u4f20\u9001
teleported_to_road: $2\u4f60\u88ab\u4f20\u9001\u5230\u4e86\u9053\u8def\u4e0a
teleport_in_seconds: $1\u4f20\u9001\u5c06\u5728 %s \u79d2\u540e\u8fdb\u884c\u3002\u4e0d\u8981\u79fb\u52a8...
teleport_failed: $2\u4f20\u9001\u56e0\u79fb\u52a8\u6216\u4f24\u5bb3\u88ab\u53d6\u6d88
set block:
set_block_action_finished: $1\u4e0a\u4e00\u4e2a\u65b9\u5757\u8bbe\u7f6e\u884c\u52a8\u73b0\u5728\u5b8c\u6210\u4e86\u3002
unsafe:
debugallowunsafe_on: $2\u5141\u8bb8\u4e86\u4e0d\u5b89\u5168\u7684\u884c\u52a8
debugallowunsafe_off: $2\u4e0d\u5b89\u5168\u7684\u884c\u52a8\u88ab\u7981\u7528
debug:
debug_header: $1Debug \u4fe1\u606f&-
debug_section: $2>> $1&l%val%
debug_line: $2>> $1%var%$2:$1 %val%&-
invalid:
not_valid_data: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6570\u636eID
not_valid_block: $2%s \u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u65b9\u5757
not_allowed_block: $2\u8fd9\u4e2a\u65b9\u5757\u88ab\u7981\u7528\uff1a %s
not_valid_number: $2\u5728\u8303\u56f4\u4e0a\u8fd9\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6570\u503c\uff1a %s
not_valid_plot_id: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u5730\u76aeID
plot_id_form: $2\u5730\u76ae ID \u7684\u683c\u5f0f\u5fc5\u987b\u4e3a\uff1a $1X;Y $2\u4f8b\u5982\uff1a $1-5;7
not_your_plot: $2\u90a3\u4e0d\u662f\u4f60\u7684\u5730\u76ae
no_such_plot: $2\u6ca1\u6709\u8fd9\u4e2a\u5730\u76ae
player_has_not_been_on: $2\u90a3\u4f4d\u73a9\u5bb6\u4e0d\u5728\u5730\u76ae\u4e2d
found_no_plots: $2\u5728\u4f60\u7684\u641c\u7d22\u8bf7\u6c42\u4e2d\u627e\u4e0d\u5230\u5339\u914d\u7684\u5730\u76ae
camera:
camera_started: $2\u4f60\u8fdb\u5165\u4e86\u5730\u76ae $1%s \u7684\u6444\u50cf\u673a\u6a21\u5f0f
camera_stopped: $2\u4f60\u9000\u51fa\u4e86\u6444\u50cf\u673a\u6a21\u5f0f
need:
need_plot_number: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u5730\u76aeID\u6216\u5730\u76ae\u7b80\u79f0
need_block: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u65b9\u5757
need_plot_id: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u65b9\u5757 ID\u3002
need_plot_world: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u5730\u76ae\u533a\u57df\u3002
need_user: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u7528\u6237\u540d
info:
none: \u65e0
now: \u73b0\u5728
never: \u4ece\u4e0d
unknown: \u672a\u77e5
everyone: \u6240\u6709\u4eba
plot_unowned: $2\u6267\u884c\u8fd9\u4e2a\u884c\u52a8\u5f53\u524d\u5730\u76ae\u5fc5\u987b\u6709\u4e3b\u4eba
plot_info_unclaimed: $2\u5730\u76ae $1%s$2 \u8fd8\u6ca1\u6709\u88ab\u9886\u53d6
plot_info_header: $3&m---------&r $1\u4fe1\u606f $3&m---------
plot_info: $1ID\uff1a $2%id%$1&-$1\u522b\u79f0\uff1a $2%alias%$1&-$1\u5730\u76ae\u4e3b\u4eba\uff1a $2%owner%$1&-$1\u751f\u7269\u7fa4\u7cfb\uff1a $2%biome%$1&-$1\u662f\u5426\u53ef\u5efa\u7b51\uff1a $2%build%$1&-$1\u8bc4\u7ea7\uff1a $2%rating%&-$1\u53ef\u89c1\uff1a $2%seen%&-$1\u63f4\u5efa\u8005\uff1a $2%trusted%$1&-$1\u6210\u5458\uff1a $2%members%$1&-$1\u9ed1\u540d\u5355\uff1a $2%denied%$1&-$1\u6807\u5fd7\uff1a $2%flags%
plot_info_footer: $3&m---------&r $1\u4fe1\u606f $3&m---------
plot_info_trusted: $1\u63f4\u5efa\u8005\uff1a$2 %trusted%
plot_info_members: $1\u6210\u5458\uff1a$2 %members%
plot_info_denied: $1\u9ed1\u540d\u5355\uff1a$2 %denied%
plot_info_flags: $1\u6807\u5fd7\uff1a$2 %flags%
plot_info_biome: $1\u751f\u7269\u7fa4\u7cfb\uff1a$2 %biome%
plot_info_rating: $1\u8bc4\u7ea7\uff1a$2 %rating%
plot_info_owner: $1\u5730\u76ae\u4e3b\u4eba\uff1a$2 %owner%
plot_info_id: $1\u5730\u76aeID\uff1a$2 %id%
plot_info_alias: $1\u5730\u76ae\u522b\u79f0\uff1a$2 %alias%
plot_info_size: $1\u5730\u76ae\u5927\u5c0f\uff1a$2 %size%
plot_info_seen: $1\u5730\u76ae\u53ef\u89c1\uff1a$2 %seen%
plot_user_list: ' $1%user%$2,'
plot_flag_list: $1%s0:%s1$2
info_syntax_console: $2/plot info X;Y
working:
generating_component: $1\u4ece\u60a8\u7684\u8bbe\u7f6e\u4e2d\u5f00\u59cb\u7ec4\u6210\u90e8\u4ef6
clearing_plot: $2\u6e05\u9664\u5730\u76ae\u5f02\u6b65\u5904\u7406\u3002
clearing_done: $4\u6e05\u7406\u5b8c\u6210\uff01\u82b1\u8d39\u4e86 %s \u6beb\u79d2\u3002
plot_not_claimed: $2\u5730\u76ae\u6ca1\u6709\u88ab\u9886\u53d6
plot_is_claimed: $2\u8fd9\u4e2a\u5730\u76ae\u5df2\u7ecf\u88ab\u9886\u53d6
claimed: $4\u4f60\u6210\u529f\u7684\u9886\u53d6\u4e86\u5730\u76ae
deleting_done: $4Delete completed! Took %sms.
list:
comment_list_header_paged: $2(\u7b2c $1%cur$2 \u9875/\u5171 $1%max$2 \u9875) $1\u5217\u51fa\u4e86 %amount% \u6761\u8bc4\u8bba
clickable: ' \uff08\u53ef\u70b9\u51fb\uff09'
area_list_header_paged: $2(\u7b2c $1%cur$2 \u9875/\u5171 $1%max$2 \u9875) $1\u5217\u51fa\u4e86 %amount% \u7247\u533a\u57df
plot_list_header_paged: $2(\u7b2c $1%cur$2 \u9875/\u5171 $1%max$2 \u9875) $1\u5217\u51fa\u4e86 %amount% \u5757\u5730\u76ae
plot_list_header: $1\u5217\u51fa\u4e86 %word% \u5730\u76ae
plot_list_item: $2>> $1%id$2:$1%world $2- $1%owner
plot_list_item_ordered: $2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner
plot_list_footer: $2>> $1%word% \u603b\u8ba1\u6709\u5757 $2%num% $1\u9886\u53d6\u7684 %plot%.
left:
left_plot: $2\u4f60\u79bb\u5f00\u4e86\u4e00\u4e2a\u5730\u76ae
chat:
plot_chat_format: '$2[$1\u5730\u76ae\u804a\u5929$2][$1%plot_id%$2] $1%sender%$2: $1%msg%'
plot_chat_forced: $2\u8fd9\u4e2a\u4e16\u754c\u5f3a\u5236\u6240\u6709\u4eba\u4f7f\u7528\u5730\u76ae\u804a\u5929
plot_chat_on: $4\u5f00\u542f\u4e86\u5730\u76ae\u804a\u5929\u3002
plot_chat_off: $4\u5173\u95ed\u4e86\u5730\u76ae\u804a\u5929\u3002
deny:
denied_removed: $4Y\u4f60\u6210\u529f\u7684\u4ece\u6b64\u5730\u76ae\u9ed1\u540d\u5355\u89e3\u9664\u4e86\u4e00\u4f4d\u73a9\u5bb6
denied_added: $4\u4f60\u6210\u529f\u7684\u5c06\u8fd9\u4f4d\u73a9\u5bb6\u52a0\u5165\u6b64\u5730\u76ae\u7684\u9ed1\u540d\u5355\u4e2d
denied_need_argument: $2\u7f3a\u5c11\u53c2\u6570\u3002\u8bf7\u4f7f\u7528$1/plot denied add <name> $2\u6216\u8005 $1/plot denied remove <name>
was_not_denied: $2\u90a3\u4f4d\u73a9\u5bb6\u4e0d\u5728\u6b64\u5730\u76ae\u7684\u9ed1\u540d\u5355\u4e2d
you_got_denied: $4\u4f60\u88ab\u6240\u5728\u7684\u5730\u76ae\u52a0\u5165\u4e86\u9ed1\u540d\u5355\uff0c\u6240\u4ee5\u4f60\u88ab\u4f20\u9001\u5230\u4e86\u51fa\u751f\u70b9\u3002
kick:
you_got_kicked: $4\u4f60\u88ab\u8e22\u51fa\u4e86\u5730\u76ae\uff01
rain:
need_on_off: $2\u4f60\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u503c\u3002\u6b63\u786e\u7684\u503c\uff1a $1on$2, $1off
setting_updated: $4\u4f60\u6210\u529f\u7684\u66f4\u65b0\u4e86\u8bbe\u7f6e\u3002
flag:
flag_key: $2\u5173\u952e\u8bcd\uff1a %s
flag_type: $2\u7c7b\u578b\uff1a %s
flag_desc: $2\u63cf\u8ff0\uff1a %s
not_valid_flag: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6807\u5fd7
not_valid_flag_suggested: $2\u90a3\u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u6807\u5fd7\u3002\u4f60\u60f3\u7528\uff1a $1%s \u5417\uff1f
not_valid_value: $2\u5730\u76ae\u503c\u5fc5\u987b\u4e3a\u4ee3\u6570
flag_not_in_plot: $2\u8fd9\u4e2a\u5730\u76ae\u76ee\u524d\u6ca1\u6709\u6807\u5fd7
flag_not_removed: $2\u8fd9\u4e2a\u6807\u5fd7\u4e0d\u80fd\u88ab\u79fb\u9664
flag_not_added: $2\u8fd9\u4e2a\u6807\u5fd7\u4e0d\u80fd\u88ab\u6dfb\u52a0
flag_removed: $4\u6210\u529f\u7684\u79fb\u9664\u4e86\u6807\u5fd7
flag_added: $4\u6210\u529f\u7684\u6dfb\u52a0\u4e86\u6807\u5fd7
trusted:
trusted_added: $4\u4f60\u6210\u529f\u7684\u4e3a\u5730\u76ae\u6dfb\u52a0\u4e86\u4e00\u4f4d\u4fe1\u4efb\u73a9\u5bb6
trusted_removed: $4\u4f60\u6210\u529f\u7684\u4e3a\u5730\u76ae\u79fb\u9664\u4e86\u4e00\u4f4d\u4fe1\u4efb\u73a9\u5bb6
was_not_added: $2\u90a3\u4f4d\u73a9\u5bb6\u5728\u8fd9\u4e2a\u5730\u76ae\u4e2d\u4e0d\u662f\u4fe1\u4efb\u73a9\u5bb6
plot_removed_user: $1\u56e0\u4e3a\u5730\u76ae\u4e3b\u4eba\u7684\u957f\u671f\u4e0d\u5728\u7ebf\uff0c\u4f60\u6240\u4f5c\u4e3a\u4fe1\u4efb\u73a9\u5bb6\u7684\u5730\u76ae %s \u5df2\u88ab\u5220\u9664
member:
removed_players: $2Removed %s players from this plot.
already_owner: $2\u73a9\u5bb6 %s0 \u5df2\u7ecf\u662f\u5730\u76ae\u4e3b\u4eba\u4e86
already_added: $2\u73a9\u5bb6 %s0 \u5df2\u7ecf\u88ab\u6dfb\u52a0\u5230\u6b64\u7c7b\u4e86
member_added: $4\u90a3\u4f4d\u73a9\u5bb6\u73b0\u5728\u5728\u5730\u76ae\u4e3b\u4eba\u5728\u7ebf\u65f6\u53ef\u4ee5\u7f16\u8f91\u5730\u76ae
member_removed: $1\u4f60\u6210\u529f\u7684\u4e3a\u5730\u76ae\u79fb\u9664\u4e86\u4e00\u4f4d\u6210\u5458
member_was_not_added: $2\u90a3\u4f4d\u73a9\u5bb6\u4e0d\u662f\u5730\u76ae\u7684\u4e00\u4f4d\u6210\u5458
plot_max_members: $2\u4f60\u4e0d\u88ab\u5141\u8bb8\u518d\u4e3a\u5730\u76ae\u589e\u52a0\u6210\u5458\u4e86
owner:
set_owner: $4\u4f60\u6210\u529f\u7684\u8bbe\u7f6e\u4e86\u5730\u76ae\u4e3b\u4eba
now_owner: $4\u4f60\u73b0\u5728\u662f\u5730\u76ae %s \u7684\u4e3b\u4eba\u4e86
signs:
owner_sign_line_1: $1\u5730\u76aeID\uff1a $1%id%
owner_sign_line_2: '$1\u6240\u6709\u8005:'
owner_sign_line_3: $2%plr%
owner_sign_line_4: $3\u88ab\u9886\u53d6
help:
help_header: $3&m---------&r $1\u5730\u76ae\u7cfb\u7edf\u2461\u5e2e\u52a9\u6587\u4ef6 $3&m---------
help_page_header: '$1\u7c7b\u578b: $2%category%$2,$1 \u9875\u9762\uff1a $2%current%$3/$2%max%$2'
help_footer: $3&m---------&r $1\u5730\u76ae\u7cfb\u7edf\u2461\u5e2e\u52a9\u6587\u4ef6 $3&m---------
help_info_item: $1/plots help %category% $3- $2%category_desc%
help_item: $1%usage% [%alias%]&- $3- $2%desc%&-
direction: $1\u5f53\u524d\u8def\u5f84\uff1a %dir%
grants:
granted_plots: $1\u7ed3\u679c\uff1a $1\u5269\u4f59 $2%s
granted_plot: $1\u4f60\u5c06 %s0 \u5730\u76ae\u8d60\u4e88 $2%s1
granted_plot_failed: $1\u8d60\u4e88\u5931\u8d25\u4e86\uff1a$2%s
'-':
custom_string: '-'
near:
plot_near: '$1Players: %s0'

Some files were not shown because too many files have changed in this diff Show More