mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 13:16:45 +01:00
Merge pull request #2764 from IntellectualSites/features/v5/event-entity-categories
Features/v5/event entity categories
This commit is contained in:
commit
4e7bcc788b
@ -102,6 +102,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.RegExUtil;
|
import com.github.intellectualsites.plotsquared.plot.util.RegExUtil;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
|
import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
@ -116,30 +117,22 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.entity.Ageable;
|
import org.bukkit.entity.Ageable;
|
||||||
import org.bukkit.entity.Animals;
|
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.entity.Boss;
|
|
||||||
import org.bukkit.entity.Creature;
|
import org.bukkit.entity.Creature;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
import org.bukkit.entity.Fireball;
|
import org.bukkit.entity.Fireball;
|
||||||
import org.bukkit.entity.Golem;
|
|
||||||
import org.bukkit.entity.Hanging;
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Monster;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.entity.Slime;
|
|
||||||
import org.bukkit.entity.TNTPrimed;
|
import org.bukkit.entity.TNTPrimed;
|
||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.entity.ThrownPotion;
|
import org.bukkit.entity.ThrownPotion;
|
||||||
import org.bukkit.entity.Vehicle;
|
import org.bukkit.entity.Vehicle;
|
||||||
import org.bukkit.entity.Villager;
|
|
||||||
import org.bukkit.entity.WaterMob;
|
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -276,147 +269,40 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
.getFlagContainer().getFlagMap().isEmpty()) {
|
.getFlagContainer().getFlagMap().isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switch (entity.getType()) {
|
|
||||||
case PLAYER:
|
final com.sk89q.worldedit.world.entity.EntityType entityType = BukkitAdapter.adapt(entity.getType());
|
||||||
return false;
|
|
||||||
case ARROW:
|
if (EntityCategories.PLAYER.contains(entityType)) {
|
||||||
case DRAGON_FIREBALL:
|
return false;
|
||||||
case DROPPED_ITEM:
|
|
||||||
case EGG:
|
|
||||||
case ENDER_PEARL:
|
|
||||||
case FIREBALL:
|
|
||||||
case LLAMA_SPIT:
|
|
||||||
case SHULKER_BULLET:
|
|
||||||
case SMALL_FIREBALL:
|
|
||||||
case SNOWBALL:
|
|
||||||
case SPECTRAL_ARROW:
|
|
||||||
case SPLASH_POTION:
|
|
||||||
case THROWN_EXP_BOTTLE:
|
|
||||||
// projectile
|
|
||||||
case FALLING_BLOCK:
|
|
||||||
case PRIMED_TNT:
|
|
||||||
// Block entities
|
|
||||||
case AREA_EFFECT_CLOUD:
|
|
||||||
case ENDER_CRYSTAL:
|
|
||||||
case ENDER_SIGNAL:
|
|
||||||
case EVOKER_FANGS:
|
|
||||||
case EXPERIENCE_ORB:
|
|
||||||
case FIREWORK:
|
|
||||||
case FISHING_HOOK:
|
|
||||||
case LEASH_HITCH:
|
|
||||||
case LIGHTNING:
|
|
||||||
case UNKNOWN:
|
|
||||||
case WITHER_SKULL:
|
|
||||||
// non moving / unmovable
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED);
|
|
||||||
case ARMOR_STAND:
|
|
||||||
case ITEM_FRAME:
|
|
||||||
case PAINTING:
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MiscCapFlag.MISC_CAP_UNLIMITED);
|
|
||||||
// misc
|
|
||||||
case BOAT:
|
|
||||||
case MINECART:
|
|
||||||
case MINECART_CHEST:
|
|
||||||
case MINECART_COMMAND:
|
|
||||||
case MINECART_FURNACE:
|
|
||||||
case MINECART_HOPPER:
|
|
||||||
case MINECART_MOB_SPAWNER:
|
|
||||||
case MINECART_TNT:
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
VehicleCapFlag.VEHICLE_CAP_UNLIMITED);
|
|
||||||
case BAT:
|
|
||||||
case CHICKEN:
|
|
||||||
case CAT:
|
|
||||||
case COD:
|
|
||||||
case COW:
|
|
||||||
case DOLPHIN:
|
|
||||||
case DONKEY:
|
|
||||||
case FOX:
|
|
||||||
case HORSE:
|
|
||||||
case IRON_GOLEM:
|
|
||||||
case LLAMA:
|
|
||||||
case MULE:
|
|
||||||
case MUSHROOM_COW:
|
|
||||||
case OCELOT:
|
|
||||||
case PANDA:
|
|
||||||
case PARROT:
|
|
||||||
case PIG:
|
|
||||||
case POLAR_BEAR:
|
|
||||||
case PUFFERFISH:
|
|
||||||
case RABBIT:
|
|
||||||
case SALMON:
|
|
||||||
case SHEEP:
|
|
||||||
case SKELETON_HORSE:
|
|
||||||
case SNOWMAN:
|
|
||||||
case SQUID:
|
|
||||||
case TRADER_LLAMA:
|
|
||||||
case TROPICAL_FISH:
|
|
||||||
case TURTLE:
|
|
||||||
case VILLAGER:
|
|
||||||
case WOLF:
|
|
||||||
case ZOMBIE_HORSE:
|
|
||||||
// animal
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MobCapFlag.MOB_CAP_UNLIMITED, AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
|
||||||
case BLAZE:
|
|
||||||
case CAVE_SPIDER:
|
|
||||||
case CREEPER:
|
|
||||||
case DROWNED:
|
|
||||||
case ELDER_GUARDIAN:
|
|
||||||
case ENDERMAN:
|
|
||||||
case ENDERMITE:
|
|
||||||
case ENDER_DRAGON:
|
|
||||||
case EVOKER:
|
|
||||||
case GHAST:
|
|
||||||
case GIANT:
|
|
||||||
case GUARDIAN:
|
|
||||||
case HUSK:
|
|
||||||
case ILLUSIONER:
|
|
||||||
case MAGMA_CUBE:
|
|
||||||
case PIG_ZOMBIE:
|
|
||||||
case SHULKER:
|
|
||||||
case SILVERFISH:
|
|
||||||
case SKELETON:
|
|
||||||
case SLIME:
|
|
||||||
case SPIDER:
|
|
||||||
case STRAY:
|
|
||||||
case VEX:
|
|
||||||
case VINDICATOR:
|
|
||||||
case WITCH:
|
|
||||||
case WITHER:
|
|
||||||
case WITHER_SKELETON:
|
|
||||||
case ZOMBIE:
|
|
||||||
case ZOMBIE_VILLAGER:
|
|
||||||
case PILLAGER:
|
|
||||||
case PHANTOM:
|
|
||||||
case RAVAGER:
|
|
||||||
// monster
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MobCapFlag.MOB_CAP_UNLIMITED, HostileCapFlag.HOSTILE_CAP_UNLIMITED);
|
|
||||||
default:
|
|
||||||
if (entity instanceof LivingEntity) {
|
|
||||||
if (entity instanceof Animals || entity instanceof WaterMob) {
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MobCapFlag.MOB_CAP_UNLIMITED, AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
|
||||||
} else if (entity instanceof Monster) {
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MobCapFlag.MOB_CAP_UNLIMITED, HostileCapFlag.HOSTILE_CAP_UNLIMITED);
|
|
||||||
} else {
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MobCapFlag.MOB_CAP_UNLIMITED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Vehicle) {
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
VehicleCapFlag.VEHICLE_CAP_UNLIMITED);
|
|
||||||
}
|
|
||||||
if (entity instanceof Hanging) {
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
|
||||||
MiscCapFlag.MISC_CAP_UNLIMITED);
|
|
||||||
}
|
|
||||||
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (EntityCategories.PROJECTILE.contains(entityType) ||
|
||||||
|
EntityCategories.OTHER.contains(entityType) ||
|
||||||
|
EntityCategories.HANGING.contains(entityType)) {
|
||||||
|
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
||||||
|
MiscCapFlag.MISC_CAP_UNLIMITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Has to go go before vehicle as horses are both
|
||||||
|
// animals and vehicles
|
||||||
|
if (EntityCategories.ANIMAL.contains(entityType) ||
|
||||||
|
EntityCategories.VILLAGER.contains(entityType) ||
|
||||||
|
EntityCategories.TAMEABLE.contains(entityType)) {
|
||||||
|
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
||||||
|
MobCapFlag.MOB_CAP_UNLIMITED, AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EntityCategories.HOSTILE.contains(entityType)) {
|
||||||
|
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
||||||
|
MobCapFlag.MOB_CAP_UNLIMITED, HostileCapFlag.HOSTILE_CAP_UNLIMITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EntityCategories.VEHICLE.contains(entityType)) {
|
||||||
|
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED,
|
||||||
|
VehicleCapFlag.VEHICLE_CAP_UNLIMITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return EntityUtil.checkEntity(plot, EntityCapFlag.ENTITY_CAP_UNLIMITED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
|
@EventHandler public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
|
||||||
@ -446,53 +332,6 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler public void onRedstoneEvent(BlockRedstoneEvent event) {
|
@EventHandler public void onRedstoneEvent(BlockRedstoneEvent event) {
|
||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
/* switch (block.getType()) {
|
|
||||||
case OBSERVER:
|
|
||||||
case REDSTONE:
|
|
||||||
case REDSTONE_ORE:
|
|
||||||
case REDSTONE_BLOCK:
|
|
||||||
case REDSTONE_TORCH:
|
|
||||||
case REDSTONE_WALL_TORCH:
|
|
||||||
case REDSTONE_WIRE:
|
|
||||||
case REDSTONE_LAMP:
|
|
||||||
case PISTON_HEAD:
|
|
||||||
case PISTON:
|
|
||||||
case STICKY_PISTON:
|
|
||||||
case MOVING_PISTON:
|
|
||||||
case LEVER:
|
|
||||||
case ACACIA_BUTTON:
|
|
||||||
case BIRCH_BUTTON:
|
|
||||||
case DARK_OAK_BUTTON:
|
|
||||||
case JUNGLE_BUTTON:
|
|
||||||
case OAK_BUTTON:
|
|
||||||
case SPRUCE_BUTTON:
|
|
||||||
case STONE_BUTTON:
|
|
||||||
case STONE_PRESSURE_PLATE:
|
|
||||||
case ACACIA_PRESSURE_PLATE:
|
|
||||||
case BIRCH_PRESSURE_PLATE:
|
|
||||||
case DARK_OAK_PRESSURE_PLATE:
|
|
||||||
case HEAVY_WEIGHTED_PRESSURE_PLATE:
|
|
||||||
case JUNGLE_PRESSURE_PLATE:
|
|
||||||
case LIGHT_WEIGHTED_PRESSURE_PLATE:
|
|
||||||
case OAK_PRESSURE_PLATE:
|
|
||||||
case SPRUCE_PRESSURE_PLATE:
|
|
||||||
case SPRUCE_DOOR:
|
|
||||||
case BIRCH_DOOR:
|
|
||||||
case JUNGLE_DOOR:
|
|
||||||
case ACACIA_DOOR:
|
|
||||||
case DARK_OAK_DOOR:
|
|
||||||
case IRON_DOOR:
|
|
||||||
case OAK_DOOR:
|
|
||||||
case IRON_TRAPDOOR:
|
|
||||||
case SPRUCE_FENCE_GATE:
|
|
||||||
case BIRCH_FENCE_GATE:
|
|
||||||
case JUNGLE_FENCE_GATE:
|
|
||||||
case ACACIA_FENCE_GATE:
|
|
||||||
case DARK_OAK_FENCE_GATE:
|
|
||||||
case OAK_FENCE_GATE:
|
|
||||||
case POWERED_RAIL:
|
|
||||||
return;
|
|
||||||
default:*/
|
|
||||||
Location location = BukkitUtil.getLocation(block.getLocation());
|
Location location = BukkitUtil.getLocation(block.getLocation());
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
@ -542,7 +381,6 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
}
|
}
|
||||||
event.setNewCurrent(0);
|
event.setNewCurrent(0);
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
@ -940,27 +778,20 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
||||||
switch (vehicle.getType()) {
|
final com.sk89q.worldedit.world.entity.EntityType entityType = BukkitAdapter.adapt(vehicle.getType());
|
||||||
case BOAT:
|
// Horses etc are vehicles, but they're also animals
|
||||||
case ENDER_CRYSTAL:
|
// so this filters out all living entities
|
||||||
case MINECART:
|
if (EntityCategories.VEHICLE.contains(entityType) && !EntityCategories.ANIMAL.contains(entityType)) {
|
||||||
case MINECART_CHEST:
|
List<MetadataValue> meta = vehicle.getMetadata("plot");
|
||||||
case MINECART_COMMAND:
|
Plot toPlot = BukkitUtil.getLocation(to).getPlot();
|
||||||
case MINECART_FURNACE:
|
if (!meta.isEmpty()) {
|
||||||
case MINECART_HOPPER:
|
Plot origin = (Plot) meta.get(0).value();
|
||||||
case MINECART_MOB_SPAWNER:
|
if (origin != null && !origin.getBasePlot(false).equals(toPlot)) {
|
||||||
case MINECART_TNT: {
|
vehicle.remove();
|
||||||
List<MetadataValue> meta = vehicle.getMetadata("plot");
|
|
||||||
Plot toPlot = BukkitUtil.getLocation(to).getPlot();
|
|
||||||
if (!meta.isEmpty()) {
|
|
||||||
Plot origin = (Plot) meta.get(0).value();
|
|
||||||
if (!origin.getBasePlot(false).equals(toPlot)) {
|
|
||||||
vehicle.remove();
|
|
||||||
}
|
|
||||||
} else if (toPlot != null) {
|
|
||||||
vehicle.setMetadata("plot",
|
|
||||||
new FixedMetadataValue((Plugin) PlotSquared.get().IMP, toPlot));
|
|
||||||
}
|
}
|
||||||
|
} else if (toPlot != null) {
|
||||||
|
vehicle.setMetadata("plot",
|
||||||
|
new FixedMetadataValue((Plugin) PlotSquared.get().IMP, toPlot));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2672,29 +2503,41 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
Entity entity = event.getRightClicked();
|
final Entity entity = event.getRightClicked();
|
||||||
if (isMonster(entity) && plot.getFlag(HostileInteractFlag.class)) {
|
final com.sk89q.worldedit.world.entity.EntityType entityType = BukkitAdapter.adapt(entity.getType());
|
||||||
|
|
||||||
|
if (EntityCategories.HOSTILE.contains(entityType) && plot.getFlag(HostileInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((entity instanceof Animals || entity instanceof Golem) && plot.getFlag(AnimalInteractFlag.class)) {
|
|
||||||
|
if (EntityCategories.ANIMAL.contains(entityType) && plot.getFlag(AnimalInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This actually makes use of the interface, so we don't use the
|
||||||
|
// category
|
||||||
if (entity instanceof Tameable && ((Tameable) entity).isTamed() && plot
|
if (entity instanceof Tameable && ((Tameable) entity).isTamed() && plot
|
||||||
.getFlag(TamedInteractFlag.class)) {
|
.getFlag(TamedInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (entity instanceof Vehicle && plot.getFlag(VehicleUseFlag.class)) {
|
|
||||||
|
if (EntityCategories.VEHICLE.contains(entityType) && plot.getFlag(VehicleUseFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (entity instanceof Player && plot.getFlag(PlayerInteractFlag.class)) {
|
|
||||||
|
if (EntityCategories.PLAYER.contains(entityType) && plot.getFlag(PlayerInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (entity instanceof Villager && plot.getFlag(VillagerInteractFlag.class)) {
|
|
||||||
|
if (EntityCategories.VILLAGER.contains(entityType) && plot.getFlag(VillagerInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (entity instanceof ItemFrame && plot.getFlag(MiscInteractFlag.class)) {
|
|
||||||
|
if ((EntityCategories.HANGING.contains(entityType) ||
|
||||||
|
EntityCategories.OTHER.contains(entityType)) && plot.getFlag(MiscInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT,
|
MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT,
|
||||||
Captions.PERMISSION_ADMIN_INTERACT_OTHER);
|
Captions.PERMISSION_ADMIN_INTERACT_OTHER);
|
||||||
@ -2897,7 +2740,9 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
}
|
}
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
PlotPlayer plotPlayer = BukkitUtil.getPlayer(player);
|
PlotPlayer plotPlayer = BukkitUtil.getPlayer(player);
|
||||||
if (victim instanceof Hanging) { // hanging
|
final com.sk89q.worldedit.world.entity.EntityType entityType =
|
||||||
|
BukkitAdapter.adapt(victim.getType());
|
||||||
|
if (EntityCategories.HANGING.contains(entityType)) { // hanging
|
||||||
if (plot != null && (plot.getFlag(HangingBreakFlag.class)) || plot
|
if (plot != null && (plot.getFlag(HangingBreakFlag.class)) || plot
|
||||||
.isAdded(plotPlayer.getUUID())) {
|
.isAdded(plotPlayer.getUUID())) {
|
||||||
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
@ -2925,7 +2770,7 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
"plots.admin.destroy." + stub);
|
"plots.admin.destroy." + stub);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (isMonster(victim)) {
|
} else if (EntityCategories.HOSTILE.contains(entityType)) {
|
||||||
if (plot != null && (plot.getFlag(HostileAttackFlag.class) || plot
|
if (plot != null && (plot.getFlag(HostileAttackFlag.class) || plot
|
||||||
.getFlag(PveFlag.class) || plot.isAdded(plotPlayer.getUUID()))) {
|
.getFlag(PveFlag.class) || plot.isAdded(plotPlayer.getUUID()))) {
|
||||||
return true;
|
return true;
|
||||||
@ -2935,7 +2780,7 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
"plots.admin.pve." + stub);
|
"plots.admin.pve." + stub);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (victim instanceof Tameable) { // victim is tameable
|
} else if (EntityCategories.TAMEABLE.contains(entityType)) { // victim is tameable
|
||||||
if (plot != null && (plot.getFlag(TamedAttackFlag.class) || plot
|
if (plot != null && (plot.getFlag(TamedAttackFlag.class) || plot
|
||||||
.getFlag(PveFlag.class) || plot.isAdded(plotPlayer.getUUID()))) {
|
.getFlag(PveFlag.class) || plot.isAdded(plotPlayer.getUUID()))) {
|
||||||
return true;
|
return true;
|
||||||
@ -2945,7 +2790,7 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
"plots.admin.pve." + stub);
|
"plots.admin.pve." + stub);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (victim instanceof Player) {
|
} else if (EntityCategories.PLAYER.contains(entityType)) {
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (!plot.getFlag(PvpFlag.class) && !Permissions
|
if (!plot.getFlag(PvpFlag.class) && !Permissions
|
||||||
.hasPermission(plotPlayer, "plots.admin.pvp." + stub)) {
|
.hasPermission(plotPlayer, "plots.admin.pvp." + stub)) {
|
||||||
@ -2961,7 +2806,7 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
"plots.admin.pvp." + stub);
|
"plots.admin.pvp." + stub);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (victim instanceof Creature) { // victim is animal
|
} else if (EntityCategories.ANIMAL.contains(entityType)) { // victim is animal
|
||||||
if (plot != null && (plot.getFlag(AnimalAttackFlag.class) || plot
|
if (plot != null && (plot.getFlag(AnimalAttackFlag.class) || plot
|
||||||
.getFlag(PveFlag.class) || plot.isAdded(plotPlayer.getUUID()))) {
|
.getFlag(PveFlag.class) || plot.isAdded(plotPlayer.getUUID()))) {
|
||||||
return true;
|
return true;
|
||||||
@ -2971,7 +2816,7 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
"plots.admin.pve." + stub);
|
"plots.admin.pve." + stub);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (victim instanceof Vehicle) { // Vehicles are managed in vehicle destroy event
|
} else if (EntityCategories.VEHICLE.contains(entityType)) { // Vehicles are managed in vehicle destroy event
|
||||||
return true;
|
return true;
|
||||||
} else { // victim is something else
|
} else { // victim is something else
|
||||||
if (plot != null && (plot.getFlag(PveFlag.class) || plot
|
if (plot != null && (plot.getFlag(PveFlag.class) || plot
|
||||||
@ -3135,7 +2980,4 @@ public class PlayerEvents extends PlotListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isMonster(Entity entity) {
|
|
||||||
return entity instanceof Monster || entity instanceof Boss || entity instanceof Slime; // :)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,9 @@ import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.block.ScopedLocalBlockQueue;
|
import com.github.intellectualsites.plotsquared.plot.util.block.ScopedLocalBlockQueue;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.world.RegionUtil;
|
import com.github.intellectualsites.plotsquared.plot.util.world.RegionUtil;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
import com.sk89q.worldedit.math.BlockVector2;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
import com.sk89q.worldedit.math.BlockVector3;
|
||||||
@ -54,8 +56,6 @@ import org.bukkit.Chunk;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.Animals;
|
|
||||||
import org.bukkit.entity.Creature;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -71,6 +71,12 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ANIMAL;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ENTITY;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MISC;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MOB;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MONSTER;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_VEHICLE;
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
public class BukkitChunkManager extends ChunkManager {
|
public class BukkitChunkManager extends ChunkManager {
|
||||||
@ -514,135 +520,27 @@ public class BukkitChunkManager extends ChunkManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void count(int[] count, Entity entity) {
|
private void count(int[] count, Entity entity) {
|
||||||
switch (entity.getType()) {
|
final com.sk89q.worldedit.world.entity.EntityType entityType =
|
||||||
case PLAYER:
|
BukkitAdapter.adapt(entity.getType());
|
||||||
// not valid
|
|
||||||
return;
|
if (EntityCategories.PLAYER.contains(entityType)) {
|
||||||
case SMALL_FIREBALL:
|
return;
|
||||||
case FIREBALL:
|
} else if (EntityCategories.PROJECTILE.contains(entityType) ||
|
||||||
case DROPPED_ITEM:
|
EntityCategories.OTHER.contains(entityType) ||
|
||||||
case EGG:
|
EntityCategories.HANGING.contains(entityType)) {
|
||||||
case THROWN_EXP_BOTTLE:
|
count[CAP_MISC]++;
|
||||||
case SPLASH_POTION:
|
} else if (EntityCategories.ANIMAL.contains(entityType) ||
|
||||||
case SNOWBALL:
|
EntityCategories.VILLAGER.contains(entityType) ||
|
||||||
case ENDER_PEARL:
|
EntityCategories.TAMEABLE.contains(entityType)) {
|
||||||
case ARROW:
|
count[CAP_MOB]++;
|
||||||
case TRIDENT:
|
count[CAP_ANIMAL]++;
|
||||||
case SHULKER_BULLET:
|
} else if (EntityCategories.VEHICLE.contains(entityType)) {
|
||||||
case SPECTRAL_ARROW:
|
count[CAP_VEHICLE]++;
|
||||||
case DRAGON_FIREBALL:
|
} else if (EntityCategories.HOSTILE.contains(entityType)) {
|
||||||
case LLAMA_SPIT:
|
count[CAP_MOB]++;
|
||||||
// projectile
|
count[CAP_MONSTER]++;
|
||||||
case PRIMED_TNT:
|
|
||||||
case FALLING_BLOCK:
|
|
||||||
// Block entities
|
|
||||||
case ENDER_CRYSTAL:
|
|
||||||
case FISHING_HOOK:
|
|
||||||
case ENDER_SIGNAL:
|
|
||||||
case EXPERIENCE_ORB:
|
|
||||||
case LEASH_HITCH:
|
|
||||||
case FIREWORK:
|
|
||||||
case LIGHTNING:
|
|
||||||
case WITHER_SKULL:
|
|
||||||
case UNKNOWN:
|
|
||||||
case AREA_EFFECT_CLOUD:
|
|
||||||
case EVOKER_FANGS:
|
|
||||||
// non moving / unremovable
|
|
||||||
break;
|
|
||||||
case ITEM_FRAME:
|
|
||||||
case PAINTING:
|
|
||||||
case ARMOR_STAND:
|
|
||||||
count[5]++;
|
|
||||||
break;
|
|
||||||
// misc
|
|
||||||
case MINECART:
|
|
||||||
case MINECART_CHEST:
|
|
||||||
case MINECART_COMMAND:
|
|
||||||
case MINECART_FURNACE:
|
|
||||||
case MINECART_HOPPER:
|
|
||||||
case MINECART_MOB_SPAWNER:
|
|
||||||
case MINECART_TNT:
|
|
||||||
case BOAT:
|
|
||||||
count[4]++;
|
|
||||||
break;
|
|
||||||
case POLAR_BEAR:
|
|
||||||
case RABBIT:
|
|
||||||
case SHEEP:
|
|
||||||
case MUSHROOM_COW:
|
|
||||||
case OCELOT:
|
|
||||||
case PIG:
|
|
||||||
case HORSE:
|
|
||||||
case SQUID:
|
|
||||||
case VILLAGER:
|
|
||||||
case IRON_GOLEM:
|
|
||||||
case WOLF:
|
|
||||||
case CHICKEN:
|
|
||||||
case COW:
|
|
||||||
case SNOWMAN:
|
|
||||||
case BAT:
|
|
||||||
case DONKEY:
|
|
||||||
case LLAMA:
|
|
||||||
case SKELETON_HORSE:
|
|
||||||
case ZOMBIE_HORSE:
|
|
||||||
case MULE:
|
|
||||||
case DOLPHIN:
|
|
||||||
case TURTLE:
|
|
||||||
case COD:
|
|
||||||
case PARROT:
|
|
||||||
case SALMON:
|
|
||||||
case PUFFERFISH:
|
|
||||||
case TROPICAL_FISH:
|
|
||||||
case CAT:
|
|
||||||
case FOX:
|
|
||||||
case PANDA:
|
|
||||||
// animal
|
|
||||||
count[3]++;
|
|
||||||
count[1]++;
|
|
||||||
break;
|
|
||||||
case BLAZE:
|
|
||||||
case CAVE_SPIDER:
|
|
||||||
case CREEPER:
|
|
||||||
case ENDERMAN:
|
|
||||||
case ENDERMITE:
|
|
||||||
case ENDER_DRAGON:
|
|
||||||
case GHAST:
|
|
||||||
case GIANT:
|
|
||||||
case GUARDIAN:
|
|
||||||
case MAGMA_CUBE:
|
|
||||||
case PIG_ZOMBIE:
|
|
||||||
case SILVERFISH:
|
|
||||||
case SKELETON:
|
|
||||||
case SLIME:
|
|
||||||
case SPIDER:
|
|
||||||
case WITCH:
|
|
||||||
case WITHER:
|
|
||||||
case ZOMBIE:
|
|
||||||
case SHULKER:
|
|
||||||
case ELDER_GUARDIAN:
|
|
||||||
case STRAY:
|
|
||||||
case HUSK:
|
|
||||||
case EVOKER:
|
|
||||||
case VEX:
|
|
||||||
case WITHER_SKELETON:
|
|
||||||
case ZOMBIE_VILLAGER:
|
|
||||||
case VINDICATOR:
|
|
||||||
// monster
|
|
||||||
count[3]++;
|
|
||||||
count[2]++;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (entity instanceof Creature) {
|
|
||||||
count[3]++;
|
|
||||||
if (entity instanceof Animals) {
|
|
||||||
count[1]++;
|
|
||||||
} else {
|
|
||||||
count[2]++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
count[4]++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
count[0]++;
|
count[CAP_ENTITY]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,20 +60,31 @@ import org.bukkit.block.data.Directional;
|
|||||||
import org.bukkit.block.data.type.WallSign;
|
import org.bukkit.block.data.type.WallSign;
|
||||||
import org.bukkit.entity.Ambient;
|
import org.bukkit.entity.Ambient;
|
||||||
import org.bukkit.entity.Animals;
|
import org.bukkit.entity.Animals;
|
||||||
|
import org.bukkit.entity.AreaEffectCloud;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Boss;
|
import org.bukkit.entity.Boss;
|
||||||
import org.bukkit.entity.EnderCrystal;
|
import org.bukkit.entity.EnderCrystal;
|
||||||
|
import org.bukkit.entity.EnderSignal;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.EvokerFangs;
|
||||||
|
import org.bukkit.entity.ExperienceOrb;
|
||||||
|
import org.bukkit.entity.Explosive;
|
||||||
|
import org.bukkit.entity.FallingBlock;
|
||||||
|
import org.bukkit.entity.Firework;
|
||||||
import org.bukkit.entity.Ghast;
|
import org.bukkit.entity.Ghast;
|
||||||
import org.bukkit.entity.Golem;
|
|
||||||
import org.bukkit.entity.Hanging;
|
import org.bukkit.entity.Hanging;
|
||||||
|
import org.bukkit.entity.IronGolem;
|
||||||
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.entity.LightningStrike;
|
||||||
import org.bukkit.entity.Monster;
|
import org.bukkit.entity.Monster;
|
||||||
import org.bukkit.entity.NPC;
|
import org.bukkit.entity.NPC;
|
||||||
import org.bukkit.entity.Phantom;
|
import org.bukkit.entity.Phantom;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
|
import org.bukkit.entity.Shulker;
|
||||||
import org.bukkit.entity.Slime;
|
import org.bukkit.entity.Slime;
|
||||||
|
import org.bukkit.entity.Snowman;
|
||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.entity.Vehicle;
|
import org.bukkit.entity.Vehicle;
|
||||||
import org.bukkit.entity.WaterMob;
|
import org.bukkit.entity.WaterMob;
|
||||||
@ -566,7 +577,8 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
final Collection<Class<?>> allowedInterfaces = new HashSet<>();
|
final Collection<Class<?>> allowedInterfaces = new HashSet<>();
|
||||||
switch (category) {
|
switch (category) {
|
||||||
case "animal": {
|
case "animal": {
|
||||||
allowedInterfaces.add(Golem.class);
|
allowedInterfaces.add(IronGolem.class);
|
||||||
|
allowedInterfaces.add(Snowman.class);
|
||||||
allowedInterfaces.add(Animals.class);
|
allowedInterfaces.add(Animals.class);
|
||||||
allowedInterfaces.add(WaterMob.class);
|
allowedInterfaces.add(WaterMob.class);
|
||||||
allowedInterfaces.add(Ambient.class);
|
allowedInterfaces.add(Ambient.class);
|
||||||
@ -578,6 +590,7 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
allowedInterfaces.add(Vehicle.class);
|
allowedInterfaces.add(Vehicle.class);
|
||||||
} break;
|
} break;
|
||||||
case "hostile": {
|
case "hostile": {
|
||||||
|
allowedInterfaces.add(Shulker.class);
|
||||||
allowedInterfaces.add(Monster.class);
|
allowedInterfaces.add(Monster.class);
|
||||||
allowedInterfaces.add(Boss.class);
|
allowedInterfaces.add(Boss.class);
|
||||||
allowedInterfaces.add(Slime.class);
|
allowedInterfaces.add(Slime.class);
|
||||||
@ -594,8 +607,20 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
case "projectile": {
|
case "projectile": {
|
||||||
allowedInterfaces.add(Projectile.class);
|
allowedInterfaces.add(Projectile.class);
|
||||||
} break;
|
} break;
|
||||||
case "decoration": {
|
case "other": {
|
||||||
allowedInterfaces.add(ArmorStand.class);
|
allowedInterfaces.add(ArmorStand.class);
|
||||||
|
allowedInterfaces.add(FallingBlock.class);
|
||||||
|
allowedInterfaces.add(Item.class);
|
||||||
|
allowedInterfaces.add(Explosive.class);
|
||||||
|
allowedInterfaces.add(AreaEffectCloud.class);
|
||||||
|
allowedInterfaces.add(EvokerFangs.class);
|
||||||
|
allowedInterfaces.add(LightningStrike.class);
|
||||||
|
allowedInterfaces.add(ExperienceOrb.class);
|
||||||
|
allowedInterfaces.add(EnderSignal.class);
|
||||||
|
allowedInterfaces.add(Firework.class);
|
||||||
|
} break;
|
||||||
|
case "player": {
|
||||||
|
allowedInterfaces.add(Player.class);
|
||||||
} break;
|
} break;
|
||||||
default: {
|
default: {
|
||||||
PlotSquared.log(Captions.PREFIX + "Unknown entity category requested: " + category);
|
PlotSquared.log(Captions.PREFIX + "Unknown entity category requested: " + category);
|
||||||
|
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* _____ _ _ _____ _
|
||||||
|
* | __ \| | | | / ____| | |
|
||||||
|
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
|
||||||
|
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
|
||||||
|
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
|
||||||
|
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
|
||||||
|
* | |
|
||||||
|
* |_|
|
||||||
|
* PlotSquared plot management system for Minecraft
|
||||||
|
* Copyright (C) 2020 IntellectualSites
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.github.intellectualsites.plotsquared.plot.commands;
|
||||||
|
|
||||||
|
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.config.Captions;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.PlotFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.implementations.AnimalCapFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.implementations.EntityCapFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.implementations.HostileCapFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.implementations.MiscCapFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.implementations.MobCapFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.implementations.VehicleCapFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
|
||||||
|
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ANIMAL;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ENTITY;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MISC;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MOB;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MONSTER;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_VEHICLE;
|
||||||
|
|
||||||
|
@CommandDeclaration(command = "caps",
|
||||||
|
category = CommandCategory.INFO,
|
||||||
|
description = "Show plot mob caps",
|
||||||
|
usage = "/plot caps")
|
||||||
|
public class Caps extends SubCommand {
|
||||||
|
|
||||||
|
@Override public boolean onCommand(final PlotPlayer player, final String[] args) {
|
||||||
|
final Plot plot = player.getCurrentPlot();
|
||||||
|
if (plot == null) {
|
||||||
|
return Captions.NOT_IN_PLOT.send(player);
|
||||||
|
}
|
||||||
|
if (!plot.isAdded(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Captions.PERMISSION_ADMIN_CAPS_OTHER)) {
|
||||||
|
return Captions.NO_PERMISSION.send(player, Captions.PERMISSION_ADMIN_CAPS_OTHER);
|
||||||
|
}
|
||||||
|
Captions.PLOT_CAPS_HEADER.send(player);
|
||||||
|
final int[] countedEntities = plot.countEntities();
|
||||||
|
sendFormatted(plot, player, MobCapFlag.class, countedEntities, "mobs", CAP_MOB);
|
||||||
|
sendFormatted(plot, player, HostileCapFlag.class, countedEntities, "hostile", CAP_MONSTER);
|
||||||
|
sendFormatted(plot, player, AnimalCapFlag.class, countedEntities, "animals", CAP_ANIMAL);
|
||||||
|
sendFormatted(plot, player, VehicleCapFlag.class, countedEntities, "vehicle", CAP_VEHICLE);
|
||||||
|
sendFormatted(plot, player, MiscCapFlag.class, countedEntities, "misc", CAP_MISC);
|
||||||
|
sendFormatted(plot, player, EntityCapFlag.class, countedEntities, "entities", CAP_ENTITY);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T extends PlotFlag<Integer, T>> void sendFormatted(final Plot plot,
|
||||||
|
final PlotPlayer player, final Class<T> capFlag, final int[] countedEntities,
|
||||||
|
final String name, final int type) {
|
||||||
|
final int current = countedEntities[type];
|
||||||
|
final int max = plot.getFlag(capFlag);
|
||||||
|
final String percentage = String.format("%.1f", 100 * ((float) current / max));
|
||||||
|
player.sendMessage(Captions.PLOT_CAPS_FORMAT.getTranslated().replace("%cap%", name)
|
||||||
|
.replace("%current%", Integer.toString(current))
|
||||||
|
.replace("%limit%", Integer.toString(max)).replace("%percentage%", percentage));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -82,6 +82,9 @@ public class Debug extends SubCommand {
|
|||||||
.stream()
|
.stream()
|
||||||
.filter(category -> category.contains(entityType))
|
.filter(category -> category.contains(entityType))
|
||||||
.count();
|
.count();
|
||||||
|
if (categoryCount > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
player.sendMessage(Captions.PREFIX.getTranslated() + entityType.getName() + " is in " + categoryCount + " categories");
|
player.sendMessage(Captions.PREFIX.getTranslated() + entityType.getName() + " is in " + categoryCount + " categories");
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
|
@ -63,6 +63,7 @@ public class MainCommand extends Command {
|
|||||||
public static MainCommand getInstance() {
|
public static MainCommand getInstance() {
|
||||||
if (instance == null) {
|
if (instance == null) {
|
||||||
instance = new MainCommand();
|
instance = new MainCommand();
|
||||||
|
new Caps();
|
||||||
new Buy();
|
new Buy();
|
||||||
new Save();
|
new Save();
|
||||||
new Load();
|
new Load();
|
||||||
|
@ -37,17 +37,18 @@ public interface Caption {
|
|||||||
return StringMan.replaceFromMap(getTranslated(), Captions.replacements);
|
return StringMan.replaceFromMap(getTranslated(), Captions.replacements);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void send(PlotPlayer caller, String... args) {
|
default boolean send(PlotPlayer caller, String... args) {
|
||||||
send(caller, (Object[]) args);
|
return send(caller, (Object[]) args);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void send(PlotPlayer caller, Object... args) {
|
default boolean send(PlotPlayer caller, Object... args) {
|
||||||
String msg = CaptionUtility.format(caller, this, args);
|
String msg = CaptionUtility.format(caller, this, args);
|
||||||
if (caller == null) {
|
if (caller == null) {
|
||||||
PlotSquared.log(msg);
|
PlotSquared.log(msg);
|
||||||
} else {
|
} else {
|
||||||
caller.sendMessage(msg);
|
caller.sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean usePrefix();
|
boolean usePrefix();
|
||||||
|
@ -83,6 +83,7 @@ public enum Captions implements Caption {
|
|||||||
PERMISSION_COMMANDS_CHAT("plots.admin.command.chat", "static.permissions"),
|
PERMISSION_COMMANDS_CHAT("plots.admin.command.chat", "static.permissions"),
|
||||||
PERMISSION_MERGE_OTHER("plots.merge.other", "static.permissions"),
|
PERMISSION_MERGE_OTHER("plots.merge.other", "static.permissions"),
|
||||||
PERMISSION_MERGE_KEEP_ROAD("plots.merge.keeproad", "static.permissions"),
|
PERMISSION_MERGE_KEEP_ROAD("plots.merge.keeproad", "static.permissions"),
|
||||||
|
PERMISSION_ADMIN_CAPS_OTHER("plots.admin.caps.other", "static.permissions"),
|
||||||
PERMISSION_ADMIN_DESTROY_UNOWNED("plots.admin.destroy.unowned", "static.permissions"),
|
PERMISSION_ADMIN_DESTROY_UNOWNED("plots.admin.destroy.unowned", "static.permissions"),
|
||||||
PERMISSION_ADMIN_DESTROY_GROUNDLEVEL("plots.admin.destroy.groundlevel", "static.permissions"),
|
PERMISSION_ADMIN_DESTROY_GROUNDLEVEL("plots.admin.destroy.groundlevel", "static.permissions"),
|
||||||
PERMISSION_ADMIN_DESTROY_OTHER("plots.admin.destroy.other", "static.permissions"),
|
PERMISSION_ADMIN_DESTROY_OTHER("plots.admin.destroy.other", "static.permissions"),
|
||||||
@ -749,6 +750,12 @@ public enum Captions implements Caption {
|
|||||||
EVENT_DENIED("$1%s $2Cancelled by external plugin.", "Events"),
|
EVENT_DENIED("$1%s $2Cancelled by external plugin.", "Events"),
|
||||||
//</editor-fold>
|
//</editor-fold>
|
||||||
|
|
||||||
|
//<editor-fold desc="Caps">
|
||||||
|
PLOT_CAPS_HEADER("$3&m---------&r $1CAPS $3&m---------", false, "Info"),
|
||||||
|
PLOT_CAPS_FORMAT("$2- Cap Type: $1%cap% $2| Status: $1%current%$2/$1%limit% $2($1%percentage%%$2)",
|
||||||
|
false, "Info"),
|
||||||
|
//</editor-fold>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Legacy Configuration Conversion
|
* Legacy Configuration Conversion
|
||||||
*/
|
*/
|
||||||
|
@ -95,6 +95,12 @@ import java.util.function.Consumer;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.github.intellectualsites.plotsquared.plot.commands.SubCommand.sendMessage;
|
import static com.github.intellectualsites.plotsquared.plot.commands.SubCommand.sendMessage;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ANIMAL;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_VEHICLE;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ENTITY;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MISC;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MOB;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MONSTER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The plot class<br>
|
* The plot class<br>
|
||||||
@ -1278,12 +1284,12 @@ public class Plot {
|
|||||||
int[] count = new int[6];
|
int[] count = new int[6];
|
||||||
for (Plot current : this.getConnectedPlots()) {
|
for (Plot current : this.getConnectedPlots()) {
|
||||||
int[] result = ChunkManager.manager.countEntities(current);
|
int[] result = ChunkManager.manager.countEntities(current);
|
||||||
count[0] += result[0];
|
count[CAP_ENTITY] += result[CAP_ENTITY];
|
||||||
count[1] += result[1];
|
count[CAP_ANIMAL] += result[CAP_ANIMAL];
|
||||||
count[2] += result[2];
|
count[CAP_MONSTER] += result[CAP_MONSTER];
|
||||||
count[3] += result[3];
|
count[CAP_MOB] += result[CAP_MOB];
|
||||||
count[4] += result[4];
|
count[CAP_VEHICLE] += result[CAP_VEHICLE];
|
||||||
count[5] += result[5];
|
count[CAP_MISC] += result[CAP_MISC];
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,13 @@ import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
|
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ANIMAL;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_ENTITY;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MISC;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MOB;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_MONSTER;
|
||||||
|
import static com.github.intellectualsites.plotsquared.plot.util.entity.EntityCategories.CAP_VEHICLE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity related general utility methods
|
* Entity related general utility methods
|
||||||
*/
|
*/
|
||||||
@ -41,23 +48,23 @@ import lombok.experimental.UtilityClass;
|
|||||||
int i;
|
int i;
|
||||||
switch (flagName) {
|
switch (flagName) {
|
||||||
case "mob-cap":
|
case "mob-cap":
|
||||||
i = 3;
|
i = CAP_MOB;
|
||||||
break;
|
break;
|
||||||
case "hostile-cap":
|
case "hostile-cap":
|
||||||
i = 2;
|
i = CAP_MONSTER;
|
||||||
break;
|
break;
|
||||||
case "animal-cap":
|
case "animal-cap":
|
||||||
i = 1;
|
i = CAP_ANIMAL;
|
||||||
break;
|
break;
|
||||||
case "vehicle-cap":
|
case "vehicle-cap":
|
||||||
i = 4;
|
i = CAP_VEHICLE;
|
||||||
break;
|
break;
|
||||||
case "misc-cap":
|
case "misc-cap":
|
||||||
i = 5;
|
i = CAP_MISC;
|
||||||
break;
|
break;
|
||||||
case "entity-cap":
|
case "entity-cap":
|
||||||
default:
|
default:
|
||||||
i = 0;
|
i = CAP_ENTITY;
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -30,14 +30,22 @@ package com.github.intellectualsites.plotsquared.plot.util.entity;
|
|||||||
*/
|
*/
|
||||||
public class EntityCategories {
|
public class EntityCategories {
|
||||||
|
|
||||||
public static final EntityCategory ANIMAL = register("animal");
|
public static final int CAP_ENTITY = 0;
|
||||||
public static final EntityCategory TAMEABLE = register("tameable");
|
public static final int CAP_ANIMAL = 1;
|
||||||
public static final EntityCategory VEHICLE = register("vehicle");
|
public static final int CAP_MONSTER = 2;
|
||||||
public static final EntityCategory HOSTILE = register("hostile");
|
public static final int CAP_MOB = 3;
|
||||||
public static final EntityCategory HANGING = register("hanging");
|
public static final int CAP_VEHICLE = 4;
|
||||||
public static final EntityCategory VILLAGER = register("villager");
|
public static final int CAP_MISC = 5;
|
||||||
public static final EntityCategory PROJECTILE = register("projectile");
|
|
||||||
public static final EntityCategory DECORATION = register("decoration");
|
public static final EntityCategory ANIMAL = register("animal");
|
||||||
|
public static final EntityCategory TAMEABLE = register("tameable");
|
||||||
|
public static final EntityCategory VEHICLE = register("vehicle");
|
||||||
|
public static final EntityCategory HOSTILE = register("hostile");
|
||||||
|
public static final EntityCategory HANGING = register("hanging");
|
||||||
|
public static final EntityCategory VILLAGER = register("villager");
|
||||||
|
public static final EntityCategory PROJECTILE = register("projectile");
|
||||||
|
public static final EntityCategory OTHER = register("other");
|
||||||
|
public static final EntityCategory PLAYER = register("player");
|
||||||
|
|
||||||
public static EntityCategory register(final String id) {
|
public static EntityCategory register(final String id) {
|
||||||
final EntityCategory entityCategory = new EntityCategory(id);
|
final EntityCategory entityCategory = new EntityCategory(id);
|
||||||
|
Loading…
Reference in New Issue
Block a user