mirror of
https://github.com/TotalFreedomMC/TF-ProjectKorra.git
synced 2025-02-11 11:40:40 +00:00
1.13 pt. 2
This commit is contained in:
parent
72c747767e
commit
b1ffb6487f
10 changed files with 140 additions and 42 deletions
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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")) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in a new issue