mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2024-09-18 18:00:58 +02:00
Make some more room in this clustered class
This commit is contained in:
parent
5e4517aeb1
commit
05466c4f77
@ -1,21 +1,12 @@
|
|||||||
package com.songoda.skyblock.listeners;
|
package com.songoda.skyblock.listeners;
|
||||||
|
|
||||||
import com.songoda.skyblock.SkyBlock;
|
import java.io.File;
|
||||||
import com.songoda.skyblock.config.FileManager.Config;
|
import java.util.ArrayList;
|
||||||
import com.songoda.skyblock.generator.Generator;
|
import java.util.Collections;
|
||||||
import com.songoda.skyblock.generator.GeneratorManager;
|
import java.util.HashSet;
|
||||||
import com.songoda.skyblock.island.*;
|
import java.util.List;
|
||||||
import com.songoda.skyblock.levelling.LevellingManager;
|
import java.util.Set;
|
||||||
import com.songoda.skyblock.limit.LimitManager;
|
|
||||||
import com.songoda.skyblock.stackable.Stackable;
|
|
||||||
import com.songoda.skyblock.stackable.StackableManager;
|
|
||||||
import com.songoda.skyblock.upgrade.Upgrade;
|
|
||||||
import com.songoda.skyblock.utils.NumberUtil;
|
|
||||||
import com.songoda.skyblock.utils.version.Materials;
|
|
||||||
import com.songoda.skyblock.utils.version.NMSUtil;
|
|
||||||
import com.songoda.skyblock.utils.version.Sounds;
|
|
||||||
import com.songoda.skyblock.utils.world.LocationUtil;
|
|
||||||
import com.songoda.skyblock.world.WorldManager;
|
|
||||||
import org.apache.commons.lang3.text.WordUtils;
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -29,15 +20,38 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.*;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
|
import org.bukkit.event.block.BlockBurnEvent;
|
||||||
|
import org.bukkit.event.block.BlockDispenseEvent;
|
||||||
|
import org.bukkit.event.block.BlockFormEvent;
|
||||||
|
import org.bukkit.event.block.BlockFromToEvent;
|
||||||
|
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||||
|
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.event.world.PortalCreateEvent;
|
import org.bukkit.event.world.PortalCreateEvent;
|
||||||
import org.bukkit.event.world.StructureGrowEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.material.Crops;
|
|
||||||
|
|
||||||
import java.io.File;
|
import com.google.common.collect.Lists;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import com.songoda.skyblock.SkyBlock;
|
||||||
import java.util.*;
|
import com.songoda.skyblock.config.FileManager.Config;
|
||||||
|
import com.songoda.skyblock.generator.Generator;
|
||||||
|
import com.songoda.skyblock.generator.GeneratorManager;
|
||||||
|
import com.songoda.skyblock.island.Island;
|
||||||
|
import com.songoda.skyblock.island.IslandEnvironment;
|
||||||
|
import com.songoda.skyblock.island.IslandLevel;
|
||||||
|
import com.songoda.skyblock.island.IslandManager;
|
||||||
|
import com.songoda.skyblock.island.IslandRole;
|
||||||
|
import com.songoda.skyblock.island.IslandWorld;
|
||||||
|
import com.songoda.skyblock.levelling.LevellingManager;
|
||||||
|
import com.songoda.skyblock.limit.LimitManager;
|
||||||
|
import com.songoda.skyblock.stackable.Stackable;
|
||||||
|
import com.songoda.skyblock.stackable.StackableManager;
|
||||||
|
import com.songoda.skyblock.utils.NumberUtil;
|
||||||
|
import com.songoda.skyblock.utils.version.Materials;
|
||||||
|
import com.songoda.skyblock.utils.version.NMSUtil;
|
||||||
|
import com.songoda.skyblock.utils.version.Sounds;
|
||||||
|
import com.songoda.skyblock.utils.world.LocationUtil;
|
||||||
|
import com.songoda.skyblock.world.WorldManager;
|
||||||
|
|
||||||
public class Block implements Listener {
|
public class Block implements Listener {
|
||||||
|
|
||||||
@ -162,6 +176,7 @@ public class Block implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||||
public void onBlockPlace(BlockPlaceEvent event) {
|
public void onBlockPlace(BlockPlaceEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -260,7 +275,6 @@ public class Block implements Listener {
|
|||||||
// The solution is to wait a tick to make sure that the block was actually placed.
|
// The solution is to wait a tick to make sure that the block was actually placed.
|
||||||
// This shouldn't cause any issues besides the task number being increased insanely fast.
|
// This shouldn't cause any issues besides the task number being increased insanely fast.
|
||||||
Bukkit.getScheduler().runTask(skyblock, () -> {
|
Bukkit.getScheduler().runTask(skyblock, () -> {
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
Materials materials = Materials.getMaterials(block.getType(), block.getData());
|
Materials materials = Materials.getMaterials(block.getType(), block.getData());
|
||||||
if (materials == null || materials == Materials.AIR)
|
if (materials == null || materials == Materials.AIR)
|
||||||
return;
|
return;
|
||||||
@ -357,19 +371,19 @@ public class Block implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
||||||
if (!skyblock.getWorldManager().isIslandWorld(event.getBlock().getWorld())) return;
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
if (!worldManager.isIslandWorld(event.getBlock().getWorld()))
|
||||||
|
return;
|
||||||
|
|
||||||
IslandManager islandManager = skyblock.getIslandManager();
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
|
||||||
|
|
||||||
Island island = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
Island island = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
||||||
if (island == null) return;
|
if (island == null)
|
||||||
|
return;
|
||||||
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
|
||||||
|
|
||||||
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||||
FileConfiguration configLoad = config.getFileConfiguration();
|
FileConfiguration configLoad = config.getFileConfiguration();
|
||||||
|
|
||||||
|
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
||||||
for (org.bukkit.block.Block block : event.getBlocks()) {
|
for (org.bukkit.block.Block block : event.getBlocks()) {
|
||||||
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world) || !islandManager.isLocationAtIsland(island, block.getRelative(event.getDirection()).getLocation(), world)) {
|
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world) || !islandManager.isLocationAtIsland(island, block.getRelative(event.getDirection()).getLocation(), world)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -413,19 +427,19 @@ public class Block implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
|
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
|
||||||
if (!skyblock.getWorldManager().isIslandWorld(event.getBlock().getWorld())) return;
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
if (!skyblock.getWorldManager().isIslandWorld(event.getBlock().getWorld()))
|
||||||
|
return;
|
||||||
|
|
||||||
IslandManager islandManager = skyblock.getIslandManager();
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
|
||||||
|
|
||||||
Island island = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
Island island = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
||||||
if (island == null) return;
|
if (island == null)
|
||||||
|
return;
|
||||||
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
|
||||||
|
|
||||||
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||||
FileConfiguration configLoad = config.getFileConfiguration();
|
FileConfiguration configLoad = config.getFileConfiguration();
|
||||||
|
|
||||||
|
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
||||||
for (org.bukkit.block.Block block : event.getBlocks()) {
|
for (org.bukkit.block.Block block : event.getBlocks()) {
|
||||||
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world)) {
|
if (!islandManager.isLocationAtIsland(island, block.getLocation(), world)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -454,26 +468,24 @@ public class Block implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockForm(BlockFormEvent event) {
|
public void onBlockForm(BlockFormEvent event) {
|
||||||
org.bukkit.block.Block block = event.getBlock();
|
org.bukkit.block.Block block = event.getBlock();
|
||||||
|
|
||||||
IslandManager islandManager = skyblock.getIslandManager();
|
|
||||||
GeneratorManager generatorManager = skyblock.getGeneratorManager();
|
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
if (!worldManager.isIslandWorld(block.getWorld()))
|
||||||
if (!worldManager.isIslandWorld(block.getWorld())) return;
|
return;
|
||||||
|
|
||||||
Island island = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
|
||||||
if (island == null) return;
|
|
||||||
|
|
||||||
// Check ice/snow forming
|
// Check ice/snow forming
|
||||||
if (block.getType() == Material.ICE || block.getType() == Material.SNOW) {
|
if (block.getType() == Material.ICE || block.getType() == Material.SNOW) {
|
||||||
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Weather.IceAndSnow")) {
|
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Weather.IceAndSnow"))
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
Island island = islandManager.getIslandAtLocation(block.getLocation());
|
||||||
|
if (island == null)
|
||||||
|
return;
|
||||||
|
|
||||||
// Check spawn block protection
|
// Check spawn block protection
|
||||||
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
IslandWorld world = worldManager.getIslandWorld(block.getWorld());
|
||||||
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
||||||
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection")) {
|
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -481,22 +493,25 @@ public class Block implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Material material = event.getBlock().getType();
|
Material material = block.getType();
|
||||||
if (material != Materials.WATER.parseMaterial() &&
|
if (material != Materials.WATER.parseMaterial() &&
|
||||||
material != Materials.LEGACY_STATIONARY_WATER.parseMaterial() &&
|
material != Materials.LEGACY_STATIONARY_WATER.parseMaterial() &&
|
||||||
material != Materials.LAVA.parseMaterial() &&
|
material != Materials.LAVA.parseMaterial() &&
|
||||||
material != Materials.LEGACY_STATIONARY_LAVA.parseMaterial())
|
material != Materials.LEGACY_STATIONARY_LAVA.parseMaterial())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Material type = event.getNewState().getType();
|
BlockState state = event.getNewState();
|
||||||
|
Material type = state.getType();
|
||||||
if (type != Material.COBBLESTONE && type != Material.STONE)
|
if (type != Material.COBBLESTONE && type != Material.STONE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (generatorManager != null && generatorManager.getGenerators().size() > 0) {
|
GeneratorManager generatorManager = skyblock.getGeneratorManager();
|
||||||
List<Generator> generators = new ArrayList<>(generatorManager.getGenerators());
|
List<Generator> generators = Lists.newArrayList(generatorManager.getGenerators());
|
||||||
|
if (generatorManager == null || generators.size() == 0)
|
||||||
|
return;
|
||||||
Collections.reverse(generators); // Use the highest generator available
|
Collections.reverse(generators); // Use the highest generator available
|
||||||
|
|
||||||
// Filter valid players on the island
|
// Filter valid players on the island.
|
||||||
Set<Player> possiblePlayers = new HashSet<>();
|
Set<Player> possiblePlayers = new HashSet<>();
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
boolean isMember = island.hasRole(IslandRole.Owner, player.getUniqueId()) ||
|
boolean isMember = island.hasRole(IslandRole.Owner, player.getUniqueId()) ||
|
||||||
@ -520,155 +535,35 @@ public class Block implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
org.bukkit.block.BlockState genState = generatorManager.generateBlock(generator, block);
|
org.bukkit.block.BlockState genState = generatorManager.generateBlock(generator, block);
|
||||||
event.getNewState().setType(genState.getType());
|
state.setType(genState.getType());
|
||||||
|
|
||||||
if (NMSUtil.getVersionNumber() < 13) {
|
|
||||||
event.getNewState().setData(genState.getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (NMSUtil.getVersionNumber() < 13)
|
||||||
|
state.setData(genState.getData());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockBurn(BlockBurnEvent event) {
|
public void onBlockBurn(BlockBurnEvent event) {
|
||||||
org.bukkit.block.Block block = event.getBlock();
|
org.bukkit.block.Block block = event.getBlock();
|
||||||
|
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
if (!worldManager.isIslandWorld(block.getWorld()))
|
||||||
if (worldManager.isIslandWorld(block.getWorld())) {
|
|
||||||
if (!skyblock.getIslandManager().hasSetting(block.getLocation(), IslandRole.Owner, "FireSpread")) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onBlockSpread(BlockSpreadEvent event) {
|
|
||||||
org.bukkit.block.Block block = event.getBlock();
|
|
||||||
|
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
|
||||||
|
|
||||||
if (event.getSource().getType() != Material.FIRE) {
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (worldManager.isIslandWorld(block.getWorld())) {
|
|
||||||
if (!skyblock.getIslandManager().hasSetting(block.getLocation(), IslandRole.Owner, "FireSpread")) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@EventHandler
|
|
||||||
public void onBlockGrow(BlockGrowEvent event) {
|
|
||||||
org.bukkit.block.Block block = event.getBlock();
|
|
||||||
|
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
|
||||||
IslandManager islandManager = skyblock.getIslandManager();
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
if (!islandManager.hasSetting(block.getLocation(), IslandRole.Owner, "FireSpread"))
|
||||||
if (!skyblock.getWorldManager().isIslandWorld(block.getWorld())) return;
|
|
||||||
|
|
||||||
Island island = islandManager.getIslandAtLocation(block.getLocation());
|
|
||||||
|
|
||||||
if (island == null) return;
|
|
||||||
|
|
||||||
// Check spawn block protection
|
|
||||||
IslandWorld world = worldManager.getIslandWorld(event.getBlock().getWorld());
|
|
||||||
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
|
||||||
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection")) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Upgrade> upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Crop);
|
|
||||||
|
|
||||||
if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() && island.isUpgrade(Upgrade.Type.Crop)) {
|
|
||||||
if (NMSUtil.getVersionNumber() > 12) {
|
|
||||||
try {
|
|
||||||
Object blockData = block.getClass().getMethod("getBlockData").invoke(block);
|
|
||||||
|
|
||||||
if (blockData instanceof org.bukkit.block.data.Ageable) {
|
|
||||||
org.bukkit.block.data.Ageable ageable = (org.bukkit.block.data.Ageable) blockData;
|
|
||||||
ageable.setAge(ageable.getAge() + 1);
|
|
||||||
block.getClass()
|
|
||||||
.getMethod("setBlockData", Class.forName("org.bukkit.block.data.BlockData"))
|
|
||||||
.invoke(block, ageable);
|
|
||||||
}
|
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
|
||||||
| NoSuchMethodException | SecurityException | ClassNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Material type = block.getType();
|
|
||||||
if (block.getState().getData() instanceof Crops
|
|
||||||
|| type.name().equals("BEETROOT_BLOCK")
|
|
||||||
|| type.name().equals("CARROT")
|
|
||||||
|| type.name().equals("POTATO")
|
|
||||||
|| type.name().equals("WHEAT")
|
|
||||||
|| type.name().equals("CROPS")) {
|
|
||||||
try {
|
|
||||||
block.getClass().getMethod("setData", byte.class).invoke(block, (byte) (block.getData() + 1));
|
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
|
||||||
| NoSuchMethodException | SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onLeavesDecay(LeavesDecayEvent event) {
|
|
||||||
org.bukkit.block.Block block = event.getBlock();
|
|
||||||
|
|
||||||
if (skyblock.getWorldManager().isIslandWorld(block.getWorld())) {
|
|
||||||
if (!skyblock.getIslandManager().hasSetting(block.getLocation(), IslandRole.Owner, "LeafDecay")) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onStructureCreate(StructureGrowEvent 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.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.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPortalCreate(PortalCreateEvent event) {
|
public void onPortalCreate(PortalCreateEvent event) {
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
|
||||||
IslandManager islandManager = skyblock.getIslandManager();
|
|
||||||
|
|
||||||
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection"))
|
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// PortalCreateEvent.getBlocks() changed from ArrayList<Block> to ArrayList<BlockState> in 1.14.1... why...
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
// PortalCreateEvent.getBlocks() changed from ArrayList<Block> to ArrayList<BlockState> in 1.14.1
|
||||||
if (NMSUtil.getVersionNumber() > 13) {
|
if (NMSUtil.getVersionNumber() > 13) {
|
||||||
List<BlockState> blocks = event.getBlocks();
|
List<BlockState> blocks = event.getBlocks();
|
||||||
if (event.getBlocks().isEmpty())
|
if (event.getBlocks().isEmpty())
|
||||||
@ -700,7 +595,6 @@ public class Block implements Listener {
|
|||||||
|
|
||||||
// Check spawn block protection
|
// Check spawn block protection
|
||||||
IslandWorld world = worldManager.getIslandWorld(blocks.get(0).getWorld());
|
IslandWorld world = worldManager.getIslandWorld(blocks.get(0).getWorld());
|
||||||
|
|
||||||
for (org.bukkit.block.Block block : blocks) {
|
for (org.bukkit.block.Block block : blocks) {
|
||||||
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -715,12 +609,12 @@ public class Block implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onDispenserDispenseBlock(BlockDispenseEvent event) {
|
public void onDispenserDispenseBlock(BlockDispenseEvent event) {
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
|
||||||
IslandManager islandManager = skyblock.getIslandManager();
|
|
||||||
|
|
||||||
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection"))
|
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
BlockFace dispenserDirection = ((org.bukkit.material.Dispenser) event.getBlock().getState().getData()).getFacing();
|
BlockFace dispenserDirection = ((org.bukkit.material.Dispenser) event.getBlock().getState().getData()).getFacing();
|
||||||
org.bukkit.block.Block placeLocation = event.getBlock().getRelative(dispenserDirection);
|
org.bukkit.block.Block placeLocation = event.getBlock().getRelative(dispenserDirection);
|
||||||
|
|
||||||
@ -731,8 +625,8 @@ public class Block implements Listener {
|
|||||||
// Check spawn block protection
|
// Check spawn block protection
|
||||||
IslandWorld world = worldManager.getIslandWorld(placeLocation.getWorld());
|
IslandWorld world = worldManager.getIslandWorld(placeLocation.getWorld());
|
||||||
|
|
||||||
if (LocationUtil.isLocationAffectingIslandSpawn(placeLocation.getLocation(), island, world)) {
|
if (LocationUtil.isLocationAffectingIslandSpawn(placeLocation.getLocation(), island, world))
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,33 @@
|
|||||||
package com.songoda.skyblock.listeners;
|
package com.songoda.skyblock.listeners;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.block.data.Ageable;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.BlockGrowEvent;
|
||||||
|
import org.bukkit.event.block.BlockSpreadEvent;
|
||||||
|
import org.bukkit.event.block.LeavesDecayEvent;
|
||||||
import org.bukkit.event.world.StructureGrowEvent;
|
import org.bukkit.event.world.StructureGrowEvent;
|
||||||
|
import org.bukkit.material.Crops;
|
||||||
|
|
||||||
import com.songoda.skyblock.SkyBlock;
|
import com.songoda.skyblock.SkyBlock;
|
||||||
import com.songoda.skyblock.island.Island;
|
import com.songoda.skyblock.island.Island;
|
||||||
import com.songoda.skyblock.island.IslandManager;
|
import com.songoda.skyblock.island.IslandManager;
|
||||||
|
import com.songoda.skyblock.island.IslandRole;
|
||||||
|
import com.songoda.skyblock.island.IslandWorld;
|
||||||
|
import com.songoda.skyblock.upgrade.Upgrade;
|
||||||
|
import com.songoda.skyblock.utils.version.Materials;
|
||||||
|
import com.songoda.skyblock.utils.version.NMSUtil;
|
||||||
|
import com.songoda.skyblock.utils.world.LocationUtil;
|
||||||
import com.songoda.skyblock.world.WorldManager;
|
import com.songoda.skyblock.world.WorldManager;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class Grow implements Listener {
|
public class Grow implements Listener {
|
||||||
|
|
||||||
private final SkyBlock skyblock;
|
private final SkyBlock skyblock;
|
||||||
@ -22,7 +40,7 @@ public class Grow implements Listener {
|
|||||||
* Checks that a structure like a tree is not growing outside or into another island.
|
* Checks that a structure like a tree is not growing outside or into another island.
|
||||||
* @author LimeGlass
|
* @author LimeGlass
|
||||||
*/
|
*/
|
||||||
@EventHandler
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onStructureGrow(StructureGrowEvent event) {
|
public void onStructureGrow(StructureGrowEvent event) {
|
||||||
WorldManager worldManager = skyblock.getWorldManager();
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
if (!worldManager.isIslandWorld(event.getWorld()))
|
if (!worldManager.isIslandWorld(event.getWorld()))
|
||||||
@ -48,4 +66,138 @@ public class Grow implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onCropUpgrade(BlockGrowEvent event) {
|
||||||
|
org.bukkit.block.Block block = event.getBlock();
|
||||||
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
if (!skyblock.getWorldManager().isIslandWorld(block.getWorld()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
Island island = islandManager.getIslandAtLocation(block.getLocation());
|
||||||
|
if (island == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Check spawn block protection
|
||||||
|
IslandWorld world = worldManager.getIslandWorld(block.getWorld());
|
||||||
|
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
||||||
|
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Upgrade> upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Crop);
|
||||||
|
if (upgrades == null || upgrades.size() == 0 || !upgrades.get(0).isEnabled() || !island.isUpgrade(Upgrade.Type.Crop))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (NMSUtil.getVersionNumber() > 12) {
|
||||||
|
BlockData data = block.getBlockData();
|
||||||
|
if (data instanceof Ageable) {
|
||||||
|
Ageable ageable = (Ageable) data;
|
||||||
|
ageable.setAge(ageable.getAge() + 1);
|
||||||
|
block.setBlockData(ageable);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Material type = block.getType();
|
||||||
|
if (block.getState().getData() instanceof Crops
|
||||||
|
|| type.name().equals("BEETROOT_BLOCK")
|
||||||
|
|| type.name().equals("CARROT")
|
||||||
|
|| type.name().equals("POTATO")
|
||||||
|
|| type.name().equals("WHEAT")
|
||||||
|
|| type.name().equals("CROPS")) {
|
||||||
|
try {
|
||||||
|
block.getClass().getMethod("setData", byte.class).invoke(block, (byte) (block.getData() + 1));
|
||||||
|
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
||||||
|
| NoSuchMethodException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that a block like a pumpkins and melons are not growing outside or into another island.
|
||||||
|
* @author LimeGlass
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onBlockGrow(BlockGrowEvent event) {
|
||||||
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
BlockState state = event.getNewState();
|
||||||
|
if (!worldManager.isIslandWorld(state.getWorld()))
|
||||||
|
return;
|
||||||
|
if (state.getType() != Materials.PUMPKIN.parseMaterial() && state.getType() != Materials.MELON.parseMaterial())
|
||||||
|
return;
|
||||||
|
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
Island origin = islandManager.getIslandAtLocation(event.getBlock().getLocation());
|
||||||
|
Island growingTo = islandManager.getIslandAtLocation(state.getLocation());
|
||||||
|
// This block is ok to continue as it's not related to Skyblock islands.
|
||||||
|
if (origin == null && growingTo == null)
|
||||||
|
return;
|
||||||
|
// The growing block is outside/inside that it's not suppose to.
|
||||||
|
if (origin == null || growingTo == null) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// The block is growing from one island to another.
|
||||||
|
if (!origin.getIslandUUID().equals(growingTo.getIslandUUID())) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that a structure growing like a tree, does not impact spawn location of the island.
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onStructureCreate(StructureGrowEvent event) {
|
||||||
|
if (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
List<BlockState> blocks = event.getBlocks();
|
||||||
|
if (blocks.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
WorldManager worldManager = skyblock.getWorldManager();
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
Island island = islandManager.getIslandAtLocation(event.getLocation());
|
||||||
|
if (island == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Check spawn block protection
|
||||||
|
IslandWorld world = worldManager.getIslandWorld(blocks.get(0).getWorld());
|
||||||
|
for (BlockState block : event.getBlocks()) {
|
||||||
|
if (LocationUtil.isLocationAffectingIslandSpawn(block.getLocation(), island, world)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onFireSpread(BlockSpreadEvent event) {
|
||||||
|
if (event.getSource().getType() != Material.FIRE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
org.bukkit.block.Block block = event.getBlock();
|
||||||
|
if (!skyblock.getWorldManager().isIslandWorld(block.getWorld()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
if (!islandManager.hasSetting(block.getLocation(), IslandRole.Owner, "FireSpread"))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onLeavesDecay(LeavesDecayEvent event) {
|
||||||
|
org.bukkit.block.Block block = event.getBlock();
|
||||||
|
if (!skyblock.getWorldManager().isIslandWorld(block.getWorld()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
IslandManager islandManager = skyblock.getIslandManager();
|
||||||
|
if (!islandManager.hasSetting(block.getLocation(), IslandRole.Owner, "LeafDecay"))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user