Lightning Merge Conflict

This commit is contained in:
nathank33 2015-02-15 22:43:40 -08:00
commit 6d3a48b189
30 changed files with 996 additions and 481 deletions

View file

@ -2,16 +2,22 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/BukkitForPlugins1.8.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/KorraRPG.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/Factions.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/MassiveCore.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/NoCheatPlus.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/Towny.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/WorldEdit.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/WorldGuard.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/GriefPrevention.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/PreciousStones.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/LWC.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/bukkit-1.8-R0.1-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/CombatTag.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/Factions.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/GriefPrevention.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/LogBlock.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/LWC.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/MassiveCore.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/NoCheatPlus.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/PreciousStones.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/ProjectKorraRPG.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/spigot_server.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/TagAPI.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/Towny.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/Vault.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/WGRegionEvents.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/worldedit-bukkit-6.0.jar"/>
<classpathentry kind="lib" path="C:/Users/NathanLaptop/Desktop/Minecraft 1.8/KorraDependables/worldguard-6.0.0-SNAPSHOT.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

8
.gitignore vendored
View file

@ -37,4 +37,10 @@ Icon
.Spotlight-V100
.Trashes
bin/
bin/
*.classpath
.idea/.name
*.xml
*.class
*.class
ProjectKorra.iml

Binary file not shown.

View file

@ -0,0 +1,156 @@
name: ProjectKorra
author: ProjectKorra
version: 1.6.0 BETA 14
main: com.projectkorra.ProjectKorra.ProjectKorra
softdepend: [PreciousStones, WorldGuard, WorldEdit, Factions, MassiveCore, GriefPrevention, Towny, NoCheatPlus, LWC]
commands:
projectkorra:
aliases: [b,bending,mtla,tla,korra,pk,bend]
usage: /<command>
permissions:
bending.admin:
default: op
description: Grants access to all commands and abilities.
children:
bending.player: true
bending.command.reload: true
bending.admin.permaremove: true
bending.command.avatar: true
bending.command.add.others: true
bending.command.add: true
bending.command.rechoose: true
bending.admin.choose: true
bending.ability.AvatarState: true
bending.ability.Bloodbending: true
bending.ability.Flight: true
bending.command.import: true
bending.command.toggle.all: true
bending.command.give: true
bending.command.invincible: true
bending.admin.debug: true
bending.admin.remove: true
bending.player:
default: true
description: Grants access to most abilities and basic commands.
children:
bending.command.bind: true
bending.command.display: true
bending.command.toggle: true
bending.command.choose: true
bending.command.version: true
bending.command.help: true
bending.command.clear: true
bending.command.who: true
bending.command.preset.list: true
bending.command.preset.create.2: true
bending.command.preset.create: true
bending.command.preset.bind: true
bending.command.preset.delete: true
bending.air: true
bending.water: true
bending.earth: true
bending.fire: true
bending.chi: true
bending.air:
default: true
description: Grants access to all airbending abilities.
children:
bending.ability.AirBlast: true
bending.ability.AirBubble: true
bending.ability.AirBurst: true
bending.ability.AirScooter: true
bending.ability.AirShield: true
bending.ability.AirSpout: true
bending.ability.AirSuction: true
bending.ability.AirSwipe: true
bending.ability.Suffocate: true
bending.ability.Tornado: true
bending.ability.AirCombo: true
bending.air.passive: true
bending.air.flight: true
bending.water:
default: true
description: Grants access to most waterbending abilities.
children:
bending.ability.HealingWaters: true
bending.ability.IceBlast: true
bending.ability.IceSpike: true
bending.ability.OctopusForm: true
bending.ability.PhaseChange: true
bending.ability.Surge: true
bending.ability.Torrent: true
bending.ability.WaterBubble: true
bending.ability.WaterManipulation: true
bending.ability.WaterSpout: true
bending.ability.WaterSpout.Wave: true
bending.ability.WaterCombo: true
bending.water.plantbending: true
bending.message.nightmessage: true
bending.water.passive: true
bending.water.icebending: true
bending.water.healing: true
bending.earth:
default: true
description: Grants access to all Earthbending abilities.
children:
bending.ability.Catapult: true
bending.ability.Collapse: true
bending.ability.EarthArmor: true
bending.ability.EarthBlast: true
bending.ability.EarthGrab: true
bending.ability.EarthTunnel: true
bending.ability.RaiseEarth: true
bending.ability.Shockwave: true
bending.ability.Tremorsense: true
bending.ability.Extraction: true
bending.ability.MetalClips: true
bending.ability.MetalClips.loot: false
bending.ability.MetalClips.4clips: false
bending.earth.passive: true
bending.earth.metalbending: true
bending.earth.lavabending: true
bending.earth.sandbending: true
bending.earth.grapplinghook: true
bending.ability.LavaSurge: true
bending.ability.LavaFlow: true
bending.ability.EarthSmash: true
bending.fire:
default: true
description: Grants access to all firebending abilities.
children:
bending.ability.Blaze: true
bending.ability.FireBlast: true
bending.ability.FireBurst: true
bending.ability.FireJet: true
bending.ability.FireShield: true
bending.ability.HeatControl: true
bending.ability.Illumination: true
bending.ability.Lightning: true
bending.ability.WallOfFire: true
bending.ability.Combustion: true
bending.ability.FireCombo: true
bending.message.daymessage: true
bending.fire.passive: true
bending.fire.lightningbending: true
bending.fire.combustionbending: true
bending.chi:
default: true
description: Grants access to all ChiBlocking abilities.
children:
bending.ability.HighJump: true
bending.ability.Paralyze: true
bending.ability.RapidPunch: true
bending.ability.Smokescreen: true
bending.ability.WarriorStance: true
bending.ability.AcrobatStance: true
bending.ability.QuickStrike: true
bending.ability.SwiftKick: true
bending.ability.ChiCombo: true
bending.chi.passive: true
bending.chi.grapplinghook: true
bending.avatar:
default: false
description: Grants the Avatar Color.
bending.ability.MetalClips.loot:
default: false
description: Lets a Metalbender loot a player's inventory of its iron.

View file

