mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2025-02-23 15:11:21 +01:00
Water in Nether
This commit is contained in:
parent
9d1b0a7f89
commit
93ee9d5092
@ -39,6 +39,7 @@ import com.songoda.skyblock.scoreboard.ScoreboardManager;
|
||||
import com.songoda.skyblock.sound.SoundManager;
|
||||
import com.songoda.skyblock.stackable.StackableManager;
|
||||
import com.songoda.skyblock.structure.StructureManager;
|
||||
import com.songoda.skyblock.tasks.MobNetherWaterTask;
|
||||
import com.songoda.skyblock.upgrade.UpgradeManager;
|
||||
import com.songoda.skyblock.usercache.UserCacheManager;
|
||||
import com.songoda.skyblock.utils.SignMenuFactory;
|
||||
@ -81,6 +82,7 @@ public class SkyBlock extends SongodaPlugin {
|
||||
private PlaceholderManager placeholderManager;
|
||||
private MessageManager messageManager;
|
||||
private HologramTask hologramTask;
|
||||
private MobNetherWaterTask mobNetherWaterTask;
|
||||
private LimitationInstanceHandler limitationHandler;
|
||||
private LocalizationManager localizationManager;
|
||||
private RewardManager rewardManager;
|
||||
@ -162,6 +164,7 @@ public class SkyBlock extends SongodaPlugin {
|
||||
|
||||
// Start Tasks
|
||||
hologramTask = HologramTask.startTask(this);
|
||||
mobNetherWaterTask = MobNetherWaterTask.startTask(this);
|
||||
|
||||
PluginManager pluginManager = getServer().getPluginManager();
|
||||
pluginManager.registerEvents(new Join(this), this);
|
||||
@ -229,6 +232,10 @@ public class SkyBlock extends SongodaPlugin {
|
||||
this.hologramTask.onDisable();
|
||||
}
|
||||
|
||||
if (this.mobNetherWaterTask != null) {
|
||||
this.mobNetherWaterTask.onDisable();
|
||||
}
|
||||
|
||||
if (this.fabledChallenge != null) {
|
||||
this.fabledChallenge.onDisable();
|
||||
}
|
||||
@ -342,6 +349,10 @@ public class SkyBlock extends SongodaPlugin {
|
||||
return hologramTask;
|
||||
}
|
||||
|
||||
public MobNetherWaterTask getMobNetherWaterTask() {
|
||||
return mobNetherWaterTask;
|
||||
}
|
||||
|
||||
public StackableManager getStackableManager() {
|
||||
return stackableManager;
|
||||
}
|
||||
|
@ -20,14 +20,13 @@ import com.songoda.skyblock.utils.version.NMSUtil;
|
||||
import com.songoda.skyblock.utils.world.LocationUtil;
|
||||
import com.songoda.skyblock.world.WorldManager;
|
||||
import org.apache.commons.lang.WordUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.*;
|
||||
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.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -192,6 +191,10 @@ public class Block implements Listener {
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(blockLoc);
|
||||
|
||||
// Check permissions.
|
||||
if (!skyblock.getPermissionManager().processPermission(event, player, island))
|
||||
return;
|
||||
|
||||
if (island == null) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@ -204,10 +207,6 @@ public class Block implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check permissions.
|
||||
if (!skyblock.getPermissionManager().processPermission(event, player, island))
|
||||
return;
|
||||
|
||||
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
IslandWorld world = worldManager.getIslandWorld(block.getWorld());
|
||||
@ -296,6 +295,32 @@ public class Block implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
// Nether mobs
|
||||
if(configLoad.getBoolean("Island.Nether.WaterDoNotFlowNearNetherMobs", false) && worldManager.getIslandWorld(block.getWorld()).equals(IslandWorld.Nether)){
|
||||
Collection<Entity> entities = block.getWorld().getNearbyEntities(block.getLocation(), 1d, 1d, 1d);
|
||||
if(entities.size() > 0){
|
||||
EntityCycle: for(Entity ent : entities){
|
||||
switch(ent.getType()){
|
||||
case PIG_ZOMBIE:
|
||||
case BLAZE:
|
||||
case MAGMA_CUBE:
|
||||
case WITHER_SKELETON:
|
||||
case WITHER:
|
||||
case GHAST:
|
||||
if(block.getRelative(event.getFace().getOppositeFace()).getType().equals(Material.WATER)){
|
||||
event.setCancelled(true);
|
||||
event.getToBlock().getWorld().playSound(block.getLocation(), Sound.BLOCK_FIRE_EXTINGUISH, 1f, 1f);
|
||||
event.getToBlock().getWorld().playEffect(block.getLocation(), Effect.SMOKE, 1);
|
||||
}
|
||||
break EntityCycle; // TODO No spaghetti code
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generators
|
||||
if (NMSUtil.getVersionNumber() < 12) {
|
||||
if (generatorManager != null && generatorManager.getGenerators().size() > 0 && generatorManager.isGenerator(block)) {
|
||||
List<Generator> generators = new ArrayList<>(generatorManager.getGenerators());
|
||||
@ -313,6 +338,7 @@ public class Block implements Listener {
|
||||
|
||||
// Find highest generator available
|
||||
for (Generator generator : generators) {
|
||||
if(generator.getIsWorld().equals(world)){
|
||||
for (Player p : possiblePlayers) {
|
||||
|
||||
if (generator.isPermission() &&
|
||||
@ -335,6 +361,7 @@ public class Block implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
||||
@ -550,6 +577,7 @@ public class Block implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
if(worldManager.getIslandWorld(event.getBlock().getWorld()).equals(generator.getIsWorld())){
|
||||
org.bukkit.block.BlockState genState = generatorManager.generateBlock(generator, block);
|
||||
state.setType(genState.getType());
|
||||
|
||||
@ -559,6 +587,7 @@ public class Block implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBurn(BlockBurnEvent event) {
|
||||
|
@ -55,10 +55,19 @@ public class Entity implements Listener {
|
||||
@EventHandler
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
if (!(event.getEntity() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
if(event.getEntity() instanceof Blaze){
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
|
||||
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if(configLoad.getBoolean("Island.Nether.BlazeImmuneToWaterInNether", false) &&
|
||||
worldManager.getIslandWorld(event.getEntity().getWorld()).equals(IslandWorld.Nether)){
|
||||
if(event.getCause().equals(DamageCause.DROWNING)){
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
} else if (event.getEntity() instanceof Player) {
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) {
|
||||
@ -73,6 +82,7 @@ public class Entity implements Listener {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||
|
@ -18,11 +18,11 @@ import com.songoda.skyblock.stackable.Stackable;
|
||||
import com.songoda.skyblock.stackable.StackableManager;
|
||||
import com.songoda.skyblock.utils.NumberUtil;
|
||||
import com.songoda.skyblock.utils.structure.StructureUtil;
|
||||
import com.songoda.skyblock.utils.world.LocationUtil;
|
||||
import com.songoda.skyblock.world.WorldManager;
|
||||
import org.apache.commons.lang.WordUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -48,6 +48,86 @@ public class Interact implements Listener {
|
||||
this.skyblock = skyblock;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onWaterPlace(PlayerInteractEvent event){
|
||||
Player player = event.getPlayer();
|
||||
org.bukkit.block.Block block = event.getClickedBlock().getRelative(event.getBlockFace());
|
||||
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
IslandLevelManager levellingManager = skyblock.getLevellingManager();
|
||||
if (!worldManager.isIslandWorld(block.getWorld())) return;
|
||||
|
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK &&
|
||||
worldManager.getIslandWorld(block.getWorld()).equals(IslandWorld.Nether) &&
|
||||
event.getItem().getType().equals(Material.WATER_BUCKET)){
|
||||
Location blockLoc = block.getLocation();
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(blockLoc);
|
||||
|
||||
// Check permissions.
|
||||
if (!skyblock.getPermissionManager().processPermission(event, player, island))
|
||||
return;
|
||||
|
||||
if (island == null) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (levellingManager.isScanning(island)) {
|
||||
skyblock.getMessageManager().sendMessage(player,
|
||||
skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml")).getFileConfiguration().getString("Command.Island.Level.Scanning.BlockPlacing.Message"));
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
FileManager.Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
IslandWorld world = worldManager.getIslandWorld(block.getWorld());
|
||||
|
||||
// Check spawn protection
|
||||
if (configLoad.getBoolean("Island.Spawn.Protection")) {
|
||||
boolean isObstructing = false;
|
||||
// Directly on the block
|
||||
if (LocationUtil.isLocationAffectingIslandSpawn(blockLoc, island, world)) {
|
||||
isObstructing = true;
|
||||
}
|
||||
|
||||
if (isObstructing) {
|
||||
skyblock.getMessageManager().sendMessage(player, skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml")).getFileConfiguration().getString("Island.SpawnProtection.Place.Message"));
|
||||
skyblock.getSoundManager().playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
|
||||
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
BlockLimitation limits = skyblock.getLimitationHandler().getInstance(BlockLimitation.class);
|
||||
|
||||
long limit = limits.getBlockLimit(player, Material.WATER);
|
||||
|
||||
if (limits.isBlockLimitExceeded(event.getItem().getType(), block.getLocation(), limit)) {
|
||||
CompatibleMaterial material = CompatibleMaterial.getMaterial(event.getItem().getType());
|
||||
|
||||
skyblock.getMessageManager().sendMessage(player, skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml")).getFileConfiguration().getString("Island.Limit.Block.Exceeded.Message")
|
||||
.replace("%type", WordUtils.capitalizeFully(material.name().replace("_", " "))).replace("%limit", NumberUtil.formatNumber(limit)));
|
||||
skyblock.getSoundManager().playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
|
||||
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if(configLoad.getBoolean("Island.Nether.AllowNetherWater", false)){
|
||||
event.setCancelled(true);
|
||||
block.setType(Material.WATER, true);
|
||||
block.getWorld().playSound(block.getLocation(), Sound.ITEM_BUCKET_EMPTY, 1f, 1f);
|
||||
if(!event.getPlayer().getGameMode().equals(GameMode.CREATIVE)){
|
||||
event.getItem().setType(Material.BUCKET);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
|
@ -0,0 +1,87 @@
|
||||
package com.songoda.skyblock.tasks;
|
||||
|
||||
import com.songoda.core.utils.TextUtils;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.hologram.Hologram;
|
||||
import com.songoda.skyblock.hologram.HologramType;
|
||||
import com.songoda.skyblock.island.IslandLevel;
|
||||
import com.songoda.skyblock.island.IslandWorld;
|
||||
import com.songoda.skyblock.leaderboard.Leaderboard;
|
||||
import com.songoda.skyblock.leaderboard.LeaderboardManager;
|
||||
import com.songoda.skyblock.utils.NumberUtil;
|
||||
import com.songoda.skyblock.utils.player.OfflinePlayer;
|
||||
import com.songoda.skyblock.utils.world.LocationUtil;
|
||||
import com.songoda.skyblock.visit.Visit;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MobNetherWaterTask extends BukkitRunnable {
|
||||
|
||||
private static MobNetherWaterTask instance;
|
||||
private static SkyBlock plugin;
|
||||
|
||||
public MobNetherWaterTask(SkyBlock plug) {
|
||||
plugin = plug;
|
||||
}
|
||||
|
||||
public static MobNetherWaterTask startTask(SkyBlock plug) {
|
||||
plugin = plug;
|
||||
if (instance == null) {
|
||||
instance = new MobNetherWaterTask(plugin);
|
||||
instance.runTaskTimer(plugin, 0, 2L);
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
if (fileManager.getConfig(new File(plugin.getDataFolder(), "config.yml"))
|
||||
.getFileConfiguration().getBoolean("Island.Nether.WaterDisappearWithNetherMobs", false)){
|
||||
for(World world : Bukkit.getServer().getWorlds()){
|
||||
if(plugin.getWorldManager().isIslandWorld(world) && plugin.getWorldManager().getIslandWorld(world).equals(IslandWorld.Nether)){
|
||||
for(Entity ent : world.getEntities()){
|
||||
switch(ent.getType()){
|
||||
case PIG_ZOMBIE:
|
||||
case BLAZE:
|
||||
case MAGMA_CUBE:
|
||||
case WITHER_SKELETON:
|
||||
case WITHER:
|
||||
case GHAST:
|
||||
Block block = ent.getLocation().getBlock();
|
||||
if(block.getType().equals(Material.WATER)){
|
||||
block.setType(Material.AIR, true);
|
||||
world.playSound(block.getLocation(), Sound.BLOCK_FIRE_EXTINGUISH, 1f, 1f);
|
||||
world.playEffect(block.getLocation(), Effect.SMOKE, 1);
|
||||
}
|
||||
block = block.getRelative(BlockFace.UP);
|
||||
if(block.getType().equals(Material.WATER)){
|
||||
block.setType(Material.AIR, true);
|
||||
world.playSound(block.getLocation(), Sound.BLOCK_FIRE_EXTINGUISH, 1f, 1f);
|
||||
world.playEffect(block.getLocation(), Effect.SMOKE, 1);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -320,3 +320,8 @@ Island:
|
||||
Limits:
|
||||
# Should slime split bypass limits.yml
|
||||
AllowSlimeSplit: true
|
||||
Nether:
|
||||
AllowNetherWater: false
|
||||
WaterDisappearWithNetherMobs: false
|
||||
WaterDoNotFlowNearNetherMobs: false
|
||||
BlazeImmuneToWaterInNether: false
|
Loading…
Reference in New Issue
Block a user