mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2024-11-29 21:53:42 +01:00
Misc island permission bug fixes, portal event bug fix
This commit is contained in:
parent
4214c60fe3
commit
95e3eab883
@ -824,14 +824,6 @@ public class Island {
|
||||
return unlocked;
|
||||
}
|
||||
|
||||
public boolean isLocationWithinIsland(IslandWorld world, Location location) {
|
||||
Location islandLocation = this.getLocation(world, IslandEnvironment.Island).clone().add(0.5, 0, 0.5);
|
||||
double size = this.getRadius();
|
||||
size += size % 2 == 0 ? 1 : 0;
|
||||
|
||||
return LocationUtil.isLocationAtLocationRadius(location, islandLocation, size);
|
||||
}
|
||||
|
||||
public me.goodandevil.skyblock.api.island.Island getAPIWrapper() {
|
||||
return apiWrapper;
|
||||
}
|
||||
|
@ -1342,6 +1342,10 @@ public class IslandManager {
|
||||
}
|
||||
|
||||
public boolean isLocationAtIsland(Island island, org.bukkit.Location location, IslandWorld world) {
|
||||
return LocationUtil.isLocationAtLocationRadius(location, island.getLocation(world, IslandEnvironment.Island), island.getRadius());
|
||||
Location islandLocation = island.getLocation(world, IslandEnvironment.Island).clone().add(0.5, 0, 0.5);
|
||||
double size = island.getRadius();
|
||||
size += size % 2 == 0 ? 1 : 0;
|
||||
|
||||
return LocationUtil.isLocationAtLocationRadius(location, islandLocation, size);
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.EntityType;
|
||||
@ -187,7 +188,7 @@ public class Block implements Listener {
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.WorldBorder.Block") && block.getType() == Material.DISPENSER) {
|
||||
if (!island.isLocationWithinIsland(world, block.getLocation())) {
|
||||
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@ -268,7 +269,7 @@ public class Block implements Listener {
|
||||
org.bukkit.block.Block block = event.getToBlock();
|
||||
|
||||
// Protect outside of border
|
||||
if (!island.isLocationWithinIsland(world, block.getLocation())) {
|
||||
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -291,7 +292,7 @@ public class Block implements Listener {
|
||||
island.hasRole(IslandRole.Member, p.getUniqueId()) ||
|
||||
island.hasRole(IslandRole.Coop, p.getUniqueId()) ||
|
||||
island.hasRole(IslandRole.Operator, p.getUniqueId());
|
||||
if (isMember && island.isLocationWithinIsland(world, p.getLocation())) {
|
||||
if (isMember && islandManager.isLocationAtIsland(island, p.getLocation(), world)) {
|
||||
possiblePlayers.add(p);
|
||||
}
|
||||
}
|
||||
@ -334,7 +335,7 @@ public class Block implements Listener {
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
for (org.bukkit.block.Block block : event.getBlocks()) {
|
||||
if (!island.isLocationWithinIsland(world, block.getLocation())) {
|
||||
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -390,7 +391,7 @@ public class Block implements Listener {
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
for (org.bukkit.block.Block block : event.getBlocks()) {
|
||||
if (!island.isLocationWithinIsland(world, block.getLocation())) {
|
||||
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -466,7 +467,7 @@ public class Block implements Listener {
|
||||
island.hasRole(IslandRole.Member, player.getUniqueId()) ||
|
||||
island.hasRole(IslandRole.Coop, player.getUniqueId()) ||
|
||||
island.hasRole(IslandRole.Operator, player.getUniqueId());
|
||||
if (isMember && island.isLocationWithinIsland(world, player.getLocation())) {
|
||||
if (isMember && islandManager.isLocationAtIsland(island, player.getLocation(), world)) {
|
||||
possiblePlayers.add(player);
|
||||
}
|
||||
}
|
||||
@ -639,37 +640,26 @@ public class Block implements Listener {
|
||||
IslandWorld world = worldManager.getIslandWorld(event.getBlocks().get(0).getWorld());
|
||||
Location islandLocation = island.getLocation(world, IslandEnvironment.Main);
|
||||
|
||||
for (org.bukkit.block.Block block : event.getBlocks()) {
|
||||
if (LocationUtil.isLocationAffectingLocation(block.getLocation(), islandLocation)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
// PortalCreateEvent.getBlocks() changed from ArrayList<Block> to ArrayList<BlockState> in 1.14.1... why...
|
||||
if (NMSUtil.getVersionNumber() > 13) {
|
||||
for (BlockState block : event.getBlocks()) {
|
||||
if (LocationUtil.isLocationAffectingLocation(block.getLocation(), islandLocation)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityCreatePortal(EntityCreatePortalEvent event) {
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
|
||||
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection"))
|
||||
return;
|
||||
|
||||
if (event.getBlocks().isEmpty())
|
||||
return;
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(event.getBlocks().get(0).getLocation());
|
||||
if (island == null)
|
||||
return;
|
||||
|
||||
// Check spawn block protection
|
||||
IslandWorld world = worldManager.getIslandWorld(event.getBlocks().get(0).getWorld());
|
||||
Location islandLocation = island.getLocation(world, IslandEnvironment.Main);
|
||||
|
||||
for (org.bukkit.block.BlockState block : event.getBlocks()) {
|
||||
if (LocationUtil.isLocationAffectingLocation(block.getLocation(), islandLocation)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
} else {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
ArrayList<org.bukkit.block.Block> blocks = (ArrayList<org.bukkit.block.Block>) event.getClass().getMethod("getBlocks").invoke(event);
|
||||
for (org.bukkit.block.Block block : blocks) {
|
||||
if (LocationUtil.isLocationAffectingLocation(block.getLocation(), islandLocation)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (ReflectiveOperationException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ public class Entity implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
// Fix a bug in spigot where arrows with flame still apply flame even if the event is cancelled
|
||||
// Fix a bug in minecraft where arrows with flame still apply fire ticks even if the shot entity isn't damaged
|
||||
if (preventFireTicks.contains(player.getUniqueId()) && event.getCause() == DamageCause.FIRE_TICK) {
|
||||
player.setFireTicks(0);
|
||||
event.setCancelled(true);
|
||||
@ -157,8 +157,7 @@ public class Entity implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getDamager() instanceof Projectile
|
||||
&& ((Projectile) event.getDamager()).getShooter() instanceof Player) {
|
||||
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();
|
||||
|
||||
@ -167,6 +166,11 @@ public class Entity implements Listener {
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (entity.getType() == EntityType.ITEM_FRAME && !islandManager.hasPermission(player, entity.getLocation(), "HangingDestroy")) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (configLoad.getBoolean("Island.Settings.PvP.Enable")) {
|
||||
if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) {
|
||||
event.setCancelled(true);
|
||||
@ -214,7 +218,7 @@ public class Entity implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
// Fix a bug in spigot where arrows with flame still apply flame even if the event is cancelled
|
||||
// Fix a bug in minecraft where arrows with flame still apply fire ticks even if the shot entity isn't damaged
|
||||
if (event.isCancelled() && event.getEntity() != null && event.getDamager() instanceof Arrow && ((Arrow)event.getDamager()).getShooter() instanceof Player) {
|
||||
Arrow arrow = (Arrow) event.getDamager();
|
||||
if (arrow.getFireTicks() != 0) {
|
||||
|
@ -258,7 +258,8 @@ public class Interact implements Listener {
|
||||
|| block.getType() == Materials.BIRCH_BUTTON.parseMaterial()
|
||||
|| block.getType() == Materials.JUNGLE_BUTTON.parseMaterial()
|
||||
|| block.getType() == Materials.ACACIA_BUTTON.parseMaterial()
|
||||
|| block.getType() == Materials.DARK_OAK_BUTTON.parseMaterial()) {
|
||||
|| block.getType() == Materials.DARK_OAK_BUTTON.parseMaterial()
|
||||
|| block.getType() == Materials.LEVER.parseMaterial()) {
|
||||
if (!islandManager.hasPermission(player, block.getLocation(), "LeverButton")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
@ -468,6 +469,7 @@ public class Interact implements Listener {
|
||||
}
|
||||
}
|
||||
} else if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
||||
// Note: Cast is necessary as it is ambiguous without it in 1.8
|
||||
if (player.getTargetBlock((Set<Material>) null, 5).getType() == Material.FIRE) {
|
||||
if (!islandManager.hasPermission(player, block.getLocation(), "Fire")) {
|
||||
event.setCancelled(true);
|
||||
@ -479,7 +481,9 @@ public class Interact implements Listener {
|
||||
}
|
||||
}
|
||||
} else if (event.getAction() == Action.PHYSICAL) {
|
||||
if (block.getType() == Materials.FARMLAND.parseMaterial()) {
|
||||
if (block.getType() == Materials.TURTLE_EGG.parseMaterial()) {
|
||||
event.setCancelled(true);
|
||||
} else if (block.getType() == Materials.FARMLAND.parseMaterial()) {
|
||||
if (!islandManager.hasPermission(player, block.getLocation(), "Crop")) {
|
||||
event.setCancelled(true);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user