2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd ;
2011-03-22 15:45:41 +01:00
2015-09-08 19:18:45 +02:00
import com.massivecraft.factions.Factions ;
2013-04-09 12:56:29 +02:00
import com.massivecraft.factions.Perm ;
2013-04-09 13:24:55 +02:00
import com.massivecraft.factions.Rel ;
2013-04-25 13:53:22 +02:00
import com.massivecraft.factions.cmd.req.ReqHasFaction ;
2015-10-21 19:35:41 +02:00
import com.massivecraft.factions.cmd.type.TypeFaction ;
2013-04-22 09:37:53 +02:00
import com.massivecraft.factions.entity.Faction ;
2014-10-02 11:45:06 +02:00
import com.massivecraft.factions.entity.MFlag ;
2014-10-03 09:01:36 +02:00
import com.massivecraft.factions.entity.MPerm ;
2014-06-04 16:47:01 +02:00
import com.massivecraft.factions.event.EventFactionsRelationChange ;
2015-02-12 12:00:55 +01:00
import com.massivecraft.massivecore.MassiveException ;
2015-11-06 02:10:29 +01:00
import com.massivecraft.massivecore.command.MassiveCommand ;
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm ;
2015-09-08 19:18:45 +02:00
import com.massivecraft.massivecore.mson.Mson ;
import com.massivecraft.massivecore.util.Txt ;
2011-03-22 15:45:41 +01:00
2014-09-18 13:41:20 +02:00
public abstract class CmdFactionsRelationAbstract extends FactionsCommand
2011-10-09 18:35:39 +02:00
{
2011-10-23 17:30:41 +02:00
public Rel targetRelation ;
2013-11-11 09:31:04 +01:00
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
2011-03-22 15:45:41 +01:00
2013-04-10 13:12:22 +02:00
public CmdFactionsRelationAbstract ( )
2011-10-09 18:35:39 +02:00
{
2013-11-11 09:31:04 +01:00
// Aliases
2015-10-21 19:35:41 +02:00
this . addParameter ( TypeFaction . get ( ) , " faction " ) ;
2013-11-11 09:31:04 +01:00
// Requirements
2015-11-06 02:10:29 +01:00
this . addRequirements ( RequirementHasPerm . get ( Perm . RELATION . node ) ) ;
2013-04-25 13:53:22 +02:00
this . addRequirements ( ReqHasFaction . get ( ) ) ;
2011-03-22 15:45:41 +01:00
}
2013-11-11 09:31:04 +01:00
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
2011-03-22 15:45:41 +01:00
2011-10-09 18:35:39 +02:00
@Override
2015-02-12 12:00:55 +01:00
public void perform ( ) throws MassiveException
2011-10-09 18:35:39 +02:00
{
2013-04-19 12:27:39 +02:00
// Args
2015-05-06 17:04:35 +02:00
Faction otherFaction = this . readArg ( ) ;
2013-04-19 12:27:39 +02:00
Rel newRelation = targetRelation ;
2011-03-22 15:45:41 +01:00
2011-10-24 02:33:30 +02:00
/ * if ( ! them . isNormal ( ) )
2011-10-09 18:35:39 +02:00
{
2011-10-10 13:40:24 +02:00
msg ( " <b>Nope! You can't. " ) ;
2011-03-22 15:45:41 +01:00
return ;
2011-10-24 02:33:30 +02:00
} * /
2011-03-22 15:45:41 +01:00
2014-10-03 09:01:36 +02:00
// MPerm
if ( ! MPerm . getPermRel ( ) . has ( msender , msenderFaction , true ) ) return ;
2013-04-19 12:27:39 +02:00
// Verify
2014-09-18 13:41:20 +02:00
if ( otherFaction = = msenderFaction )
2011-10-09 18:35:39 +02:00
{
2011-10-10 13:40:24 +02:00
msg ( " <b>Nope! You can't declare a relation to yourself :) " ) ;
2011-03-22 15:45:41 +01:00
return ;
}
Added basic support for iConomy, where most Factions commands can be made to cost (or give) money. For claiming land, there are some extra features. Each additional land claimed by default costs more than the last, with the multiplier being configurable. For example, the first claim might cost $30, the 2nd $45, the third $60, and so forth. When land is claimed from a weakened faction, there is a configurable bonus amount of money deducted from the cost of claiming the land, as an incentive; this number can be changed to a negative value to instead make it cost more to claim such land. When land is unclaimed, a configurable percentage of the cost of claiming the land can be refunded (defaults to 70% of the cost). The total value of a faction's claimed land is now shown in the info given by /f who [faction tag], along with the depreciated (refund) value.
2011-08-02 01:05:01 +02:00
2014-09-18 13:41:20 +02:00
if ( msenderFaction . getRelationWish ( otherFaction ) = = newRelation )
2012-04-06 20:27:23 +02:00
{
2013-04-24 19:01:17 +02:00
msg ( " <b>You already have that relation wish set with %s. " , otherFaction . getName ( ) ) ;
2012-04-06 20:27:23 +02:00
return ;
}
2013-04-19 12:27:39 +02:00
// Event
2014-09-18 13:41:20 +02:00
EventFactionsRelationChange event = new EventFactionsRelationChange ( sender , msenderFaction , otherFaction , newRelation ) ;
2013-04-19 12:27:39 +02:00
event . run ( ) ;
if ( event . isCancelled ( ) ) return ;
newRelation = event . getNewRelation ( ) ;
Added basic support for iConomy, where most Factions commands can be made to cost (or give) money. For claiming land, there are some extra features. Each additional land claimed by default costs more than the last, with the multiplier being configurable. For example, the first claim might cost $30, the 2nd $45, the third $60, and so forth. When land is claimed from a weakened faction, there is a configurable bonus amount of money deducted from the cost of claiming the land, as an incentive; this number can be changed to a negative value to instead make it cost more to claim such land. When land is unclaimed, a configurable percentage of the cost of claiming the land can be refunded (defaults to 70% of the cost). The total value of a faction's claimed land is now shown in the info given by /f who [faction tag], along with the depreciated (refund) value.
2011-08-02 01:05:01 +02:00
2012-03-09 23:09:33 +01:00
// try to set the new relation
2014-09-18 13:41:20 +02:00
msenderFaction . setRelationWish ( otherFaction , newRelation ) ;
Rel currentRelation = msenderFaction . getRelationTo ( otherFaction , true ) ;
2012-03-09 23:09:33 +01:00
// if the relation change was successful
2013-04-19 12:27:39 +02:00
if ( newRelation = = currentRelation )
2011-10-09 18:35:39 +02:00
{
2014-09-18 13:41:20 +02:00
otherFaction . msg ( " %s<i> is now %s. " , msenderFaction . describeTo ( otherFaction , true ) , newRelation . getDescFactionOne ( ) ) ;
msenderFaction . msg ( " %s<i> is now %s. " , otherFaction . describeTo ( msenderFaction , true ) , newRelation . getDescFactionOne ( ) ) ;
2011-03-22 15:45:41 +01:00
}
2012-03-09 23:09:33 +01:00
// inform the other faction of your request
2011-10-09 18:35:39 +02:00
else
{
2015-09-08 19:18:45 +02:00
MassiveCommand relationshipCommand = null ;
if ( newRelation . equals ( Rel . NEUTRAL ) ) relationshipCommand = Factions . get ( ) . getOuterCmdFactions ( ) . cmdFactionsRelationNeutral ;
else if ( newRelation . equals ( Rel . TRUCE ) ) relationshipCommand = Factions . get ( ) . getOuterCmdFactions ( ) . cmdFactionsRelationTruce ;
else if ( newRelation . equals ( Rel . ALLY ) ) relationshipCommand = Factions . get ( ) . getOuterCmdFactions ( ) . cmdFactionsRelationAlly ;
else if ( newRelation . equals ( Rel . ENEMY ) ) relationshipCommand = Factions . get ( ) . getOuterCmdFactions ( ) . cmdFactionsRelationEnemy ;
String command = relationshipCommand . getCommandLine ( msenderFaction . getName ( ) ) ;
String tooltip = Txt . parse ( " <g>Click to <c>%s<i>. " , command ) ;
// Mson creation
Mson factionsRelationshipChange = mson (
Mson . parse ( " %s<i> wishes to be %s. " , msenderFaction . describeTo ( otherFaction , true ) , newRelation . getColor ( ) + newRelation . getDescFactionOne ( ) ) ,
mson ( tooltip ) . tooltipParse ( tooltip ) . command ( command )
) ;
otherFaction . sendMessage ( factionsRelationshipChange ) ;
2014-09-18 13:41:20 +02:00
msenderFaction . msg ( " %s<i> were informed that you wish to be %s<i>. " , otherFaction . describeTo ( msenderFaction , true ) , newRelation . getColor ( ) + newRelation . getDescFactionOne ( ) ) ;
2011-08-05 10:50:47 +02:00
}
2011-10-09 18:35:39 +02:00
2011-10-24 11:07:06 +02:00
// TODO: The ally case should work!!
2012-03-09 23:09:33 +01:00
// * this might have to be bumped up to make that happen, & allow ALLY,NEUTRAL only
2014-10-07 12:30:44 +02:00
if ( newRelation ! = Rel . TRUCE & & otherFaction . getFlag ( MFlag . getFlagPeaceful ( ) ) )
2011-10-09 18:35:39 +02:00
{
2013-04-19 12:27:39 +02:00
otherFaction . msg ( " <i>This will have no effect while your faction is peaceful. " ) ;
2014-09-18 13:41:20 +02:00
msenderFaction . msg ( " <i>This will have no effect while their faction is peaceful. " ) ;
2011-10-09 18:35:39 +02:00
}
2014-10-07 12:30:44 +02:00
if ( newRelation ! = Rel . TRUCE & & msenderFaction . getFlag ( MFlag . getFlagPeaceful ( ) ) )
2011-10-09 18:35:39 +02:00
{
2013-04-19 12:27:39 +02:00
otherFaction . msg ( " <i>This will have no effect while their faction is peaceful. " ) ;
2014-09-18 13:41:20 +02:00
msenderFaction . msg ( " <i>This will have no effect while your faction is peaceful. " ) ;
2011-08-05 10:50:47 +02:00
}
2015-11-08 17:59:32 +01:00
// Mark as changed
msenderFaction . changed ( ) ;
2011-03-22 15:45:41 +01:00
}
2013-11-11 09:31:04 +01:00
2011-03-22 15:45:41 +01:00
}