@ -207,74 +207,89 @@ public class AbilityModuleManager {
}
}
for (AbilityModule ab: ability) {
//To check if EarthBlast == Earthblast or for example, EarthBlast == EARTHBLAST
boolean succes = true;
for(String enabledAbility : abilities){
if(enabledAbility.equalsIgnoreCase(ab.getName())){
succes = false;
}
}
if (!succes)
continue;
ab.onThisLoad();
abilities.add(ab.getName());
for (StockAbilities a: StockAbilities.values()) {
if (a.name().equalsIgnoreCase(ab.getName())){
disabledStockAbilities.add(a.name());
}
}
if (ab.getElement() == Element.Air.toString()) airbendingabilities.add(ab.getName());
if (ab.getElement() == Element.Water.toString()) waterbendingabilities.add(ab.getName());
if (ab.getElement() == Element.Earth.toString()) earthbendingabilities.add(ab.getName());
if (ab.getElement() == Element.Fire.toString()) firebendingabilities.add(ab.getName());
if (ab.getElement() == Element.Chi.toString()) chiabilities.add(ab.getName());
if (ab.isShiftAbility()) shiftabilities.add(ab.getName());
if (ab.isHarmlessAbility()) harmlessabilities.add(ab.getName());
if (ab.getSubElement() != null)
{
subabilities.add(ab.getName());
switch(ab.getSubElement())
{
case Bloodbending:
bloodabilities.add(ab.getName());
break;
case Combustion:
combustionabilities.add(ab.getName());
break;
case Flight:
flightabilities.add(ab.getName());
break;
case Healing:
healingabilities.add(ab.getName());
break;
case Icebending:
iceabilities.add(ab.getName());
break;
case Lavabending:
lavaabilities.add(ab.getName());
break;
case Lightning:
lightningabilities.add(ab.getName());
break;
case Metalbending:
metalabilities.add(ab.getName());
break;
case Plantbending:
plantabilities.add(ab.getName());
break;
case Sandbending:
sandabilities.add(ab.getName());
break;
case SpiritualProjection:
spiritualprojectionabilities.add(ab.getName());
break;
try {
//To check if EarthBlast == Earthblast or for example, EarthBlast == EARTHBLAST
boolean succes = true;
for(String enabledAbility : abilities){
if(enabledAbility.equalsIgnoreCase(ab.getName())){
succes = false;
}
}
if (!succes)
continue;
ab.onThisLoad();
abilities.add(ab.getName());
for (StockAbilities a: StockAbilities.values()) {
if (a.name().equalsIgnoreCase(ab.getName())){
disabledStockAbilities.add(a.name());
}
}
if (ab.getElement() == Element.Air.toString()) airbendingabilities.add(ab.getName());
if (ab.getElement() == Element.Water.toString()) waterbendingabilities.add(ab.getName());
if (ab.getElement() == Element.Earth.toString()) earthbendingabilities.add(ab.getName());
if (ab.getElement() == Element.Fire.toString()) firebendingabilities.add(ab.getName());
if (ab.getElement() == Element.Chi.toString()) chiabilities.add(ab.getName());
if (ab.isShiftAbility()) shiftabilities.add(ab.getName());
if (ab.isHarmlessAbility()) harmlessabilities.add(ab.getName());
if (ab.getSubElement() != null)
{
subabilities.add(ab.getName());
switch(ab.getSubElement())
{
case Bloodbending:
bloodabilities.add(ab.getName());
break;
case Combustion:
combustionabilities.add(ab.getName());
break;
case Flight:
flightabilities.add(ab.getName());
break;
case Healing:
healingabilities.add(ab.getName());
break;
case Icebending:
iceabilities.add(ab.getName());
break;
case Lavabending:
lavaabilities.add(ab.getName());
break;
case Lightning:
lightningabilities.add(ab.getName());
break;
case Metalbending:
metalabilities.add(ab.getName());
break;
case Plantbending:
plantabilities.add(ab.getName());
break;
case Sandbending:
sandabilities.add(ab.getName());
break;
case SpiritualProjection:
spiritualprojectionabilities.add(ab.getName());
break;
}
}
// if (ab.isMetalbendingAbility()) metalbendingabilities.add(ab.getName());
descriptions.put(ab.getName(), ab.getDescription());
authors.put(ab.getName(), ab.getAuthor());
} catch (AbstractMethodError e) { //If triggered means ability was made pre 1.6 BETA 8
ProjectKorra.log.warning("The ability " + ab.getName() + " is either broken or outdated. Please remove it!");
//e.printStackTrace();
ab.stop();
abilities.remove(ab.getName());
final AbilityModule skill = ab;
//Bellow to avoid ConcurrentModificationException
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
ability.remove(skill);
}
}, 10);
continue;
}
// if (ab.isMetalbendingAbility()) metalbendingabilities.add(ab.getName());
descriptions.put(ab.getName(), ab.getDescription());
authors.put(ab.getName(), ab.getAuthor());
}
Collections.sort(airbendingabilities);

View file

@ -0,0 +1,127 @@
package com.projectkorra.ProjectKorra.Ability.Combo;
import com.projectkorra.ProjectKorra.ComboManager;
import com.projectkorra.ProjectKorra.SubElement;
import com.projectkorra.ProjectKorra.Utilities.AbilityLoadable;
import org.bukkit.entity.Player;
import java.util.ArrayList;
/**
* Created by Carbogen on 2/7/2015.
*/
public abstract class ComboAbilityModule extends AbilityLoadable implements Cloneable
{
/**
* AbilityModule Constructor.
*
* @param name The name of the ability.
*/
public ComboAbilityModule(final String name)
{
super(name);
// TODO Auto-generated constructor stub
}
/**
* Called when the ability is loaded by PK. This is where the developer registers Listeners and Permissions.
*/
public abstract void onThisLoad();
// Must be overridden
/**
* Accessor Method to get the version of the ability.
*
* @return The version of the ability as a String.
*/
public abstract String getVersion();
/**
* Accessor Method to get the Element of the ability.
* It is recommended to use the Element ENUM to get the returned String.
* This can be an empty String, in which case the ability will not belong to any element (such as AvatarState).
*
* @return The Element the ability belongs to.
*/
public abstract String getElement();
/**
* Accessor Method to get the name of the author.
*
* @return The name of the author.
*/
public abstract String getAuthor();
/**
* Accessor Method to get the description of the ability.
* This String is sent to any player who runs /pk display ability.
*
* @return The Description of the ability.
*/
public abstract String getDescription();
/**
* Accessor Method to get the instructions for using this combo.
*
* @return The steps for the combo.
*/
public abstract String getInstructions();
/**
* Creates a new instance of the combo from a specific player.
* ProjectKorra's ComboModuleManager will use this method once the combo steps have been used by the player.
*
* @return A new instance of the ability.
* @param player The player using the combo.
*/
public abstract Object createNewComboInstance(Player player);
/**
* Returns the list of abilities which constitute the combo.
*
* @return An ArrayList containing the combo's steps.
*/
public abstract ArrayList<ComboManager.AbilityInformation> getCombination();
/**
* Void Method called whenever ProjectKorra stops and the ability is unloaded.
*
*/
public void stop()
{
}
/**
* Accessor Method to get which SubElement the ability belongs to.
* If isSubAbility() returns true, the developer absolutely must implement this as well.
*
* List of sub-elements:
*
* Water:
* Icebending.
* Bloodbending.
* Plantbending.
* Healing.
*
* Earth:
* Sandbending.
* Metalbending.
* Lavabending.
*
* Fire:
* Combustion.
* Lightning.
*
* Air:
* Flight.
* SpiritualProjection.
*
* @return The SubElement the ability belongs to.
*/
public SubElement getSubElement()
{
return null;
}
}

View file

@ -0,0 +1,41 @@
package com.projectkorra.ProjectKorra.Ability.Combo;
import com.projectkorra.ProjectKorra.ComboManager;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Utilities.AbilityLoader;
import java.io.File;
import java.util.List;
public class ComboModuleManager
{
private final AbilityLoader<ComboAbilityModule> loader;
public static List<ComboAbilityModule> combo;
public ComboModuleManager()
{
final File path = new File(ProjectKorra.plugin.getDataFolder().toString() + "/Combos/");
if (!path.exists())
{
path.mkdir();
}
loader = new AbilityLoader<ComboAbilityModule>(ProjectKorra.plugin, path, new Object[] {});
combo = loader.load(ComboAbilityModule.class);
loadComboModules();
}
private void loadComboModules()
{
for(ComboAbilityModule cm : combo)
{
cm.onThisLoad();
ComboManager.comboAbilityList.add(new ComboManager.ComboAbility(cm.getName(), cm.getCombination(), cm));
ComboManager.descriptions.put(cm.getName(), cm.getDescription());
ComboManager.instructions.put(cm.getName(), cm.getInstructions());
ComboManager.authors.put(cm.getName(), cm.getAuthor());
}
}
}

View file

