Untested (plot unlink)

This commit is contained in:
boy0001 2014-09-26 21:38:18 +10:00
parent 7a55e8487b
commit c4635be66b

View File

@ -11,6 +11,8 @@ package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
@ -21,13 +23,28 @@ import com.intellectualcrafters.plot.PlotHelper;
import com.intellectualcrafters.plot.PlotId;
import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.PlotSettings;
import com.intellectualcrafters.plot.PlotWorld;
import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.events.PlotMergeEvent;
import com.intellectualcrafters.plot.events.PlotUnlinkEvent;
/**
* Created by Citymonstret on 2014-08-01.
*/
public class Unlink extends SubCommand {
private short w_id;
private byte w_v;
private short wf_id;
private byte wf_v;
private short f1_id;
private byte f1_v;
private short f2_id;
private byte f2_v;
private int pathsize;
private boolean stripes_enabled;
private int wallheight;
private int roadheight;
public Unlink() {
super(Command.UNLINK, "Unlink a mega-plot", "unlink", CommandCategory.ACTIONS);
}
@ -48,13 +65,135 @@ public class Unlink extends SubCommand {
return true;
}
World world = plr.getWorld();
ArrayList<PlotId> ids = PlayerFunctions.getPlotSelectionIds(world, PlayerFunctions.getBottomPlot(world, plot).id, PlayerFunctions.getTopPlot(world, plot).id);
PlotId pos1 = PlayerFunctions.getBottomPlot(world, plot).id;
PlotId pos2 = PlayerFunctions.getTopPlot(world, plot).id;
ArrayList<PlotId> ids = PlayerFunctions.getPlotSelectionIds(world, pos1, pos2);
PlotUnlinkEvent event = new PlotUnlinkEvent(world, ids);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
event.setCancelled(true);
PlayerFunctions.sendMessage(plr, "&cUnlink has been cancelled");
return false;
}
for (PlotId id:ids) {
Plot myplot = PlotMain.getPlots(world).get(id);
myplot.settings.setMerged(new boolean[] {false, false, false, false} );
DBFunc.setMerged(world.getName(), myplot, myplot.settings.getMerged());
}
PlotWorld plotworld = PlotMain.getWorldSettings(world);
this.pathsize = plotworld.ROAD_WIDTH;
this.roadheight = plotworld.ROAD_HEIGHT;
this.wallheight = plotworld.WALL_HEIGHT;
this.stripes_enabled = plotworld.ROAD_STRIPES_ENABLED;
// WALL
short[] result_w = PlotHelper.getBlock(plotworld.WALL_BLOCK);
this.w_id = result_w[0];
this.w_v = (byte) result_w[1];
// WALL FILLING
short[] result_wf = PlotHelper.getBlock(plotworld.WALL_FILLING);
this.wf_id = result_wf[0];
this.wf_v = (byte) result_wf[1];
// ROAD
short[] result_f1 = PlotHelper.getBlock(plotworld.ROAD_BLOCK);
this.f1_id = result_f1[0];
this.f1_v = (byte) result_f1[1];
//
// Floor 2
short[] result_f2 = PlotHelper.getBlock(plotworld.ROAD_STRIPES);
this.f2_id = result_f2[0];
this.f2_v = (byte) result_f2[1];
for (int x = pos1.x; x <= pos2.x; x++) {
for (int y = pos1.y; y <= pos2.y; y++) {
boolean lx = x < pos2.x;
boolean ly = y < pos2.y;
PlotId id = new PlotId(x,y);
if (lx) {
setRoadX(world, id);
if (ly&&lx) {
setRoadXY(world, id);
}
}
if (ly) {
setRoadY(world, id);
}
}
}
PlayerFunctions.sendMessage(plr, "&cPLOT UNLINKING IS NOT FINISHED (as you can see by the lack of roads appearing)");
return true;
}
/**
* Setting the road with the greatest X value
* @param world
* @param id
*/
public void setRoadX(World w, PlotId id) {
Location pos1 = PlotHelper.getPlotBottomLoc(w, id);
Location pos2 = PlotHelper.getPlotTopLoc(w, id);
int sx = pos2.getBlockX()+1;
int ex = sx + pathsize - 1;
int sz = pos1.getBlockZ();
int ez = pos2.getBlockZ()+1;
PlotHelper.setCuboid(w, new Location(w,sx,1,sz), new Location(w,sx+1,wallheight,sz+1), new short[] {wf_id}, new short[] {wf_v});
PlotHelper.setCuboid(w, new Location(w,sx,wallheight+1,sz), new Location(w,sx+1,wallheight+2,sz+1), new short[] {w_id}, new short[] {w_v});
PlotHelper.setCuboid(w, new Location(w,ex,1,ez), new Location(w,ex+1,wallheight,ez+1), new short[] {wf_id}, new short[] {wf_v});
PlotHelper.setCuboid(w, new Location(w,ex,wallheight+1,ez), new Location(w,ex+1,wallheight+2,ez+1), new short[] {w_id}, new short[] {w_v});
PlotHelper.setCuboid(w, new Location(w,sx+1,1,sz+1), new Location(w,ex,roadheight,ex), new short[] {wf_id}, new short[] {wf_v});
}
/**
* Setting the road with the greatest Y value
* @param world
* @param id
*/
public void setRoadY(World w, PlotId id) {
Location pos1 = PlotHelper.getPlotBottomLoc(w, id);
Location pos2 = PlotHelper.getPlotTopLoc(w, id);
int sz = pos2.getBlockX()+1;
int ez = sz + pathsize - 1;
int sx = pos1.getBlockZ();
int ex = pos2.getBlockZ()+1;
PlotHelper.setCuboid(w, new Location(w,sx,1,sz), new Location(w,sx+1,wallheight,sz+1), new short[] {wf_id}, new short[] {wf_v});
PlotHelper.setCuboid(w, new Location(w,sx,wallheight+1,sz), new Location(w,sx+1,wallheight+2,sz+1), new short[] {w_id}, new short[] {w_v});
PlotHelper.setCuboid(w, new Location(w,ex,1,ez), new Location(w,ex+1,wallheight,ez+1), new short[] {wf_id}, new short[] {wf_v});
PlotHelper.setCuboid(w, new Location(w,ex,wallheight+1,ez), new Location(w,ex+1,wallheight+2,ez+1), new short[] {w_id}, new short[] {w_v});
PlotHelper.setCuboid(w, new Location(w,sx+1,1,sz+1), new Location(w,ex,roadheight,ex), new short[] {wf_id}, new short[] {wf_v});
}
/**
* Setting the intersection with the greatest X and Y value
* @param world
* @param id
*/
public void setRoadXY(World w, PlotId id) {
Location pos2 = PlotHelper.getPlotTopLoc(w, id);
int sx = pos2.getBlockX()+2;
int ex = sx + pathsize - 1;
int sz = pos2.getBlockZ()+2;
int ez = sz + pathsize - 1;
PlotHelper.setCuboid(w, new Location(w,sx+1,1,sz+1), new Location(w,ex,roadheight,ex), new short[] {wf_id}, new short[] {wf_v});
}
}