2014-11-08 20:27:09 +01:00
////////////////////////////////////////////////////////////////////////////////////////////////////
// PlotSquared - A plot manager and world generator for the Bukkit API /
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters /
// /
// This program is free software; you can redistribute it and/or modify /
// it under the terms of the GNU General Public License as published by /
// the Free Software Foundation; either version 3 of the License, or /
// (at your option) any later version. /
// /
// This program is distributed in the hope that it will be useful, /
// but WITHOUT ANY WARRANTY; without even the implied warranty of /
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /
// GNU General Public License for more details. /
// /
// You should have received a copy of the GNU General Public License /
// along with this program; if not, write to the Free Software Foundation, /
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA /
// /
// You can contact us via: support@intellectualsites.com /
////////////////////////////////////////////////////////////////////////////////////////////////////
2014-09-26 14:17:52 +10:00
package com.intellectualcrafters.plot.commands ;
2015-01-14 03:38:15 +11:00
import java.util.ArrayList ;
import org.bukkit.Bukkit ;
import org.bukkit.World ;
import org.bukkit.entity.Player ;
2014-11-16 10:48:18 +01:00
import com.intellectualcrafters.plot.PlotMain ;
import com.intellectualcrafters.plot.config.C ;
2014-11-08 20:27:09 +01:00
import com.intellectualcrafters.plot.database.DBFunc ;
import com.intellectualcrafters.plot.events.PlotUnlinkEvent ;
2014-11-16 10:48:18 +01:00
import com.intellectualcrafters.plot.object.Plot ;
import com.intellectualcrafters.plot.object.PlotId ;
import com.intellectualcrafters.plot.object.PlotManager ;
import com.intellectualcrafters.plot.object.PlotWorld ;
import com.intellectualcrafters.plot.util.PlayerFunctions ;
import com.intellectualcrafters.plot.util.PlotHelper ;
2014-12-16 15:57:40 +11:00
import com.intellectualcrafters.plot.util.UUIDHandler ;
2014-12-16 15:44:25 +11:00
2014-09-26 14:17:52 +10:00
/ * *
2014-11-08 20:27:09 +01:00
* Created 2014 - 08 - 01 for PlotSquared
*
* @author Citymonstret
2014-09-26 14:17:52 +10:00
* /
public class Unlink extends SubCommand {
2014-11-05 14:42:08 +11:00
public Unlink ( ) {
super ( Command . UNLINK , " Unlink a mega-plot " , " unlink " , CommandCategory . ACTIONS , true ) ;
}
@Override
public boolean execute ( final Player plr , final String . . . args ) {
if ( ! PlayerFunctions . isInPlot ( plr ) ) {
2014-11-09 12:51:17 +01:00
return sendMessage ( plr , C . NOT_IN_PLOT ) ;
2014-11-05 14:42:08 +11:00
}
final Plot plot = PlayerFunctions . getCurrentPlot ( plr ) ;
2015-01-13 03:45:50 +11:00
if ( ( ( plot = = null ) | | ! plot . hasOwner ( ) | | ! plot . getOwner ( ) . equals ( UUIDHandler . getUUID ( plr ) ) ) & & ! PlotMain . hasPermission ( plr , " plots.admin.command.unlink " ) ) {
2014-11-09 12:51:17 +01:00
return sendMessage ( plr , C . NO_PLOT_PERMS ) ;
2014-11-05 14:42:08 +11:00
}
if ( PlayerFunctions . getTopPlot ( plr . getWorld ( ) , plot ) . equals ( PlayerFunctions . getBottomPlot ( plr . getWorld ( ) , plot ) ) ) {
2014-11-09 12:51:17 +01:00
return sendMessage ( plr , C . UNLINK_IMPOSSIBLE ) ;
2014-11-05 14:42:08 +11:00
}
2014-11-09 12:51:17 +01:00
2014-11-05 14:42:08 +11:00
final World world = plr . getWorld ( ) ;
2015-02-10 17:03:59 +11:00
if ( ! unlinkPlot ( world , plot ) ) {
PlayerFunctions . sendMessage ( plr , " &cUnlink has been cancelled " ) ;
return false ;
}
try {
2015-02-15 18:40:55 +11:00
PlotHelper . update ( plr . getLocation ( ) ) ;
2015-02-10 17:03:59 +11:00
} catch ( final Exception e ) {
// execute(final Player plr, final String... args) {
try {
PlotMain . sendConsoleSenderMessage ( " Error on: " + getClass ( ) . getMethod ( " execute " , Player . class , String [ ] . class ) . toGenericString ( ) + " :119, when trying to use \" SetBlockFast#update \" " ) ;
} catch ( final Exception ex ) {
ex . printStackTrace ( ) ;
}
}
PlayerFunctions . sendMessage ( plr , " &6Plots unlinked successfully! " ) ;
return true ;
}
public static boolean unlinkPlot ( World world , Plot plot ) {
2014-11-05 14:42:08 +11:00
final PlotId pos1 = PlayerFunctions . getBottomPlot ( world , plot ) . id ;
final PlotId pos2 = PlayerFunctions . getTopPlot ( world , plot ) . id ;
2015-01-29 14:20:29 +11:00
final ArrayList < PlotId > ids = PlayerFunctions . getPlotSelectionIds ( pos1 , pos2 ) ;
2014-11-05 14:42:08 +11:00
final PlotUnlinkEvent event = new PlotUnlinkEvent ( world , ids ) ;
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( event ) ;
if ( event . isCancelled ( ) ) {
event . setCancelled ( true ) ;
return false ;
}
final PlotManager manager = PlotMain . getPlotManager ( world ) ;
final PlotWorld plotworld = PlotMain . getWorldSettings ( world ) ;
manager . startPlotUnlink ( world , plotworld , ids ) ;
for ( final PlotId id : ids ) {
final Plot myplot = PlotMain . getPlots ( world ) . get ( id ) ;
2014-12-16 16:03:20 +11:00
if ( plot = = null ) {
continue ;
}
2014-11-08 20:27:09 +01:00
2014-11-05 14:42:08 +11:00
if ( plot . helpers ! = null ) {
myplot . helpers = plot . helpers ;
}
if ( plot . denied ! = null ) {
myplot . denied = plot . denied ;
}
myplot . deny_entry = plot . deny_entry ;
2014-12-17 20:15:11 -06:00
myplot . settings . setMerged ( new boolean [ ] { false , false , false , false } ) ;
2014-11-05 14:42:08 +11:00
DBFunc . setMerged ( world . getName ( ) , myplot , myplot . settings . getMerged ( ) ) ;
}
for ( int x = pos1 . x ; x < = pos2 . x ; x + + ) {
for ( int y = pos1 . y ; y < = pos2 . y ; y + + ) {
final boolean lx = x < pos2 . x ;
final boolean ly = y < pos2 . y ;
final Plot p = PlotHelper . getPlot ( world , new PlotId ( x , y ) ) ;
if ( lx ) {
manager . createRoadEast ( plotworld , p ) ;
if ( ly ) {
manager . createRoadSouthEast ( plotworld , p ) ;
}
}
if ( ly ) {
manager . createRoadSouth ( plotworld , p ) ;
}
2015-02-10 17:03:59 +11:00
PlotHelper . setSign ( world , UUIDHandler . getName ( plot . owner ) , plot ) ;
2014-11-05 14:42:08 +11:00
}
}
manager . finishPlotUnlink ( world , plotworld , ids ) ;
2015-02-18 23:09:30 +11:00
for ( PlotId id : ids ) {
Plot myPlot = PlotHelper . getPlot ( world , id ) ;
if ( plot . hasOwner ( ) ) {
String name = UUIDHandler . getName ( myPlot . owner ) ;
if ( name ! = null ) {
PlotHelper . setSign ( world , name , myPlot ) ;
}
}
}
2014-11-05 14:42:08 +11:00
return true ;
}
2014-09-26 14:17:52 +10:00
}