diff --git a/lib/LWC.jar b/lib/LWC.jar new file mode 100644 index 00000000..2cfd17c8 Binary files /dev/null and b/lib/LWC.jar differ diff --git a/plugin.yml b/plugin.yml index 1ece40e3..cc85a15a 100644 --- a/plugin.yml +++ b/plugin.yml @@ -2,7 +2,7 @@ name: Factions version: 1.7_dev main: com.massivecraft.factions.P authors: [Olof Larsson, Brett Flannigan] -softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, nChat, ChatManager, CAPI, AuthMe, Register, Spout, WorldEdit, WorldGuard] +softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Register, Spout, WorldEdit, WorldGuard] commands: factions: description: Reference command for Factions. diff --git a/src/com/massivecraft/factions/Board.java b/src/com/massivecraft/factions/Board.java index 0f9d3990..37bb6011 100644 --- a/src/com/massivecraft/factions/Board.java +++ b/src/com/massivecraft/factions/Board.java @@ -14,6 +14,7 @@ import org.bukkit.Location; import org.bukkit.block.Block; import com.google.gson.reflect.TypeToken; +import com.massivecraft.factions.integration.LWCFeatures; import com.massivecraft.factions.iface.RelationParticipator; import com.massivecraft.factions.util.AsciiCompass; import com.massivecraft.factions.zcore.util.DiscUtil; @@ -67,6 +68,9 @@ public class Board public static void removeAt(FLocation flocation) { + if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) + LWCFeatures.clearAllChests(flocation); + flocationIds.remove(flocation); } @@ -78,6 +82,9 @@ public class Board Entry entry = iter.next(); if (entry.getValue().equals(factionId)) { + if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) + LWCFeatures.clearAllChests(entry.getKey()); + iter.remove(); } } @@ -117,6 +124,9 @@ public class Board Entry entry = iter.next(); if ( ! Factions.i.exists(entry.getValue())) { + if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) + LWCFeatures.clearAllChests(entry.getKey()); + P.p.log("Board cleaner removed "+entry.getValue()+" from "+entry.getKey()); iter.remove(); } diff --git a/src/com/massivecraft/factions/Conf.java b/src/com/massivecraft/factions/Conf.java index e3e73903..24d87767 100644 --- a/src/com/massivecraft/factions/Conf.java +++ b/src/com/massivecraft/factions/Conf.java @@ -82,6 +82,11 @@ public class Conf public static boolean worldGuardChecking = false; + //LWC + public static boolean lwcIntegration = false; + public static boolean onUnclaimResetLwcLocks = false; + public static boolean onCaptureResetLwcLocks = false; + // server logging options public static boolean logFactionCreate = true; public static boolean logFactionDisband = true; diff --git a/src/com/massivecraft/factions/FPlayer.java b/src/com/massivecraft/factions/FPlayer.java index b3ddf262..39f3ce22 100644 --- a/src/com/massivecraft/factions/FPlayer.java +++ b/src/com/massivecraft/factions/FPlayer.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Player; import com.massivecraft.factions.iface.EconomyParticipator; import com.massivecraft.factions.iface.RelationParticipator; import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.integration.LWCFeatures; import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.Worldguard; import com.massivecraft.factions.struct.ChatMode; @@ -643,7 +644,10 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator } } - + + if (LWCFeatures.getEnabled() && forFaction.isNormal() && Conf.onCaptureResetLwcLocks) + LWCFeatures.clearOtherChests(flocation, this.getFaction()); + // announce success Set informTheseFPlayers = new HashSet(); informTheseFPlayers.add(this); diff --git a/src/com/massivecraft/factions/P.java b/src/com/massivecraft/factions/P.java index 559358e6..9e1781b9 100644 --- a/src/com/massivecraft/factions/P.java +++ b/src/com/massivecraft/factions/P.java @@ -21,6 +21,7 @@ import com.massivecraft.factions.adapters.LocationTypeAdapter; import com.massivecraft.factions.adapters.RelTypeAdapter; import com.massivecraft.factions.cmd.*; import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.integration.LWCFeatures; import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.Worldguard; import com.massivecraft.factions.listeners.FactionsBlockListener; @@ -34,6 +35,7 @@ import com.massivecraft.factions.struct.FPerm; import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.zcore.MPlugin; +import com.griefcraft.lwc.LWCPlugin; import com.nijiko.permissions.PermissionHandler; import com.earth2me.essentials.chat.EssentialsChat; import com.google.gson.GsonBuilder; @@ -100,6 +102,7 @@ public class P extends MPlugin Econ.doSetup(); Econ.oldMoneyDoTransfer(); CapiFeatures.setup(); + setupLWC(); if(Conf.worldGuardChecking) { @@ -213,6 +216,14 @@ public class P extends MPlugin } } + private void setupLWC() + { + Plugin test = this.getServer().getPluginManager().getPlugin("LWC"); + + if(test != null && test.isEnabled()) + LWCFeatures.integrateLWC((LWCPlugin)test); + } + // -------------------------------------------- // // Functions for other plugins to hook into // -------------------------------------------- // diff --git a/src/com/massivecraft/factions/integration/LWCFeatures.java b/src/com/massivecraft/factions/integration/LWCFeatures.java new file mode 100644 index 00000000..837b7094 --- /dev/null +++ b/src/com/massivecraft/factions/integration/LWCFeatures.java @@ -0,0 +1,86 @@ +package com.massivecraft.factions.integration; + +import java.util.LinkedList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; + +import com.griefcraft.lwc.LWC; +import com.griefcraft.lwc.LWCPlugin; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; + +public class LWCFeatures +{ + + private static LWC lwc; + + public static void integrateLWC(LWCPlugin test) + { + lwc = test.getLWC(); + + P.p.log("Successfully hooked into LWC!"+(Conf.lwcIntegration ? "" : " Integration is currently disabled, though (\"lwcIntegration\").")); + } + + public static void clearOtherChests(FLocation flocation, Faction faction) + { + Location location = new Location(Bukkit.getWorld(flocation.getWorldName()), flocation.getX() * 16, 5, flocation.getZ() * 16); + Chunk chunk = location.getChunk(); + BlockState[] blocks = chunk.getTileEntities(); + List chests = new LinkedList(); + + for(int x = 0; x < blocks.length; x++) + { + if(blocks[x].getType() == Material.CHEST) + { + chests.add(blocks[x].getBlock()); + } + } + + for(int x = 0; x < chests.size(); x++) + { + if(lwc.findProtection(chests.get(x)) != null) + { + if(!faction.getFPlayers().contains(FPlayers.i.get(lwc.findProtection(chests.get(x)).getBukkitOwner()))) + lwc.findProtection(chests.get(x)).remove(); + } + } + } + + public static void clearAllChests(FLocation flocation) + { + Location location = new Location(Bukkit.getWorld(flocation.getWorldName()), flocation.getX() * 16, 5, flocation.getZ() * 16); + Chunk chunk = location.getChunk(); + BlockState[] blocks = chunk.getTileEntities(); + List chests = new LinkedList(); + + for(int x = 0; x < blocks.length; x++) + { + if(blocks[x].getType() == Material.CHEST) + { + chests.add(blocks[x].getBlock()); + } + } + + for(int x = 0; x < chests.size(); x++) + { + if(lwc.findProtection(chests.get(x)) != null) + { + lwc.findProtection(chests.get(x)).remove(); + } + } + } + + public static boolean getEnabled() + { + return Conf.lwcIntegration && lwc != null; + } +}