mirror of
https://github.com/ChestShop-authors/ChestShop-3.git
synced 2024-12-22 08:17:34 +01:00
113 lines
3.3 KiB
Java
113 lines
3.3 KiB
Java
package com.Acrobot.ChestShop.Plugins;
|
|
|
|
import com.Acrobot.ChestShop.Config.Config;
|
|
import com.Acrobot.ChestShop.Config.Property;
|
|
import com.Acrobot.ChestShop.Events.Protection.BuildPermissionEvent;
|
|
import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
|
|
import com.palmergames.bukkit.towny.object.TownBlockOwner;
|
|
import com.palmergames.bukkit.towny.object.TownBlockType;
|
|
import com.palmergames.bukkit.towny.object.TownyUniverse;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
|
|
/**
|
|
* @author Acrobot
|
|
*/
|
|
public class Towny implements Listener {
|
|
@EventHandler
|
|
public static void canBuild(BuildPermissionEvent event) {
|
|
Location chest = event.getChest();
|
|
Location sign = event.getSign();
|
|
|
|
if (isInWilderness(chest, sign) || !isInsideShopPlot(chest, sign)) {
|
|
event.disallow();
|
|
return;
|
|
}
|
|
|
|
boolean allow;
|
|
|
|
if (Config.getBoolean(Property.TOWNY_SHOPS_FOR_OWNERS_ONLY)) {
|
|
allow = isPlotOwner(event.getPlayer(), chest, sign);
|
|
} else {
|
|
allow = isResident(event.getPlayer(), chest, sign);
|
|
}
|
|
|
|
event.allow(allow);
|
|
}
|
|
|
|
private static boolean isResident(Player player, Location location) throws NotRegisteredException {
|
|
return TownyUniverse.getTownBlock(location).getTown().hasResident(player.getName());
|
|
}
|
|
|
|
private static boolean isResident(Player player, Location... locations) {
|
|
try {
|
|
for (Location location : locations) {
|
|
if (!isResident(player, location)) {
|
|
return false;
|
|
}
|
|
}
|
|
} catch (NotRegisteredException exception) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static boolean isPlotOwner(Player player, Location location) throws NotRegisteredException {
|
|
TownBlockOwner owner = TownyUniverse.getDataSource().getResident(player.getName());
|
|
return TownyUniverse.getTownBlock(location).isOwner(owner);
|
|
}
|
|
|
|
private static boolean isPlotOwner(Player player, Location... locations) {
|
|
try {
|
|
for (Location location : locations) {
|
|
if (!isPlotOwner(player, location)) {
|
|
return false;
|
|
}
|
|
}
|
|
} catch (NotRegisteredException exception) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static boolean isInsideShopPlot(Location location) {
|
|
return TownyUniverse.getTownBlock(location).getType() == TownBlockType.COMMERCIAL;
|
|
}
|
|
|
|
private static boolean isInsideShopPlot(Location... locations) {
|
|
for (Location location : locations) {
|
|
if (!isInsideShopPlot(location)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static boolean isInWilderness(Location location) {
|
|
return TownyUniverse.isWilderness(location.getBlock());
|
|
}
|
|
|
|
private static boolean isInWilderness(Location... locations) {
|
|
for (Location location : locations) {
|
|
if (!isInWilderness(location)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static Towny getTowny() {
|
|
if (!Config.getBoolean(Property.TOWNY_INTEGRATION)) {
|
|
return null;
|
|
}
|
|
|
|
return new Towny();
|
|
}
|
|
}
|