Fix center

This commit is contained in:
Jesse Boyd 2016-10-03 00:56:08 +11:00
parent 5d3e096501
commit 5978c9c3c0
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
7 changed files with 33 additions and 11 deletions

View File

@ -10,6 +10,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.util.ByteArrayUtilities;
import com.intellectualcrafters.plot.util.EconHandler;
import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.MathMan;
import com.intellectualcrafters.plot.util.Permissions;
import com.plotsquared.general.commands.CommandDeclaration;
@ -143,7 +144,7 @@ public class Auto extends SubCommand {
if (plotarea.TYPE == 2) {
PlotId bot = plotarea.getMin();
PlotId top = plotarea.getMax();
PlotId origin = new PlotId((bot.x + top.x) / 2, (bot.y + top.y) / 2);
PlotId origin = new PlotId(MathMan.average(bot.x, top.x), MathMan.average(bot.y, top.y));
PlotId id = new PlotId(0, 0);
int width = Math.max(top.x - bot.x + 1, top.y - bot.y + 1);
int max = width * width;

View File

@ -7,6 +7,7 @@ import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PseudoRandom;
import com.intellectualcrafters.plot.object.RegionWrapper;
import com.intellectualcrafters.plot.util.MathMan;
import com.intellectualcrafters.plot.util.block.GlobalBlockQueue;
import com.intellectualcrafters.plot.util.block.LocalBlockQueue;
import java.util.ArrayList;
@ -130,8 +131,10 @@ public class ClassicPlotManager extends SquarePlotManager {
Location[] corners = plot.getCorners();
ClassicPlotWorld dpw = (ClassicPlotWorld) plotArea;
LocalBlockQueue queue = plotArea.getQueue(false);
queue.setBlock((corners[0].getX() + corners[1].getX()) / 2, dpw.PLOT_HEIGHT,
(corners[0].getZ() + corners[1].getZ()) / 2, blocks[0]);
int x = MathMan.average(corners[0].getX(), corners[1].getX());
int z = MathMan.average(corners[0].getZ(), corners[1].getZ());
queue.setBlock(x, dpw.PLOT_HEIGHT,z, blocks[0]);
queue.enqueue();
return true;
}

View File

@ -12,11 +12,7 @@ public class ChunkLoc {
@Override
public int hashCode() {
int prime = 31;
int result = 1;
result = (prime * result) + this.x;
result = (prime * result) + this.z;
return result;
return (x << 16) | (z & 0xFFFF);
}
@Override

View File

@ -11,6 +11,7 @@ import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.flag.Flags;
import com.intellectualcrafters.plot.util.BO3Handler;
import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.EventUtil;
@ -24,6 +25,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler;
import com.intellectualcrafters.plot.util.WorldUtil;
import com.intellectualcrafters.plot.util.block.GlobalBlockQueue;
import com.intellectualcrafters.plot.util.block.LocalBlockQueue;
import com.intellectualcrafters.plot.util.expiry.ExpireManager;
import com.intellectualcrafters.plot.util.expiry.PlotAnalysis;
import com.plotsquared.listener.PlotListener;
import java.awt.geom.Area;
@ -948,6 +950,9 @@ public class Plot {
* @param value
*/
public <V> boolean setFlag(Flag<V> flag, Object value) {
if (flag == Flags.KEEP && ExpireManager.IMP != null) {
ExpireManager.IMP.updateExpired(this);
}
return FlagManager.addPlotFlag(this, flag, value);
}
@ -1103,7 +1108,7 @@ public class Plot {
Location[] corners = getCorners();
Location top = corners[0];
Location bot = corners[1];
Location loc = new Location(this.area.worldname, (top.getX() + bot.getX()) / 2, (top.getY() + bot.getY()) / 2, (top.getZ() + bot.getZ()) / 2);
Location loc = new Location(this.area.worldname, MathMan.average(bot.getX(), top.getX()), MathMan.average(bot.getY(), top.getY()), MathMan.average(bot.getZ(), top.getZ()));
loc.setY(1 + Math.max(WorldUtil.IMP.getHighestBlock(this.area.worldname, loc.getX(), loc.getZ()),
getManager().getSignLoc(this.area, this).getY()));
return loc;

View File

@ -84,8 +84,8 @@ public class BO3Handler {
ClassicPlotWorld cpw = (ClassicPlotWorld) plotworld;
int height = cpw.PLOT_HEIGHT;
int cx = (bot.getX() + top.getX()) / 2;
int cz = (bot.getZ() + top.getZ()) / 2;
int cx = MathMan.average(bot.getX(), top.getX());
int cz = MathMan.average(bot.getZ(), top.getZ());
HashMap<ChunkLoc, BO3> map = new HashMap<>();
@ -193,6 +193,7 @@ public class BO3Handler {
return true;
}
public static void upload(final Plot plot, UUID uuid, String file, RunnableVal<URL> whenDone) {
if (plot == null) {
throw new IllegalArgumentException("Arguments may not be null!");
@ -250,6 +251,10 @@ public class BO3Handler {
public static boolean save(Plot plot, BO3 bo3) {
try {
File bo3File = bo3.getFile();
File parent = bo3File.getParentFile();
if (parent != null) {
parent.mkdirs();
}
bo3File.createNewFile();
bo3File.getParentFile().mkdirs();
try (FileOutputStream fos = new FileOutputStream(bo3File)) {

View File

@ -159,6 +159,10 @@ public class MathMan {
return (x << 16) | (y & 0xFFFF);
}
public static final int average(int a, int b) {
return (a&b) + (a^b)/2;
}
public static short unpairX(int hash) {
return (short) (hash >> 16);
}

View File

@ -76,6 +76,14 @@ public class ExpireManager {
return value == null ? 0 : value;
}
public void updateExpired(Plot plot) {
if (!plotsToDelete.isEmpty() && plotsToDelete.contains(plot)) {
if (isExpired(new ArrayDeque<>(tasks), plot).isEmpty()) {
plotsToDelete.remove(plot);
}
}
}
public void confirmExpiry(final PlotPlayer pp) {
if (pp.getMeta("ignoreExpireTask") != null) {
return;