6.1
This commit is contained in:
parent
e746aa20c0
commit
bd215673c0
|
|
@ -2,7 +2,7 @@ name: GriefPrevention
|
||||||
main: me.ryanhamshire.GriefPrevention.GriefPrevention
|
main: me.ryanhamshire.GriefPrevention.GriefPrevention
|
||||||
softdepend: [Vault, Multiverse-Core, My Worlds]
|
softdepend: [Vault, Multiverse-Core, My Worlds]
|
||||||
dev-url: http://dev.bukkit.org/server-mods/grief-prevention
|
dev-url: http://dev.bukkit.org/server-mods/grief-prevention
|
||||||
version: 6.0
|
version: 6.1
|
||||||
commands:
|
commands:
|
||||||
abandonclaim:
|
abandonclaim:
|
||||||
description: Deletes a claim.
|
description: Deletes a claim.
|
||||||
|
|
|
||||||
|
|
@ -622,9 +622,9 @@ public class BlockEventHandler implements Listener
|
||||||
{
|
{
|
||||||
Location rootLocation = growEvent.getLocation();
|
Location rootLocation = growEvent.getLocation();
|
||||||
Claim rootClaim = this.dataStore.getClaimAt(rootLocation, false, null);
|
Claim rootClaim = this.dataStore.getClaimAt(rootLocation, false, null);
|
||||||
|
String rootOwnerName = null;
|
||||||
|
|
||||||
//who owns the spreading block, if anyone?
|
//who owns the spreading block, if anyone?
|
||||||
OfflinePlayer fromOwner = null;
|
|
||||||
if(rootClaim != null)
|
if(rootClaim != null)
|
||||||
{
|
{
|
||||||
//tree growth in subdivisions is dependent on who owns the top level claim
|
//tree growth in subdivisions is dependent on who owns the top level claim
|
||||||
|
|
@ -634,7 +634,7 @@ public class BlockEventHandler implements Listener
|
||||||
if(rootClaim.isAdminClaim()) return;
|
if(rootClaim.isAdminClaim()) return;
|
||||||
|
|
||||||
//otherwise, note the owner of the claim
|
//otherwise, note the owner of the claim
|
||||||
fromOwner = GriefPrevention.instance.getServer().getOfflinePlayer(rootClaim.ownerName);
|
rootOwnerName = rootClaim.getOwnerName();
|
||||||
}
|
}
|
||||||
|
|
||||||
//for each block growing
|
//for each block growing
|
||||||
|
|
@ -647,7 +647,7 @@ public class BlockEventHandler implements Listener
|
||||||
if(blockClaim != null)
|
if(blockClaim != null)
|
||||||
{
|
{
|
||||||
//if there's no owner for the new tree, or the owner for the new tree is different from the owner of the claim
|
//if there's no owner for the new tree, or the owner for the new tree is different from the owner of the claim
|
||||||
if(fromOwner == null || !fromOwner.getName().equals(blockClaim.ownerName))
|
if(rootOwnerName == null || !rootOwnerName.equals(blockClaim.getOwnerName()))
|
||||||
{
|
{
|
||||||
growEvent.getBlocks().remove(i--);
|
growEvent.getBlocks().remove(i--);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -994,7 +994,9 @@ public abstract class DataStore
|
||||||
this.addDefault(defaults, Messages.HowToClaimRegex, "(^|.*\\W)how\\W.*\\W(claim|protect|lock)(\\W.*|$)", "This is a Java Regular Expression. Look it up before editing! It's used to tell players about the demo video when they ask how to claim land.");
|
this.addDefault(defaults, Messages.HowToClaimRegex, "(^|.*\\W)how\\W.*\\W(claim|protect|lock)(\\W.*|$)", "This is a Java Regular Expression. Look it up before editing! It's used to tell players about the demo video when they ask how to claim land.");
|
||||||
this.addDefault(defaults, Messages.NoBuildOutsideClaims, "You can't build here unless you claim some land first.", null);
|
this.addDefault(defaults, Messages.NoBuildOutsideClaims, "You can't build here unless you claim some land first.", null);
|
||||||
this.addDefault(defaults, Messages.PlayerOfflineTime, " Last login: {0} days ago.", "0: number of full days since last login");
|
this.addDefault(defaults, Messages.PlayerOfflineTime, " Last login: {0} days ago.", "0: number of full days since last login");
|
||||||
this.addDefault(defaults, Messages.BuildingOutsideClaims, "Other players can undo your work here! Consider claiming this area to protect your work.", null);
|
this.addDefault(defaults, Messages.BuildingOutsideClaims, "Other players can undo your work here! Consider claiming this area to protect your work.", null);
|
||||||
|
this.addDefault(defaults, Messages.TrappedWontWorkHere, "Sorry, unable to find a safe location to teleport you to. Contact an admin, or consider /kill if you don't want to wait.", null);
|
||||||
|
this.addDefault(defaults, Messages.CommandBannedInPvP, "You can't use that command while in PvP combat.", null);
|
||||||
|
|
||||||
//load the config file
|
//load the config file
|
||||||
FileConfiguration config = YamlConfiguration.loadConfiguration(new File(messagesFilePath));
|
FileConfiguration config = YamlConfiguration.loadConfiguration(new File(messagesFilePath));
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ public class GriefPrevention extends JavaPlugin
|
||||||
public boolean config_pvp_punishLogout; //whether to kill players who log out during PvP combat
|
public boolean config_pvp_punishLogout; //whether to kill players who log out during PvP combat
|
||||||
public int config_pvp_combatTimeoutSeconds; //how long combat is considered to continue after the most recent damage
|
public int config_pvp_combatTimeoutSeconds; //how long combat is considered to continue after the most recent damage
|
||||||
public boolean config_pvp_allowCombatItemDrop; //whether a player can drop items during combat to hide them
|
public boolean config_pvp_allowCombatItemDrop; //whether a player can drop items during combat to hide them
|
||||||
|
public ArrayList<String> config_pvp_blockedCommands; //list of commands which may not be used during pvp combat
|
||||||
|
|
||||||
public boolean config_trees_removeFloatingTreetops; //whether to automatically remove partially cut trees
|
public boolean config_trees_removeFloatingTreetops; //whether to automatically remove partially cut trees
|
||||||
public boolean config_trees_regrowGriefedTrees; //whether to automatically replant partially cut trees
|
public boolean config_trees_regrowGriefedTrees; //whether to automatically replant partially cut trees
|
||||||
|
|
@ -258,6 +259,7 @@ public class GriefPrevention extends JavaPlugin
|
||||||
this.config_pvp_punishLogout = config.getBoolean("GriefPrevention.PvP.PunishLogout", true);
|
this.config_pvp_punishLogout = config.getBoolean("GriefPrevention.PvP.PunishLogout", true);
|
||||||
this.config_pvp_combatTimeoutSeconds = config.getInt("GriefPrevention.PvP.CombatTimeoutSeconds", 15);
|
this.config_pvp_combatTimeoutSeconds = config.getInt("GriefPrevention.PvP.CombatTimeoutSeconds", 15);
|
||||||
this.config_pvp_allowCombatItemDrop = config.getBoolean("GriefPrevention.PvP.AllowCombatItemDrop", false);
|
this.config_pvp_allowCombatItemDrop = config.getBoolean("GriefPrevention.PvP.AllowCombatItemDrop", false);
|
||||||
|
String bannedPvPCommandsList = config.getString("GriefPrevention.PvP.BlockedSlashCommands", "/home;/vanish;/spawn;/tpa");
|
||||||
|
|
||||||
this.config_trees_removeFloatingTreetops = config.getBoolean("GriefPrevention.Trees.RemoveFloatingTreetops", true);
|
this.config_trees_removeFloatingTreetops = config.getBoolean("GriefPrevention.Trees.RemoveFloatingTreetops", true);
|
||||||
this.config_trees_regrowGriefedTrees = config.getBoolean("GriefPrevention.Trees.RegrowGriefedTrees", true);
|
this.config_trees_regrowGriefedTrees = config.getBoolean("GriefPrevention.Trees.RegrowGriefedTrees", true);
|
||||||
|
|
@ -434,6 +436,7 @@ public class GriefPrevention extends JavaPlugin
|
||||||
config.set("GriefPrevention.PvP.PunishLogout", this.config_pvp_punishLogout);
|
config.set("GriefPrevention.PvP.PunishLogout", this.config_pvp_punishLogout);
|
||||||
config.set("GriefPrevention.PvP.CombatTimeoutSeconds", this.config_pvp_combatTimeoutSeconds);
|
config.set("GriefPrevention.PvP.CombatTimeoutSeconds", this.config_pvp_combatTimeoutSeconds);
|
||||||
config.set("GriefPrevention.PvP.AllowCombatItemDrop", this.config_pvp_allowCombatItemDrop);
|
config.set("GriefPrevention.PvP.AllowCombatItemDrop", this.config_pvp_allowCombatItemDrop);
|
||||||
|
config.set("GriefPrevention.PvP.BlockedSlashCommands", bannedPvPCommandsList);
|
||||||
|
|
||||||
config.set("GriefPrevention.Trees.RemoveFloatingTreetops", this.config_trees_removeFloatingTreetops);
|
config.set("GriefPrevention.Trees.RemoveFloatingTreetops", this.config_trees_removeFloatingTreetops);
|
||||||
config.set("GriefPrevention.Trees.RegrowGriefedTrees", this.config_trees_regrowGriefedTrees);
|
config.set("GriefPrevention.Trees.RegrowGriefedTrees", this.config_trees_regrowGriefedTrees);
|
||||||
|
|
@ -487,7 +490,7 @@ public class GriefPrevention extends JavaPlugin
|
||||||
this.config_spam_monitorSlashCommands.add(commands[i].trim());
|
this.config_spam_monitorSlashCommands.add(commands[i].trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
//try to parse the list of commands which should be monitored for spam
|
//try to parse the list of commands which should be included in eavesdropping
|
||||||
this.config_eavesdrop_whisperCommands = new ArrayList<String>();
|
this.config_eavesdrop_whisperCommands = new ArrayList<String>();
|
||||||
commands = whisperCommandsToMonitor.split(";");
|
commands = whisperCommandsToMonitor.split(";");
|
||||||
for(int i = 0; i < commands.length; i++)
|
for(int i = 0; i < commands.length; i++)
|
||||||
|
|
@ -495,6 +498,14 @@ public class GriefPrevention extends JavaPlugin
|
||||||
this.config_eavesdrop_whisperCommands.add(commands[i].trim());
|
this.config_eavesdrop_whisperCommands.add(commands[i].trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//try to parse the list of commands which should be banned during pvp combat
|
||||||
|
this.config_pvp_blockedCommands = new ArrayList<String>();
|
||||||
|
commands = bannedPvPCommandsList.split(";");
|
||||||
|
for(int i = 0; i < commands.length; i++)
|
||||||
|
{
|
||||||
|
this.config_pvp_blockedCommands.add(commands[i].trim());
|
||||||
|
}
|
||||||
|
|
||||||
//when datastore initializes, it loads player and claim data, and posts some stats to the log
|
//when datastore initializes, it loads player and claim data, and posts some stats to the log
|
||||||
if(databaseUrl.length() > 0)
|
if(databaseUrl.length() > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -1457,6 +1468,13 @@ public class GriefPrevention extends JavaPlugin
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if the player is in the nether or end, he's screwed (there's no way to programmatically find a safe place for him)
|
||||||
|
if(player.getWorld().getEnvironment() != Environment.NORMAL)
|
||||||
|
{
|
||||||
|
GriefPrevention.sendMessage(player, TextMode.Err, Messages.TrappedWontWorkHere);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//check cooldown
|
//check cooldown
|
||||||
long lastTrappedUsage = playerData.lastTrappedUsage.getTime();
|
long lastTrappedUsage = playerData.lastTrappedUsage.getTime();
|
||||||
long nextTrappedUsage = lastTrappedUsage + 1000 * 60 * 60 * this.config_claims_trappedCooldownHours;
|
long nextTrappedUsage = lastTrappedUsage + 1000 * 60 * 60 * this.config_claims_trappedCooldownHours;
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,5 @@ package me.ryanhamshire.GriefPrevention;
|
||||||
|
|
||||||
public enum Messages
|
public enum Messages
|
||||||
{
|
{
|
||||||
RespectingClaims, IgnoringClaims, SuccessfulAbandon, RestoreNatureActivate, RestoreNatureAggressiveActivate, FillModeActive, TransferClaimPermission, TransferClaimMissing, TransferClaimAdminOnly, PlayerNotFound, TransferTopLevel, TransferSuccess, TrustListNoClaim, ClearPermsOwnerOnly, UntrustIndividualAllClaims, UntrustEveryoneAllClaims, NoPermissionTrust, ClearPermissionsOneClaim, UntrustIndividualSingleClaim, OnlySellBlocks, BlockPurchaseCost, ClaimBlockLimit, InsufficientFunds, PurchaseConfirmation, OnlyPurchaseBlocks, BlockSaleValue, NotEnoughBlocksForSale, BlockSaleConfirmation, AdminClaimsMode, BasicClaimsMode, SubdivisionMode, SubdivisionDemo, DeleteClaimMissing, DeletionSubdivisionWarning, DeleteSuccess, CantDeleteAdminClaim, DeleteAllSuccess, NoDeletePermission, AllAdminDeleted, AdjustBlocksSuccess, NotTrappedHere, TrappedOnCooldown, RescuePending, NonSiegeWorld, AlreadySieging, NotSiegableThere, SiegeTooFarAway, NoSiegeDefenseless, AlreadyUnderSiegePlayer, AlreadyUnderSiegeArea, NoSiegeAdminClaim, SiegeOnCooldown, SiegeAlert, SiegeConfirmed, AbandonClaimMissing, NotYourClaim, DeleteTopLevelClaim, AbandonSuccess, CantGrantThatPermission, GrantPermissionNoClaim, GrantPermissionConfirmation, ManageUniversalPermissionsInstruction, ManageOneClaimPermissionsInstruction, CollectivePublic, BuildPermission, ContainersPermission, AccessPermission, PermissionsPermission, LocationCurrentClaim, LocationAllClaims, PvPImmunityStart, SiegeNoDrop, DonateItemsInstruction, ChestFull, DonationSuccess, PlayerTooCloseForFire, TooDeepToClaim, ChestClaimConfirmation, AutomaticClaimNotification, TrustCommandAdvertisement, GoldenShovelAdvertisement, UnprotectedChestWarning, ThatPlayerPvPImmune, CantFightWhileImmune, NoDamageClaimedEntity, ShovelBasicClaimMode, RemainingBlocks, CreativeBasicsDemoAdvertisement, SurvivalBasicsDemoAdvertisement, TrappedChatKeyword, TrappedInstructions, PvPNoDrop, SiegeNoTeleport, BesiegedNoTeleport, SiegeNoContainers, PvPNoContainers, PvPImmunityEnd, NoBedPermission, NoWildernessBuckets, NoLavaNearOtherPlayer, TooFarAway, BlockNotClaimed, BlockClaimed, SiegeNoShovel, RestoreNaturePlayerInChunk, NoCreateClaimPermission, ResizeClaimTooSmall, ResizeNeedMoreBlocks, NoCreativeUnClaim, ClaimResizeSuccess, ResizeFailOverlap, ResizeStart, ResizeFailOverlapSubdivision, SubdivisionStart, CreateSubdivisionOverlap, SubdivisionSuccess, CreateClaimFailOverlap, CreateClaimFailOverlapOtherPlayer, ClaimsDisabledWorld, ClaimStart, NewClaimTooSmall, CreateClaimInsufficientBlocks, AbandonClaimAdvertisement, CreateClaimFailOverlapShort, CreateClaimSuccess, SiegeWinDoorsOpen, RescueAbortedMoved, SiegeDoorsLockedEjection, NoModifyDuringSiege, OnlyOwnersModifyClaims, NoBuildUnderSiege, NoBuildPvP, NoBuildPermission, NonSiegeMaterial, NoOwnerBuildUnderSiege, NoAccessPermission, NoContainersSiege, NoContainersPermission, OwnerNameForAdminClaims, ClaimTooSmallForEntities, TooManyEntitiesInClaim, YouHaveNoClaims, ConfirmFluidRemoval, AutoBanNotify, AdjustGroupBlocksSuccess, InvalidPermissionID, UntrustOwnerOnly, HowToClaimRegex, NoBuildOutsideClaims, PlayerOfflineTime, BuildingOutsideClaims
|
RespectingClaims, IgnoringClaims, SuccessfulAbandon, RestoreNatureActivate, RestoreNatureAggressiveActivate, FillModeActive, TransferClaimPermission, TransferClaimMissing, TransferClaimAdminOnly, PlayerNotFound, TransferTopLevel, TransferSuccess, TrustListNoClaim, ClearPermsOwnerOnly, UntrustIndividualAllClaims, UntrustEveryoneAllClaims, NoPermissionTrust, ClearPermissionsOneClaim, UntrustIndividualSingleClaim, OnlySellBlocks, BlockPurchaseCost, ClaimBlockLimit, InsufficientFunds, PurchaseConfirmation, OnlyPurchaseBlocks, BlockSaleValue, NotEnoughBlocksForSale, BlockSaleConfirmation, AdminClaimsMode, BasicClaimsMode, SubdivisionMode, SubdivisionDemo, DeleteClaimMissing, DeletionSubdivisionWarning, DeleteSuccess, CantDeleteAdminClaim, DeleteAllSuccess, NoDeletePermission, AllAdminDeleted, AdjustBlocksSuccess, NotTrappedHere, TrappedOnCooldown, RescuePending, NonSiegeWorld, AlreadySieging, NotSiegableThere, SiegeTooFarAway, NoSiegeDefenseless, AlreadyUnderSiegePlayer, AlreadyUnderSiegeArea, NoSiegeAdminClaim, SiegeOnCooldown, SiegeAlert, SiegeConfirmed, AbandonClaimMissing, NotYourClaim, DeleteTopLevelClaim, AbandonSuccess, CantGrantThatPermission, GrantPermissionNoClaim, GrantPermissionConfirmation, ManageUniversalPermissionsInstruction, ManageOneClaimPermissionsInstruction, CollectivePublic, BuildPermission, ContainersPermission, AccessPermission, PermissionsPermission, LocationCurrentClaim, LocationAllClaims, PvPImmunityStart, SiegeNoDrop, DonateItemsInstruction, ChestFull, DonationSuccess, PlayerTooCloseForFire, TooDeepToClaim, ChestClaimConfirmation, AutomaticClaimNotification, TrustCommandAdvertisement, GoldenShovelAdvertisement, UnprotectedChestWarning, ThatPlayerPvPImmune, CantFightWhileImmune, NoDamageClaimedEntity, ShovelBasicClaimMode, RemainingBlocks, CreativeBasicsDemoAdvertisement, SurvivalBasicsDemoAdvertisement, TrappedChatKeyword, TrappedInstructions, PvPNoDrop, SiegeNoTeleport, BesiegedNoTeleport, SiegeNoContainers, PvPNoContainers, PvPImmunityEnd, NoBedPermission, NoWildernessBuckets, NoLavaNearOtherPlayer, TooFarAway, BlockNotClaimed, BlockClaimed, SiegeNoShovel, RestoreNaturePlayerInChunk, NoCreateClaimPermission, ResizeClaimTooSmall, ResizeNeedMoreBlocks, NoCreativeUnClaim, ClaimResizeSuccess, ResizeFailOverlap, ResizeStart, ResizeFailOverlapSubdivision, SubdivisionStart, CreateSubdivisionOverlap, SubdivisionSuccess, CreateClaimFailOverlap, CreateClaimFailOverlapOtherPlayer, ClaimsDisabledWorld, ClaimStart, NewClaimTooSmall, CreateClaimInsufficientBlocks, AbandonClaimAdvertisement, CreateClaimFailOverlapShort, CreateClaimSuccess, SiegeWinDoorsOpen, RescueAbortedMoved, SiegeDoorsLockedEjection, NoModifyDuringSiege, OnlyOwnersModifyClaims, NoBuildUnderSiege, NoBuildPvP, NoBuildPermission, NonSiegeMaterial, NoOwnerBuildUnderSiege, NoAccessPermission, NoContainersSiege, NoContainersPermission, OwnerNameForAdminClaims, ClaimTooSmallForEntities, TooManyEntitiesInClaim, YouHaveNoClaims, ConfirmFluidRemoval, AutoBanNotify, AdjustGroupBlocksSuccess, InvalidPermissionID, UntrustOwnerOnly, HowToClaimRegex, NoBuildOutsideClaims, PlayerOfflineTime, BuildingOutsideClaims, TrappedWontWorkHere, CommandBannedInPvP
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -352,6 +352,15 @@ class PlayerEventHandler implements Listener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if in pvp, block any pvp-banned slash commands
|
||||||
|
PlayerData playerData = this.dataStore.getPlayerData(event.getPlayer().getName());
|
||||||
|
if(playerData.inPvpCombat() && GriefPrevention.instance.config_pvp_blockedCommands.contains(command))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
GriefPrevention.sendMessage(event.getPlayer(), TextMode.Err, Messages.CommandBannedInPvP);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//if anti spam enabled, check for spam
|
//if anti spam enabled, check for spam
|
||||||
if(!GriefPrevention.instance.config_spam_enabled) return;
|
if(!GriefPrevention.instance.config_spam_enabled) return;
|
||||||
|
|
||||||
|
|
@ -461,6 +470,8 @@ class PlayerEventHandler implements Listener
|
||||||
GriefPrevention.sendMessage(players[k], TextMode.Success, Messages.AutoBanNotify, player.getName(), info.bannedAccountName);
|
GriefPrevention.sendMessage(players[k], TextMode.Success, Messages.AutoBanNotify, player.getName(), info.bannedAccountName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user