mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-25 22:56:45 +01:00
WE unregistration + home/visit sorting + format
- WorldEdit listener unregistration for external masking/extent/async worldedit management. (wink) - Use the same listing for home and visit as previous behavior was confusing.
This commit is contained in:
parent
c386f33df8
commit
1c28a72f9c
@ -879,7 +879,7 @@ public class PS
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (b.getTimestamp() > a.getTimestamp()) {
|
else if (b.getTimestamp() > a.getTimestamp()) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -970,7 +970,7 @@ public class PS
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (b.getTimestamp() > a.getTimestamp()) {
|
else if (b.getTimestamp() > a.getTimestamp()) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1003,7 +1003,7 @@ public class PS
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (b.getTimestamp() > a.getTimestamp()) {
|
else if (b.getTimestamp() > a.getTimestamp()) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1150,7 +1150,7 @@ public class PS
|
|||||||
public int compare(final String a, final String b)
|
public int compare(final String a, final String b)
|
||||||
{
|
{
|
||||||
if ((priorityWorld != null) && StringMan.isEqual(a, priorityWorld)) {
|
if ((priorityWorld != null) && StringMan.isEqual(a, priorityWorld)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return a.hashCode() - b.hashCode();
|
return a.hashCode() - b.hashCode();
|
||||||
}
|
}
|
||||||
|
@ -89,9 +89,9 @@ public class PlotAPI
|
|||||||
* @deprecated Use this class if you just want to do a few simple things.<br>
|
* @deprecated Use this class if you just want to do a few simple things.<br>
|
||||||
* - It will remain stable for future versions of the plugin
|
* - It will remain stable for future versions of the plugin
|
||||||
* - The PlotPlayer and Plot class should be considered relatively safe
|
* - The PlotPlayer and Plot class should be considered relatively safe
|
||||||
* - For more advanced/intensive tasks you should consider using other classes
|
* - For more advanced/intensive tasks you should consider using other classes
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public PlotAPI()
|
public PlotAPI()
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
package com.intellectualcrafters.plot.commands;
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import com.intellectualcrafters.plot.PS;
|
import com.intellectualcrafters.plot.PS;
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
@ -51,7 +53,16 @@ public class Home extends SubCommand
|
|||||||
@Override
|
@Override
|
||||||
public boolean onCommand(final PlotPlayer plr, String[] args)
|
public boolean onCommand(final PlotPlayer plr, String[] args)
|
||||||
{
|
{
|
||||||
final ArrayList<Plot> plots = PS.get().sortPlotsByTemp(PS.get().getPlots(plr));//PS.get().sortPlots(PS.get().getPlots(plr), SortType.CREATION_DATE, null);
|
final Set<Plot> all = PS.get().getPlots(plr);
|
||||||
|
final Iterator<Plot> iter = all.iterator();
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
if (!iter.next().isBasePlot())
|
||||||
|
{
|
||||||
|
iter.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final ArrayList<Plot> plots = PS.get().sortPlotsByTemp(all);
|
||||||
if (plots.size() == 1)
|
if (plots.size() == 1)
|
||||||
{
|
{
|
||||||
MainUtil.teleportPlayer(plr, plr.getLocation(), plots.get(0));
|
MainUtil.teleportPlayer(plr, plr.getLocation(), plots.get(0));
|
||||||
|
@ -159,12 +159,12 @@ public class Info extends SubCommand
|
|||||||
final UUID uuid = player.getUUID();
|
final UUID uuid = player.getUUID();
|
||||||
final String name = MainUtil.getName(plot.owner);
|
final String name = MainUtil.getName(plot.owner);
|
||||||
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cPlot Info", new String[] {
|
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cPlot Info", new String[] {
|
||||||
"&cID: &6" + plot.getId().toString(),
|
"&cID: &6" + plot.getId().toString(),
|
||||||
"&cOwner: &6" + name,
|
"&cOwner: &6" + name,
|
||||||
"&cAlias: &6" + plot.getSettings().getAlias(),
|
"&cAlias: &6" + plot.getSettings().getAlias(),
|
||||||
"&cBiome: &6" + plot.getBiome().toString().replaceAll("_", "").toLowerCase(),
|
"&cBiome: &6" + plot.getBiome().toString().replaceAll("_", "").toLowerCase(),
|
||||||
"&cCan Build: &6" + plot.isAdded(uuid),
|
"&cCan Build: &6" + plot.isAdded(uuid),
|
||||||
"&cIs Denied: &6" + plot.isDenied(uuid) }));
|
"&cIs Denied: &6" + plot.isDenied(uuid) }));
|
||||||
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cTrusted", new String[] { "&cAmount: &6" + plot.getTrusted().size(), "&8Click to view a list of the trusted users" }));
|
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cTrusted", new String[] { "&cAmount: &6" + plot.getTrusted().size(), "&8Click to view a list of the trusted users" }));
|
||||||
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cMembers", new String[] { "&cAmount: &6" + plot.getMembers().size(), "&8Click to view a list of plot members" }));
|
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cMembers", new String[] { "&cAmount: &6" + plot.getMembers().size(), "&8Click to view a list of plot members" }));
|
||||||
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cDenied", new String[] { "&cDenied", "&cAmount: &6" + plot.getDenied().size(), "&8Click to view a list of denied players" }));
|
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cDenied", new String[] { "&cDenied", "&cAmount: &6" + plot.getDenied().size(), "&8Click to view a list of denied players" }));
|
||||||
|
@ -61,7 +61,7 @@ public class MusicSubcommand extends SubCommand
|
|||||||
{
|
{
|
||||||
final PlotItemStack item = getItem(index);
|
final PlotItemStack item = getItem(index);
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
final int id = item.id == 7 ? 0 : item.id;
|
final int id = item.id == 7 ? 0 : item.id;
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
package com.intellectualcrafters.plot.commands;
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -114,6 +115,14 @@ public class Visit extends SubCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
final Plot plot = plots.get(index);
|
final Plot plot = plots.get(index);
|
||||||
|
final Iterator<Plot> iter = plots.iterator();
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
if (!iter.next().isBasePlot())
|
||||||
|
{
|
||||||
|
iter.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!plot.hasOwner())
|
if (!plot.hasOwner())
|
||||||
{
|
{
|
||||||
if (!Permissions.hasPermission(plr, "plots.visit.unowned"))
|
if (!Permissions.hasPermission(plr, "plots.visit.unowned"))
|
||||||
|
@ -248,7 +248,7 @@ public class list extends SubCommand
|
|||||||
if (MathMan.isInteger(va))
|
if (MathMan.isInteger(va))
|
||||||
{
|
{
|
||||||
if (MathMan.isInteger(vb)) {
|
if (MathMan.isInteger(vb)) {
|
||||||
return Integer.parseInt(vb) - Integer.parseInt(va);
|
return Integer.parseInt(vb) - Integer.parseInt(va);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -296,7 +296,7 @@ public class list extends SubCommand
|
|||||||
v2 += p2s;
|
v2 += p2s;
|
||||||
}
|
}
|
||||||
if ((v2 == v1) && (v2 != 0)) {
|
if ((v2 == v1) && (v2 != 0)) {
|
||||||
return p2s - p1s;
|
return p2s - p1s;
|
||||||
}
|
}
|
||||||
return (int) Math.signum(v2 - v1);
|
return (int) Math.signum(v2 - v1);
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ public class Configuration
|
|||||||
public String parseString(final String string)
|
public String parseString(final String string)
|
||||||
{
|
{
|
||||||
if (validateValue(string)) {
|
if (validateValue(string)) {
|
||||||
return string.toUpperCase();
|
return string.toUpperCase();
|
||||||
}
|
}
|
||||||
return "FOREST";
|
return "FOREST";
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ public class Configuration
|
|||||||
}
|
}
|
||||||
final StringComparison<PlotBlock>.ComparisonResult value = BlockManager.manager.getClosestBlock(block);
|
final StringComparison<PlotBlock>.ComparisonResult value = BlockManager.manager.getClosestBlock(block);
|
||||||
if ((value == null) || (value.match > 1)) {
|
if ((value == null) || (value.match > 1)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -215,9 +215,9 @@ public class Settings
|
|||||||
* MongoDB enabled?
|
* MongoDB enabled?
|
||||||
*/
|
*/
|
||||||
public static boolean USE_MONGO = false; /*
|
public static boolean USE_MONGO = false; /*
|
||||||
* TODO: Implement Mongo
|
* TODO: Implement Mongo
|
||||||
* @Brandon
|
* @Brandon
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* SQLite enabled?
|
* SQLite enabled?
|
||||||
*/
|
*/
|
||||||
|
@ -2289,9 +2289,9 @@ public class SQLManager implements AbstractDB
|
|||||||
public PreparedStatement get() throws SQLException
|
public PreparedStatement get() throws SQLException
|
||||||
{
|
{
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
return connection.prepareStatement("DELETE FROM `"
|
return connection.prepareStatement("DELETE FROM `"
|
||||||
+ prefix
|
+ prefix
|
||||||
+ "plot_comments` WHERE `world` = ? AND `hashcode` = ? AND `comment` = ? AND `inbox` = ? AND `sender` = ?");
|
+ "plot_comments` WHERE `world` = ? AND `hashcode` = ? AND `comment` = ? AND `inbox` = ? AND `sender` = ?");
|
||||||
}
|
}
|
||||||
return connection.prepareStatement("DELETE FROM `" + prefix + "plot_comments` WHERE `comment` = ? AND `inbox` = ? AND `sender` = ?");
|
return connection.prepareStatement("DELETE FROM `" + prefix + "plot_comments` WHERE `comment` = ? AND `inbox` = ? AND `sender` = ?");
|
||||||
}
|
}
|
||||||
@ -2322,7 +2322,7 @@ public class SQLManager implements AbstractDB
|
|||||||
public PreparedStatement get() throws SQLException
|
public PreparedStatement get() throws SQLException
|
||||||
{
|
{
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
return connection.prepareStatement("DELETE FROM `" + prefix + "plot_comments` WHERE `world` = ? AND `hashcode` = ? AND `inbox` = ?");
|
return connection.prepareStatement("DELETE FROM `" + prefix + "plot_comments` WHERE `world` = ? AND `hashcode` = ? AND `inbox` = ?");
|
||||||
}
|
}
|
||||||
return connection.prepareStatement("DELETE FROM `" + prefix + "plot_comments` `inbox` = ?");
|
return connection.prepareStatement("DELETE FROM `" + prefix + "plot_comments` `inbox` = ?");
|
||||||
}
|
}
|
||||||
@ -2353,7 +2353,7 @@ public class SQLManager implements AbstractDB
|
|||||||
public PreparedStatement get() throws SQLException
|
public PreparedStatement get() throws SQLException
|
||||||
{
|
{
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
return connection.prepareStatement("SELECT * FROM `" + prefix + "plot_comments` WHERE `world` = ? AND `hashcode` = ? AND `inbox` = ?");
|
return connection.prepareStatement("SELECT * FROM `" + prefix + "plot_comments` WHERE `world` = ? AND `hashcode` = ? AND `inbox` = ?");
|
||||||
}
|
}
|
||||||
return connection.prepareStatement("SELECT * FROM `" + prefix + "plot_comments` WHERE `inbox` = ?");
|
return connection.prepareStatement("SELECT * FROM `" + prefix + "plot_comments` WHERE `inbox` = ?");
|
||||||
}
|
}
|
||||||
|
@ -144,29 +144,31 @@ public class Plot
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a new/cached plot object at a given world/plot id
|
* Return a new/cached plot object at a given world/plot id
|
||||||
*
|
*
|
||||||
* @see MainUtil#getPlotSelectionOwned(String world, PlotId bottom, PlotId top) return a list of owned plots between (inclusive) two plot ids.
|
* @see MainUtil#getPlotSelectionOwned(String world, PlotId bottom, PlotId top) return a list of owned plots between (inclusive) two plot ids.
|
||||||
*
|
*
|
||||||
* @param world
|
* @param world
|
||||||
* @param id
|
* @param id
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Plot getPlot(String world, PlotId id) {
|
public static Plot getPlot(final String world, final PlotId id)
|
||||||
|
{
|
||||||
return MainUtil.getPlot(world, id);
|
return MainUtil.getPlot(world, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a new/cached plot object at a given location
|
* Return a new/cached plot object at a given location
|
||||||
*
|
*
|
||||||
* @see PlotPlayer#getCurrentPlot() if a player is expected here.
|
* @see PlotPlayer#getCurrentPlot() if a player is expected here.
|
||||||
*
|
*
|
||||||
* @param loc
|
* @param loc
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Plot getPlot(Location loc) {
|
public static Plot getPlot(final Location loc)
|
||||||
|
{
|
||||||
return MainUtil.getPlot(loc);
|
return MainUtil.getPlot(loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,7 +194,7 @@ public class Plot
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for a saved plots (Used by the database manager when plots are fetched)
|
* Constructor for a saved plots (Used by the database manager when plots are fetched)
|
||||||
*
|
*
|
||||||
* @see MainUtil#getPlot(String, PlotId) for existing plots
|
* @see MainUtil#getPlot(String, PlotId) for existing plots
|
||||||
*
|
*
|
||||||
* @param id
|
* @param id
|
||||||
@ -793,7 +795,7 @@ public class Plot
|
|||||||
/**
|
/**
|
||||||
* Register a plot and create it in the database<br>
|
* Register a plot and create it in the database<br>
|
||||||
* - The plot will not be created if the owner is null<br>
|
* - The plot will not be created if the owner is null<br>
|
||||||
* - Any setting from before plot creation will not be saved until the server is stopped properly. i.e. Set any values/options after plot creation.
|
* - Any setting from before plot creation will not be saved until the server is stopped properly. i.e. Set any values/options after plot creation.
|
||||||
* @return true if plot was created successfully
|
* @return true if plot was created successfully
|
||||||
*/
|
*/
|
||||||
public boolean create()
|
public boolean create()
|
||||||
|
@ -120,11 +120,11 @@ public abstract class PlotPlayer implements CommandCaller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of plots the player owns
|
* Get the number of plots the player owns
|
||||||
*
|
*
|
||||||
* @see #getPlotCount(String);
|
* @see #getPlotCount(String);
|
||||||
* @see #getPlots()
|
* @see #getPlots()
|
||||||
*
|
*
|
||||||
* @return number of plots within the scope (globally, or in the player's current world as defined in the settings.yml)
|
* @return number of plots within the scope (globally, or in the player's current world as defined in the settings.yml)
|
||||||
*/
|
*/
|
||||||
public int getPlotCount()
|
public int getPlotCount()
|
||||||
|
@ -72,54 +72,54 @@ public class BO3Handler
|
|||||||
for (int x = pos1.getX(); x <= pos2.getX(); x++)
|
for (int x = pos1.getX(); x <= pos2.getX(); x++)
|
||||||
{
|
{
|
||||||
final int X = ((x + 7) - cx) >> 4;
|
final int X = ((x + 7) - cx) >> 4;
|
||||||
final int xx = (x - cx) % 16;
|
final int xx = (x - cx) % 16;
|
||||||
for (int z = pos1.getZ(); z <= pos2.getZ(); z++)
|
for (int z = pos1.getZ(); z <= pos2.getZ(); z++)
|
||||||
|
{
|
||||||
|
final int Z = ((z + 7) - cz) >> 4;
|
||||||
|
final int zz = (z - cz) % 16;
|
||||||
|
final ChunkLoc loc = new ChunkLoc(X, Z);
|
||||||
|
BO3 bo3 = map.get(loc);
|
||||||
|
for (int y = 1; y < height; y++)
|
||||||
|
{
|
||||||
|
final PlotBlock block = BlockManager.manager.getBlock(new Location(plot.world, x, y, z));
|
||||||
|
if ((block != null) && !contains(cpw.MAIN_BLOCK, block))
|
||||||
{
|
{
|
||||||
final int Z = ((z + 7) - cz) >> 4;
|
if (bo3 == null)
|
||||||
final int zz = (z - cz) % 16;
|
|
||||||
final ChunkLoc loc = new ChunkLoc(X, Z);
|
|
||||||
BO3 bo3 = map.get(loc);
|
|
||||||
for (int y = 1; y < height; y++)
|
|
||||||
{
|
{
|
||||||
final PlotBlock block = BlockManager.manager.getBlock(new Location(plot.world, x, y, z));
|
bo3 = new BO3(alias, loc);
|
||||||
if ((block != null) && !contains(cpw.MAIN_BLOCK, block))
|
map.put(loc, bo3);
|
||||||
{
|
content = true;
|
||||||
if (bo3 == null)
|
|
||||||
{
|
|
||||||
bo3 = new BO3(alias, loc);
|
|
||||||
map.put(loc, bo3);
|
|
||||||
content = true;
|
|
||||||
}
|
|
||||||
bo3.addBlock(xx, y - height - 1, zz, block);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final PlotBlock floor = BlockManager.manager.getBlock(new Location(plot.world, x, height, z));
|
|
||||||
if ((floor != null) && !contains(cpw.TOP_BLOCK, floor))
|
|
||||||
{
|
|
||||||
if (bo3 == null)
|
|
||||||
{
|
|
||||||
bo3 = new BO3(alias, loc);
|
|
||||||
map.put(loc, bo3);
|
|
||||||
content = true;
|
|
||||||
}
|
|
||||||
bo3.addBlock(xx, -1, zz, floor);
|
|
||||||
}
|
|
||||||
for (int y = height + 1; y < 256; y++)
|
|
||||||
{
|
|
||||||
final PlotBlock block = BlockManager.manager.getBlock(new Location(plot.world, x, y, z));
|
|
||||||
if ((block != null) && (block.id != 0))
|
|
||||||
{
|
|
||||||
if (bo3 == null)
|
|
||||||
{
|
|
||||||
bo3 = new BO3(alias, loc);
|
|
||||||
map.put(loc, bo3);
|
|
||||||
content = true;
|
|
||||||
}
|
|
||||||
bo3.addBlock(xx, y - height - 1, zz, block);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
bo3.addBlock(xx, y - height - 1, zz, block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
final PlotBlock floor = BlockManager.manager.getBlock(new Location(plot.world, x, height, z));
|
||||||
|
if ((floor != null) && !contains(cpw.TOP_BLOCK, floor))
|
||||||
|
{
|
||||||
|
if (bo3 == null)
|
||||||
|
{
|
||||||
|
bo3 = new BO3(alias, loc);
|
||||||
|
map.put(loc, bo3);
|
||||||
|
content = true;
|
||||||
|
}
|
||||||
|
bo3.addBlock(xx, -1, zz, floor);
|
||||||
|
}
|
||||||
|
for (int y = height + 1; y < 256; y++)
|
||||||
|
{
|
||||||
|
final PlotBlock block = BlockManager.manager.getBlock(new Location(plot.world, x, y, z));
|
||||||
|
if ((block != null) && (block.id != 0))
|
||||||
|
{
|
||||||
|
if (bo3 == null)
|
||||||
|
{
|
||||||
|
bo3 = new BO3(alias, loc);
|
||||||
|
map.put(loc, bo3);
|
||||||
|
content = true;
|
||||||
|
}
|
||||||
|
bo3.addBlock(xx, y - height - 1, zz, block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!content)
|
if (!content)
|
||||||
{
|
{
|
||||||
|
@ -66,6 +66,9 @@ public class MainUtil
|
|||||||
public static short[][] y_loc;
|
public static short[][] y_loc;
|
||||||
public static short[][] z_loc;
|
public static short[][] z_loc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area.
|
||||||
|
*/
|
||||||
public static void initCache()
|
public static void initCache()
|
||||||
{
|
{
|
||||||
if (x_loc == null)
|
if (x_loc == null)
|
||||||
@ -602,7 +605,7 @@ public class MainUtil
|
|||||||
}
|
}
|
||||||
TaskManager.TELEPORT_QUEUE.remove(name);
|
TaskManager.TELEPORT_QUEUE.remove(name);
|
||||||
if (!player.isOnline()) {
|
if (!player.isOnline()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sendMessage(player, C.TELEPORTED_TO_PLOT);
|
sendMessage(player, C.TELEPORTED_TO_PLOT);
|
||||||
player.teleport(location);
|
player.teleport(location);
|
||||||
@ -655,21 +658,21 @@ public class MainUtil
|
|||||||
final Location top = getPlotTopLoc(plot.world, plot.id);
|
final Location top = getPlotTopLoc(plot.world, plot.id);
|
||||||
|
|
||||||
final int bx = bot.getX() >> 4;
|
final int bx = bot.getX() >> 4;
|
||||||
final int bz = bot.getZ() >> 4;
|
final int bz = bot.getZ() >> 4;
|
||||||
|
|
||||||
final int tx = (top.getX() >> 4);
|
final int tx = (top.getX() >> 4);
|
||||||
final int tz = (top.getZ() >> 4);
|
final int tz = (top.getZ() >> 4);
|
||||||
|
|
||||||
final ArrayList<ChunkLoc> chunks = new ArrayList<>();
|
final ArrayList<ChunkLoc> chunks = new ArrayList<>();
|
||||||
|
|
||||||
for (int x = bx; x <= tx; x++)
|
for (int x = bx; x <= tx; x++)
|
||||||
{
|
{
|
||||||
for (int z = bz; z <= tz; z++)
|
for (int z = bz; z <= tz; z++)
|
||||||
{
|
{
|
||||||
chunks.add(new ChunkLoc(x, z));
|
chunks.add(new ChunkLoc(x, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BlockUpdateUtil.setBlockManager.update(plot.world, chunks);
|
BlockUpdateUtil.setBlockManager.update(plot.world, chunks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void createWorld(final String world, final String generator)
|
public static void createWorld(final String world, final String generator)
|
||||||
|
@ -381,7 +381,7 @@ public class NbtFactory
|
|||||||
|
|
||||||
LOAD_COMPOUND = READ_LIMITER_CLASS != null ?
|
LOAD_COMPOUND = READ_LIMITER_CLASS != null ?
|
||||||
new LoadMethodSkinUpdate(STREAM_TOOLS, READ_LIMITER_CLASS) :
|
new LoadMethodSkinUpdate(STREAM_TOOLS, READ_LIMITER_CLASS) :
|
||||||
new LoadMethodWorldUpdate(STREAM_TOOLS);
|
new LoadMethodWorldUpdate(STREAM_TOOLS);
|
||||||
SAVE_COMPOUND = getMethod(Modifier.STATIC, 0, STREAM_TOOLS, null, BASE_CLASS, DataOutput.class);
|
SAVE_COMPOUND = getMethod(Modifier.STATIC, 0, STREAM_TOOLS, null, BASE_CLASS, DataOutput.class);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -544,7 +544,7 @@ public class NbtFactory
|
|||||||
output = stream.getOutput();
|
output = stream.getOutput();
|
||||||
data = new DataOutputStream(
|
data = new DataOutputStream(
|
||||||
option == StreamOptions.GZIP_COMPRESSION ? new GZIPOutputStream(output) : output
|
option == StreamOptions.GZIP_COMPRESSION ? new GZIPOutputStream(output) : output
|
||||||
);
|
);
|
||||||
|
|
||||||
invokeMethod(get().SAVE_COMPOUND, null, source.getHandle(), data);
|
invokeMethod(get().SAVE_COMPOUND, null, source.getHandle(), data);
|
||||||
suppress = false;
|
suppress = false;
|
||||||
|
@ -99,7 +99,7 @@ public class SetBlockQueue
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
if (locked) {
|
if (locked) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((blocks == null) || (blocks.size() == 0))
|
if ((blocks == null) || (blocks.size() == 0))
|
||||||
{
|
{
|
||||||
@ -125,7 +125,7 @@ public class SetBlockQueue
|
|||||||
while ((blocks.size() > 0) && ((System.currentTimeMillis() - last) < (50 + allocate)))
|
while ((blocks.size() > 0) && ((System.currentTimeMillis() - last) < (50 + allocate)))
|
||||||
{
|
{
|
||||||
if (locked) {
|
if (locked) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Iterator<Entry<ChunkWrapper, PlotBlock[][]>> iter = blocks.entrySet().iterator();
|
final Iterator<Entry<ChunkWrapper, PlotBlock[][]>> iter = blocks.entrySet().iterator();
|
||||||
if (!iter.hasNext())
|
if (!iter.hasNext())
|
||||||
@ -232,29 +232,29 @@ public class SetBlockQueue
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
final int X = x >> 4;
|
final int X = x >> 4;
|
||||||
final int Z = z >> 4;
|
final int Z = z >> 4;
|
||||||
x -= X << 4;
|
x -= X << 4;
|
||||||
z -= Z << 4;
|
z -= Z << 4;
|
||||||
|
|
||||||
final ChunkWrapper wrap = new ChunkWrapper(world, X, Z);
|
final ChunkWrapper wrap = new ChunkWrapper(world, X, Z);
|
||||||
PlotBlock[][] result;
|
PlotBlock[][] result;
|
||||||
result = blocks.get(wrap);
|
result = blocks.get(wrap);
|
||||||
if (!blocks.containsKey(wrap))
|
if (!blocks.containsKey(wrap))
|
||||||
{
|
{
|
||||||
result = new PlotBlock[16][];
|
result = new PlotBlock[16][];
|
||||||
blocks.put(wrap, result);
|
blocks.put(wrap, result);
|
||||||
}
|
}
|
||||||
if ((y > 255) || (y < 0))
|
if ((y > 255) || (y < 0))
|
||||||
{
|
{
|
||||||
locked = false;
|
locked = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (result[y >> 4] == null)
|
if (result[y >> 4] == null)
|
||||||
{
|
{
|
||||||
result[y >> 4] = new PlotBlock[4096];
|
result[y >> 4] = new PlotBlock[4096];
|
||||||
}
|
}
|
||||||
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = block;
|
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = block;
|
||||||
locked = false;
|
locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setData(final String world, int x, final int y, int z, final byte data)
|
public static void setData(final String world, int x, final int y, int z, final byte data)
|
||||||
@ -265,32 +265,32 @@ public class SetBlockQueue
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
final int X = x >> 4;
|
final int X = x >> 4;
|
||||||
final int Z = z >> 4;
|
final int Z = z >> 4;
|
||||||
x -= X << 4;
|
x -= X << 4;
|
||||||
z -= Z << 4;
|
z -= Z << 4;
|
||||||
final ChunkWrapper wrap = new ChunkWrapper(world, X, Z);
|
final ChunkWrapper wrap = new ChunkWrapper(world, X, Z);
|
||||||
PlotBlock[][] result;
|
PlotBlock[][] result;
|
||||||
result = blocks.get(wrap);
|
result = blocks.get(wrap);
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
if (blocks == null)
|
if (blocks == null)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
result = new PlotBlock[16][];
|
result = new PlotBlock[16][];
|
||||||
blocks.put(wrap, result);
|
blocks.put(wrap, result);
|
||||||
}
|
}
|
||||||
if ((y > 255) || (y < 0))
|
if ((y > 255) || (y < 0))
|
||||||
{
|
{
|
||||||
locked = false;
|
locked = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (result[y >> 4] == null)
|
if (result[y >> 4] == null)
|
||||||
{
|
{
|
||||||
result[y >> 4] = new PlotBlock[4096];
|
result[y >> 4] = new PlotBlock[4096];
|
||||||
}
|
}
|
||||||
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = new PlotBlock((short) -1, data);
|
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = new PlotBlock((short) -1, data);
|
||||||
locked = false;
|
locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setBlock(final String world, int x, final int y, int z, final int id)
|
public static void setBlock(final String world, int x, final int y, int z, final int id)
|
||||||
@ -301,41 +301,41 @@ public class SetBlockQueue
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
final int X = x >> 4;
|
final int X = x >> 4;
|
||||||
final int Z = z >> 4;
|
final int Z = z >> 4;
|
||||||
x -= X << 4;
|
x -= X << 4;
|
||||||
z -= Z << 4;
|
z -= Z << 4;
|
||||||
final ChunkWrapper wrap = new ChunkWrapper(world, X, Z);
|
final ChunkWrapper wrap = new ChunkWrapper(world, X, Z);
|
||||||
PlotBlock[][] result;
|
PlotBlock[][] result;
|
||||||
result = blocks.get(wrap);
|
result = blocks.get(wrap);
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
if (blocks == null)
|
if (blocks == null)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
result = new PlotBlock[16][];
|
result = new PlotBlock[16][];
|
||||||
blocks.put(wrap, result);
|
blocks.put(wrap, result);
|
||||||
}
|
}
|
||||||
if ((y > 255) || (y < 0))
|
if ((y > 255) || (y < 0))
|
||||||
{
|
{
|
||||||
locked = false;
|
locked = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (result[y >> 4] == null)
|
if (result[y >> 4] == null)
|
||||||
{
|
{
|
||||||
result[y >> 4] = new PlotBlock[4096];
|
result[y >> 4] = new PlotBlock[4096];
|
||||||
}
|
}
|
||||||
if (id == lastInt)
|
if (id == lastInt)
|
||||||
{
|
{
|
||||||
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = lastBlock;
|
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = lastBlock;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lastInt = id;
|
lastInt = id;
|
||||||
lastBlock = new PlotBlock((short) id, (byte) 0);
|
lastBlock = new PlotBlock((short) id, (byte) 0);
|
||||||
}
|
}
|
||||||
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = lastBlock;
|
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = lastBlock;
|
||||||
locked = false;
|
locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ChunkWrapper
|
public static class ChunkWrapper
|
||||||
|
@ -563,7 +563,7 @@ public class FancyMessage implements JsonRepresentedObject, Cloneable, Iterable<
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the text is a translatable key, and it has replaceable values, this function can be used to set the replacements that will be used in the message.
|
* If the text is a translatable key, and it has replaceable values, this function can be used to set the replacements that will be used in the message.
|
||||||
|
@ -372,7 +372,7 @@ public class EntityWrapper
|
|||||||
}
|
}
|
||||||
case ARMOR_STAND:
|
case ARMOR_STAND:
|
||||||
{ // NEW
|
{ // NEW
|
||||||
// CHECK positions
|
// CHECK positions
|
||||||
final ArmorStand stand = (ArmorStand) entity;
|
final ArmorStand stand = (ArmorStand) entity;
|
||||||
inventory = new ItemStack[] { stand.getItemInHand().clone(), stand.getHelmet().clone(), stand.getChestplate().clone(), stand.getLeggings().clone(), stand.getBoots().clone() };
|
inventory = new ItemStack[] { stand.getItemInHand().clone(), stand.getHelmet().clone(), stand.getChestplate().clone(), stand.getLeggings().clone(), stand.getBoots().clone() };
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
@ -665,7 +665,7 @@ public class EntityWrapper
|
|||||||
}
|
}
|
||||||
case ARMOR_STAND:
|
case ARMOR_STAND:
|
||||||
{ // NEW
|
{ // NEW
|
||||||
// CHECK positions
|
// CHECK positions
|
||||||
final ArmorStand stand = (ArmorStand) entity;
|
final ArmorStand stand = (ArmorStand) entity;
|
||||||
if (inventory[0] != null)
|
if (inventory[0] != null)
|
||||||
{
|
{
|
||||||
|
@ -315,181 +315,181 @@ public class BukkitChunkManager extends ChunkManager
|
|||||||
final int p2x = pos2.getX();
|
final int p2x = pos2.getX();
|
||||||
final int p2z = pos2.getZ();
|
final int p2z = pos2.getZ();
|
||||||
final int bcx = p1x >> 4;
|
final int bcx = p1x >> 4;
|
||||||
final int bcz = p1z >> 4;
|
final int bcz = p1z >> 4;
|
||||||
final int tcx = p2x >> 4;
|
final int tcx = p2x >> 4;
|
||||||
final int tcz = p2z >> 4;
|
final int tcz = p2z >> 4;
|
||||||
|
|
||||||
final boolean canRegen = ((plotworld.TYPE != 0) && (plotworld.TERRAIN == 0));
|
final boolean canRegen = ((plotworld.TYPE != 0) && (plotworld.TERRAIN == 0));
|
||||||
|
|
||||||
final ArrayList<ChunkLoc> chunks = new ArrayList<ChunkLoc>();
|
final ArrayList<ChunkLoc> chunks = new ArrayList<ChunkLoc>();
|
||||||
|
|
||||||
for (int x = bcx; x <= tcx; x++)
|
for (int x = bcx; x <= tcx; x++)
|
||||||
{
|
|
||||||
for (int z = bcz; z <= tcz; z++)
|
|
||||||
{
|
|
||||||
chunks.add(new ChunkLoc(x, z));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AugmentedPopulator augpop = null;
|
|
||||||
final World worldObj = Bukkit.getWorld(world);
|
|
||||||
final List<BlockPopulator> populators = worldObj.getPopulators();
|
|
||||||
for (final BlockPopulator populator : populators)
|
|
||||||
{
|
|
||||||
if (populator instanceof AugmentedPopulator)
|
|
||||||
{
|
|
||||||
final AugmentedPopulator current = ((AugmentedPopulator) populator);
|
|
||||||
if (current.cluster == null)
|
|
||||||
{
|
{
|
||||||
augpop = current;
|
for (int z = bcz; z <= tcz; z++)
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (ClusterManager.contains(current.cluster, pos1))
|
|
||||||
{
|
|
||||||
augpop = current;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final Random r = new Random(System.currentTimeMillis());
|
|
||||||
final AugmentedPopulator ap = augpop;
|
|
||||||
TaskManager.runTask(new Runnable()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
final long start = System.currentTimeMillis();
|
|
||||||
while ((chunks.size() > 0) && ((System.currentTimeMillis() - start) < 5))
|
|
||||||
{
|
|
||||||
final ChunkLoc chunk = chunks.remove(0);
|
|
||||||
final int x = chunk.x;
|
|
||||||
final int z = chunk.z;
|
|
||||||
final int xxb = x << 4;
|
|
||||||
final int zzb = z << 4;
|
|
||||||
final int xxt = xxb + 15;
|
|
||||||
final int zzt = zzb + 15;
|
|
||||||
CURRENT_PLOT_CLEAR = null;
|
|
||||||
final Chunk chunkObj = worldObj.getChunkAt(x, z);
|
|
||||||
if (!chunkObj.load(false))
|
|
||||||
{
|
{
|
||||||
continue;
|
chunks.add(new ChunkLoc(x, z));
|
||||||
}
|
}
|
||||||
CURRENT_PLOT_CLEAR = new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
|
}
|
||||||
if ((xxb >= p1x) && (xxt <= p2x) && (zzb >= p1z) && (zzt <= p2z))
|
|
||||||
|
AugmentedPopulator augpop = null;
|
||||||
|
final World worldObj = Bukkit.getWorld(world);
|
||||||
|
final List<BlockPopulator> populators = worldObj.getPopulators();
|
||||||
|
for (final BlockPopulator populator : populators)
|
||||||
|
{
|
||||||
|
if (populator instanceof AugmentedPopulator)
|
||||||
{
|
{
|
||||||
if (canRegen && (ap != null))
|
final AugmentedPopulator current = ((AugmentedPopulator) populator);
|
||||||
|
if (current.cluster == null)
|
||||||
{
|
{
|
||||||
ap.populate(worldObj, r, chunkObj);
|
augpop = current;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (ClusterManager.contains(current.cluster, pos1))
|
||||||
|
{
|
||||||
|
augpop = current;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final Random r = new Random(System.currentTimeMillis());
|
||||||
|
final AugmentedPopulator ap = augpop;
|
||||||
|
TaskManager.runTask(new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
final long start = System.currentTimeMillis();
|
||||||
|
while ((chunks.size() > 0) && ((System.currentTimeMillis() - start) < 5))
|
||||||
|
{
|
||||||
|
final ChunkLoc chunk = chunks.remove(0);
|
||||||
|
final int x = chunk.x;
|
||||||
|
final int z = chunk.z;
|
||||||
|
final int xxb = x << 4;
|
||||||
|
final int zzb = z << 4;
|
||||||
|
final int xxt = xxb + 15;
|
||||||
|
final int zzt = zzb + 15;
|
||||||
|
CURRENT_PLOT_CLEAR = null;
|
||||||
|
final Chunk chunkObj = worldObj.getChunkAt(x, z);
|
||||||
|
if (!chunkObj.load(false))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
CURRENT_PLOT_CLEAR = new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
|
||||||
|
if ((xxb >= p1x) && (xxt <= p2x) && (zzb >= p1z) && (zzt <= p2z))
|
||||||
|
{
|
||||||
|
if (canRegen && (ap != null))
|
||||||
|
{
|
||||||
|
ap.populate(worldObj, r, chunkObj);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regenerateChunk(world, chunk);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
boolean checkX1 = false;
|
||||||
|
boolean checkX2 = false;
|
||||||
|
boolean checkZ1 = false;
|
||||||
|
boolean checkZ2 = false;
|
||||||
|
|
||||||
|
int xxb2;
|
||||||
|
int zzb2;
|
||||||
|
int xxt2;
|
||||||
|
int zzt2;
|
||||||
|
|
||||||
|
if (x == bcx)
|
||||||
|
{
|
||||||
|
xxb2 = p1x - 1;
|
||||||
|
checkX1 = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xxb2 = xxb;
|
||||||
|
}
|
||||||
|
if (x == tcx)
|
||||||
|
{
|
||||||
|
xxt2 = p2x + 1;
|
||||||
|
checkX2 = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xxt2 = xxt;
|
||||||
|
}
|
||||||
|
if (z == bcz)
|
||||||
|
{
|
||||||
|
zzb2 = p1z - 1;
|
||||||
|
checkZ1 = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zzb2 = zzb;
|
||||||
|
}
|
||||||
|
if (z == tcz)
|
||||||
|
{
|
||||||
|
zzt2 = p2z + 1;
|
||||||
|
checkZ2 = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zzt2 = zzt;
|
||||||
|
}
|
||||||
|
initMaps();
|
||||||
|
if (checkX1)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxb, xxb2, zzb2, zzt2); //
|
||||||
|
}
|
||||||
|
if (checkX2)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxt2, xxt, zzb2, zzt2); //
|
||||||
|
}
|
||||||
|
if (checkZ1)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxb2, xxt2, zzb, zzb2); //
|
||||||
|
}
|
||||||
|
if (checkZ2)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxb2, xxt2, zzt2, zzt); //
|
||||||
|
}
|
||||||
|
if (checkX1 && checkZ1)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxb, xxb2, zzb, zzb2); //
|
||||||
|
}
|
||||||
|
if (checkX2 && checkZ1)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxt2, xxt, zzb, zzb2); // ?
|
||||||
|
}
|
||||||
|
if (checkX1 && checkZ2)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxb, xxb2, zzt2, zzt); // ?
|
||||||
|
}
|
||||||
|
if (checkX2 && checkZ2)
|
||||||
|
{
|
||||||
|
saveRegion(worldObj, xxt2, xxt, zzt2, zzt); //
|
||||||
|
}
|
||||||
|
saveEntitiesOut(chunkObj, CURRENT_PLOT_CLEAR);
|
||||||
|
if (canRegen && (ap != null))
|
||||||
|
{
|
||||||
|
ap.populate(worldObj, r, chunkObj);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regenerateChunk(world, chunk);
|
||||||
|
}
|
||||||
|
restoreBlocks(worldObj, 0, 0);
|
||||||
|
restoreEntities(worldObj, 0, 0);
|
||||||
|
}
|
||||||
|
CURRENT_PLOT_CLEAR = null;
|
||||||
|
if (chunks.size() != 0)
|
||||||
|
{
|
||||||
|
TaskManager.runTaskLater(this, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
regenerateChunk(world, chunk);
|
TaskManager.runTaskLater(whenDone, 1);
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
boolean checkX1 = false;
|
});
|
||||||
boolean checkX2 = false;
|
return true;
|
||||||
boolean checkZ1 = false;
|
|
||||||
boolean checkZ2 = false;
|
|
||||||
|
|
||||||
int xxb2;
|
|
||||||
int zzb2;
|
|
||||||
int xxt2;
|
|
||||||
int zzt2;
|
|
||||||
|
|
||||||
if (x == bcx)
|
|
||||||
{
|
|
||||||
xxb2 = p1x - 1;
|
|
||||||
checkX1 = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xxb2 = xxb;
|
|
||||||
}
|
|
||||||
if (x == tcx)
|
|
||||||
{
|
|
||||||
xxt2 = p2x + 1;
|
|
||||||
checkX2 = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xxt2 = xxt;
|
|
||||||
}
|
|
||||||
if (z == bcz)
|
|
||||||
{
|
|
||||||
zzb2 = p1z - 1;
|
|
||||||
checkZ1 = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
zzb2 = zzb;
|
|
||||||
}
|
|
||||||
if (z == tcz)
|
|
||||||
{
|
|
||||||
zzt2 = p2z + 1;
|
|
||||||
checkZ2 = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
zzt2 = zzt;
|
|
||||||
}
|
|
||||||
initMaps();
|
|
||||||
if (checkX1)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxb, xxb2, zzb2, zzt2); //
|
|
||||||
}
|
|
||||||
if (checkX2)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxt2, xxt, zzb2, zzt2); //
|
|
||||||
}
|
|
||||||
if (checkZ1)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxb2, xxt2, zzb, zzb2); //
|
|
||||||
}
|
|
||||||
if (checkZ2)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxb2, xxt2, zzt2, zzt); //
|
|
||||||
}
|
|
||||||
if (checkX1 && checkZ1)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxb, xxb2, zzb, zzb2); //
|
|
||||||
}
|
|
||||||
if (checkX2 && checkZ1)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxt2, xxt, zzb, zzb2); // ?
|
|
||||||
}
|
|
||||||
if (checkX1 && checkZ2)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxb, xxb2, zzt2, zzt); // ?
|
|
||||||
}
|
|
||||||
if (checkX2 && checkZ2)
|
|
||||||
{
|
|
||||||
saveRegion(worldObj, xxt2, xxt, zzt2, zzt); //
|
|
||||||
}
|
|
||||||
saveEntitiesOut(chunkObj, CURRENT_PLOT_CLEAR);
|
|
||||||
if (canRegen && (ap != null))
|
|
||||||
{
|
|
||||||
ap.populate(worldObj, r, chunkObj);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
regenerateChunk(world, chunk);
|
|
||||||
}
|
|
||||||
restoreBlocks(worldObj, 0, 0);
|
|
||||||
restoreEntities(worldObj, 0, 0);
|
|
||||||
}
|
|
||||||
CURRENT_PLOT_CLEAR = null;
|
|
||||||
if (chunks.size() != 0)
|
|
||||||
{
|
|
||||||
TaskManager.runTaskLater(this, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TaskManager.runTaskLater(whenDone, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initMaps()
|
public static void initMaps()
|
||||||
@ -1293,91 +1293,91 @@ public class BukkitChunkManager extends ChunkManager
|
|||||||
final Location bot = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1);
|
final Location bot = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1);
|
||||||
final Location top = MainUtil.getPlotTopLoc(plot.world, plot.id);
|
final Location top = MainUtil.getPlotTopLoc(plot.world, plot.id);
|
||||||
final int bx = bot.getX() >> 4;
|
final int bx = bot.getX() >> 4;
|
||||||
final int bz = bot.getZ() >> 4;
|
final int bz = bot.getZ() >> 4;
|
||||||
|
|
||||||
final int tx = top.getX() >> 4;
|
final int tx = top.getX() >> 4;
|
||||||
final int tz = top.getZ() >> 4;
|
final int tz = top.getZ() >> 4;
|
||||||
|
|
||||||
final int size = (tx - bx) << 4;
|
final int size = (tx - bx) << 4;
|
||||||
|
|
||||||
final HashSet<Chunk> chunks = new HashSet<>();
|
final HashSet<Chunk> chunks = new HashSet<>();
|
||||||
for (int X = bx; X <= tx; X++)
|
for (int X = bx; X <= tx; X++)
|
||||||
{
|
|
||||||
for (int Z = bz; Z <= tz; Z++)
|
|
||||||
{
|
|
||||||
chunks.add(world.getChunkAt(X, Z));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean doWhole = false;
|
|
||||||
List<Entity> entities = null;
|
|
||||||
if (size > 200)
|
|
||||||
{
|
|
||||||
entities = world.getEntities();
|
|
||||||
if (entities.size() < (16 + ((size * size) / 64)))
|
|
||||||
{
|
|
||||||
doWhole = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (doWhole)
|
|
||||||
{
|
|
||||||
for (final Entity entity : entities)
|
|
||||||
{
|
|
||||||
if (!((entity instanceof Creature) || (entity instanceof Vehicle)))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
final org.bukkit.Location loc = entity.getLocation();
|
|
||||||
final Chunk chunk = loc.getChunk();
|
|
||||||
if (chunks.contains(chunk))
|
|
||||||
{
|
|
||||||
final int X = chunk.getX();
|
|
||||||
final int Z = chunk.getX();
|
|
||||||
if ((X > bx) && (X < tx) && (Z > bz) && (Z < tz))
|
|
||||||
{
|
|
||||||
count(count, entity);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(loc));
|
|
||||||
if (plot.id.equals(id))
|
|
||||||
{
|
{
|
||||||
count(count, entity);
|
for (int Z = bz; Z <= tz; Z++)
|
||||||
|
{
|
||||||
|
chunks.add(world.getChunkAt(X, Z));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
boolean doWhole = false;
|
||||||
}
|
List<Entity> entities = null;
|
||||||
}
|
if (size > 200)
|
||||||
else
|
|
||||||
{
|
|
||||||
for (final Chunk chunk : chunks)
|
|
||||||
{
|
|
||||||
final int X = chunk.getX();
|
|
||||||
final int Z = chunk.getX();
|
|
||||||
final Entity[] ents = chunk.getEntities();
|
|
||||||
for (final Entity entity : ents)
|
|
||||||
{
|
|
||||||
if (!((entity instanceof Creature) || (entity instanceof Vehicle)))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ((X == bx) || (X == tx) || (Z == bz) || (Z == tz))
|
|
||||||
{
|
|
||||||
final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(entity));
|
|
||||||
if (plot.id.equals(id))
|
|
||||||
{
|
{
|
||||||
count(count, entity);
|
entities = world.getEntities();
|
||||||
|
if (entities.size() < (16 + ((size * size) / 64)))
|
||||||
|
{
|
||||||
|
doWhole = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
if (doWhole)
|
||||||
{
|
{
|
||||||
count(count, entity);
|
for (final Entity entity : entities)
|
||||||
}
|
{
|
||||||
}
|
if (!((entity instanceof Creature) || (entity instanceof Vehicle)))
|
||||||
}
|
{
|
||||||
}
|
continue;
|
||||||
return count;
|
}
|
||||||
|
final org.bukkit.Location loc = entity.getLocation();
|
||||||
|
final Chunk chunk = loc.getChunk();
|
||||||
|
if (chunks.contains(chunk))
|
||||||
|
{
|
||||||
|
final int X = chunk.getX();
|
||||||
|
final int Z = chunk.getX();
|
||||||
|
if ((X > bx) && (X < tx) && (Z > bz) && (Z < tz))
|
||||||
|
{
|
||||||
|
count(count, entity);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(loc));
|
||||||
|
if (plot.id.equals(id))
|
||||||
|
{
|
||||||
|
count(count, entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (final Chunk chunk : chunks)
|
||||||
|
{
|
||||||
|
final int X = chunk.getX();
|
||||||
|
final int Z = chunk.getX();
|
||||||
|
final Entity[] ents = chunk.getEntities();
|
||||||
|
for (final Entity entity : ents)
|
||||||
|
{
|
||||||
|
if (!((entity instanceof Creature) || (entity instanceof Vehicle)))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((X == bx) || (X == tx) || (Z == bz) || (Z == tz))
|
||||||
|
{
|
||||||
|
final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(entity));
|
||||||
|
if (plot.id.equals(id))
|
||||||
|
{
|
||||||
|
count(count, entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
count(count, entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void count(final int[] count, final Entity entity)
|
private void count(final int[] count, final Entity entity)
|
||||||
|
@ -54,7 +54,7 @@ public class BukkitHybridUtils extends HybridUtils
|
|||||||
final World world = Bukkit.getWorld(plot.world);
|
final World world = Bukkit.getWorld(plot.world);
|
||||||
final ChunkGenerator gen = world.getGenerator();
|
final ChunkGenerator gen = world.getGenerator();
|
||||||
if (gen == null) {
|
if (gen == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final BiomeGrid base = new BiomeGrid()
|
final BiomeGrid base = new BiomeGrid()
|
||||||
{
|
{
|
||||||
|
@ -79,7 +79,7 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
if (toUpdate.size() == 0) {
|
if (toUpdate.size() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int count = 0;
|
int count = 0;
|
||||||
final ArrayList<Chunk> chunks = new ArrayList<Chunk>();
|
final ArrayList<Chunk> chunks = new ArrayList<Chunk>();
|
||||||
@ -91,7 +91,7 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
update(chunks);
|
update(chunks);
|
||||||
}
|
}
|
||||||
@ -336,24 +336,24 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager
|
|||||||
// End blockstate workaround //
|
// End blockstate workaround //
|
||||||
|
|
||||||
final int X = x >> 4;
|
final int X = x >> 4;
|
||||||
final int Z = z >> 4;
|
final int Z = z >> 4;
|
||||||
final ChunkLoc loc = new ChunkLoc(X, Z);
|
final ChunkLoc loc = new ChunkLoc(X, Z);
|
||||||
if (!loc.equals(lastLoc))
|
if (!loc.equals(lastLoc))
|
||||||
{
|
{
|
||||||
Chunk chunk = toUpdate.get(loc);
|
Chunk chunk = toUpdate.get(loc);
|
||||||
if (chunk == null)
|
if (chunk == null)
|
||||||
{
|
{
|
||||||
chunk = world.getChunkAt(X, Z);
|
chunk = world.getChunkAt(X, Z);
|
||||||
toUpdate.put(loc, chunk);
|
toUpdate.put(loc, chunk);
|
||||||
}
|
}
|
||||||
chunk.load(false);
|
chunk.load(false);
|
||||||
}
|
}
|
||||||
// check sign
|
// check sign
|
||||||
final Object w = methodGetHandle.of(world).call();
|
final Object w = methodGetHandle.of(world).call();
|
||||||
final Object chunk = methodGetChunkAt.of(w).call(x >> 4, z >> 4);
|
final Object chunk = methodGetChunkAt.of(w).call(x >> 4, z >> 4);
|
||||||
final Object pos = constructorBlockPosition.create(x & 0x0f, y, z & 0x0f);
|
final Object pos = constructorBlockPosition.create(x & 0x0f, y, z & 0x0f);
|
||||||
final Object combined = methodGetByCombinedId.of(null).call(id + (data << 12));
|
final Object combined = methodGetByCombinedId.of(null).call(id + (data << 12));
|
||||||
methodA.of(chunk).call(pos, combined);
|
methodA.of(chunk).call(pos, combined);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -79,13 +79,13 @@ public class CommandManager<T extends CommandCaller>
|
|||||||
public int compare(final Command<T> a, final Command<T> b)
|
public int compare(final Command<T> a, final Command<T> b)
|
||||||
{
|
{
|
||||||
if (a == b) {
|
if (a == b) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (a == null) {
|
if (a == null) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (b == null) {
|
if (b == null) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return a.getCommand().compareTo(b.getCommand());
|
return a.getCommand().compareTo(b.getCommand());
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ public class WESubscriber
|
|||||||
final WorldEdit worldedit = PS.get().worldedit;
|
final WorldEdit worldedit = PS.get().worldedit;
|
||||||
if (worldedit == null)
|
if (worldedit == null)
|
||||||
{
|
{
|
||||||
worldedit.getEventBus().unregister(this);
|
WorldEdit.getInstance().getEventBus().unregister(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final World worldObj = event.getWorld();
|
final World worldObj = event.getWorld();
|
||||||
|
@ -293,7 +293,7 @@ public class SpongeMain implements IPlotMain, PluginContainer
|
|||||||
PS.get().loadWorld(world, wrapper);
|
PS.get().loadWorld(world, wrapper);
|
||||||
switch (plotworld.TYPE)
|
switch (plotworld.TYPE)
|
||||||
{
|
{
|
||||||
// Normal
|
// Normal
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
modify = new WorldModify(generator, false);
|
modify = new WorldModify(generator, false);
|
||||||
|
@ -230,18 +230,18 @@ public class AugmentedPopulator implements Populator
|
|||||||
public void setBlock(final int x, final int y, final int z, final BlockState t)
|
public void setBlock(final int x, final int y, final int z, final BlockState t)
|
||||||
{
|
{
|
||||||
if (check && (((z) < bz) || ((z) > tz) || ((x) < bx) || ((x) > tx))) {
|
if (check && (((z) < bz) || ((z) > tz) || ((x) < bx) || ((x) > tx))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
if (ChunkManager.CURRENT_PLOT_CLEAR != null)
|
if (ChunkManager.CURRENT_PLOT_CLEAR != null)
|
||||||
{
|
{
|
||||||
if (ChunkManager.CURRENT_PLOT_CLEAR.isIn(x, z)) {
|
if (ChunkManager.CURRENT_PLOT_CLEAR.isIn(x, z)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manager.getPlotIdAbs(plotworld, x, 0, z) != null) {
|
else if (manager.getPlotIdAbs(plotworld, x, 0, z) != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final PlotBlock block = SpongeMain.THIS.getPlotBlock(t);
|
final PlotBlock block = SpongeMain.THIS.getPlotBlock(t);
|
||||||
@ -315,18 +315,18 @@ public class AugmentedPopulator implements Populator
|
|||||||
public void setBlockType(final int x, final int y, final int z, final BlockType t)
|
public void setBlockType(final int x, final int y, final int z, final BlockType t)
|
||||||
{
|
{
|
||||||
if (check && (((z) < bz) || ((z) > tz) || ((x) < bx) || ((x) > tx))) {
|
if (check && (((z) < bz) || ((z) > tz) || ((x) < bx) || ((x) > tx))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
if (ChunkManager.CURRENT_PLOT_CLEAR != null)
|
if (ChunkManager.CURRENT_PLOT_CLEAR != null)
|
||||||
{
|
{
|
||||||
if (ChunkManager.CURRENT_PLOT_CLEAR.isIn(x, z)) {
|
if (ChunkManager.CURRENT_PLOT_CLEAR.isIn(x, z)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manager.getPlotIdAbs(plotworld, x, 0, z) != null) {
|
else if (manager.getPlotIdAbs(plotworld, x, 0, z) != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final PlotBlock block = SpongeMain.THIS.getPlotBlock(t.getDefaultState());
|
final PlotBlock block = SpongeMain.THIS.getPlotBlock(t.getDefaultState());
|
||||||
|
@ -119,7 +119,7 @@ public class MainListener
|
|||||||
public boolean apply(final org.spongepowered.api.world.Location<World> loc)
|
public boolean apply(final org.spongepowered.api.world.Location<World> loc)
|
||||||
{
|
{
|
||||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -323,7 +323,7 @@ public class MainListener
|
|||||||
public boolean apply(final org.spongepowered.api.world.Location loc)
|
public boolean apply(final org.spongepowered.api.world.Location loc)
|
||||||
{
|
{
|
||||||
if (MainUtil.isPlotRoad(SpongeUtil.getLocation(worldname, loc))) {
|
if (MainUtil.isPlotRoad(SpongeUtil.getLocation(worldname, loc))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -427,7 +427,7 @@ public class MainListener
|
|||||||
public boolean apply(final org.spongepowered.api.world.Location loc)
|
public boolean apply(final org.spongepowered.api.world.Location loc)
|
||||||
{
|
{
|
||||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -438,7 +438,7 @@ public class MainListener
|
|||||||
public boolean apply(final Entity entity)
|
public boolean apply(final Entity entity)
|
||||||
{
|
{
|
||||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
|
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -457,7 +457,7 @@ public class MainListener
|
|||||||
public boolean apply(final Entity entity)
|
public boolean apply(final Entity entity)
|
||||||
{
|
{
|
||||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
|
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -474,7 +474,7 @@ public class MainListener
|
|||||||
public boolean apply(final org.spongepowered.api.world.Location loc)
|
public boolean apply(final org.spongepowered.api.world.Location loc)
|
||||||
{
|
{
|
||||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -485,7 +485,7 @@ public class MainListener
|
|||||||
public boolean apply(final Entity entity)
|
public boolean apply(final Entity entity)
|
||||||
{
|
{
|
||||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
|
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user