1.13 pt. 2

This commit is contained in:
Simplicitee 2018-10-27 16:29:15 -04:00
parent 72c747767e
commit b1ffb6487f
10 changed files with 140 additions and 42 deletions

View file

@ -253,13 +253,13 @@ public class PKListener implements Listener {
final Block toblock = event.getToBlock();
final Block fromblock = event.getBlock();
if (TempBlock.isTempBlock(fromblock)) {
if (TempBlock.isTempBlock(fromblock) || TempBlock.isTempBlock(toblock)) {
event.setCancelled(true);
} else {
if (ElementalAbility.isLava(fromblock)) {
event.setCancelled(!EarthPassive.canFlowFromTo(fromblock, toblock));
} else if (ElementalAbility.isWater(fromblock)) {
event.setCancelled(!WaterBubble.isAir(toblock));
event.setCancelled(WaterBubble.isAir(toblock));
if (!event.isCancelled()) {
event.setCancelled(!WaterManipulation.canFlowFromTo(fromblock, toblock));
}

View file

@ -78,7 +78,7 @@ public abstract class AirAbility extends ElementalAbility {
} else if (particle.equalsIgnoreCase("spell")) {
return ParticleEffect.SPELL;
} else if (particle.equalsIgnoreCase("blacksmoke")) {
return ParticleEffect.SMOKE;
return ParticleEffect.SMOKE_NORMAL;
} else if (particle.equalsIgnoreCase("smoke")) {
return ParticleEffect.CLOUD;
} else if (particle.equalsIgnoreCase("smallsmoke")) {

View file

@ -8,6 +8,8 @@ import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Waterlogged;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
@ -220,11 +222,23 @@ public abstract class ElementalAbility extends CoreAbility {
}
public static boolean isWater(final Block block) {
return block != null ? isWater(block.getType()) : null;
if (block == null) {
return false;
} else if (isWater(block.getType())) {
return true;
} else if (isWater(block.getBlockData())) {
return true;
} else {
return false;
}
}
public static boolean isWater(final BlockData data) {
return (data instanceof Waterlogged) ? ((Waterlogged) data).isWaterlogged() : false;
}
public static boolean isWater(final Material material) {
return material == Material.WATER;
return material == Material.WATER || material == Material.SEAGRASS || material == Material.TALL_SEAGRASS || material == Material.KELP_PLANT;
}
}

View file

@ -774,7 +774,8 @@ public class ConfigManager {
config.addDefault("Abilities.Air.AirShield.Enabled", true);
config.addDefault("Abilities.Air.AirShield.Cooldown", 0);
config.addDefault("Abilities.Air.AirShield.Duration", 0);
config.addDefault("Abilities.Air.AirShield.Radius", 7);
config.addDefault("Abilities.Air.AirShield.MaxRadius", 7);
config.addDefault("Abilities.Air.AirShield.InitialRadius", 1);
config.addDefault("Abilities.Air.AirShield.Streams", 5);
config.addDefault("Abilities.Air.AirShield.Speed", 10);
config.addDefault("Abilities.Air.AirShield.Particles", 5);

View file

@ -6,13 +6,21 @@ import org.bukkit.Particle;
public enum ParticleEffect {
BARRIER (Particle.BARRIER),
/**
* Applicable data: {@link BlockData}
*/
BLOCK_CRACK (Particle.BLOCK_CRACK),
/**
* Applicable data: {@link BlockData}
*/
BLOCK_DUST (Particle.BLOCK_DUST),
BUBBLE_COLUMN_UP (Particle.BUBBLE_COLUMN_UP),
BUBBLE_POP (Particle.BUBBLE_POP),
CLOUD (Particle.CLOUD),
CRIT (Particle.CRIT),
CRIT_MAGIC (Particle.CRIT_MAGIC),
CRIT_MAGIC (Particle.CRIT_MAGIC), @Deprecated MAGIC_CRIT (Particle.CRIT_MAGIC),
CURRENT_DOWN (Particle.CURRENT_DOWN),
DAMAGE_INDICATOR (Particle.DAMAGE_INDICATOR),
DOLPHIN (Particle.DOLPHIN),
@ -21,43 +29,55 @@ public enum ParticleEffect {
DRIP_WATER (Particle.DRIP_WATER),
ENCHANTMENT_TABLE (Particle.ENCHANTMENT_TABLE),
END_ROD (Particle.END_ROD),
EXPLOSION_HUGE (Particle.EXPLOSION_HUGE),
EXPLOSION_LARGE (Particle.EXPLOSION_LARGE),
EXPLOSION_NORMAL (Particle.EXPLOSION_NORMAL),
EXPLOSION_HUGE (Particle.EXPLOSION_HUGE), @Deprecated HUGE_EXPLOSION (Particle.EXPLOSION_HUGE),
EXPLOSION_LARGE (Particle.EXPLOSION_LARGE), @Deprecated LARGE_EXPLODE (Particle.EXPLOSION_LARGE),
EXPLOSION_NORMAL (Particle.EXPLOSION_NORMAL), @Deprecated EXPLODE (Particle.EXPLOSION_NORMAL),
/**
* Applicable data: {@link BlockData}
*/
FALLING_DUST (Particle.FALLING_DUST),
FIREWORKS_SPARK (Particle.FIREWORKS_SPARK),
FLAME (Particle.FLAME),
HEART (Particle.HEART),
/**
* Applicable data: {@link ItemStack}
*/
ITEM_CRACK (Particle.ITEM_CRACK),
LAVA (Particle.LAVA),
MOB_APPEARANCE (Particle.MOB_APPEARANCE),
NAUTILUS (Particle.NAUTILUS),
NOTE (Particle.NOTE),
PORTAL (Particle.PORTAL),
REDSTONE (Particle.REDSTONE),
/**
* Applicable data: {@link DustOptions}
*/
REDSTONE (Particle.REDSTONE), @Deprecated RED_DUST (Particle.REDSTONE),
SLIME (Particle.SLIME),
SMOKE (Particle.SMOKE_NORMAL),
SMOKE_LARGE (Particle.SMOKE_LARGE),
SMOKE_NORMAL (Particle.SMOKE_NORMAL), @Deprecated SMOKE (Particle.SMOKE_NORMAL),
SMOKE_LARGE (Particle.SMOKE_LARGE), @Deprecated LARGE_SMOKE (Particle.SMOKE_LARGE),
SNOW_SHOVEL (Particle.SNOW_SHOVEL),
SNOWBALL (Particle.SNOWBALL),
SNOWBALL (Particle.SNOWBALL), @Deprecated SNOWBALL_PROOF (Particle.SNOWBALL),
SPELL (Particle.SPELL),
SPELL_INSTANT (Particle.SPELL_INSTANT),
SPELL_MOB (Particle.SPELL_MOB),
SPELL_MOB_AMBIENT (Particle.SPELL_MOB_AMBIENT),
SPELL_WITCH (Particle.SPELL_WITCH),
SPELL_INSTANT (Particle.SPELL_INSTANT), @Deprecated INSTANT_SPELL (Particle.SPELL_INSTANT),
SPELL_MOB (Particle.SPELL_MOB), @Deprecated MOB_SPELL (Particle.SPELL_MOB),
SPELL_MOB_AMBIENT (Particle.SPELL_MOB_AMBIENT), @Deprecated MOB_SPELL_AMBIENT (Particle.SPELL_MOB_AMBIENT),
SPELL_WITCH (Particle.SPELL_WITCH), @Deprecated WITCH_SPELL (Particle.SPELL_WITCH),
SPIT (Particle.SPIT),
SQUID_INK (Particle.SQUID_INK),
SUSPENDED (Particle.SUSPENDED),
SUSPENDED_DEPTH (Particle.SUSPENDED_DEPTH),
SUSPENDED (Particle.SUSPENDED), @Deprecated SUSPEND (Particle.SUSPENDED),
SUSPENDED_DEPTH (Particle.SUSPENDED_DEPTH), @Deprecated DEPTH_SUSPEND (Particle.SUSPENDED_DEPTH),
SWEEP_ATTACK (Particle.SWEEP_ATTACK),
TOTEM (Particle.TOTEM),
TOWN_AURA (Particle.TOWN_AURA),
VILLAGER_ANGRY (Particle.VILLAGER_ANGRY),
VILLAGER_HAPPY (Particle.VILLAGER_HAPPY),
WATER_BUBBLE (Particle.WATER_BUBBLE),
VILLAGER_ANGRY (Particle.VILLAGER_ANGRY), @Deprecated ANGRY_VILLAGER (Particle.VILLAGER_ANGRY),
VILLAGER_HAPPY (Particle.VILLAGER_HAPPY), @Deprecated HAPPY_VILLAGER (Particle.VILLAGER_HAPPY),
WATER_BUBBLE (Particle.WATER_BUBBLE), @Deprecated BUBBLE (Particle.WATER_BUBBLE),
WATER_DROP (Particle.WATER_DROP),
WATER_SPLASH (Particle.WATER_SPLASH),
WATER_WAKE (Particle.WATER_WAKE);
WATER_SPLASH (Particle.WATER_SPLASH), @Deprecated SPLASH (Particle.WATER_SPLASH),
WATER_WAKE (Particle.WATER_WAKE), @Deprecated WAKE (Particle.WATER_WAKE);
Particle particle;
Class<?> dataClass;
@ -71,23 +91,68 @@ public enum ParticleEffect {
return particle;
}
/**
* Displays the particle at the specified location without offsets
* @param loc Location to display the particle at
* @param amount how many of the particle to display
*/
public void display(Location loc, int amount) {
display(loc, amount, 0, 0, 0);
}
/**
* Displays the particle at the specified location with no extra data
* @param loc Location to spawn the particle
* @param amount how many of the particle to spawn
* @param offsetX random offset on the x axis
* @param offsetY random offset on the y axis
* @param offsetZ random offset on the z axis
*/
public void display(Location loc, int amount, double offsetX, double offsetY, double offsetZ) {
display(loc, amount, offsetX, offsetY, offsetZ, 0);
}
public void display(Location loc, int amount, double offsetX, double offsetY, double offsetZ, double speed) {
loc.getWorld().spawnParticle(particle, loc, amount, offsetX, offsetY, offsetZ, speed);
/**
* Displays the particle at the specified location with extra data
* @param loc Location to spawn the particle
* @param amount how many of the particle to spawn
* @param offsetX random offset on the x axis
* @param offsetY random offset on the y axis
* @param offsetZ random offset on the z axis
* @param extra extra data to affect the particle, usually affects speed or does nothing
*/
public void display(Location loc, int amount, double offsetX, double offsetY, double offsetZ, double extra) {
loc.getWorld().spawnParticle(particle, loc, amount, offsetX, offsetY, offsetZ, extra);
}
/**
* Displays the particle at the specified location with data
* @param loc Location to spawn the particle
* @param amount how many of the particle to spawn
* @param offsetX random offset on the x axis
* @param offsetY random offset on the y axis
* @param offsetZ random offset on the z axis
* @param data data to display the particle with, only applicable on several particle types (check the enum)
*/
public void display(Location loc, int amount, double offsetX, double offsetY, double offsetZ, Object data) {
display(loc, amount, offsetX, offsetY, offsetZ, 0, data);
}
public void display(Location loc, int amount, double offsetX, double offsetY, double offsetZ, double speed, Object data) {
if (dataClass.isAssignableFrom(Void.class) || !dataClass.isAssignableFrom(data.getClass()) || data == null) {
display(loc, amount, offsetX, offsetY, offsetZ);
/**
* Displays the particle at the specified location with regular and extra data
* @param loc Location to spawn the particle
* @param amount how many of the particle to spawn
* @param offsetX random offset on the x axis
* @param offsetY random offset on the y axis
* @param offsetZ random offset on the z axis
* @param extra extra data to affect the particle, usually affects speed or does nothing
* @param data data to display the particle with, only applicable on several particle types (check the enum)
*/
public void display(Location loc, int amount, double offsetX, double offsetY, double offsetZ, double extra, Object data) {
if (dataClass.isAssignableFrom(Void.class) || data == null || !dataClass.isAssignableFrom(data.getClass())) {
display(loc, amount, offsetX, offsetY, offsetZ, extra);
} else {
loc.getWorld().spawnParticle(particle, loc, amount, offsetX, offsetY, offsetZ, speed, data);
loc.getWorld().spawnParticle(particle, loc, amount, offsetX, offsetY, offsetZ, extra, data);
}
}
}

View file

@ -23,6 +23,7 @@ import com.projectkorra.projectkorra.avatar.AvatarState;
import com.projectkorra.projectkorra.firebending.FireBlast;
import com.projectkorra.projectkorra.util.BlockSource;
import com.projectkorra.projectkorra.util.ClickType;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock;
import com.projectkorra.projectkorra.util.TempBlock.RevertTask;
import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth;
@ -261,7 +262,7 @@ public class SurgeWave extends WaterAbility {
this.remove();
return;
} else if (!this.progressing) {
this.sourceBlock.getWorld().playEffect(this.location, Effect.SMOKE, 4, (int) this.range);
ParticleEffect.SMOKE_NORMAL.display(sourceBlock.getLocation().add(0.5, 0.5, 0.5), 4);
return;
}

View file

@ -11,6 +11,7 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.Waterlogged;
import org.bukkit.entity.Player;
import com.projectkorra.projectkorra.ability.CoreAbility;
@ -122,13 +123,19 @@ public class WaterBubble extends WaterAbility {
final Block b = this.location.add(x, y, z).getBlock();
if (!this.waterOrigins.containsKey(b)) {
if (b.getType() == Material.WATER) {
if (isWater(b)) {
if (!TempBlock.isTempBlock(b)) {
this.waterOrigins.put(b, b.getState());
}
if (b.getBlockData() instanceof Waterlogged) {
Waterlogged logged = (Waterlogged) b.getBlockData();
logged.setWaterlogged(false);
b.setBlockData(logged);
} else if (isWater(b.getType())) {
b.setType(Material.AIR);
}
}
}
}
list.add(b); // Store it to say that it should be there.
this.location.subtract(x, y, z);
}
@ -142,7 +149,11 @@ public class WaterBubble extends WaterAbility {
set.removeAll(list);
for (final Block b : set) {
if (b.getType() == Material.AIR) {
if (b.getBlockData() instanceof Waterlogged) {
Waterlogged logged = (Waterlogged) b.getBlockData();
logged.setWaterlogged(true);
b.setBlockData(logged);
} else if (b.getType() == Material.AIR) {
b.setType(this.waterOrigins.get(b).getType());
b.setBlockData(this.waterOrigins.get(b).getBlockData());
}
@ -178,11 +189,17 @@ public class WaterBubble extends WaterAbility {
super.remove();
for (final Block b : this.waterOrigins.keySet()) {
if (b.getType() == Material.AIR) {
if (b.getBlockData() instanceof Waterlogged) {
Waterlogged logged = (Waterlogged) b.getBlockData();
logged.setWaterlogged(true);
b.setBlockData(logged);
} else if (b.getType() == Material.AIR) {
b.setType(this.waterOrigins.get(b).getType());
b.setBlockData(this.waterOrigins.get(b).getBlockData());
}
}
this.waterOrigins.clear();
}
/**
@ -195,10 +212,10 @@ public class WaterBubble extends WaterAbility {
public static boolean isAir(final Block block) {
for (final WaterBubble bubble : CoreAbility.getAbilities(WaterBubble.class)) {
if (bubble.waterOrigins.containsKey(block)) {
return false;
}
}
return true;
}
}
return false;
}
}

View file

@ -6,7 +6,6 @@ import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -209,7 +208,7 @@ public class WaterManipulation extends WaterAbility {
this.remove();
return;
}
this.sourceBlock.getWorld().playEffect(this.location, Effect.SMOKE, 4, (int) this.selectRange);
ParticleEffect.SMOKE_NORMAL.display(sourceBlock.getLocation().clone().add(0.5, 0.5, 0.5), 4, 0, 0, 0);
return;
}

View file

@ -1,5 +1,6 @@
name: ProjectKorra
author: ProjectKorra
api-version: 1.13
version: ${project.version}
main: com.projectkorra.projectkorra.ProjectKorra
softdepend: [PreciousStones, WorldGuard, WorldEdit, Factions, MassiveCore, GriefPrevention, Towny, NoCheatPlus, LWC, Residence, Kingdoms]