@ -1,16 +1,16 @@
package com.projectkorra.ProjectKorra;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Objects.HorizontalVelocityTracker;
import com.projectkorra.ProjectKorra.chiblocking.ChiComboManager;
import com.projectkorra.ProjectKorra.chiblocking.RapidPunch;
import com.projectkorra.rpg.RPGMethods;
import com.projectkorra.rpg.WorldEvents;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.HashMap;
public class BendingManager implements Runnable {
@ -49,6 +49,7 @@ public class BendingManager implements Runnable {
RapidPunch.startPunchAll();
RevertChecker.revertAirBlocks();
ChiComboManager.handleParalysis();
HorizontalVelocityTracker.updateAll();
handleCooldowns();
} catch (Exception e) {
Methods.stopBending();

View file

@ -1,15 +1,16 @@
package com.projectkorra.ProjectKorra;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import com.projectkorra.ProjectKorra.Ability.Combo.ComboAbilityModule;
import com.projectkorra.ProjectKorra.airbending.AirCombo;
import com.projectkorra.ProjectKorra.firebending.FireCombo;
import com.projectkorra.ProjectKorra.waterbending.WaterCombo;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
public class ComboManager
{
@ -19,6 +20,9 @@ public class ComboManager
private static final long CLEANUP_DELAY = 10000;
public static ConcurrentHashMap<String, ArrayList<AbilityInformation>> recentlyUsedAbilities = new ConcurrentHashMap<String, ArrayList<AbilityInformation>>();
public static ArrayList<ComboAbility> comboAbilityList = new ArrayList<ComboAbility>();
public static HashMap<String, String> descriptions = new HashMap<String, String>();
public static HashMap<String, String> instructions = new HashMap<String, String>();
public static HashMap<String, String> authors = new HashMap<String, String>();
public ComboManager()
{
@ -120,24 +124,38 @@ public class ComboManager
public static void addComboAbility(Player player, ClickType type)
{
String abilityName = Methods.getBoundAbility(player);
if(abilityName == null)
if (abilityName == null)
return;
AbilityInformation info = new AbilityInformation(abilityName,type,System.currentTimeMillis());
addRecentAbility(player,info);
AbilityInformation info = new AbilityInformation(abilityName, type, System.currentTimeMillis());
addRecentAbility(player, info);
ComboAbility comboAbil = checkForValidCombo(player);
if(comboAbil == null)
if (comboAbil == null)
return;
if(comboAbil.getComboType().equals(FireCombo.class))
if (comboAbil.getComboType().equals(FireCombo.class))
new FireCombo(player, comboAbil.getName());
else if(comboAbil.getComboType().equals(AirCombo.class))
else if (comboAbil.getComboType().equals(AirCombo.class))
new AirCombo(player, comboAbil.getName());
else if(comboAbil.getComboType().equals(WaterCombo.class))
else if (comboAbil.getComboType().equals(WaterCombo.class))
new WaterCombo(player, comboAbil.getName());
else
{
for (ComboAbility ca : comboAbilityList)
{
if (comboAbil.getName().equals(ca.getName()))
{
if (ca.getComboType() instanceof ComboAbilityModule)
{
((ComboAbilityModule) ca.getComboType()).createNewComboInstance(player);
return;
}
}
}
}
}
public static class AbilityInformation
{
private String abilityName;

View file

@ -1,17 +1,12 @@
package com.projectkorra.ProjectKorra;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
import com.projectkorra.ProjectKorra.Ability.Combo.ComboAbilityModule;
import com.projectkorra.ProjectKorra.Ability.Combo.ComboModuleManager;
import com.projectkorra.ProjectKorra.Ability.StockAbilities;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.GrapplingHookAPI;
import com.projectkorra.rpg.RPGMethods;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
@ -24,11 +19,10 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
import com.projectkorra.ProjectKorra.Ability.StockAbilities;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.GrapplingHookAPI;
import com.projectkorra.rpg.RPGMethods;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
public class Commands {
@ -851,7 +845,10 @@ public class Commands {
s.sendMessage(Methods.getSubBendingColor(Element.Water) + " Can Plantbend");
}
if (Methods.canBloodbend(p)) {
s.sendMessage(Methods.getSubBendingColor(Element.Water) + " Can Bloodbend");
if(Methods.canBloodbendAtAnytime(p))
s.sendMessage(Methods.getSubBendingColor(Element.Water) + " Can Bloodbend anytime, on any day");
else
s.sendMessage(Methods.getSubBendingColor(Element.Water) + " Can Bloodbend");
}
if (Methods.canIcebend(p)) {
s.sendMessage(Methods.getSubBendingColor(Element.Water) + " Can Icebend");
@ -1453,6 +1450,18 @@ public class Commands {
s.sendMessage(ChatColor.GOLD + "FireJet (Tap Shift) > FireJet (Tap Shift) > FireShield (Tap Shift) > FireJet. ");
s.sendMessage(Methods.getFireColor() + "JetBlaze" + ChatColor.WHITE + ": Damages and burns all enemies in the proximity of your FireJet.");
s.sendMessage(ChatColor.GOLD + "FireJet (Tap Shift) > FireJet (Tap Shift) > Blaze (Tap Shift) > FireJet. ");
for(ComboAbilityModule cam : ComboModuleManager.combo)
{
if(cam.getElement().equals(Element.Fire.toString()))
{
ChatColor color = Methods.getAvatarColor();
if(cam.getSubElement() == null)
color = Methods.getFireColor();
else color = Methods.getSubBendingColor(Element.Fire);
s.sendMessage(color + cam.getName() + ChatColor.WHITE + ": " + cam.getDescription());
s.sendMessage(ChatColor.GOLD + cam.getInstructions());
}
}
}
if (args[1].equalsIgnoreCase("AirCombo")) {
s.sendMessage(ChatColor.GOLD + "AirCombo:");
@ -1462,19 +1471,70 @@ public class Commands {
s.sendMessage(ChatColor.GOLD + "AirShield (Hold Shift) > AirSuction (Left Click) > AirBlast (Left Click)");
s.sendMessage(Methods.getAirColor() + "AirSweep" + ChatColor.WHITE + ": Sweep the air in front of you hitting multiple enemies, causing moderate damage and a large knockback. The radius and direction of AirSweep is controlled by moving your mouse in a sweeping motion. For example, if you want to AirSweep upward, then move your mouse upward right after you left click AirBurst");
s.sendMessage(ChatColor.GOLD + "AirSwipe (Left Click) > AirSwipe (Left Click) > AirBurst (Hold Shift) > AirBurst (Left Click)");
for(ComboAbilityModule cam : ComboModuleManager.combo)
{
if(cam.getElement().equals(Element.Air.toString()))
{
ChatColor color = Methods.getAvatarColor();
if(cam.getSubElement() == null)
color = Methods.getAirColor();
else color = Methods.getSubBendingColor(Element.valueOf(cam.getElement()));
s.sendMessage(color + cam.getName() + ChatColor.WHITE + ": " + cam.getDescription());
s.sendMessage(ChatColor.GOLD + cam.getInstructions());
}
}
}
if (args[1].equalsIgnoreCase("WaterCombo")) {
s.sendMessage(ChatColor.GOLD + "WaterCombos:");
s.sendMessage(Methods.getAirColor() + "IceWave" + ChatColor.WHITE + ": PhaseChange your WaterWave into an IceWave that freezes and damages enemies.");
s.sendMessage(Methods.getWaterColor() + "IceWave" + ChatColor.WHITE + ": PhaseChange your WaterWave into an IceWave that freezes and damages enemies.");
s.sendMessage(ChatColor.GOLD + "Create a WaterSpout Wave > PhaseChange (Left Click)");
s.sendMessage(Methods.getAirColor() + "IceBullet" + ChatColor.WHITE + ": Using a large cavern of ice, you can punch ice shards at your opponent causing moderate damage. To rapid fire, you must alternate between Left clicking and right clicking with IceBlast.");
s.sendMessage(Methods.getWaterColor() + "IceBullet" + ChatColor.WHITE + ": Using a large cavern of ice, you can punch ice shards at your opponent causing moderate damage. To rapid fire, you must alternate between Left clicking and right clicking with IceBlast.");
s.sendMessage(ChatColor.GOLD + "WaterBubble (Tap Shift) > IceBlast (Hold Shift) > IceBlast (Left Click) > Wait for ice to Form > Then alternate between Left and Right click with IceBlast");
for(ComboAbilityModule cam : ComboModuleManager.combo)
{
if(cam.getElement().equals(Element.Water.toString()))
{
ChatColor color = Methods.getAvatarColor();
if(cam.getSubElement() == null)
color = Methods.getWaterColor();
else color = Methods.getSubBendingColor(Element.valueOf(cam.getElement()));
s.sendMessage(color + cam.getName() + ChatColor.WHITE + ": " + cam.getDescription());
s.sendMessage(ChatColor.GOLD + cam.getInstructions());
}
}
}
if (args[1].equalsIgnoreCase("EarthCombo")) {
s.sendMessage(ChatColor.GOLD + "EarthCombos:");
for(ComboAbilityModule cam : ComboModuleManager.combo)
{
if(cam.getElement().equals(Element.Earth.toString()))
{
ChatColor color = Methods.getAvatarColor();
if(cam.getSubElement() == null)
color = Methods.getEarthColor();
else color = Methods.getSubBendingColor(Element.valueOf(cam.getElement()));
s.sendMessage(color + cam.getName() + ChatColor.WHITE + ": " + cam.getDescription());
s.sendMessage(ChatColor.GOLD + cam.getInstructions());
}
}
}
if (args[1].equalsIgnoreCase("ChiCombo"))
{
s.sendMessage(ChatColor.GOLD + "ChiCombos:");
s.sendMessage(Methods.getChiColor() + "Immobilize" + ChatColor.WHITE + ": Deliver a series of strikes to an enemy to temporarely immobilize them.");
s.sendMessage(ChatColor.GOLD + "QuickStrike > SwiftKick > QuickStrike > QuickStrike");
for(ComboAbilityModule cam : ComboModuleManager.combo)
{
if(cam.getElement().equals(Element.Chi.toString()))
{
ChatColor color = Methods.getAvatarColor();
if(cam.getSubElement() == null)
color = Methods.getChiColor();
else color = Methods.getSubBendingColor(Element.valueOf(cam.getElement()));
s.sendMessage(color + cam.getName() + ChatColor.WHITE + ": " + cam.getDescription());
s.sendMessage(ChatColor.GOLD + cam.getInstructions());
}
}
}
if (Methods.abilityExists(args[1])) {
String ability = Methods.getAbility(args[1]);

View file

@ -1,9 +1,9 @@
package com.projectkorra.ProjectKorra;
import java.util.ArrayList;
import org.bukkit.configuration.file.FileConfiguration;
import java.util.ArrayList;
public class ConfigManager {
static ProjectKorra plugin;
@ -66,6 +66,9 @@ public class ConfigManager {
config.addDefault("Properties.GlobalCooldown", 500);
config.addDefault("Properties.SeaLevel", 62);
config.addDefault("Properties.HorizontalCollisionPhysics.Enabled", true);
config.addDefault("Properties.HorizontalCollisionPhysics.WallDamageMinimumDistance", 5.0);
config.addDefault("Properties.CustomItems.GrapplingHook.Enable", true);
config.addDefault("Properties.CustomItems.GrapplingHook.IronUses", 25);
config.addDefault("Properties.CustomItems.GrapplingHook.GoldUses", 50);
@ -377,6 +380,7 @@ public class ConfigManager {
config.addDefault("Abilities.Water.WaterSpout.Enabled", true);
config.addDefault("Abilities.Water.WaterSpout.Description", "This ability provides a Waterbender with a means of transportation. To use, simply left click while in or over water to spout water up beneath you, experiencing controlled levitation. Left clicking again while the spout is active will cause it to disappear. Alternatively, tapping a Waterbendable block while not in Water will select a water block as a source, from there, you can tap sneak (Default:Shift) to channel the Water around you. Releasing the sneak will create a wave allowing you a quick burst of controlled transportation. While riding the wave you may press sneak to cause the wave to disappear.");
config.addDefault("Abilities.Water.WaterSpout.Height", 20);
config.addDefault("Abilities.Water.WaterSpout.Wave.Particles", false);
config.addDefault("Abilities.Water.WaterSpout.Wave.Enabled", true);
config.addDefault("Abilities.Water.WaterSpout.Wave.Range", 6);
config.addDefault("Abilities.Water.WaterSpout.Wave.ChargeTime", 1000);

View file

@ -1,65 +1,5 @@
package com.projectkorra.ProjectKorra;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import me.ryanhamshire.GriefPrevention.GriefPrevention;
import net.sacredlabyrinth.Phaed.PreciousStones.FieldFlag;
import net.sacredlabyrinth.Phaed.PreciousStones.PreciousStones;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.FallingSand;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.griefcraft.lwc.LWC;
import com.griefcraft.lwc.LWCPlugin;
@ -69,80 +9,59 @@ import com.massivecraft.massivecore.ps.PS;
import com.palmergames.bukkit.towny.Towny;
import com.palmergames.bukkit.towny.TownyMessaging;
import com.palmergames.bukkit.towny.TownySettings;
import com.palmergames.bukkit.towny.object.Coord;
import com.palmergames.bukkit.towny.object.PlayerCache;
import com.palmergames.bukkit.towny.object.*;
import com.palmergames.bukkit.towny.object.PlayerCache.TownBlockStatus;
import com.palmergames.bukkit.towny.object.TownyPermission;
import com.palmergames.bukkit.towny.object.TownyUniverse;
import com.palmergames.bukkit.towny.object.TownyWorld;
import com.palmergames.bukkit.towny.object.WorldCoord;
import com.palmergames.bukkit.towny.utils.PlayerCacheUtil;
import com.palmergames.bukkit.towny.war.flagwar.TownyWar;
import com.palmergames.bukkit.towny.war.flagwar.TownyWarConfig;
import com.projectkorra.ProjectKorra.Ability.AbilityModule;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Ability.Combo.ComboAbilityModule;
import com.projectkorra.ProjectKorra.Ability.Combo.ComboModuleManager;
import com.projectkorra.ProjectKorra.Ability.StockAbilities;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import com.projectkorra.ProjectKorra.airbending.AirBlast;
import com.projectkorra.ProjectKorra.airbending.AirBubble;
import com.projectkorra.ProjectKorra.airbending.AirBurst;
import com.projectkorra.ProjectKorra.airbending.AirCombo;
import com.projectkorra.ProjectKorra.airbending.AirScooter;
import com.projectkorra.ProjectKorra.airbending.AirShield;
import com.projectkorra.ProjectKorra.airbending.AirSpout;
import com.projectkorra.ProjectKorra.airbending.AirSuction;
import com.projectkorra.ProjectKorra.airbending.AirSwipe;
import com.projectkorra.ProjectKorra.airbending.Suffocate;
import com.projectkorra.ProjectKorra.airbending.Tornado;
import com.projectkorra.ProjectKorra.airbending.*;
import com.projectkorra.ProjectKorra.chiblocking.AcrobatStance;
import com.projectkorra.ProjectKorra.chiblocking.Paralyze;
import com.projectkorra.ProjectKorra.chiblocking.RapidPunch;
import com.projectkorra.ProjectKorra.chiblocking.WarriorStance;
import com.projectkorra.ProjectKorra.earthbending.Catapult;
import com.projectkorra.ProjectKorra.earthbending.CompactColumn;
import com.projectkorra.ProjectKorra.earthbending.EarthArmor;
import com.projectkorra.ProjectKorra.earthbending.EarthBlast;
import com.projectkorra.ProjectKorra.earthbending.EarthColumn;
import com.projectkorra.ProjectKorra.earthbending.EarthPassive;
import com.projectkorra.ProjectKorra.earthbending.EarthSmash;
import com.projectkorra.ProjectKorra.earthbending.EarthTunnel;
import com.projectkorra.ProjectKorra.earthbending.LavaFlow;
import com.projectkorra.ProjectKorra.earthbending.MetalClips;
import com.projectkorra.ProjectKorra.earthbending.Shockwave;
import com.projectkorra.ProjectKorra.earthbending.Tremorsense;
import com.projectkorra.ProjectKorra.firebending.Combustion;
import com.projectkorra.ProjectKorra.firebending.Cook;
import com.projectkorra.ProjectKorra.firebending.FireBlast;
import com.projectkorra.ProjectKorra.firebending.FireBurst;
import com.projectkorra.ProjectKorra.firebending.FireCombo;
import com.projectkorra.ProjectKorra.firebending.FireJet;
import com.projectkorra.ProjectKorra.firebending.FireShield;
import com.projectkorra.ProjectKorra.firebending.FireStream;
import com.projectkorra.ProjectKorra.earthbending.*;
import com.projectkorra.ProjectKorra.firebending.*;
import com.projectkorra.ProjectKorra.firebending.Fireball;
import com.projectkorra.ProjectKorra.firebending.Illumination;
import com.projectkorra.ProjectKorra.firebending.Lightning;
import com.projectkorra.ProjectKorra.firebending.WallOfFire;
import com.projectkorra.ProjectKorra.waterbending.Bloodbending;
import com.projectkorra.ProjectKorra.waterbending.FreezeMelt;
import com.projectkorra.ProjectKorra.waterbending.IceSpike;
import com.projectkorra.ProjectKorra.waterbending.IceSpike2;
import com.projectkorra.ProjectKorra.waterbending.OctopusForm;
import com.projectkorra.ProjectKorra.waterbending.Plantbending;
import com.projectkorra.ProjectKorra.waterbending.WaterCombo;
import com.projectkorra.ProjectKorra.waterbending.WaterManipulation;
import com.projectkorra.ProjectKorra.waterbending.WaterReturn;
import com.projectkorra.ProjectKorra.waterbending.WaterSpout;
import com.projectkorra.ProjectKorra.waterbending.WaterWall;
import com.projectkorra.ProjectKorra.waterbending.WaterWave;
import com.projectkorra.ProjectKorra.waterbending.Wave;
import com.projectkorra.ProjectKorra.waterbending.*;
import com.projectkorra.rpg.RPGMethods;
import com.projectkorra.rpg.WorldEvents;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager;
import me.ryanhamshire.GriefPrevention.GriefPrevention;
import net.sacredlabyrinth.Phaed.PreciousStones.FieldFlag;
import net.sacredlabyrinth.Phaed.PreciousStones.PreciousStones;
import org.bukkit.*;
import org.bukkit.World.Environment;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import java.io.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class Methods {
@ -181,6 +100,24 @@ public class Methods {
return false;
}
public static boolean comboExists(String string)
{
for(ComboAbilityModule c : ComboModuleManager.combo)
if(string.equalsIgnoreCase(c.getName()))
return true;
return false;
}
public ComboAbilityModule getCombo(String name)
{
for(ComboAbilityModule c : ComboModuleManager.combo)
if(name.equalsIgnoreCase(c.getName()))
return c;
return null;
}
public static boolean isDisabledStockAbility(String string){
for (String st : AbilityModuleManager.disabledStockAbilities){
if (string.equalsIgnoreCase(st))
@ -270,7 +207,7 @@ public class Methods {
if (AvatarState.isAvatarState(player))
if (isChiBlocked(player.getName()))
return true;
if (canBend(player.getName(), "Bloodbending") && Methods.getBendingPlayer(player.getName()).isToggled)
if (canBend(player.getName(), "Bloodbending") && !Methods.getBendingPlayer(player.getName()).isToggled)
return false;
return true;
}
@ -361,6 +298,12 @@ public class Methods {
if (player.hasPermission("bending.water.bloodbending")) return true;
return false;
}
public static boolean canBloodbendAtAnytime(Player player)
{
if(canBloodbend(player) && player.hasPermission("bending.water.bloodbending.anytime")) return true;
return false;
}
public static boolean canIcebend(Player player)
{
@ -448,7 +391,10 @@ public class Methods {
} else {
// The player has at least played before.
String player2 = rs2.getString("player");
if (!player.equalsIgnoreCase(player2)) DBConnection.sql.modifyQuery("UPDATE pk_players SET player = '" + player2 + "' WHERE uuid = '" + uuid.toString() + "'"); // They have changed names.
if (!player.equalsIgnoreCase(player2)){
DBConnection.sql.modifyQuery("UPDATE pk_players SET player = '" + player + "' WHERE uuid = '" + uuid.toString() + "'"); // They have changed names.
ProjectKorra.log.info("Updating Player Name for " + player);
}
String element = rs2.getString("element");
String permaremoved = rs2.getString("permaremoved");
boolean p = false;
@ -477,7 +423,7 @@ public class Methods {
p = false;
}
new BendingPlayer(uuid, player2, elements, abilities, p);
new BendingPlayer(uuid, player, elements, abilities, p);
}
} catch (SQLException ex) {
ex.printStackTrace();
@ -1189,7 +1135,7 @@ public class Methods {
}
public static boolean hasPermission(Player player, String ability) {
if (player.hasPermission("bending.ability." + ability)) return true;
if (player.hasPermission("bending.ability." + ability) && canBind(player.getName(), ability)) return true;
return false;
}
@ -1626,7 +1572,9 @@ public class Methods {
if (gpp != null && respectGriefPrevention) {
Material type = player.getWorld().getBlockAt(location).getType();
if (type == null) type = Material.AIR;
String reason = GriefPrevention.instance.allowBuild(player, location);
// String reason = GriefPrevention.instance.allowBuild(player, location, null); // NOT WORKING with WorldGuard 6.0 BETA 4
String reason = GriefPrevention.instance.allowBuild(player, location); // WORKING with WorldGuard 6.0 BETA 4
if (ignite.contains(ability)) {

View file

@ -0,0 +1,108 @@
package com.projectkorra.ProjectKorra.Objects;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Utilities.HorizontalVelocityChangeEvent;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by Carbogen on 2/2/2015.
*/
public class HorizontalVelocityTracker
{
public static ConcurrentHashMap<Entity, HorizontalVelocityTracker> instances = new ConcurrentHashMap<Entity, HorizontalVelocityTracker>();
private long delay;
private long fireTime;
private Entity entity;
private Player instigator;
private Vector lastVelocity;
private Vector thisVelocity;
private Location launchLocation;
private Location impactLocation;
public HorizontalVelocityTracker(Entity e, Player instigator, long delay)
{
remove(e);
entity = e;
this.instigator = instigator;
fireTime = System.currentTimeMillis();
this.delay = delay;
thisVelocity = e.getVelocity().clone();
launchLocation = e.getLocation().clone();
impactLocation = launchLocation.clone();
this.delay = delay;
update();
instances.put(entity, this);
}
public void update()
{
if(System.currentTimeMillis() < fireTime + delay)
return;
lastVelocity = thisVelocity.clone();
thisVelocity = entity.getVelocity().clone();
Vector diff = thisVelocity.subtract(lastVelocity);
List<Block> blocks = Methods.getBlocksAroundPoint(entity.getLocation(), 1.5);
if(entity.isOnGround())
{
remove();
return;
}
for(Block b : blocks)
{
if(Methods.isWater(b))
{
remove();
return;
}
}
if(thisVelocity.length() < lastVelocity.length())
{
if((diff.getX() > 1 || diff.getX() < -1)
|| (diff.getZ() > 1 || diff.getZ() < -1))
{
impactLocation = entity.getLocation();
for (Block b : blocks)
{
if (!Methods.isTransparentToEarthbending(instigator, b))
{
ProjectKorra.plugin.getServer().getPluginManager().callEvent(new HorizontalVelocityChangeEvent(entity, instigator, lastVelocity, thisVelocity, diff, launchLocation, impactLocation));
remove();
return;
}
}
}
}
}
public static void updateAll()
{
for(Entity e : instances.keySet())
instances.get(e).update();
}
public void remove()
{
instances.remove(entity);
}
public static void remove(Entity e)
{
if(instances.containsKey(e))
instances.remove(e);
}
}

View file

@ -1,136 +1,38 @@
package com.projectkorra.ProjectKorra;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.ComboManager.ClickType;
import com.projectkorra.ProjectKorra.CustomEvents.PlayerGrappleEvent;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.GrapplingHookAPI;
import com.projectkorra.ProjectKorra.Utilities.HorizontalVelocityChangeEvent;
import com.projectkorra.ProjectKorra.airbending.*;
import com.projectkorra.ProjectKorra.chiblocking.*;
import com.projectkorra.ProjectKorra.earthbending.*;
import com.projectkorra.ProjectKorra.earthbending.LavaFlow.AbilityType;
import com.projectkorra.ProjectKorra.firebending.*;
import com.projectkorra.ProjectKorra.firebending.Fireball;
import com.projectkorra.ProjectKorra.waterbending.*;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.block.*;
import org.bukkit.event.entity.*;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.entity.EntityTeleportEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.entity.SlimeSplitEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.event.player.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.ComboManager.ClickType;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.CustomEvents.PlayerGrappleEvent;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.GrapplingHookAPI;
import com.projectkorra.ProjectKorra.airbending.AirBlast;
import com.projectkorra.ProjectKorra.airbending.AirBubble;
import com.projectkorra.ProjectKorra.airbending.AirBurst;
import com.projectkorra.ProjectKorra.airbending.AirScooter;
import com.projectkorra.ProjectKorra.airbending.AirShield;
import com.projectkorra.ProjectKorra.airbending.AirSpout;
import com.projectkorra.ProjectKorra.airbending.AirSuction;
import com.projectkorra.ProjectKorra.airbending.AirSwipe;
import com.projectkorra.ProjectKorra.airbending.FlightAbility;
import com.projectkorra.ProjectKorra.airbending.Suffocate;
import com.projectkorra.ProjectKorra.airbending.Tornado;
import com.projectkorra.ProjectKorra.chiblocking.AcrobatStance;
import com.projectkorra.ProjectKorra.chiblocking.ChiComboManager;
import com.projectkorra.ProjectKorra.chiblocking.ChiPassive;
import com.projectkorra.ProjectKorra.chiblocking.HighJump;
import com.projectkorra.ProjectKorra.chiblocking.Paralyze;
import com.projectkorra.ProjectKorra.chiblocking.QuickStrike;
import com.projectkorra.ProjectKorra.chiblocking.RapidPunch;
import com.projectkorra.ProjectKorra.chiblocking.Smokescreen;
import com.projectkorra.ProjectKorra.chiblocking.SwiftKick;
import com.projectkorra.ProjectKorra.chiblocking.WarriorStance;
import com.projectkorra.ProjectKorra.earthbending.Catapult;
import com.projectkorra.ProjectKorra.earthbending.Collapse;
import com.projectkorra.ProjectKorra.earthbending.CompactColumn;
import com.projectkorra.ProjectKorra.earthbending.EarthArmor;
import com.projectkorra.ProjectKorra.earthbending.EarthBlast;
import com.projectkorra.ProjectKorra.earthbending.EarthColumn;
import com.projectkorra.ProjectKorra.earthbending.EarthGrab;
import com.projectkorra.ProjectKorra.earthbending.EarthPassive;
import com.projectkorra.ProjectKorra.earthbending.EarthSmash;
import com.projectkorra.ProjectKorra.earthbending.EarthTunnel;
import com.projectkorra.ProjectKorra.earthbending.EarthWall;
import com.projectkorra.ProjectKorra.earthbending.Extraction;
import com.projectkorra.ProjectKorra.earthbending.LavaFlow;
import com.projectkorra.ProjectKorra.earthbending.LavaFlow.AbilityType;
import com.projectkorra.ProjectKorra.earthbending.LavaSurge;
import com.projectkorra.ProjectKorra.earthbending.LavaWave;
import com.projectkorra.ProjectKorra.earthbending.MetalClips;
import com.projectkorra.ProjectKorra.earthbending.Shockwave;
import com.projectkorra.ProjectKorra.earthbending.Tremorsense;
import com.projectkorra.ProjectKorra.firebending.ArcOfFire;
import com.projectkorra.ProjectKorra.firebending.Combustion;
import com.projectkorra.ProjectKorra.firebending.Cook;
import com.projectkorra.ProjectKorra.firebending.Enflamed;
import com.projectkorra.ProjectKorra.firebending.Extinguish;
import com.projectkorra.ProjectKorra.firebending.FireBlast;
import com.projectkorra.ProjectKorra.firebending.FireBurst;
import com.projectkorra.ProjectKorra.firebending.FireJet;
import com.projectkorra.ProjectKorra.firebending.FireShield;
import com.projectkorra.ProjectKorra.firebending.FireStream;
import com.projectkorra.ProjectKorra.firebending.Fireball;
import com.projectkorra.ProjectKorra.firebending.Illumination;
import com.projectkorra.ProjectKorra.firebending.Lightning;
import com.projectkorra.ProjectKorra.firebending.RingOfFire;
import com.projectkorra.ProjectKorra.firebending.WallOfFire;
import com.projectkorra.ProjectKorra.waterbending.Bloodbending;
import com.projectkorra.ProjectKorra.waterbending.FreezeMelt;
import com.projectkorra.ProjectKorra.waterbending.IceBlast;
import com.projectkorra.ProjectKorra.waterbending.IceSpike2;
import com.projectkorra.ProjectKorra.waterbending.Melt;
import com.projectkorra.ProjectKorra.waterbending.OctopusForm;
import com.projectkorra.ProjectKorra.waterbending.Torrent;
import com.projectkorra.ProjectKorra.waterbending.WaterManipulation;
import com.projectkorra.ProjectKorra.waterbending.WaterPassive;
import com.projectkorra.ProjectKorra.waterbending.WaterSpout;
import com.projectkorra.ProjectKorra.waterbending.WaterWall;
import com.projectkorra.ProjectKorra.waterbending.WaterWave;
import com.projectkorra.ProjectKorra.waterbending.Wave;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class PKListener implements Listener {
@ -159,6 +61,24 @@ public class PKListener implements Listener {
}
@EventHandler
public void onHorizontalCollision(HorizontalVelocityChangeEvent e)
{
if(!plugin.getConfig().getBoolean("Properties.HorizontalCollisionPhysics.Enabled"))
return;
if(e.getEntity() instanceof LivingEntity)
{
if(e.getEntity().getEntityId() != e.getInstigator().getEntityId())
{
double minimumDistance = plugin.getConfig().getDouble("Properties.HorizontalCollisionPhysics.WallDamageMinimumDistance");
double damage = ((e.getDistanceTraveled() - minimumDistance) < 0 ? 0 : e.getDistanceTraveled() - minimumDistance) / (e.getDifference().length());
if(damage > 0)
Methods.damageEntity(e.getInstigator(), e.getEntity(), damage);
}
}
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerGrapple(PlayerGrappleEvent event) {
if (event.isCancelled()) return;

View file

@ -1,13 +1,7 @@
package com.projectkorra.ProjectKorra;
import java.io.IOException;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
import com.projectkorra.ProjectKorra.Ability.Combo.ComboModuleManager;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.CraftingRecipes;
import com.projectkorra.ProjectKorra.airbending.AirbendingManager;
@ -16,6 +10,12 @@ import com.projectkorra.ProjectKorra.chiblocking.ChiblockingManager;
import com.projectkorra.ProjectKorra.earthbending.EarthbendingManager;
import com.projectkorra.ProjectKorra.firebending.FirebendingManager;
import com.projectkorra.ProjectKorra.waterbending.WaterbendingManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.IOException;
import java.util.logging.Logger;
public class ProjectKorra extends JavaPlugin {
@ -32,6 +32,7 @@ public class ProjectKorra extends JavaPlugin {
new Methods(this);
new Commands(this);
new AbilityModuleManager(this);
new ComboModuleManager();
new ComboManager();
new ChiComboManager();

View file

@ -0,0 +1,111 @@
package com.projectkorra.ProjectKorra.Utilities;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.util.Vector;
/**
* Created by Carbogen on 2/2/2015.
*/
public class HorizontalVelocityChangeEvent extends Event implements Cancellable
{
private static final HandlerList handlers = new HandlerList();
private boolean isCancelled;
private Entity entity;
private Player instigator;
private Vector from;
private Vector to;
private Vector difference;
private Location start;
private Location end;
@Deprecated
public HorizontalVelocityChangeEvent(Entity entity, Player instigator, Vector from, Vector to, Vector difference)
{
this.entity = entity;
this.instigator = instigator;
this.from = from;
this.to = to;
this.difference = difference;
}
public HorizontalVelocityChangeEvent(Entity entity, Player instigator, Vector from, Vector to, Vector difference, Location start, Location end)
{
this.entity = entity;
this.instigator = instigator;
this.from = from;
this.to = to;
this.difference = difference;
this.start = start;
this.end = end;
}
public Entity getEntity()
{
return entity;
}
public Player getInstigator()
{
return instigator;
}
public Vector getFrom()
{
return from;
}
public Vector getTo()
{
return to;
}
public Location getStartPoint()
{
return start;
}
public Location getEndPoint()
{
return end;
}
public double getDistanceTraveled()
{
return start.distance(end);
}
public Vector getDifference()
{
return difference;
}
@Override
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
@Override
public boolean isCancelled()
{
return isCancelled;
}
@Override
public void setCancelled(boolean value)
{
this.isCancelled = value;
}
}

View file

@ -1,10 +1,8 @@
package com.projectkorra.ProjectKorra.airbending;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Bukkit;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.*;
import com.projectkorra.ProjectKorra.Objects.HorizontalVelocityTracker;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
@ -15,12 +13,8 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Commands;
import com.projectkorra.ProjectKorra.Flight;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
public class AirBlast {
@ -41,7 +35,7 @@ public class AirBlast {
// public static long interval = 2000;
public static byte full = 0x0;
private Location location;
public Location location;
private Location origin;
private Vector direction;
private Player player;
@ -268,6 +262,7 @@ public class AirBlast {
return;
Methods.setVelocity(entity, velocity);
new HorizontalVelocityTracker(entity, player, 200l);
entity.setFallDistance(0);
if (!isUser && entity instanceof Player) {
new Flight((Player) entity, player);

View file

@ -1,8 +1,9 @@
package com.projectkorra.ProjectKorra.airbending;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Entity;
@ -10,10 +11,8 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
public class AirBurst {
@ -32,7 +31,7 @@ public class AirBurst {
private long starttime;
private long chargetime = config.getLong("Abilities.Air.AirBurst.ChargeTime");
private boolean charged = false;
private ArrayList<AirBlast> blasts = new ArrayList<AirBlast>();
public ArrayList<AirBlast> blasts = new ArrayList<AirBlast>();
private ArrayList<Entity> affectedentities = new ArrayList<Entity>();
public AirBurst(Player player) {

View file

@ -1,9 +1,11 @@
package com.projectkorra.ProjectKorra.earthbending;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempBlock;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
@ -13,12 +15,9 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempBlock;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class EarthSmash {
public static enum ClickType {
@ -56,7 +55,7 @@ public class EarthSmash {
private BendingPlayer bplayer;
private Block origin;
private Location loc, destination;
private State state = State.START;
public State state = State.START;
private int animCounter, progressCounter;
private long time, delay, cooldown, flightRemove, flightStart;
private double grabbedRange;
@ -442,7 +441,8 @@ public class EarthSmash {
for(int y = -1; y <= 1; y++)
for(int z = -1; z <= 1; z++)
if((Math.abs(x) + Math.abs(y) + Math.abs(z)) % 2 == 0) //Give it the cool shape
blocks.add(loc.getWorld().getBlockAt(loc.clone().add(x,y,z)));
if(loc != null)
blocks.add(loc.getWorld().getBlockAt(loc.clone().add(x,y,z)));
return blocks;
}
@ -455,6 +455,7 @@ public class EarthSmash {
for(int x = -1; x <= 1; x++)
for(int y = -1; y <= 1; y++)
for(int z = -1; z <= 1; z++)
if(loc != null)
blocks.add(loc.getWorld().getBlockAt(loc.clone().add(x,y,z)));
return blocks;
}

View file

@ -1,7 +1,10 @@
package com.projectkorra.ProjectKorra.firebending;
import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -11,11 +14,7 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import java.util.concurrent.ConcurrentHashMap;
public class Combustion {
@ -31,7 +30,7 @@ public class Combustion {
public static double radius = config.getDouble("Abilities.Fire.Combustion.Radius");
public static double defaultdamage = config.getDouble("Abilities.Fire.Combustion.Damage");
private Location location;
public Location location;
private Location origin;
private Vector direction;
private double range = defaultrange;
@ -41,7 +40,7 @@ public class Combustion {
private float power;
private double damage;
private Player player;
public Player player;
private long starttime;
private boolean charged = false;
public static ConcurrentHashMap<Player, Combustion> instances = new ConcurrentHashMap<Player, Combustion>();

View file

@ -9,6 +9,7 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Furnace;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@ -43,7 +44,7 @@ public class FireBlast {
private static boolean canPowerFurnace = true;
static final int maxticks = 10000;
private Location location;
public Location location;
private List<Block> safe = new ArrayList<Block>();
private Location origin;
private Vector direction;
@ -125,7 +126,10 @@ public class FireBlast {
if (Methods.isSolid(block) || block.isLiquid()) {
if (block.getType() == Material.FURNACE && canPowerFurnace) {
Furnace furnace = (Furnace) block.getState();
furnace.setBurnTime((short) 800);
furnace.setCookTime((short) 800);
furnace.update();
} else if (FireStream.isIgnitable(player, block.getRelative(BlockFace.UP))) {
ignite(location);
}

View file

@ -44,7 +44,9 @@ public class FireBurst {
}
if (AvatarState.isAvatarState(player))
chargetime = 0;
if (BendingManager.events.get(player.getWorld()).equalsIgnoreCase("SozinsComet")) chargetime = 0;
if (BendingManager.events.containsKey(player.getWorld())) {
if(BendingManager.events.get(player.getWorld()).equalsIgnoreCase("SozinsComet")) chargetime = 0;
}
this.player = player;
instances.put(player, this);
}

View file

@ -1,8 +1,11 @@
package com.projectkorra.ProjectKorra.firebending;
import java.util.ArrayList;
import java.util.List;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.*;
import com.projectkorra.ProjectKorra.ComboManager.ClickType;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import com.projectkorra.ProjectKorra.chiblocking.Paralyze;
import com.projectkorra.ProjectKorra.waterbending.Bloodbending;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
@ -15,16 +18,8 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.ComboManager.ClickType;
import com.projectkorra.ProjectKorra.Commands;
import com.projectkorra.ProjectKorra.Element;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import com.projectkorra.ProjectKorra.chiblocking.Paralyze;
import com.projectkorra.ProjectKorra.waterbending.Bloodbending;
import java.util.ArrayList;
import java.util.List;
public class FireCombo {
public static final List<String> abilitiesToBlock = new ArrayList<String>() {

View file

@ -1,7 +1,9 @@
package com.projectkorra.ProjectKorra.firebending;
import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
@ -12,10 +14,7 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import java.util.concurrent.ConcurrentHashMap;
public class Fireball {
@ -45,7 +44,7 @@ public class Fireball {
private boolean launched = false;
private Player player;
private Location origin;
private Location location;
public Location location;
private Vector direction;
private TNTPrimed explosion = null;
@ -199,7 +198,7 @@ public class Fireball {
return false;
}
private void explode() {
public void explode() {
// List<Block> blocks = Methods.getBlocksAroundPoint(location, 3);
// List<Block> blocks2 = new ArrayList<Block>();

View file

@ -2,14 +2,11 @@ package com.projectkorra.ProjectKorra.firebending;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;

View file

@ -1,23 +1,19 @@
package com.projectkorra.ProjectKorra.waterbending;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.Objects.HorizontalVelocityTracker;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempPotionEffect;
import org.bukkit.Location;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.*;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempPotionEffect;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
public class Bloodbending {
@ -48,11 +44,11 @@ public class Bloodbending {
}
if (onlyUsableAtNight && !Methods.isNight(player.getWorld())) {
if (onlyUsableAtNight && !Methods.isNight(player.getWorld()) && !Methods.canBloodbendAtAnytime(player)) {
return;
}
if (onlyUsableDuringMoon && !Methods.isFullMoon(player.getWorld())) {
if (onlyUsableDuringMoon && !Methods.isFullMoon(player.getWorld()) && !Methods.canBloodbendAtAnytime(player)) {
return;
}
@ -88,12 +84,14 @@ public class Bloodbending {
if (target instanceof Player) {
if (Methods.canBend(((Player) target).getName(), "Bloodbending")
|| AvatarState.isAvatarState((Player) target))
return;
if(!Methods.isDay(target.getWorld()) || Methods.canBloodbendAtAnytime((Player) target))
return;
}
if (!canBeUsedOnUndead && isUndead(target)) {
return;
}
Methods.damageEntity(player, target, 0);
HorizontalVelocityTracker.remove(target);
Methods.breakBreathbendingHold(target);
targetentities.put(target, target.getLocation().clone());
}
@ -115,12 +113,14 @@ public class Bloodbending {
for (Entity entity : targetentities.keySet()) {
double dx, dy, dz;
Location target = entity.getLocation().clone();
dx = target.getX() - location.getX();
dy = target.getY() - location.getY();
dz = target.getZ() - location.getZ();
Vector vector = new Vector(dx, dy, dz);
// dx = target.getX() - location.getX();
// dy = target.getY() - location.getY();
// dz = target.getZ() - location.getZ();
// Vector vector = new Vector(dx, dy, dz);
Vector vector = Methods.getDirection(location, Methods.getTargetedLocation(player, location.distance(target)));
vector.normalize();
entity.setVelocity(vector.multiply(factor));
new HorizontalVelocityTracker(entity, player, 200);
}
remove(player);
}
@ -223,7 +223,7 @@ public class Bloodbending {
continue;
}
Location location = Methods.getTargetedLocation(player,
(int) targetentities.get(entity).distance(player.getLocation()));
6 /*(int) targetentities.get(entity).distance(player.getLocation())*/);
double distance = location.distance(newlocation);
double dx, dy, dz;
dx = location.getX() - newlocation.getX();

View file

@ -43,7 +43,7 @@ public class IceBlast {
private Location destination;
private Block sourceblock;
private Player player;
private TempBlock source;
public TempBlock source;
private double defaultdamage = DAMAGE;
public IceBlast(Player player) {

View file

@ -1,9 +1,9 @@
package com.projectkorra.ProjectKorra.waterbending;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempBlock;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
@ -14,10 +14,9 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempBlock;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
public class Torrent {
@ -53,13 +52,13 @@ public class Torrent {
private boolean formed = false;
private boolean launch = false;
private boolean launching = false;
private boolean freeze = false;
public boolean freeze = false;
private double range = RANGE;
private int damage = DAMAGE;
private int deflectdamage = DEFLECT_DAMAGE;
private ArrayList<TempBlock> blocks = new ArrayList<TempBlock>();
private ArrayList<TempBlock> launchblocks = new ArrayList<TempBlock>();
public ArrayList<TempBlock> launchblocks = new ArrayList<TempBlock>();
private ArrayList<Entity> hurtentities = new ArrayList<Entity>();
public Torrent(Player player) {
@ -434,7 +433,7 @@ public class Torrent {
blocks.clear();
}
private void remove() {
public void remove() {
clearRing();
for (TempBlock block : launchblocks)
block.revertBlock();

View file

@ -1,21 +1,20 @@
package com.projectkorra.ProjectKorra.waterbending;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffectType;
import com.projectkorra.ProjectKorra.Flight;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.TempBlock;
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
import com.projectkorra.ProjectKorra.chiblocking.Paralyze;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffectType;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
public class WaterSpout {
@ -25,6 +24,7 @@ public class WaterSpout {
public static ConcurrentHashMap<Block, Block> baseblocks = new ConcurrentHashMap<Block, Block>();
private static final int HEIGHT = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.WaterSpout.Height");
private static final boolean PARTICLES = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.WaterSpout.Particles");
// private static final double threshold = .05;
// private static final byte half = 0x4;
@ -172,6 +172,9 @@ public class WaterSpout {
public void rotateParticles(Block block)
{
if(!PARTICLES)
return;
if (System.currentTimeMillis() >= time + interval)
{
time = System.currentTimeMillis();

View file

@ -1,6 +1,6 @@
name: ProjectKorra
author: ProjectKorra
version: 1.6.0 BETA 11
version: 1.6.0 BETA 15
main: com.projectkorra.ProjectKorra.ProjectKorra
softdepend: [PreciousStones, WorldGuard, WorldEdit, Factions, MassiveCore, GriefPrevention, Towny, NoCheatPlus, LWC]
commands: