Minor messaround with land claiming.
This commit is contained in:
parent
c6739c4aa9
commit
9770cb8983
@ -4,7 +4,6 @@ import java.util.HashSet;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.massivecraft.factions.event.FactionsEventLandClaim;
|
import com.massivecraft.factions.event.FactionsEventLandClaim;
|
||||||
@ -730,16 +729,15 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canClaimForFactionAtLocation(Faction forFaction, Location location, boolean notifyFailure)
|
public boolean canClaimForFactionAtLocation(Faction forFaction, PS ps, boolean notifyFailure)
|
||||||
{
|
{
|
||||||
String error = null;
|
String error = null;
|
||||||
|
|
||||||
PS ps = PS.valueOf(location);
|
|
||||||
Faction myFaction = this.getFaction();
|
Faction myFaction = this.getFaction();
|
||||||
Faction currentFaction = BoardColl.get().getFactionAt(ps);
|
Faction currentFaction = BoardColl.get().getFactionAt(ps);
|
||||||
int ownedLand = forFaction.getLandCount();
|
int ownedLand = forFaction.getLandCount();
|
||||||
|
|
||||||
if (ConfServer.worldGuardChecking && Worldguard.checkForRegionsInChunk(location))
|
if (ConfServer.worldGuardChecking && Worldguard.checkForRegionsInChunk(ps))
|
||||||
{
|
{
|
||||||
// Checks for WorldGuard regions in the chunk attempting to be claimed
|
// Checks for WorldGuard regions in the chunk attempting to be claimed
|
||||||
error = Txt.parse("<b>This land is protected");
|
error = Txt.parse("<b>This land is protected");
|
||||||
@ -814,51 +812,35 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
return error == null;
|
return error == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean attemptClaim(Faction forFaction, Location location, boolean notifyFailure)
|
// notifyFailure is false if called by auto-claim; no need to notify on every failure for it
|
||||||
|
// return value is false on failure, true on success
|
||||||
|
public boolean attemptClaim(Faction forFaction, PS psChunk, boolean notifyFailure)
|
||||||
{
|
{
|
||||||
// notifyFailure is false if called by auto-claim; no need to notify on every failure for it
|
psChunk = psChunk.getChunk(true);
|
||||||
// return value is false on failure, true on success
|
Faction currentFaction = BoardColl.get().getFactionAt(psChunk);
|
||||||
|
|
||||||
PS flocation = PS.valueOf(location).getChunk(true);
|
|
||||||
Faction currentFaction = BoardColl.get().getFactionAt(flocation);
|
|
||||||
|
|
||||||
int ownedLand = forFaction.getLandCount();
|
int ownedLand = forFaction.getLandCount();
|
||||||
|
|
||||||
if ( ! this.canClaimForFactionAtLocation(forFaction, location, notifyFailure)) return false;
|
if ( ! this.canClaimForFactionAtLocation(forFaction, psChunk, notifyFailure)) return false;
|
||||||
|
|
||||||
// TODO: Add flag no costs??
|
|
||||||
// if economy is enabled and they're not on the bypass list, make sure they can pay
|
|
||||||
boolean mustPay = Econ.isEnabled() && ! this.isUsingAdminMode();
|
|
||||||
double cost = 0.0;
|
|
||||||
EconomyParticipator payee = null;
|
|
||||||
if (mustPay)
|
|
||||||
{
|
|
||||||
cost = Econ.calculateClaimCost(ownedLand, currentFaction.isNormal());
|
|
||||||
|
|
||||||
if (ConfServer.econClaimUnconnectedFee != 0.0 && forFaction.getLandCountInWorld(flocation.getWorld()) > 0 && !BoardColl.get().isConnectedPs(flocation, forFaction))
|
|
||||||
cost += ConfServer.econClaimUnconnectedFee;
|
|
||||||
|
|
||||||
if(ConfServer.bankEnabled && ConfServer.bankFactionPaysLandCosts && this.hasFaction())
|
|
||||||
payee = this.getFaction();
|
|
||||||
else
|
|
||||||
payee = this;
|
|
||||||
|
|
||||||
if ( ! Econ.hasAtLeast(payee, cost, "to claim this land")) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Event
|
// Event
|
||||||
FactionsEventLandClaim event = new FactionsEventLandClaim(sender, forFaction, flocation);
|
FactionsEventLandClaim event = new FactionsEventLandClaim(sender, forFaction, psChunk);
|
||||||
event.run();
|
event.run();
|
||||||
if (event.isCancelled()) return false;
|
if (event.isCancelled()) return false;
|
||||||
|
|
||||||
// then make 'em pay (if applicable)
|
// then make 'em pay (if applicable)
|
||||||
// TODO: The economy integration should cancel the event above!
|
// TODO: The economy integration should cancel the event above!
|
||||||
if (mustPay && ! Econ.modifyMoney(payee, -cost, "claim this land")) return false;
|
// Calculate the cost to claim the area
|
||||||
|
double cost = Econ.calculateClaimCost(ownedLand, currentFaction.isNormal());
|
||||||
|
if (ConfServer.econClaimUnconnectedFee != 0.0 && forFaction.getLandCountInWorld(psChunk.getWorld()) > 0 && !BoardColl.get().isConnectedPs(psChunk, forFaction))
|
||||||
|
{
|
||||||
|
cost += ConfServer.econClaimUnconnectedFee;
|
||||||
|
}
|
||||||
|
if (Econ.payForAction(cost, this, "claim this land")) return false;
|
||||||
|
|
||||||
// TODO: The LWC integration should listen to Monitor for the claim event.
|
// TODO: The LWC integration should listen to Monitor for the claim event.
|
||||||
if (LWCFeatures.getEnabled() && forFaction.isNormal() && ConfServer.onCaptureResetLwcLocks)
|
if (LWCFeatures.getEnabled() && forFaction.isNormal() && ConfServer.onCaptureResetLwcLocks)
|
||||||
{
|
{
|
||||||
LWCFeatures.clearOtherProtections(flocation, this.getFaction());
|
LWCFeatures.clearOtherProtections(psChunk, this.getFaction());
|
||||||
}
|
}
|
||||||
|
|
||||||
// announce success
|
// announce success
|
||||||
@ -870,11 +852,11 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
fp.msg("<h>%s<i> claimed land for <h>%s<i> from <h>%s<i>.", this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
|
fp.msg("<h>%s<i> claimed land for <h>%s<i> from <h>%s<i>.", this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
|
||||||
}
|
}
|
||||||
|
|
||||||
BoardColl.get().setFactionAt(flocation, forFaction);
|
BoardColl.get().setFactionAt(psChunk, forFaction);
|
||||||
SpoutFeatures.updateTerritoryDisplayLoc(flocation);
|
SpoutFeatures.updateTerritoryDisplayLoc(psChunk);
|
||||||
|
|
||||||
if (ConfServer.logLandClaims)
|
if (ConfServer.logLandClaims)
|
||||||
Factions.get().log(this.getName()+" claimed land at ("+flocation.getChunkX()+","+flocation.getChunkZ()+") for the faction: "+forFaction.getTag());
|
Factions.get().log(this.getName()+" claimed land at ("+psChunk.getChunkX()+","+psChunk.getChunkZ()+") for the faction: "+forFaction.getTag());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.massivecraft.factions.Perm;
|
|||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
|
import com.massivecraft.factions.cmd.arg.ARFaction;
|
||||||
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
|
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
|
||||||
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
|
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
|
||||||
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
|
||||||
public class CmdFactionsAutoClaim extends FCommand
|
public class CmdFactionsAutoClaim extends FCommand
|
||||||
{
|
{
|
||||||
@ -35,7 +36,7 @@ public class CmdFactionsAutoClaim extends FCommand
|
|||||||
fme.setAutoClaimFor(forFaction);
|
fme.setAutoClaimFor(forFaction);
|
||||||
|
|
||||||
msg("<i>Now auto-claiming land for <h>%s<i>.", forFaction.describeTo(fme));
|
msg("<i>Now auto-claiming land for <h>%s<i>.", forFaction.describeTo(fme));
|
||||||
fme.attemptClaim(forFaction, me.getLocation(), true);
|
fme.attemptClaim(forFaction, PS.valueOf(me), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -44,7 +44,7 @@ public class CmdFactionsClaim extends FCommand
|
|||||||
if (radius < 2)
|
if (radius < 2)
|
||||||
{
|
{
|
||||||
// single chunk
|
// single chunk
|
||||||
fme.attemptClaim(forFaction, me.getLocation(), true);
|
fme.attemptClaim(forFaction, PS.valueOf(me), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ public class CmdFactionsClaim extends FCommand
|
|||||||
@Override
|
@Override
|
||||||
public boolean work()
|
public boolean work()
|
||||||
{
|
{
|
||||||
boolean success = fme.attemptClaim(forFaction, this.currentLocation(), true);
|
boolean success = fme.attemptClaim(forFaction, PS.valueOf(this.currentLocation()), true);
|
||||||
if (success)
|
if (success)
|
||||||
failCount = 0;
|
failCount = 0;
|
||||||
else if ( ! success && failCount++ >= limit)
|
else if ( ! success && failCount++ >= limit)
|
||||||
|
@ -5,7 +5,6 @@ import java.util.Set;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
@ -71,12 +70,11 @@ public class Econ
|
|||||||
// UTIL
|
// UTIL
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public static boolean payForAction(double cost, CommandSender sender, String actionDescription)
|
public static boolean payForAction(double cost, FPlayer fsender, String actionDescription)
|
||||||
{
|
{
|
||||||
if (!isEnabled()) return true;
|
if (!isEnabled()) return true;
|
||||||
if (cost == 0D) return true;
|
if (cost == 0D) return true;
|
||||||
|
|
||||||
FPlayer fsender = FPlayer.get(sender);
|
|
||||||
if (fsender.isUsingAdminMode()) return true;
|
if (fsender.isUsingAdminMode()) return true;
|
||||||
Faction fsenderFaction = fsender.getFaction();
|
Faction fsenderFaction = fsender.getFaction();
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.massivecraft.factions.integration;
|
package com.massivecraft.factions.integration;
|
||||||
|
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.factions.Factions;
|
||||||
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -79,16 +81,23 @@ public class Worldguard
|
|||||||
// Returns:
|
// Returns:
|
||||||
// True: Regions found within chunk
|
// True: Regions found within chunk
|
||||||
// False: No regions found within chunk
|
// False: No regions found within chunk
|
||||||
public static boolean checkForRegionsInChunk(Location loc)
|
public static boolean checkForRegionsInChunk(PS psChunk)
|
||||||
{
|
{
|
||||||
if ( ! enabled)
|
// No WG hooks so we'll always bypass this check.
|
||||||
|
if (!enabled) return false;
|
||||||
|
|
||||||
|
World world = null;
|
||||||
|
Chunk chunk = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
world = psChunk.asBukkitWorld(true);
|
||||||
|
chunk = psChunk.asBukkitChunk(true);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// No WG hooks so we'll always bypass this check.
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
World world = loc.getWorld();
|
|
||||||
Chunk chunk = world.getChunkAt(loc);
|
|
||||||
int minChunkX = chunk.getX() << 4;
|
int minChunkX = chunk.getX() << 4;
|
||||||
int minChunkZ = chunk.getZ() << 4;
|
int minChunkZ = chunk.getZ() << 4;
|
||||||
int maxChunkX = minChunkX + 15;
|
int maxChunkX = minChunkX + 15;
|
||||||
|
@ -51,7 +51,7 @@ public class FactionsListenerEcon implements Listener
|
|||||||
if (event.getSender() == null) return;
|
if (event.getSender() == null) return;
|
||||||
|
|
||||||
// ... and the sender can't afford ...
|
// ... and the sender can't afford ...
|
||||||
if (Econ.payForAction(cost, event.getSender(), command.getDesc())) return;
|
if (Econ.payForAction(cost, event.getFSender(), command.getDesc())) return;
|
||||||
|
|
||||||
// ... then cancel.
|
// ... then cancel.
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -108,7 +108,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
|
|
||||||
if (fplayer.getAutoClaimFor() != null)
|
if (fplayer.getAutoClaimFor() != null)
|
||||||
{
|
{
|
||||||
fplayer.attemptClaim(fplayer.getAutoClaimFor(), event.getTo(), true);
|
fplayer.attemptClaim(fplayer.getAutoClaimFor(), PS.valueOf(event.getTo()), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user