mirror of
https://github.com/ChestShop-authors/ChestShop-3.git
synced 2024-12-21 15:57:43 +01:00
b53751af32
Fixes a bug where multiple protections are used
103 lines
3.1 KiB
Java
103 lines
3.1 KiB
Java
package com.Acrobot.ChestShop.Plugins;
|
|
|
|
import com.Acrobot.ChestShop.Configuration.Messages;
|
|
import com.Acrobot.ChestShop.Configuration.Properties;
|
|
import com.Acrobot.ChestShop.Events.Protection.ProtectBlockEvent;
|
|
import com.Acrobot.ChestShop.Events.Protection.ProtectionCheckEvent;
|
|
import com.Acrobot.ChestShop.Events.ShopCreatedEvent;
|
|
import com.Acrobot.ChestShop.Security;
|
|
import com.griefcraft.lwc.LWC;
|
|
import com.griefcraft.model.Protection;
|
|
import com.griefcraft.modules.limits.LimitsV2;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.block.Chest;
|
|
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 LWC lwc;
|
|
private LimitsV2 limitsModule;
|
|
|
|
public LightweightChestProtection() {
|
|
this.lwc = LWC.getInstance();
|
|
limitsModule = new LimitsV2();
|
|
}
|
|
|
|
@EventHandler
|
|
public static void onShopCreation(ShopCreatedEvent event) {
|
|
Player player = event.getPlayer();
|
|
Sign sign = event.getSign();
|
|
Chest connectedChest = event.getChest();
|
|
|
|
if (Properties.PROTECT_SIGN_WITH_LWC) {
|
|
if (!Security.protect(player.getName(), sign.getBlock())) {
|
|
player.sendMessage(Messages.prefix(Messages.NOT_ENOUGH_PROTECTIONS));
|
|
}
|
|
}
|
|
|
|
if (Properties.PROTECT_CHEST_WITH_LWC && connectedChest != null && Security.protect(player.getName(), connectedChest.getBlock())) {
|
|
player.sendMessage(Messages.prefix(Messages.PROTECTED_SHOP));
|
|
}
|
|
}
|
|
|
|
@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)) {
|
|
event.setResult(Event.Result.DENY);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onBlockProtect(ProtectBlockEvent event) {
|
|
if (event.isProtected()) {
|
|
return;
|
|
}
|
|
|
|
Block block = event.getBlock();
|
|
Player player = Bukkit.getPlayer(event.getName());
|
|
|
|
if (player == null || limitsModule.hasReachedLimit(player, block.getType())) {
|
|
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;
|
|
}
|
|
|
|
Protection protection = lwc.getPhysicalDatabase().registerProtection(block.getTypeId(), Protection.Type.PRIVATE, worldName, event.getName(), "", x, y, z);
|
|
|
|
if (protection != null) {
|
|
event.setProtected(true);
|
|
}
|
|
}
|
|
}
|