Release pets on claim delete.

Except for owner-initiated deletes (/AbandonClaim).
This commit is contained in:
ryanhamshire 2015-12-16 14:44:34 -08:00
parent da920488b7
commit 709bb55e98
3 changed files with 34 additions and 6 deletions

View File

@ -89,7 +89,7 @@ class CleanupUnusedClaimsTask implements Runnable
if(newPlayerClaimsExpired && playerData.getClaims().size() == 1) if(newPlayerClaimsExpired && playerData.getClaims().size() == 1)
{ {
claim.removeSurfaceFluids(null); claim.removeSurfaceFluids(null);
GriefPrevention.instance.dataStore.deleteClaim(claim, true); GriefPrevention.instance.dataStore.deleteClaim(claim, true, true);
cleanupChunks = true; cleanupChunks = true;
//if configured to do so, restore the land to natural //if configured to do so, restore the land to natural
@ -155,7 +155,7 @@ class CleanupUnusedClaimsTask implements Runnable
boolean claimExpired = sevenDaysAgo.getTime().after(playerData.getLastLogin()); boolean claimExpired = sevenDaysAgo.getTime().after(playerData.getLastLogin());
if(claimExpired) if(claimExpired)
{ {
GriefPrevention.instance.dataStore.deleteClaim(claim, true); GriefPrevention.instance.dataStore.deleteClaim(claim, true, true);
GriefPrevention.AddLogEntry("Removed " + claim.getOwnerName() + "'s unused claim @ " + GriefPrevention.getfriendlyLocationString(claim.getLesserBoundaryCorner()), CustomLogEntryTypes.AdminActivity); GriefPrevention.AddLogEntry("Removed " + claim.getOwnerName() + "'s unused claim @ " + GriefPrevention.getfriendlyLocationString(claim.getLesserBoundaryCorner()), CustomLogEntryTypes.AdminActivity);
//restore the claim area to natural state //restore the claim area to natural state

View File

@ -29,7 +29,9 @@ import me.ryanhamshire.GriefPrevention.events.ClaimDeletedEvent;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.google.common.io.Files; import com.google.common.io.Files;
@ -537,10 +539,16 @@ public abstract class DataStore
//deletes a claim or subdivision //deletes a claim or subdivision
synchronized public void deleteClaim(Claim claim) synchronized public void deleteClaim(Claim claim)
{ {
this.deleteClaim(claim, true); this.deleteClaim(claim, true, false);
}
//deletes a claim or subdivision
synchronized public void deleteClaim(Claim claim, boolean releasePets)
{
this.deleteClaim(claim, true, releasePets);
} }
synchronized void deleteClaim(Claim claim, boolean fireEvent) synchronized void deleteClaim(Claim claim, boolean fireEvent, boolean releasePets)
{ {
//delete any children //delete any children
for(int j = 0; j < claim.children.size(); j++) for(int j = 0; j < claim.children.size(); j++)
@ -605,6 +613,26 @@ public abstract class DataStore
ClaimDeletedEvent ev = new ClaimDeletedEvent(claim); ClaimDeletedEvent ev = new ClaimDeletedEvent(claim);
Bukkit.getPluginManager().callEvent(ev); Bukkit.getPluginManager().callEvent(ev);
} }
//optionally set any pets free which belong to the claim owner
if(releasePets && claim.ownerID != null && claim.parent == null)
{
for(Chunk chunk : claim.getChunks())
{
Entity [] entities = chunk.getEntities();
for(Entity entity : entities)
{
if(entity instanceof Tameable)
{
Tameable pet = (Tameable)entity;
if(pet.isTamed() && pet.getOwner().getUniqueId().equals(claim.ownerID))
{
pet.setTamed(false);
}
}
}
}
}
} }
abstract void deleteClaimFromSecondaryStorage(Claim claim); abstract void deleteClaimFromSecondaryStorage(Claim claim);

View File

@ -1561,7 +1561,7 @@ public class GriefPrevention extends JavaPlugin
else else
{ {
claim.removeSurfaceFluids(null); claim.removeSurfaceFluids(null);
this.dataStore.deleteClaim(claim, true); this.dataStore.deleteClaim(claim, true, true);
//if in a creative mode world, /restorenature the claim //if in a creative mode world, /restorenature the claim
if(GriefPrevention.instance.creativeRulesApply(claim.getLesserBoundaryCorner())) if(GriefPrevention.instance.creativeRulesApply(claim.getLesserBoundaryCorner()))
@ -2354,7 +2354,7 @@ public class GriefPrevention extends JavaPlugin
{ {
//delete it //delete it
claim.removeSurfaceFluids(null); claim.removeSurfaceFluids(null);
this.dataStore.deleteClaim(claim, true); this.dataStore.deleteClaim(claim, true, false);
//if in a creative mode world, restore the claim area //if in a creative mode world, restore the claim area
if(GriefPrevention.instance.creativeRulesApply(claim.getLesserBoundaryCorner())) if(GriefPrevention.instance.creativeRulesApply(claim.getLesserBoundaryCorner()))