diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 48cc4aa..bece5c5 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/plugin.yml b/src/plugin.yml index a991461..0efbad3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.7.3br2 +version: 3.7.3c commands: money: description: Tells the player the amount of money they are holding. diff --git a/src/sig/plugin/TwosideKeeper/DeathManager.java b/src/sig/plugin/TwosideKeeper/DeathManager.java index 513d712..34be78e 100644 --- a/src/sig/plugin/TwosideKeeper/DeathManager.java +++ b/src/sig/plugin/TwosideKeeper/DeathManager.java @@ -135,6 +135,10 @@ public class DeathManager { if (structure.deathloc.getBlockY()<=60) { price += 24-(structure.deathloc.getBlockY()/2.5); } + + PlayerStructure pd = PlayerStructure.GetPlayerStructure(Bukkit.getPlayer(p.getName())); + pd.hasDied=false; + p.openInventory(deathinv); p.sendMessage(ChatColor.AQUA+"You can buy back up to "+ChatColor.YELLOW+(int)(totalmoney/price)+ChatColor.AQUA+" items, costing $"+ChatColor.GREEN+price+ChatColor.WHITE+" per item."); p.sendMessage(" The rest will drop at your death location."); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java index b634eb1..5ceae8e 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java @@ -28,70 +28,70 @@ public enum ArtifactAbility { //Temporary abilities: Work for 1 level and wear off afterward. //Weapon Abilities - DAMAGE("Strike","Improves Base Damage by [VAL]",new double[]{1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0}, - new double[]{1.0,0.9,0.85,0.8,0.75,0.7,0.65,0.6,0.55,0.5},100,1,UpgradePath.BASIC), - ARMOR_PEN("Piercing","[VAL]% of your damage is ignored by resistances. ([PENDMG] damage)",new double[]{1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0}, - new double[]{1.0,1.0,0.9,0.9,0.8,0.8,0.7,0.7,0.6,0.5},100,1,UpgradePath.BASIC), - EXECUTION("Execute","Deals [VAL] extra damage for every 20% of target's missing health.",new double[]{0.125,0.25,1.375,0.5,0.625,0.75,0.875,1.0,1.125,1.25}, - new double[]{1.0,1.0,0.9,0.9,0.8,0.8,0.7,0.7,0.6,0.5},100,1,UpgradePath.BASIC), - LIFESTEAL("Lifesteal","Heals [VAL]% of the damage dealt to targets back to your health pool.",new double[]{1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0}, - new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1,UpgradePath.WEAPON), - CRITICAL("Critical","[VAL]% chance to deal critical strikes.",new double[]{2.0,2.25,2.5,2.75,3.0,3.25,3.50,3.75,4.0,4.25}, - new double[]{1.0,1.0,0.9,0.9,0.8,0.8,0.7,0.7,0.6,0.5},100,1,UpgradePath.WEAPON), - CRIT_DMG("Crit Damage","Critical Strikes deal [VAL]% damage.",new double[]{210.0,210.0,210.0,210.0,210.0,210.0,210.0,210.0,210.0,210.0}, - new double[]{5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0},100,1,UpgradePath.WEAPON), - HIGHWINDER("Highwinder","While moving fast or sprinting, you deal [VAL] extra damage for every 1m of speed.",new double[]{0.18,0.225,0.27,0.315,0.36,0.405,0.45,0.495,0.54,0.61}, - new double[]{0.675,0.65,0.625,0.6,0.575,0.55,0.525,0.5,0.475,0.45},100,15,UpgradePath.WEAPON), + DAMAGE("Strike","Improves Base Damage by [VAL]",new double[]{1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0}, + new double[]{1.0,0.975,0.95,0.925,0.9,0.875,0.85,0.8,0.75,0.7,0.65,0.6,0.55,0.5,0.4},100,1,UpgradePath.BASIC), + ARMOR_PEN("Piercing","[VAL]% of your damage is ignored by resistances. ([PENDMG] damage)",new double[]{1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0}, + new double[]{1.0,0.975,0.95,0.925,0.9,0.875,0.85,0.8,0.75,0.7,0.65,0.6,0.55,0.5,0.4},100,1,UpgradePath.BASIC), + EXECUTION("Execute","Deals [VAL] extra damage for every 20% of target's missing health.",new double[]{0.1,0.125,0.15,0.175,0.2,0.225,0.25,0.275,0.3,0.35,0.4,0.5,0.7,0.9,1.25}, + new double[]{1.0,0.975,0.95,0.925,0.9,0.875,0.85,0.825,0.8,0.75,0.7,0.65,0.6,0.55,0.5},100,1,UpgradePath.BASIC), + LIFESTEAL("Lifesteal","Heals [VAL]% of the damage dealt to targets back to your health pool.",new double[]{1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0}, + new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1,UpgradePath.WEAPON), + CRITICAL("Critical","[VAL]% chance to deal critical strikes.",new double[]{1.0,1.25,1.5,1.75,2.0,2.25,2.50,2.75,3.0,3.25,3.50,3.75,4.00,4.25,4.50}, + new double[]{1.0,0.975,0.95,0.925,0.9,0.875,0.85,0.825,0.8,0.75,0.7,0.65,0.6,0.55,0.5},100,1,UpgradePath.WEAPON), + CRIT_DMG("Crit Damage","Critical Strikes deal [VAL]% damage.",new double[]{200.0,201.0,202.0,204.0,206.0,210.0,215.0,219.0,222.0,226.0,230.0,235.0,240.0,245.0,260.0}, + new double[]{5.0,4.9,4.8,4.7,4.6,4.5,4.4,4.3,4.2,4.1,4.0,3.8,3.6,3.4,3.0},100,1,UpgradePath.WEAPON), + HIGHWINDER("Highwinder","While moving fast or sprinting, you deal [VAL] extra damage for every 1m of speed.",new double[]{0.18,0.225,0.27,0.315,0.36,0.405,0.45,0.495,0.54,0.61,0.79,0.99,1.30,1.70,2.50}, + new double[]{0.675,0.65,0.625,0.6,0.575,0.55,0.525,0.5,0.475,0.45,0.425,0.4,0.375,0.35,0.30},100,15,UpgradePath.WEAPON), //Bow Abilities - MARKSMAN("Marksman","Increases headshot hitbox size by [VAL]% .",new double[]{10.0,15,20,25,30,35,40,45,50,55}, - new double[]{1.0,0.95,0.9,0.85,0.8,0.75,0.7,0.65,0.6,0.55},10,15,UpgradePath.BOW), + MARKSMAN("Marksman","Increases headshot hitbox size by [VAL]% .",new double[]{10.0,15,20,25,30,35,40,45,50,55,60,70,80,90,100}, + new double[]{1.0,0.975,0.95,0.875,0.85,0.825,0.8,0.775,0.75,0.725,0.70,0.675,0.65,0.55,0.45},10,15,UpgradePath.BOW), SIEGESTANCE("Siege Stance",ChatColor.GRAY+"[Unimplemented] Activate by Sneaking for three seconds. Sneak again to de-activate.\n\n" + "Applies Slowness V and Resistance VI. While in Siege Stance you fire clusters of 7 arrows per shot. Each arrow deals [VAL] damage.",new double[]{3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0}, - new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,20,UpgradePath.BOW), + new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.BOW), ARROWSHOWER("Arrow Shower",ChatColor.GRAY+"[Unimplemented] Shift-Left Click to activate. Applies Slowness X for three seconds while firing arrows into the sky and onto enemies in a large area in front of you. Each arrow deals [VAL] damage.",new double[]{0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7}, - new double[]{0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4},100,40,UpgradePath.BOW), + new double[]{0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4},100,1000,UpgradePath.BOW), TARGETING("Targeting",ChatColor.GRAY+"[Unimplemented] Left-click a mob to target them. Fire arrows to release homing missiles at your target. Each missile explodes and deals [VAL] damage.",new double[]{10,10,10,10,10,10,10,10,10,10}, - new double[]{0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3},100,75,UpgradePath.BOW), + new double[]{0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3},100,1000,UpgradePath.BOW), ENDERTURRET("Ender Turret",ChatColor.GRAY+"[Unimplemented] Place Eyes of Ender in your hotbar to use as ammo. Each eye fired launches forward and upward before releasing a barrage of homing missiles that lock onto enemy targets. Each missile explodes and deals [VAL] damage.",new double[]{25,25,25,25,25,25,25,25,25,25}, - new double[]{0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5},100,100,UpgradePath.BOW), + new double[]{0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5},100,1000,UpgradePath.BOW), //Armor abilities - DAMAGE_REDUCTION("Defense","Increases Base Damage reduction by [VAL]%",new double[]{1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5}, - new double[]{2.2,2.1,2.0,1.9,1.8,1.7,1.6,1.5,1.4,1.3},100,1,UpgradePath.ARMOR), - HEALTH("Health","Increases Maximum Health by [VAL].",new double[]{0.35,0.70,1.05,1.40,1.70,2.0,2.3,2.6,2.9,3.2}, - new double[]{1.0,0.95,0.9,0.85,0.8,0.75,0.7,0.75,0.7,0.65},100,1,UpgradePath.ARMOR), - HEALTH_REGEN("Regeneration","Regenerates an extra [VAL] health every 5 seconds.",new double[]{0.03125,0.0625,0.09375,0.125,0.15625,0.1875,0.29166666666666666666666666666667,0.33333333333333333333333333333333,0.375,0.41666666666666666666666666666667}, - new double[]{1.0,0.90,0.85,0.8,0.75,0.7,0.6,0.55,0.5,0.45},100,1,UpgradePath.ARMOR), - STATUS_EFFECT_RESISTANCE("Resistance","When a debuff is applied, there is a [VAL]% chance to remove it.",new double[]{3,3.5,4,4.5,5,5.5,6,6.5,7,7.5}, - new double[]{4.0,3.85,3.70,3.55,3.40,3.25,3.10,2.95,2.80,2.65},100,1,UpgradePath.ARMOR), - SHADOWWALKER("Shadow Walker","Increases your speed in dark areas. Damage Reduction increases by [VAL]% in dark areas. Dodge chance increases by [DODGEVAL]% in dark areas.",new double[]{5,5,5,5,5,5,5,5,5,5}, - new double[]{1.5,1.4,1.3,1.2,1.1,1.0,0.9,0.8,0.7,0.55},100,10,UpgradePath.ARMOR), - /*SURVIVOR("Survivor",ChatColor.GRAY+"[Unimplemented] Taking fatal damage will not kill you and instead consume this ability, removes all debuffs, and restoring your health.",new double[]{-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0}, - new double[]{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0},1,1000,UpgradePath.ARMOR),*/ - DODGE("Dodge",ChatColor.GRAY+"You have a [VAL]% chance to dodge incoming damage from any damage source.",new double[]{0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55}, - new double[]{1.0,1.0,1.0,0.8,0.7,0.6,0.5,0.4,0.3,0.2},100,40,UpgradePath.ARMOR), - GRACEFULDODGE("Graceful Dodge","Whenever a dodge occurs, you will gain [VAL] seconds of invulnerability.",new double[]{0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.5}, - new double[]{1.8,1.78,1.76,1.74,1.72,1.70,1.68,1.66,1.64,1.62},10,40,UpgradePath.ARMOR), + DAMAGE_REDUCTION("Defense","Increases Base Damage reduction by [VAL]%",new double[]{1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.1,5.2,5.25,5.3,5.35,5.5}, + new double[]{2.2,2.1,2.0,1.9,1.8,1.7,1.6,1.55,1.5,1.475,1.45,1.425,1.4,1.35,1.3},100,1,UpgradePath.ARMOR), + HEALTH("Health","Increases Maximum Health by [VAL].",new double[]{0.35,0.70,1.05,1.40,1.70,2.0,2.3,2.6,2.9,3.0,3.1,3.2,3.3,3.4,3.6}, + new double[]{1.0,0.95,0.9,0.85,0.8,0.75,0.7,0.75,0.7,0.675,0.65,0.625,0.6,0.55,0.5},100,1,UpgradePath.ARMOR), + HEALTH_REGEN("Regeneration","Regenerates an extra [VAL] health every 5 seconds.",new double[]{0.03125,0.0625,0.09375,0.125,0.15625,0.1875,0.29166666666666666666666666666667,0.33333333333333333333333333333333,0.375,0.4,0.42,0.44,0.46,0.48,0.55}, + new double[]{1.0,0.95,0.9,0.85,0.8,0.75,0.7,0.65,0.6,0.55,0.5,0.475,0.45,0.425,0.4},100,1,UpgradePath.ARMOR), + STATUS_EFFECT_RESISTANCE("Resistance","When a debuff is applied, there is a [VAL]% chance to remove it.",new double[]{3,3.5,4,4.5,5,5.5,6,6.5,7,7.1,7.2,7.3,7.4,7.45,7.5}, + new double[]{4.0,3.85,3.70,3.55,3.40,3.25,3.10,2.95,2.80,2.775,2.75,2.725,2.7,2.675,2.65},100,1,UpgradePath.ARMOR), + SHADOWWALKER("Shadow Walker","Increases your speed in dark areas. Damage Reduction increases by [VAL]% in dark areas. Dodge chance increases by [DODGEVAL]% in dark areas.",new double[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}, + new double[]{1.5,1.4,1.3,1.2,1.1,1.0,0.9,0.8,0.7,0.65,0.625,0.6,0.585,0.565,0.55},100,10,UpgradePath.ARMOR), + SURVIVOR("Survivor","Taking fatal damage will not kill you and instead consumes this ability, removes all debuffs, and restores your health by [VAL]%"+TemporarySkill(),new double[]{4,4.25,4.5,4.75,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10}, + new double[]{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0},10,25,UpgradePath.ARMOR), + DODGE("Dodge","You have a [VAL]% chance to dodge incoming damage from any damage source.",new double[]{0.1,0.125,0.15,0.175,0.225,0.25,0.275,0.3,0.325,0.35,0.375,0.4,0.45,0.5,0.55}, + new double[]{1.0,0.95,0.9,0.85,0.8,0.75,0.7,0.65,0.6,0.55,0.5,0.45,0.35,0.25,0.2},100,40,UpgradePath.ARMOR), + GRACEFULDODGE("Graceful Dodge","Whenever a dodge occurs, you will gain [VAL] seconds of invulnerability.",new double[]{0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.9,1.0,1.05,1.1,1.2,1.3,1.4,1.5}, + new double[]{1.8,1.79,1.78,1.77,1.76,1.75,1.74,1.73,1.72,1.71,1.70,1.69,1.67,1.65,1.62},10,40,UpgradePath.ARMOR), //Sword abilities - PROVOKE("Provoke","Your attacks provoke enemies for [VAL] seconds.",new double[]{3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0}, - new double[]{3.0,2.8,2.6,2.4,2.2,2.2,2.0,1.8,1.6,1.4},100,10,UpgradePath.SWORD), - COMBO("Belligerent","[VAL]% more damage for each successive strike on a mob. Resets after 2 seconds of no combat.",new double[]{1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5}, - new double[]{1.0,0.95,0.9,0.85,0.8,0.75,0.7,0.65,0.6,0.55},100,40,UpgradePath.SWORD), + PROVOKE("Provoke","Your attacks provoke enemies for [VAL] seconds.",new double[]{3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,10.0,12.0}, + new double[]{3.0,2.9,2.8,2.7,2.6,2.5,2.4,2.3,2.2,2.1,2.0,1.9,1.8,1.6,1.4},100,10,UpgradePath.SWORD), + COMBO("Belligerent","[VAL]% more damage for each successive strike on a mob. Resets after 2 seconds of no combat.",new double[]{1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.6,2.8,3.0,3.25,3.5,4.0,5.5}, + new double[]{1.0,0.975,0.95,0.925,0.9,0.875,0.85,0.825,0.8,0.75,0.7,0.65,0.6,0.55,0.5},100,40,UpgradePath.SWORD), //Pickaxe abilities - SCAVENGE("Scavenge",ChatColor.GRAY+"[Unimplemented] Breaks off resources from armor. [VAL]% chance per hit.",new double[]{5,5,5,5,5,5,5,5,5,5}, - new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.PICKAXE), - MINES("Land Mine",ChatColor.GRAY+"[Unimplemented]While in combat, throw your pickaxe to send land mines towards your enemies. On contact they deal [VAL] damage.",new double[]{5,5,5,5,5,5,5,5,5,5}, - new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.PICKAXE), + SCAVENGE("Scavenge",ChatColor.GRAY+"[Unimplemented] Breaks off resources from armor. [VAL]% chance per hit.",new double[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}, + new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.PICKAXE), + MINES("Land Mine",ChatColor.GRAY+"[Unimplemented]While in combat, throw your pickaxe to send land mines towards your enemies. On contact they deal [VAL] damage.",new double[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}, + new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.PICKAXE), //Shovel abilities SUPPRESS("Suppression",ChatColor.GRAY+"[Unimplemented] Suppresses a mob on hit for [VAL] seconds.\n\n" - + "Suppression prevents movement, attacking, exploding, and teleportation.",new double[]{0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}, - new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.SHOVEL), - ERUPTION("Eruption","Sneak while Left-clicking a mob to damage mobs for [VAL] damage and knock them up. The eruption also destroys the ground beneath you.",new double[]{11.0,13,15.0,17,19.0,21,24.0,27,30.0,40}, - new double[]{1.0,0.925,0.85,0.775,0.7,0.625,0.55,0.475,0.4,0.325},100,40,UpgradePath.SHOVEL), + + "Suppression prevents movement, attacking, exploding, and teleportation.",new double[]{0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}, + new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},100,1000,UpgradePath.SHOVEL), + ERUPTION("Eruption","Sneak while Left-clicking a mob to damage mobs for [VAL] damage and knock them up. The eruption also destroys the ground beneath you.",new double[]{11.0,12.0,13.0,14.0,16.0,18.0,20.0,23,26.0,29,32.0,35.0,37.5,39.5,50}, + new double[]{1.0,0.925,0.85,0.775,0.7,0.625,0.55,0.475,0.45,0.425,0.4,0.375,0.35,0.325,0.3},100,40,UpgradePath.SHOVEL), EARTHWAVE("Earth Wave","While in combat, destroy a block to send a wave of earth towards your enemies. Enemies standing inside of the waves take [VAL] damage every second.",new double[]{10,12,14,16,18,20,22,24,26,30}, new double[]{2.4,2.2,2.0,1.9,1.8,1.7,1.6,1.5,1.4,1.2},100,100,UpgradePath.SHOVEL), @@ -112,7 +112,7 @@ public enum ArtifactAbility { //General abilities AUTOREPAIR("Auto Repair","1% chance every second to repair [VAL] durability to the artifact item\n\nThe item must be sitting in your hotbar or must be equipped for this ability to work. This ability is less effective with no sunlight!",new double[]{3,3.5,4,4.5,5,5.5,6,6.5,7,7.5}, new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0},10,1,UpgradePath.ALL), - GREED("Greed","Increases Drop rate by [VAL]% . Health is halved, health regeneration is halved. Each hit has a [GREEDCHANCE]% chance to consume the Greed buff.\n\n"+ChatColor.RED+"Costs 1 Artifact Level.",new double[]{1,2,3,4,5,7,9,11,13,15}, + GREED("Greed","Increases Drop rate by [VAL]% . Health is halved, health regeneration is halved. Each hit has a [GREEDCHANCE]% chance to consume the Greed buff."+TemporarySkill(),new double[]{1,2,3,4,5,7,9,11,13,15}, new double[]{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0},10,10,UpgradePath.ALL), /*GROWTH("Growth",ChatColor.GRAY+"[Unimplemented] Increases artifact EXP gained by [VAL]% . Health is halved, health regeneration is halved, and damage reduction is halved. Consumes one level of Growth per level up.",new double[]{100,100,100,100,100,100,100,100,100,100}, new double[]{2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0},100,1000,UpgradePath.ALL),*/ @@ -170,6 +170,10 @@ public enum ArtifactAbility { this.upgrade=upgrade; } + private static String TemporarySkill() { + return "\n\n"+ChatColor.RED+"Costs 1 Artifact Level."; + } + public String GetName() { return this.name; } @@ -428,8 +432,8 @@ public enum ArtifactAbility { item = applyEnchantment(ability,level+1,item); AwakenedArtifact.addAP(item, -1); p.sendMessage(ChatColor.AQUA+"Successfully applied "+ChatColor.BLUE+ability.GetName()+" "+(level+1)+ChatColor.AQUA+" to your artifact!"); - if (ability==ArtifactAbility.GREED) { - //Remove a level from using Greed. + if (TwosideKeeper.TEMPORARYABILITIES.contains(ability)) { + //Remove a level from using a temporary ability. AwakenedArtifact.setLV(item, AwakenedArtifact.getLV(item)-1, p); } int apamt = AwakenedArtifact.getAP(item); @@ -550,7 +554,7 @@ public enum ArtifactAbility { text=DisplayAbility(HEALTH_REGEN,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} text=DisplayAbility(STATUS_EFFECT_RESISTANCE,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} text=DisplayAbility(SHADOWWALKER,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} - //text=DisplayAbility(SURVIVOR,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} + text=DisplayAbility(SURVIVOR,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} text=DisplayAbility(DODGE,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} text=DisplayAbility(GRACEFULDODGE,playerdmgval,targetitem,slot);msg1.addExtra(text);if(!text.getText().equalsIgnoreCase("")){++i;}if(i%4==0){msg1.addExtra("\n");} } else diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactItemType.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactItemType.java index 19c58ed..576b96c 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactItemType.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactItemType.java @@ -24,18 +24,28 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_AXE), //T8 new ItemStack(Material.DIAMOND_AXE), //T9 new ItemStack(Material.DIAMOND_AXE), //T10 + new ItemStack(Material.DIAMOND_AXE), //T11 + new ItemStack(Material.DIAMOND_AXE), //T12 + new ItemStack(Material.DIAMOND_AXE), //T13 + new ItemStack(Material.DIAMOND_AXE), //T14 + new ItemStack(Material.DIAMOND_AXE), //T15 }, new double[]{ 1.0d, //T1 - 1.5d, //T2 - 2.0d, //T3 - 2.5d, //T4 - 3.0d, //T5 - 3.5d, //T6 - 4.0d, //T7 - 4.5d, //T8 - 5.0d, //T9 - 6.0d //T10 + 1.25d, //T2 + 1.50d, //T3 + 1.75d, //T4 + 2.0d, //T5 + 2.25d, //T6 + 2.50d, //T7 + 2.75d, //T8 + 3.0d, //T9 + 3.25d, //T10 + 3.5d, //T11 + 4.5d, //T12 + 5.5d, //T13 + 6.5d, //T14 + 8.0d, //T15 }), SWORD(1,"SWORD",TierType.ALL,UpgradePath.SWORD,new String[]{"EEE","EEE","EEE"}, new ItemStack[]{ @@ -49,18 +59,28 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_SWORD), //T8 new ItemStack(Material.DIAMOND_SWORD), //T9 new ItemStack(Material.DIAMOND_SWORD), //T10 + new ItemStack(Material.DIAMOND_SWORD), //T11 + new ItemStack(Material.DIAMOND_SWORD), //T12 + new ItemStack(Material.DIAMOND_SWORD), //T13 + new ItemStack(Material.DIAMOND_SWORD), //T14 + new ItemStack(Material.DIAMOND_SWORD), //T15 }, new double[]{ 2.0d, //T1 - 3.0d, //T2 - 4.0d, //T3 - 5.0d, //T4 - 6.0d, //T5 - 7.0d, //T6 - 8.0d, //T7 - 9.0d, //T8 - 10.0d, //T9 - 12.0d //T10 + 2.5d, //T2 + 3.0d, //T3 + 3.5d, //T4 + 4.0d, //T5 + 4.5d, //T6 + 5.0d, //T7 + 5.5d, //T8 + 6.0d, //T9 + 6.5d, //T10 + 7.0d, //T11 + 8.0d, //T12 + 9.0d, //T13 + 10.0d, //T14 + 12.0d, //T15 }), PICKAXE(2,"PICKAXE",TierType.ALL,UpgradePath.PICKAXE,new String[]{"EEE","xEx","xEx"}, new ItemStack[]{ @@ -74,6 +94,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_PICKAXE), //T8 new ItemStack(Material.DIAMOND_PICKAXE), //T9 new ItemStack(Material.DIAMOND_PICKAXE), //T10 + new ItemStack(Material.DIAMOND_PICKAXE), //T11 + new ItemStack(Material.DIAMOND_PICKAXE), //T12 + new ItemStack(Material.DIAMOND_PICKAXE), //T13 + new ItemStack(Material.DIAMOND_PICKAXE), //T14 + new ItemStack(Material.DIAMOND_PICKAXE), //T15 }), HOE(3,"SCYTHE",TierType.ALL,UpgradePath.SCYTHE,new String[]{"EEx","xEx","xEx"}, new ItemStack[]{ @@ -87,6 +112,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_HOE), //T8 new ItemStack(Material.DIAMOND_HOE), //T9 new ItemStack(Material.DIAMOND_HOE), //T10 + new ItemStack(Material.DIAMOND_HOE), //T11 + new ItemStack(Material.DIAMOND_HOE), //T12 + new ItemStack(Material.DIAMOND_HOE), //T13 + new ItemStack(Material.DIAMOND_HOE), //T14 + new ItemStack(Material.DIAMOND_HOE), //T15 }), BOW(4,"BOW",TierType.ONE,UpgradePath.BOW,new String[]{"EEx","ExE","EEx"}, new ItemStack[]{ @@ -100,6 +130,11 @@ public enum ArtifactItemType { new ItemStack(Material.BOW), //T8 new ItemStack(Material.BOW), //T9 new ItemStack(Material.BOW), //T10 + new ItemStack(Material.BOW), //T11 + new ItemStack(Material.BOW), //T12 + new ItemStack(Material.BOW), //T13 + new ItemStack(Material.BOW), //T14 + new ItemStack(Material.BOW), //T15 }), SHOVEL(5,"SHOVEL",TierType.ALL,UpgradePath.SHOVEL,new String[]{"E","E","E"}, new ItemStack[]{ @@ -113,6 +148,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_SPADE), //T8 new ItemStack(Material.DIAMOND_SPADE), //T9 new ItemStack(Material.DIAMOND_SPADE), //T10 + new ItemStack(Material.DIAMOND_SPADE), //T11 + new ItemStack(Material.DIAMOND_SPADE), //T12 + new ItemStack(Material.DIAMOND_SPADE), //T13 + new ItemStack(Material.DIAMOND_SPADE), //T14 + new ItemStack(Material.DIAMOND_SPADE), //T15 }), HELMET(6,"HELMET",TierType.ARMOR,UpgradePath.ARMOR,new String[]{"EEE","ExE"}, new ItemStack[]{ @@ -126,6 +166,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_HELMET), //T8 new ItemStack(Material.DIAMOND_HELMET), //T9 new ItemStack(Material.DIAMOND_HELMET), //T10 + new ItemStack(Material.DIAMOND_HELMET), //T11 + new ItemStack(Material.DIAMOND_HELMET), //T12 + new ItemStack(Material.DIAMOND_HELMET), //T13 + new ItemStack(Material.DIAMOND_HELMET), //T14 + new ItemStack(Material.DIAMOND_HELMET), //T15 }, new double[]{ 3.75d, //T1 @@ -163,6 +208,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_CHESTPLATE), //T8 new ItemStack(Material.DIAMOND_CHESTPLATE), //T9 new ItemStack(Material.DIAMOND_CHESTPLATE), //T10 + new ItemStack(Material.DIAMOND_CHESTPLATE), //T11 + new ItemStack(Material.DIAMOND_CHESTPLATE), //T12 + new ItemStack(Material.DIAMOND_CHESTPLATE), //T13 + new ItemStack(Material.DIAMOND_CHESTPLATE), //T14 + new ItemStack(Material.DIAMOND_CHESTPLATE), //T15 }, new double[]{ 3.75d, //T1 @@ -200,6 +250,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_LEGGINGS), //T8 new ItemStack(Material.DIAMOND_LEGGINGS), //T9 new ItemStack(Material.DIAMOND_LEGGINGS), //T10 + new ItemStack(Material.DIAMOND_LEGGINGS), //T11 + new ItemStack(Material.DIAMOND_LEGGINGS), //T12 + new ItemStack(Material.DIAMOND_LEGGINGS), //T13 + new ItemStack(Material.DIAMOND_LEGGINGS), //T14 + new ItemStack(Material.DIAMOND_LEGGINGS), //T15 }, new double[]{ 3.75d, //T1 @@ -237,6 +292,11 @@ public enum ArtifactItemType { new ItemStack(Material.DIAMOND_BOOTS), //T8 new ItemStack(Material.DIAMOND_BOOTS), //T9 new ItemStack(Material.DIAMOND_BOOTS), //T10 + new ItemStack(Material.DIAMOND_BOOTS), //T11 + new ItemStack(Material.DIAMOND_BOOTS), //T12 + new ItemStack(Material.DIAMOND_BOOTS), //T13 + new ItemStack(Material.DIAMOND_BOOTS), //T14 + new ItemStack(Material.DIAMOND_BOOTS), //T15 }, new double[]{ 3.75d, //T1 @@ -274,6 +334,11 @@ public enum ArtifactItemType { new ItemStack(Material.FISHING_ROD), //T8 new ItemStack(Material.FISHING_ROD), //T9 new ItemStack(Material.FISHING_ROD), //T10 + new ItemStack(Material.FISHING_ROD), //T11 + new ItemStack(Material.FISHING_ROD), //T12 + new ItemStack(Material.FISHING_ROD), //T13 + new ItemStack(Material.FISHING_ROD), //T14 + new ItemStack(Material.FISHING_ROD), //T15 }, new double[]{ 3.75d, //T1 @@ -704,7 +769,7 @@ public enum ArtifactItemType { ouritem.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1); } }break; - case 10:{ + default:{ if (upgrade==UpgradePath.WEAPON || upgrade==UpgradePath.SWORD || upgrade==UpgradePath.AXE || diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index f12c8af..d8d5402 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -2604,16 +2604,20 @@ public class GenericFunctions { @Deprecated public static void DealDamageToMob(double dmg, LivingEntity target, LivingEntity damager, boolean truedmg) { - DealDamageToMob(dmg,target,damager,null); + DealDamageToMob(dmg,target,damager,null,""); } public static void DealDamageToMob(double dmg, LivingEntity target, Entity damager) { - DealDamageToMob(dmg,target,NewCombat.getDamagerEntity(damager),null); + DealDamageToMob(dmg,target,NewCombat.getDamagerEntity(damager),null,""); } public static void DealDamageToMob(double dmg, LivingEntity target, LivingEntity damager, ItemStack artifact) { + DealDamageToMob(dmg,target,damager,artifact,""); + } + + public static void DealDamageToMob(double dmg, LivingEntity target, LivingEntity damager, ItemStack artifact, String reason) { if (damager!=null && (target instanceof Monster)) { Monster m = (Monster)target; if (damager instanceof Player) { @@ -2623,8 +2627,13 @@ public class GenericFunctions { } aPlugin.API.sendEntityHurtAnimation(target); TwosideKeeper.log("Call event with "+dmg, 5); - TwosideKeeper.log(GenericFunctions.GetEntityDisplayName(damager)+"->"+ - GenericFunctions.GetEntityDisplayName(target)+ChatColor.WHITE+": Damage dealt was "+dmg,2); + if (damager!=null) { + TwosideKeeper.log(GenericFunctions.GetEntityDisplayName(damager)+"->"+ + GenericFunctions.GetEntityDisplayName(target)+ChatColor.WHITE+": Damage dealt was "+dmg,2); + } else { + TwosideKeeper.log(reason+"->"+ + GenericFunctions.GetEntityDisplayName(target)+ChatColor.WHITE+": Damage dealt was "+dmg,2); + } double oldhp=((LivingEntity)target).getHealth(); GenericFunctions.subtractHealth(target, damager, dmg, artifact); if (artifact!=null && @@ -2794,15 +2803,19 @@ public class GenericFunctions { //Bukkit.getPluginManager().callEvent(new EntityDamageByEntityEvent(damager,entity,DamageCause.CUSTOM,dmg+TwosideKeeper.CUSTOM_DAMAGE_IDENTIFIER)); } else { //Use old system if we cannot get a valid damager. - if (entity.getHealth()>dmg) { - entity.setHealth(entity.getHealth()-dmg); - aPlugin.API.sendEntityHurtAnimation(entity); + if (entity.getHealth()>dmg && entity instanceof Player) { + if (!AttemptRevive((Player)entity,dmg)) { + entity.setHealth(((Player)entity).getHealth()-dmg); + aPlugin.API.sendEntityHurtAnimation((Player)entity); + } } else { //List drops = new ArrayList(); //EntityDeathEvent ev = new EntityDeathEvent(entity,drops); //Bukkit.getPluginManager().callEvent(ev); //entity.setHealth(0); - entity.damage(Integer.MAX_VALUE); + if (entity instanceof Player && !AttemptRevive((Player)entity,Integer.MAX_VALUE)) { + entity.damage(Integer.MAX_VALUE); + } } } } @@ -2823,6 +2836,7 @@ public class GenericFunctions { if (pd.last_rejuvenate+TwosideKeeper.REJUVENATE_COOLDOWN<=TwosideKeeper.getServerTickTime()) { player.playSound(player.getLocation(), Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1.0f, 1.0f); addIFrame(player,40); + aPlugin.API.damageItem(player, player.getEquipment().getItemInMainHand(), 400); player.removePotionEffect(PotionEffectType.REGENERATION); player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION,200,9)); aPlugin.API.sendCooldownPacket(player, player.getEquipment().getItemInMainHand(), TwosideKeeper.REJUVENATE_COOLDOWN); @@ -2921,4 +2935,104 @@ public class GenericFunctions { ExperienceOrb orb = location.getWorld().spawn(location, ExperienceOrb.class); orb.setExperience(orb.getExperience() + expAmount); } + + public static boolean AttemptRevive(Player p, double dmg) { + boolean revived=false; + if (p.getHealth()<=dmg) { + //This means we would die from this attack. Attempt to revive the player. + //Check all artifact armor for a perk. + ItemStack[] equips = p.getEquipment().getArmorContents(); + for (int i=0;i { + p.removePotionEffect(eff.getType()); + }, 1); + } + } + p.setFireTicks(0); + p.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING,20,0)); + p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,20,0)); + } + + public static void DealExplosionDamageToEntities(Location l, double basedmg, double range) { + List nearbyentities = new ArrayList(); + nearbyentities.addAll(l.getWorld().getNearbyEntities(l, range, range, range)); + for (int i=0;i { + locationhashes.remove(hash); + TwosideKeeper.log("[Habitat]It's now clear~!",4); + }, 1); } else { if (Math.random()<=0.5) { locationhashes.put(hash, (int)(spawnamt*0.9)); diff --git a/src/sig/plugin/TwosideKeeper/NewCombat.java b/src/sig/plugin/TwosideKeeper/NewCombat.java index c02a233..63fba3a 100644 --- a/src/sig/plugin/TwosideKeeper/NewCombat.java +++ b/src/sig/plugin/TwosideKeeper/NewCombat.java @@ -400,6 +400,7 @@ public class NewCombat { if (!m.hasPotionEffect(PotionEffectType.GLOWING)) {m.setTarget(p);} if (TwosideKeeper.monsterdata.containsKey(m.getUniqueId())) { MonsterStructure ms = (MonsterStructure)TwosideKeeper.monsterdata.get(m.getUniqueId()); + ms.SetTarget(p); } else { TwosideKeeper.monsterdata.put(m.getUniqueId(),new MonsterStructure(m,p)); } diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index bd86ecf..90dc810 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -246,6 +246,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static double ARTIFACT_RARITY=1.5; //The multiplier of artifact drops. public static ServerType SERVER_TYPE=ServerType.TEST; //The type of server this is running on. public static int COMMONITEMPCT=3; + public static List TEMPORARYABILITIES = new ArrayList(); public static final int DODGE_COOLDOWN=100; public static final int DEATHMARK_COOLDOWN=240; @@ -384,6 +385,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener { banksessions = new HashMap(); monsterdata = new HashMap(); + TEMPORARYABILITIES.add(ArtifactAbility.GREED); + TEMPORARYABILITIES.add(ArtifactAbility.SURVIVOR); + //tpstracker = new Lag(); //Let's not assume there are no players online. Load their data. @@ -2791,7 +2795,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.setCancelled(true); if (ev.getPlayer().getEquipment().getItemInMainHand()==null || ev.getPlayer().getEquipment().getItemInMainHand().getType()==Material.AIR) { ev.getPlayer().getEquipment().setItemInMainHand(ev.getItemDrop().getItemStack()); - aPlugin.API.damageItem(ev.getPlayer(), ev.getItemDrop().getItemStack(), 400); GenericFunctions.PerformRejuvenate(ev.getPlayer()); ev.getPlayer().getEquipment().setItemInMainHand(new ItemStack(Material.AIR)); } @@ -2826,8 +2829,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SLOW,(ex_version)?7:15,20)); } if (!ex_version || second_charge) { - aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), 160); - aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), 160); + aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), LINEDRIVE_COOLDOWN); + aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), LINEDRIVE_COOLDOWN); pd.last_strikerspell=getServerTickTime(); } ev.getPlayer().playSound(ev.getPlayer().getLocation(), Sound.UI_BUTTON_CLICK, 1.0f, 1.0f); @@ -2893,8 +2896,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (ex_version) { Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { - aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), 160); - aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), 160); + aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), LINEDRIVE_COOLDOWN); + aPlugin.API.sendCooldownPacket(ev.getPlayer(), ev.getItemDrop().getItemStack(), LINEDRIVE_COOLDOWN); pd.last_strikerspell=getServerTickTime(); } },17); @@ -3804,8 +3807,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (ev.getCause()==DamageCause.THORNS && GenericFunctions.isRanger(p)) { dodgechance=1; - p.setHealth(p.getHealth()-0.25); - p.playSound(p.getLocation(), Sound.ENCHANT_THORNS_HIT, 0.8f, 3.0f); + double dmg = p.getHealth()-0.25; + if (!GenericFunctions.AttemptRevive(p,dmg)) { + ev.setDamage(dmg); + p.playSound(p.getLocation(), Sound.ENCHANT_THORNS_HIT, 0.8f, 3.0f); + } else { + ev.setCancelled(true); + } } PlayerStructure pd = (PlayerStructure)playerdata.get(p.getUniqueId()); @@ -3835,6 +3843,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } + if (!ev.isCancelled() && GenericFunctions.AttemptRevive(p,ev.getFinalDamage())) { + ev.setCancelled(true); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { if (p!=null) { @@ -3867,7 +3879,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } - ev.setDamage(NewCombat.CalculateDamageReduction(ev.getDamage()*EXPLOSION_DMG_MULT*((100-protectionlevel)*0.01),m,null)); + double dmg = NewCombat.CalculateDamageReduction(ev.getDamage()*EXPLOSION_DMG_MULT*((100-protectionlevel)*0.01),m,null); + ev.setDamage(dmg); //log("Damage is "+ev.getDamage(),4); //ev.setDamage(CalculateDamageReduction(ev.getDamage()*EXPLOSION_DMG_MULT,p,null)); } @@ -3926,20 +3939,22 @@ public class TwosideKeeper extends JavaPlugin implements Listener { log("This is a creeper.",5); final Creeper c = (Creeper)ev.getEntity(); if (c.getCustomName()!=null) { - log("Custom name is "+c.getCustomName(),4); + log("Custom name is "+c.getCustomName(),4); if (c.getCustomName().contains("Dangerous")) { log("Preparing to explode.",5); Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { c.getLocation().getWorld().createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),4.0f,false,false); + GenericFunctions.DealExplosionDamageToEntities(c.getLocation(), 6, 4); }} - ,10); + ,10); } else if (c.getCustomName().contains("Deadly")) { log("Preparing to explode.",5); Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { c.getLocation().getWorld().createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),6.0f,true,false); + GenericFunctions.DealExplosionDamageToEntities(c.getLocation(), 12, 6); }} ,10); } else @@ -3952,12 +3967,14 @@ public class TwosideKeeper extends JavaPlugin implements Listener { Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { c.getLocation().getWorld().createExplosion(c.getLocation().getX()+offset.getX(),c.getLocation().getY()+offset.getY(),c.getLocation().getZ()+offset.getZ(),6.0f,true,false); + GenericFunctions.DealExplosionDamageToEntities(c.getLocation(), 12, 6); }} ,val+4); } Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { c.getLocation().getWorld().createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),8.0f,true,false); + GenericFunctions.DealExplosionDamageToEntities(c.getLocation(), 24, 8); }} ,30); } @@ -4012,10 +4029,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.setDamage(DamageModifier.BASE,storeddmg-CUSTOM_DAMAGE_IDENTIFIER); ev.setDamage(storeddmg-CUSTOM_DAMAGE_IDENTIFIER); log("New Damage: "+ev.getFinalDamage(),4); - if (ev.getEntity() instanceof Monster && - ev.getDamager() instanceof Player) { - NewCombat.addMonsterToTargetList((Monster)ev.getEntity(), (Player)ev.getDamager()); - } } else { double dmg = 0.0; if (ev.getEntity() instanceof Player) { @@ -4065,6 +4078,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } if (ev.getCause()==DamageCause.THORNS) { if (ev.getEntity() instanceof LivingEntity) { + NewCombat.setupTrueDamage(ev); //Apply this as true damage. ((LivingEntity)ev.getEntity()).setNoDamageTicks(10); ((LivingEntity)ev.getEntity()).damage(Math.min(GenericFunctions.getMaxThornsLevel((LivingEntity)ev.getDamager()),((LivingEntity)ev.getEntity()).getHealth()/0.05)); } @@ -4076,8 +4090,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (ev.getEntity() instanceof LivingEntity) { ((LivingEntity)ev.getEntity()).setNoDamageTicks(10); final double oldhp=((LivingEntity)ev.getEntity()).getHealth(); - ev.setDamage(DamageModifier.BASE,dmg); - ev.setDamage(dmg); + + if (ev.getEntity() instanceof Player) { + if (!GenericFunctions.AttemptRevive((Player)ev.getEntity(), dmg)) { + ev.setDamage(DamageModifier.BASE,dmg); + ev.setDamage(dmg); + } else { + ev.setCancelled(true); + } + } if (NewCombat.getDamagerEntity(ev.getDamager()) instanceof Player) { if (ev.getDamager() instanceof Projectile) { ev.getDamager().remove(); @@ -4095,9 +4116,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { aPlugin.API.damageItem(p, p.getEquipment().getItemInMainHand(), 1); } GenericFunctions.knockOffGreed(p); - if (ev.getEntity() instanceof Monster) { - NewCombat.addMonsterToTargetList((Monster)ev.getEntity(), (Player)ev.getDamager()); - } } } } //Negative damage doesn't make sense. We'd apply it normally. @@ -4284,8 +4302,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public void run() { if (mer.getLocation().getBlockY()<48) { mer.getWorld().createExplosion(mer.getLocation().getBlockX(), mer.getLocation().getBlockY(), mer.getLocation().getBlockZ(), 3.0f, false, true); + GenericFunctions.DealExplosionDamageToEntities(mer.getLocation(), 8, 3); } else { mer.getWorld().createExplosion(mer.getLocation().getBlockX(), mer.getLocation().getBlockY(), mer.getLocation().getBlockZ(), 6.0f, false, false); + GenericFunctions.DealExplosionDamageToEntities(mer.getLocation(), 8, 6); } }} ,30); @@ -4311,8 +4331,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public void run() { if (mer1.getLocation().getBlockY()<48) { mer1.getWorld().createExplosion(mer1.getLocation().getBlockX(), mer1.getLocation().getBlockY(), mer1.getLocation().getBlockZ(), 5.0f, true, true); + GenericFunctions.DealExplosionDamageToEntities(mer1.getLocation(), 12, 5); } else { mer1.getWorld().createExplosion(mer1.getLocation().getBlockX(), mer1.getLocation().getBlockY(), mer1.getLocation().getBlockZ(), 6.0f, true, false); + GenericFunctions.DealExplosionDamageToEntities(mer1.getLocation(), 12, 6); } }} ,30); @@ -4358,7 +4380,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { DeathManager.continueAction(p); } } - },20); + },1); PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); pd.hasDied=false; } @@ -4484,7 +4506,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { GenericFunctions.RemovePermEnchantmentChance(p.getEquipment().getItemInMainHand(), p); if (ArtifactAbility.containsEnchantment(ArtifactAbility.EARTHWAVE, p.getEquipment().getItemInMainHand()) && pd.target!=null && !pd.target.isDead() && pd.last_shovelspell lore = m.getLore(); @@ -5152,7 +5180,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ItemStack newitem1 = Artifact.convert(new ItemStack(Material.STAINED_GLASS_PANE,1,ev.getInventory().getItem(slot_found).getDurability())); ItemMeta m = newitem1.getItemMeta(); List lore = m.getLore(); - int tier=10; + int tier=14; lore.add(0,ChatColor.GOLD+""+ChatColor.BOLD+"T"+(tier)+" Crafting Recipe"); //lore.add(1,ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+ChatColor.RESET+ChatColor.GOLD+" "+GenericFunctions.CapitalizeFirstLetters(item.getItemName())+" Recipe");