Mega plots: Tell me if I missed any important API methods

Modified methods:
- getCurrentPlot
- getPlotBottomLoc
- getPlotTopLoc

TODO:
- Commands
- Plot unlinking on unclaim
- Anything else?
This commit is contained in:
boy0001 2014-09-25 22:44:23 +10:00
parent d54336f536
commit 1d1834699a
6 changed files with 118 additions and 231 deletions

View File

@ -56,6 +56,35 @@ public class PlayerFunctions {
return (lp - cu) > 30l; return (lp - cu) > 30l;
} }
public static Set<PlotId> getPlotSelectionIds(World world, PlotId pos1, PlotId pos2) {
Set<PlotId> myplots = new HashSet<PlotId>();
for (int x = pos1.x; x <= pos2.x; x++) {
for (int y = pos1.y; x <= pos2.y; x++) {
myplots.add(new PlotId(x,y));
}
}
return myplots;
}
public static Plot getBottomPlot(World world, Plot plot) {
if (plot.settings.getMerged(2)) {
return getBottomPlot(world, PlotMain.getPlots(world).get(new PlotId(plot.id.x, plot.id.y-1)));
}
if (plot.settings.getMerged(3)) {
return getBottomPlot(world, PlotMain.getPlots(world).get(new PlotId(plot.id.x-1, plot.id.y)));
}
return plot;
}
public static Plot getTopPlot(World world, Plot plot) {
if (plot.settings.getMerged(0)) {
return getBottomPlot(world, PlotMain.getPlots(world).get(new PlotId(plot.id.x, plot.id.y-1)));
}
if (plot.settings.getMerged(1)) {
return getBottomPlot(world, PlotMain.getPlots(world).get(new PlotId(plot.id.x-1, plot.id.y)));
}
return plot;
}
/** /**
* *
* @param loc * @param loc
@ -65,7 +94,8 @@ public class PlayerFunctions {
int x = loc.getBlockX(); int x = loc.getBlockX();
int z = loc.getBlockZ(); int z = loc.getBlockZ();
PlotWorld plotworld = PlotMain.getWorldSettings(loc.getWorld()); String world = loc.getWorld().getName();
PlotWorld plotworld = PlotMain.getWorldSettings(world);
int size = plotworld.PLOT_WIDTH + plotworld.ROAD_WIDTH; int size = plotworld.PLOT_WIDTH + plotworld.ROAD_WIDTH;
int pathWidthLower; int pathWidthLower;
if ((plotworld.ROAD_WIDTH % 2) == 0) { if ((plotworld.ROAD_WIDTH % 2) == 0) {
@ -93,75 +123,27 @@ public class PlayerFunctions {
int end = pathWidthLower+plotworld.PLOT_WIDTH; int end = pathWidthLower+plotworld.PLOT_WIDTH;
if (rx<=pathWidthLower) { if (rx<=pathWidthLower) {
// west > return null for now // System.out.print("WEST");
return null; return null;
} }
if (rx>end) { if (rx>end) {
// east > return null for now // System.out.print("EAST");
return null; return null;
} }
if (rz<=pathWidthLower) { if (rz<=pathWidthLower) {
// north > return null for now // System.out.print("NORTH");
return null; return null;
} }
if (rz>pathWidthLower+plotworld.PLOT_WIDTH) { if (rz>pathWidthLower+plotworld.PLOT_WIDTH) {
// south > return null for now // System.out.print("SOUTH");
return null; return null;
} }
return new PlotId(dx,dz); PlotId id = new PlotId(dx,dz);
Plot plot = PlotMain.getPlots(loc.getWorld()).get(id);
// if (plot==null) {
// double n3; return id;
// }
// int mod2 = 0; return getBottomPlot(loc.getWorld(), plot).id;
// int mod1 = 1;
//
// int x = (int) Math.ceil((double) valx / size);
// int z = (int) Math.ceil((double) valz / size);
//
// if ((pathsize % 2) == 1) {
// n3 = Math.ceil(((double) pathsize) / 2);
// mod2 = -1;
// } else {
// n3 = Math.floor(((double) pathsize) / 2);
// }
//
// /*
// * If Road 1 + Road 2 are true, then it is in the middle between 4 plots and more checks might be required.
// */
// boolean road1 = false, road2 = false;
//
// for (double i = n3; i >= 0; i--) {
// if (((((valx - i) + mod1) % size) == 0) || (((valx + i + mod2) % size) == 0)) {
//
// /*
// * Road 1
// */
//
// road1 = true;
// x = (int) Math.ceil((valx - n3) / size);
// }
// if (((((valz - i) + mod1) % size) == 0) || (((valz + i + mod2) % size) == 0)) {
// /*
// * Road 2
// */
//
// road2 = true;
// z = (int) Math.ceil((valz - n3) / size);
// }
// }
// if (road1 && road2) {
// return null;
// }
// else if (road1) {
// return null;
// }
// else if (road2) {
// return null;
// }
// else {
// return new PlotId(x, z);
// }
} }
/** /**

View File

@ -1,106 +0,0 @@
package com.intellectualcrafters.plot;
import java.util.Collection;
import java.util.Iterator;
/**
* Created by Citymonstret on 2014-09-25.
*/
public class PlotCollection implements Collection {
private Plot[] collection;
public PlotCollection(int size) {
this.collection = new Plot[size];
}
@Override
public int size() {
return this.collection.length;
}
@Override
public boolean isEmpty() {
return this.collection.length == 0;
}
@Override
public boolean contains(Object o) {
if(!(o instanceof Plot)) {
throw new IllegalArgumentException("Object not instance of Plot.class");
}
Plot p = (Plot) o;
for(Plot plot : this.collection) {
if(plot.getId().toString().equals(p.getId().toString())) {
return true;
}
}
return false;
}
@Override
public Iterator iterator() {
return null;
}
@Override
public Object[] toArray() {
return this.collection;
}
@Override
public boolean add(Object o) {
Plot[] pre = this.collection;
this.collection = new Plot[pre.length + 1];
for(int x = 0; x < pre.length; x++) {
this.collection[x] = pre[x];
}
this.collection[collection.length - 1] = (Plot) o;
return true;
}
@Override
public boolean remove(Object o) {
Plot[] pre = this.collection;
this.collection = new Plot[pre.length - 1];
int x = 0;
for(Plot plot : pre) {
if(plot != (Plot) o) {
this.collection[x++] = plot;
}
}
return false;
}
@Override
public boolean addAll(Collection c) {
return false;
}
@Override
public void clear() {
}
@Override
public boolean retainAll(Collection c) {
return false;
}
@Override
public boolean removeAll(Collection c) {
return false;
}
@Override
public boolean containsAll(Collection c) {
return false;
}
@Override
public T[] toArray(Object[] a) {
return new T[0];
}
public
}

