ChestShop-3/src/main/java/com/Acrobot/ChestShop/Plugins/LightweightChestProtection.java

211 lines
7.8 KiB
Java
Raw Normal View History

package com.Acrobot.ChestShop.Plugins;
import com.Acrobot.ChestShop.ChestShop;
import com.Acrobot.ChestShop.Configuration.Messages;
import com.Acrobot.ChestShop.Configuration.Properties;
import com.Acrobot.ChestShop.Events.PreShopCreationEvent;
import com.Acrobot.ChestShop.Events.Protection.ProtectBlockEvent;
import com.Acrobot.ChestShop.Events.Protection.ProtectionCheckEvent;
import com.Acrobot.ChestShop.Events.ShopCreatedEvent;
2013-10-27 16:49:48 +01:00
import com.Acrobot.ChestShop.Events.ShopDestroyedEvent;
import com.Acrobot.ChestShop.Security;
import com.Acrobot.ChestShop.Utils.uBlock;
import com.griefcraft.lwc.LWC;
import com.griefcraft.model.Protection;
import com.griefcraft.modules.limits.LimitsModule;
import com.griefcraft.scripting.Module;
2013-03-16 18:32:41 +01:00
import com.griefcraft.scripting.event.LWCProtectionRegisterEvent;
import com.griefcraft.scripting.event.LWCProtectionRegistrationPostEvent;
import org.bukkit.block.Block;
import org.bukkit.block.Container;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
/**
* @author Acrobot
*/
public class LightweightChestProtection implements Listener {
private final LWC lwc;
private final LimitsModule limitsModule;
2012-06-25 17:16:24 +02:00
public LightweightChestProtection() {
this.lwc = LWC.getInstance();
this.limitsModule = (LimitsModule) lwc.getModuleLoader().getModule(LimitsModule.class);
try {
if (Properties.PROTECT_SIGN_WITH_LWC)
Protection.Type.valueOf(Properties.LWC_SIGN_PROTECTION_TYPE.name());
if (Properties.PROTECT_CHEST_WITH_LWC)
Protection.Type.valueOf(Properties.LWC_CHEST_PROTECTION_TYPE.name());
} catch (IllegalArgumentException e) {
ChestShop.getBukkitLogger().warning("Your installed LWC version doesn't seem to support the configured protection type! " + e.getMessage());
}
}
@EventHandler(ignoreCancelled = true)
public void onPreShopCreation(PreShopCreationEvent event) {
if (Properties.LWC_LIMITS_BLOCK_CREATION) {
if (Properties.PROTECT_SIGN_WITH_LWC) {
if (limitsModule.hasReachedLimit(event.getPlayer(), event.getSign().getBlock())) {
event.setCancelled(true);
event.getPlayer().sendMessage(Messages.prefix(Messages.NOT_ENOUGH_PROTECTIONS));
return;
}
}
if (Properties.PROTECT_CHEST_WITH_LWC) {
Container container = uBlock.findConnectedContainer(event.getSign());
if (container != null && limitsModule.hasReachedLimit(event.getPlayer(), container.getBlock())) {
event.setCancelled(true);
event.getPlayer().sendMessage(Messages.prefix(Messages.NOT_ENOUGH_PROTECTIONS));
return;
}
}
}
}
@EventHandler
public static void onShopCreation(ShopCreatedEvent event) {
Player player = event.getPlayer();
Sign sign = event.getSign();
Container connectedContainer = event.getContainer();
2020-02-15 18:20:55 +01:00
String message = null;
if (Properties.PROTECT_SIGN_WITH_LWC) {
2020-02-15 18:20:55 +01:00
if (Security.protect(player, sign.getBlock(), event.getOwnerAccount() != null ? event.getOwnerAccount().getUuid() : player.getUniqueId(), Properties.LWC_SIGN_PROTECTION_TYPE)) {
message = Messages.PROTECTED_SHOP_SIGN;
} else {
message = Messages.NOT_ENOUGH_PROTECTIONS;
}
}
2020-02-15 18:20:55 +01:00
if (Properties.PROTECT_CHEST_WITH_LWC && connectedContainer != null) {
if (Security.protect(player, connectedContainer.getBlock(), event.getOwnerAccount() != null ? event.getOwnerAccount().getUuid() : player.getUniqueId(), Properties.LWC_CHEST_PROTECTION_TYPE)) {
message = Messages.PROTECTED_SHOP;
} else if (message == null) {
message = Messages.NOT_ENOUGH_PROTECTIONS;
}
}
if (message != null) {
player.sendMessage(Messages.prefix(message));
}
}
@EventHandler
public void onProtectionCheck(ProtectionCheckEvent event) {
if (event.getResult() == Event.Result.DENY) {
return;
}
Block block = event.getBlock();
Player player = event.getPlayer();
Protection protection = lwc.findProtection(block);
if (protection == null) {
return;
}
if (!lwc.canAccessProtection(player, protection) || protection.getType() == Protection.Type.DONATION) {
event.setResult(Event.Result.DENY);
}
}
@EventHandler
public void onBlockProtect(ProtectBlockEvent event) {
if (event.isProtected()) {
return;
}
Block block = event.getBlock();
2014-04-12 14:22:34 +02:00
Player player = event.getPlayer();
2013-03-16 18:32:41 +01:00
if (player == null) {
return;
}
int x = block.getX();
int y = block.getY();
int z = block.getZ();
String worldName = block.getWorld().getName();
Protection existingProtection = lwc.getPhysicalDatabase().loadProtection(worldName, x, y, z);
if (existingProtection != null) {
event.setProtected(true);
return;
}
2013-03-16 18:32:41 +01:00
LWCProtectionRegisterEvent protectionEvent = new LWCProtectionRegisterEvent(player, block);
lwc.getModuleLoader().dispatchEvent(protectionEvent);
if (protectionEvent.isCancelled()) {
return;
}
Protection.Type type = Protection.Type.PRIVATE;
switch (event.getType()) {
case PUBLIC:
type = Protection.Type.PUBLIC;
break;
case DONATION:
type = Protection.Type.DONATION;
break;
case DISPLAY:
try {
type = Protection.Type.valueOf("DISPLAY");
} catch (IllegalArgumentException ignored) {}
break;
}
Protection protection = null;
try {
protection = lwc.getPhysicalDatabase().registerProtection(block.getType(), type, worldName, event.getProtectionOwner().toString(), "", x, y, z);
} catch (LinkageError e) {
try {
int blockId = com.griefcraft.cache.BlockCache.getInstance().getBlockId(block);
if (blockId < 0) {
return;
}
protection = lwc.getPhysicalDatabase().registerProtection(blockId, type, worldName, event.getProtectionOwner().toString(), "", x, y, z);
} catch (LinkageError e2) {
ChestShop.getBukkitLogger().warning(
"Incompatible LWC version installed! (" + lwc.getPlugin().getName() + " v" + lwc.getVersion() + ") \n" +
"Material method error: " + e.getMessage() + "\n" +
"Block cache/type id error: " + e2.getMessage()
);
}
}
if (protection != null) {
event.setProtected(true);
protection.removeCache();
lwc.getProtectionCache().addProtection(protection);
lwc.getModuleLoader().dispatchEvent(new LWCProtectionRegistrationPostEvent(protection));
}
}
2013-10-27 16:49:48 +01:00
@EventHandler
public void onShopRemove(ShopDestroyedEvent event) {
Protection signProtection = lwc.findProtection(event.getSign().getBlock());
if (signProtection != null) {
signProtection.remove();
}
if (event.getContainer() == null || !Properties.REMOVE_LWC_PROTECTION_AUTOMATICALLY) {
2013-10-27 16:49:48 +01:00
return;
}
Protection chestProtection = lwc.findProtection(event.getContainer().getBlock());
2013-10-27 16:49:48 +01:00
if (chestProtection != null) {
chestProtection.remove();
}
}
}