mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2024-09-29 23:17:26 +02:00
Sand can no longer drop onto your spawn block.
This commit is contained in:
parent
a7f1df1a38
commit
367e6b8ef9
@ -1,496 +1,499 @@
|
||||
package me.goodandevil.skyblock.listeners;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Hanging;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityTameEvent;
|
||||
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
|
||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.goodandevil.skyblock.SkyBlock;
|
||||
import me.goodandevil.skyblock.config.FileManager;
|
||||
import me.goodandevil.skyblock.config.FileManager.Config;
|
||||
import me.goodandevil.skyblock.island.Island;
|
||||
import me.goodandevil.skyblock.island.IslandLevel;
|
||||
import me.goodandevil.skyblock.island.IslandRole;
|
||||
import me.goodandevil.skyblock.island.IslandManager;
|
||||
import me.goodandevil.skyblock.island.*;
|
||||
import me.goodandevil.skyblock.message.MessageManager;
|
||||
import me.goodandevil.skyblock.sound.SoundManager;
|
||||
import me.goodandevil.skyblock.upgrade.Upgrade;
|
||||
import me.goodandevil.skyblock.utils.version.Materials;
|
||||
import me.goodandevil.skyblock.utils.version.NMSUtil;
|
||||
import me.goodandevil.skyblock.utils.version.Sounds;
|
||||
import me.goodandevil.skyblock.utils.world.LocationUtil;
|
||||
import me.goodandevil.skyblock.world.WorldManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.*;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
|
||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
public class Entity implements Listener {
|
||||
|
||||
private final SkyBlock skyblock;
|
||||
|
||||
public Entity(SkyBlock skyblock) {
|
||||
this.skyblock = skyblock;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
if (!(event.getEntity() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
FileManager fileManager = skyblock.getFileManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (event.getCause() != null) {
|
||||
if (event.getCause() == DamageCause.VOID) {
|
||||
return;
|
||||
} else if (event.getCause() == DamageCause.ENTITY_ATTACK) {
|
||||
EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) event;
|
||||
|
||||
if (entityDamageByEntityEvent.getDamager() != null
|
||||
&& entityDamageByEntityEvent.getDamager() instanceof Player) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (NMSUtil.getVersionNumber() > 11) {
|
||||
if (event.getCause() == DamageCause.valueOf("ENTITY_SWEEP_ATTACK")) {
|
||||
EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) event;
|
||||
|
||||
if (entityDamageByEntityEvent.getDamager() != null
|
||||
&& entityDamageByEntityEvent.getDamager() instanceof Player) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.Damage.Enable")) {
|
||||
if (!skyblock.getIslandManager().hasSetting(player.getLocation(), IslandRole.Owner, "Damage")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.Damage.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||
MessageManager messageManager = skyblock.getMessageManager();
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
SoundManager soundManager = skyblock.getSoundManager();
|
||||
FileManager fileManager = skyblock.getFileManager();
|
||||
|
||||
if (event.getDamager() instanceof Player) {
|
||||
Player player = (Player) event.getDamager();
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (entity instanceof Player) {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.PvP.Enable")) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.PvP.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (entity instanceof ArmorStand) {
|
||||
if (!islandManager.hasPermission(player, entity.getLocation(), "Destroy")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
messageManager.sendMessage(player,
|
||||
fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
} else {
|
||||
if (!islandManager.hasPermission(player, entity.getLocation(), "MobHurting")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
messageManager.sendMessage(player,
|
||||
fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getDamager() instanceof Projectile
|
||||
&& ((Projectile) event.getDamager()).getShooter() instanceof Player) {
|
||||
Player player = (Player) ((Projectile) event.getDamager()).getShooter();
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.PvP.Enable")) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.PvP.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else {
|
||||
if (!islandManager.hasPermission(player, entity.getLocation(), "MobHurting")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
messageManager.sendMessage(player,
|
||||
fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (event.getEntity() instanceof Player) {
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.Damage.Enable")) {
|
||||
if (!islandManager.hasSetting(player.getLocation(), IslandRole.Owner, "Damage")
|
||||
|| (event.getDamager() instanceof TNTPrimed && !islandManager
|
||||
.hasSetting(player.getLocation(), IslandRole.Owner, "Explosions"))) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.Damage.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
} else if (event.getDamager() instanceof TNTPrimed) {
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "Explosions")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerShearEntity(PlayerShearEntityEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, event.getEntity().getLocation(), "Shearing")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHangingPlace(HangingPlaceEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, event.getEntity().getLocation(),
|
||||
"EntityPlacement")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHangingBreak(HangingBreakEvent event) {
|
||||
Hanging hanging = event.getEntity();
|
||||
|
||||
if (event.getCause() != RemoveCause.EXPLOSION) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(hanging.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasSetting(hanging.getLocation(), IslandRole.Owner, "Explosions")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHangingBreak(HangingBreakByEntityEvent event) {
|
||||
Hanging hanging = event.getEntity();
|
||||
|
||||
if (!(event.getRemover() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getRemover();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(hanging.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, hanging.getLocation(), "HangingDestroy")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityTaming(EntityTameEvent event) {
|
||||
if (!(event.getOwner() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getOwner();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, event.getEntity().getLocation(), "MobTaming")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (entity instanceof FallingBlock || entity instanceof Player) {
|
||||
return;
|
||||
}
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "MobGriefing")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
Island island = islandManager.getIslandAtLocation(entity.getLocation());
|
||||
|
||||
if (island != null) {
|
||||
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"))
|
||||
.getFileConfiguration().getBoolean("Island.Block.Level.Enable")) {
|
||||
org.bukkit.block.Block block = event.getBlock();
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
Materials materials = Materials.getMaterials(block.getType(), block.getData());
|
||||
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
int materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - 1 <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getTo() != null && event.getTo() != Material.AIR) {
|
||||
materials = null;
|
||||
|
||||
if (NMSUtil.getVersionNumber() > 12) {
|
||||
materials = Materials.fromString(event.getTo().name());
|
||||
} else {
|
||||
try {
|
||||
materials = Materials.requestMaterials(event.getTo().name(),
|
||||
(byte) event.getClass().getMethod("getData", byte.class).invoke(event));
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
||||
| NoSuchMethodException | SecurityException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (materials != null) {
|
||||
int materialAmount = 0;
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
materialAmount = level.getMaterialAmount(materials.name());
|
||||
}
|
||||
|
||||
level.setMaterialAmount(materials.name(), materialAmount + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "Explosions")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
Island island = islandManager.getIslandAtLocation(entity.getLocation());
|
||||
|
||||
if (island != null) {
|
||||
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"))
|
||||
.getFileConfiguration().getBoolean("Island.Block.Level.Enable")) {
|
||||
for (org.bukkit.block.Block blockList : event.blockList()) {
|
||||
@SuppressWarnings("deprecation")
|
||||
Materials materials = Materials.getMaterials(blockList.getType(), blockList.getData());
|
||||
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
int materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - 1 <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onEntityDeath(EntityDeathEvent event) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity livingEntity = event.getEntity();
|
||||
|
||||
if (livingEntity.hasMetadata("SkyBlock")) {
|
||||
return;
|
||||
}
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(livingEntity.getWorld())) {
|
||||
Island island = islandManager.getIslandAtLocation(livingEntity.getLocation());
|
||||
|
||||
if (island != null) {
|
||||
List<Upgrade> upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Drops);
|
||||
|
||||
if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled()
|
||||
&& island.isUpgrade(Upgrade.Type.Drops)) {
|
||||
List<ItemStack> entityDrops = event.getDrops();
|
||||
|
||||
if (entityDrops != null) {
|
||||
for (int i = 0; i < entityDrops.size(); i++) {
|
||||
ItemStack is = entityDrops.get(i);
|
||||
is.setAmount(is.getAmount() * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityTargetLivingEntity(EntityTargetLivingEntityEvent event) {
|
||||
if (!(event.getTarget() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof ExperienceOrb)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getTarget();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, "ExperienceOrbPickup")) {
|
||||
event.setTarget(null);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCreatureSpawn(CreatureSpawnEvent event) {
|
||||
if (event.getEntity() instanceof ArmorStand || event.getEntity() instanceof FallingBlock
|
||||
|| event.getEntity() instanceof org.bukkit.entity.Item) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getSpawnReason() == SpawnReason.CUSTOM || event.getSpawnReason() == SpawnReason.NATURAL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity livingEntity = event.getEntity();
|
||||
|
||||
if (livingEntity.hasMetadata("SkyBlock")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(livingEntity.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasSetting(livingEntity.getLocation(), IslandRole.Owner,
|
||||
"NaturalMobSpawning")) {
|
||||
livingEntity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
private final SkyBlock skyblock;
|
||||
|
||||
public Entity(SkyBlock skyblock) {
|
||||
this.skyblock = skyblock;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
if (!(event.getEntity() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
FileManager fileManager = skyblock.getFileManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (event.getCause() != null) {
|
||||
if (event.getCause() == DamageCause.VOID) {
|
||||
return;
|
||||
} else if (event.getCause() == DamageCause.ENTITY_ATTACK) {
|
||||
EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) event;
|
||||
|
||||
if (entityDamageByEntityEvent.getDamager() != null
|
||||
&& entityDamageByEntityEvent.getDamager() instanceof Player) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (NMSUtil.getVersionNumber() > 11) {
|
||||
if (event.getCause() == DamageCause.valueOf("ENTITY_SWEEP_ATTACK")) {
|
||||
EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) event;
|
||||
|
||||
if (entityDamageByEntityEvent.getDamager() != null
|
||||
&& entityDamageByEntityEvent.getDamager() instanceof Player) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.Damage.Enable")) {
|
||||
if (!skyblock.getIslandManager().hasSetting(player.getLocation(), IslandRole.Owner, "Damage")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.Damage.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||
MessageManager messageManager = skyblock.getMessageManager();
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
SoundManager soundManager = skyblock.getSoundManager();
|
||||
FileManager fileManager = skyblock.getFileManager();
|
||||
|
||||
if (event.getDamager() instanceof Player) {
|
||||
Player player = (Player) event.getDamager();
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (entity instanceof Player) {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.PvP.Enable")) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.PvP.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (entity instanceof ArmorStand) {
|
||||
if (!islandManager.hasPermission(player, entity.getLocation(), "Destroy")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
messageManager.sendMessage(player,
|
||||
fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
} else {
|
||||
if (!islandManager.hasPermission(player, entity.getLocation(), "MobHurting")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
messageManager.sendMessage(player,
|
||||
fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getDamager() instanceof Projectile
|
||||
&& ((Projectile) event.getDamager()).getShooter() instanceof Player) {
|
||||
Player player = (Player) ((Projectile) event.getDamager()).getShooter();
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.PvP.Enable")) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.PvP.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else {
|
||||
if (!islandManager.hasPermission(player, entity.getLocation(), "MobHurting")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
messageManager.sendMessage(player,
|
||||
fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (event.getEntity() instanceof Player) {
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.Damage.Enable")) {
|
||||
if (!islandManager.hasSetting(player.getLocation(), IslandRole.Owner, "Damage")
|
||||
|| (event.getDamager() instanceof TNTPrimed && !islandManager
|
||||
.hasSetting(player.getLocation(), IslandRole.Owner, "Explosions"))) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!configLoad.getBoolean("Island.Damage.Enable")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
} else if (event.getDamager() instanceof TNTPrimed) {
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "Explosions")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerShearEntity(PlayerShearEntityEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, event.getEntity().getLocation(), "Shearing")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHangingPlace(HangingPlaceEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, event.getEntity().getLocation(),
|
||||
"EntityPlacement")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHangingBreak(HangingBreakEvent event) {
|
||||
Hanging hanging = event.getEntity();
|
||||
|
||||
if (event.getCause() != RemoveCause.EXPLOSION) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(hanging.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasSetting(hanging.getLocation(), IslandRole.Owner, "Explosions")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHangingBreak(HangingBreakByEntityEvent event) {
|
||||
Hanging hanging = event.getEntity();
|
||||
|
||||
if (!(event.getRemover() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getRemover();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(hanging.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, hanging.getLocation(), "HangingDestroy")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityTaming(EntityTameEvent event) {
|
||||
if (!(event.getOwner() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getOwner();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, event.getEntity().getLocation(), "MobTaming")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"))
|
||||
.getFileConfiguration().getString("Island.Settings.Permission.Message"));
|
||||
skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
if (entity instanceof Player) {
|
||||
return;
|
||||
}
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
||||
|
||||
if (!skyblock.getWorldManager().isIslandWorld(entity.getWorld())) return;
|
||||
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
||||
|
||||
if ((event.getEntityType() == EntityType.FALLING_BLOCK) && LocationUtil.isLocationLocation(event.getBlock().getLocation(),
|
||||
island.getLocation(world, IslandEnvironment.Main)
|
||||
.clone())
|
||||
&& configLoad.getBoolean("Island.Spawn.Protection")) {
|
||||
event.getEntity().remove();
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
if (entity instanceof FallingBlock)
|
||||
return;
|
||||
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "MobGriefing")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
||||
if (island == null) return;
|
||||
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"))
|
||||
.getFileConfiguration().getBoolean("Island.Block.Level.Enable")) return;
|
||||
org.bukkit.block.Block block = event.getBlock();
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
Materials materials = Materials.getMaterials(block.getType(), block.getData());
|
||||
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
int materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - 1 <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getTo() != null && event.getTo() != Material.AIR) {
|
||||
materials = null;
|
||||
|
||||
if (NMSUtil.getVersionNumber() > 12) {
|
||||
materials = Materials.fromString(event.getTo().name());
|
||||
} else {
|
||||
try {
|
||||
materials = Materials.requestMaterials(event.getTo().name(),
|
||||
(byte) event.getClass().getMethod("getData", byte.class).invoke(event));
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
||||
| NoSuchMethodException | SecurityException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (materials != null) {
|
||||
int materialAmount = 0;
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
materialAmount = level.getMaterialAmount(materials.name());
|
||||
}
|
||||
|
||||
level.setMaterialAmount(materials.name(), materialAmount + 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
org.bukkit.entity.Entity entity = event.getEntity();
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "Explosions")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
Island island = islandManager.getIslandAtLocation(entity.getLocation());
|
||||
|
||||
if (island != null) {
|
||||
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"))
|
||||
.getFileConfiguration().getBoolean("Island.Block.Level.Enable")) {
|
||||
for (org.bukkit.block.Block blockList : event.blockList()) {
|
||||
@SuppressWarnings("deprecation")
|
||||
Materials materials = Materials.getMaterials(blockList.getType(), blockList.getData());
|
||||
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
int materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - 1 <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onEntityDeath(EntityDeathEvent event) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity livingEntity = event.getEntity();
|
||||
|
||||
if (livingEntity.hasMetadata("SkyBlock")) {
|
||||
return;
|
||||
}
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(livingEntity.getWorld())) {
|
||||
Island island = islandManager.getIslandAtLocation(livingEntity.getLocation());
|
||||
|
||||
if (island != null) {
|
||||
List<Upgrade> upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Drops);
|
||||
|
||||
if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled()
|
||||
&& island.isUpgrade(Upgrade.Type.Drops)) {
|
||||
List<ItemStack> entityDrops = event.getDrops();
|
||||
|
||||
if (entityDrops != null) {
|
||||
for (int i = 0; i < entityDrops.size(); i++) {
|
||||
ItemStack is = entityDrops.get(i);
|
||||
is.setAmount(is.getAmount() * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityTargetLivingEntity(EntityTargetLivingEntityEvent event) {
|
||||
if (!(event.getTarget() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof ExperienceOrb)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getTarget();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasPermission(player, "ExperienceOrbPickup")) {
|
||||
event.setTarget(null);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCreatureSpawn(CreatureSpawnEvent event) {
|
||||
if (event.getEntity() instanceof ArmorStand || event.getEntity() instanceof FallingBlock
|
||||
|| event.getEntity() instanceof org.bukkit.entity.Item) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getSpawnReason() == SpawnReason.CUSTOM || event.getSpawnReason() == SpawnReason.NATURAL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity livingEntity = event.getEntity();
|
||||
|
||||
if (livingEntity.hasMetadata("SkyBlock")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(livingEntity.getWorld())) {
|
||||
if (!skyblock.getIslandManager().hasSetting(livingEntity.getLocation(), IslandRole.Owner,
|
||||
"NaturalMobSpawning")) {
|
||||
livingEntity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user