View File

@ -577,7 +577,7 @@ public class PlotHelper {
} }
if ((pos2.getBlockX() - pos1.getBlockX()) < 16) { if ((pos2.getBlockX() - pos1.getBlockX()) < 16) {
setSimpleCuboid(world, new Location(world, pos1.getBlockX(), 0, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), 1, pos2.getBlockZ()), (short) 7); setSimpleCuboid(world, new Location(world, pos1.getBlockX(), 0, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), 1, pos2.getBlockZ()), (short) 7);
setSimpleCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), world.getMaxHeight(), pos2.getBlockZ()), (short) 0); setSimpleCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT + 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), world.getMaxHeight(), pos2.getBlockZ()), (short) 0);
setCuboid(world, new Location(world, pos1.getBlockX(), 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT, pos2.getBlockZ()), filling, filling_data); setCuboid(world, new Location(world, pos1.getBlockX(), 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT, pos2.getBlockZ()), filling, filling_data);
setCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT + 1, pos2.getBlockZ()), plotfloors, plotfloors_data); setCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT + 1, pos2.getBlockZ()), plotfloors, plotfloors_data);
PlayerFunctions.sendMessage(requester, "&c(depreciated) &r" + C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.nanoTime() - start) / 1000000.0))); PlayerFunctions.sendMessage(requester, "&c(depreciated) &r" + C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.nanoTime() - start) / 1000000.0)));
@ -626,7 +626,7 @@ public class PlotHelper {
} }
if (min == null) { if (min == null) {
setSimpleCuboid(world, new Location(world, pos1.getBlockX(), 0, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), 1, pos2.getBlockZ()), (short) 7); setSimpleCuboid(world, new Location(world, pos1.getBlockX(), 0, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), 1, pos2.getBlockZ()), (short) 7);
setSimpleCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), world.getMaxHeight(), pos2.getBlockZ()), (short) 0); setSimpleCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT + 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), world.getMaxHeight(), pos2.getBlockZ()), (short) 0);
setCuboid(world, new Location(world, pos1.getBlockX(), 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT, pos2.getBlockZ()), filling, filling_data); setCuboid(world, new Location(world, pos1.getBlockX(), 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT, pos2.getBlockZ()), filling, filling_data);
setCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT + 1, pos2.getBlockZ()), plotfloors, plotfloors_data); setCuboid(world, new Location(world, pos1.getBlockX(), plotworld.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX(), plotworld.PLOT_HEIGHT + 1, pos2.getBlockZ()), plotfloors, plotfloors_data);
} else { } else {
@ -782,6 +782,10 @@ public class PlotHelper {
} }
public static Location getPlotTopLoc(World world, PlotId id) { public static Location getPlotTopLoc(World world, PlotId id) {
Plot plot = PlotMain.getPlots(world).get(id);
if (id!=null) {
id = PlayerFunctions.getTopPlot(world, plot).id;
}
PlotWorld plotworld = PlotMain.getWorldSettings(world); PlotWorld plotworld = PlotMain.getWorldSettings(world);
int px = id.x; int px = id.x;
int pz = id.y; int pz = id.y;
@ -793,6 +797,10 @@ public class PlotHelper {
} }
public static Location getPlotBottomLoc(World world, PlotId id) { public static Location getPlotBottomLoc(World world, PlotId id) {
Plot plot = PlotMain.getPlots(world).get(id);
if (id!=null) {
id = PlayerFunctions.getBottomPlot(world, plot).id;
}
PlotWorld plotworld = PlotMain.getWorldSettings(world); PlotWorld plotworld = PlotMain.getWorldSettings(world);
int px = id.x; int px = id.x;
int pz = id.y; int pz = id.y;

View File

@ -188,7 +188,6 @@ public class PlotMain extends JavaPlugin {
} }
return new HashMap<PlotId, Plot>(); return new HashMap<PlotId, Plot>();
} }
/** /**
* get all plot worlds * get all plot worlds
*/ */
@ -713,7 +712,7 @@ public class PlotMain extends JavaPlugin {
this.error = 0l; this.error = 0l;
} }
for (String w : getPlotWorlds()) { for (String w : getPlotWorlds()) {
getWorldSettings(w); PlotWorld plotworld = getWorldSettings(w);
World world = Bukkit.getServer().getWorld(w); World world = Bukkit.getServer().getWorld(w);
try { try {
if (world.getLoadedChunks().length < 1) { if (world.getLoadedChunks().length < 1) {
@ -723,16 +722,11 @@ public class PlotMain extends JavaPlugin {
Entity[] entities = chunk.getEntities(); Entity[] entities = chunk.getEntities();
for (int i = entities.length - 1; i >= 0; i--) { for (int i = entities.length - 1; i >= 0; i--) {
Entity entity = entities[i]; Entity entity = entities[i];
if (entity.getType() == EntityType.PLAYER) { if (!(entity instanceof Player)) {
continue;
}
this.location = entity.getLocation(); this.location = entity.getLocation();
if (!PlayerEvents.isInPlot(this.location)) { if (!PlayerEvents.isInPlot(this.location)) {
boolean tamed = false; boolean tamed = false;
if (Settings.MOB_PATHFINDING) { if (Settings.MOB_PATHFINDING) {
// TODO make this more efficient
if (entity instanceof Tameable) { if (entity instanceof Tameable) {
Tameable tameable = (Tameable) entity; Tameable tameable = (Tameable) entity;
if (tameable.isTamed()) { if (tameable.isTamed()) {
@ -751,7 +745,7 @@ public class PlotMain extends JavaPlugin {
int x = this.location.getBlockX(); int x = this.location.getBlockX();
int y = this.location.getBlockY(); int y = this.location.getBlockY();
int z = this.location.getBlockZ(); int z = this.location.getBlockZ();
while (!found || (radius > PlotWorld.ROAD_WIDTH_DEFAULT)) { while (!found || (radius > plotworld.ROAD_WIDTH)) {
Location pos; Location pos;
switch (dir) { switch (dir) {
case 0: case 0:
@ -782,6 +776,8 @@ public class PlotMain extends JavaPlugin {
break; break;
} }
} }
// Welp! how did this entity get here?
entity.teleport(location.subtract(location.getDirection().normalize().multiply(2)));
} }
} }
if (!tamed) { if (!tamed) {
@ -790,6 +786,7 @@ public class PlotMain extends JavaPlugin {
} }
} }
} }
}
} catch (Exception e) { } catch (Exception e) {
++this.error; ++this.error;
} finally { } finally {
@ -911,4 +908,5 @@ public class PlotMain extends JavaPlugin {
plots.put(world, new HashMap<PlotId, Plot>()); plots.put(world, new HashMap<PlotId, Plot>());
} }
} }
} }

View File

@ -27,7 +27,7 @@ public class PlotSettings {
/** /**
* merged plots * merged plots
*/ */
private boolean[] merged = new boolean[] {false,false,false,false}; // 1111 private boolean[] merged = new boolean[] {false,false,false,false};
/** /**
* plot alias * plot alias
*/ */
@ -76,6 +76,10 @@ public class PlotSettings {
return merged[direction]; return merged[direction];
} }
public boolean isMerged() {
return (merged[0] || merged[1] || merged[2] || merged[3]);
}
public boolean[] getMerged() { public boolean[] getMerged() {
return this.merged; return this.merged;
} }

View File

@ -65,6 +65,7 @@ import org.bukkit.event.world.StructureGrowEvent;
import com.intellectualcrafters.plot.C; import com.intellectualcrafters.plot.C;
import com.intellectualcrafters.plot.PlayerFunctions; import com.intellectualcrafters.plot.PlayerFunctions;
import com.intellectualcrafters.plot.Plot; import com.intellectualcrafters.plot.Plot;
import com.intellectualcrafters.plot.PlotHelper;
import com.intellectualcrafters.plot.PlotId; import com.intellectualcrafters.plot.PlotId;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.PlotWorld; import com.intellectualcrafters.plot.PlotWorld;
@ -493,7 +494,7 @@ public class PlayerEvents implements Listener {
if (!isPlotWorld(world)) { if (!isPlotWorld(world)) {
return; return;
} }
if ((isInPlot(event.getLocation()) && (event.getSpawnReason() != SpawnReason.SPAWNER_EGG)) || !isInPlot(event.getLocation())) { if ((event.getSpawnReason() != SpawnReason.SPAWNER_EGG) || !isInPlot(event.getLocation())) {
event.setCancelled(true); event.setCancelled(true);
} }
} }