diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 31a52b7..e259cf9 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/projectBuilder.xml b/projectBuilder.xml index ae62ecf..55588ea 100644 --- a/projectBuilder.xml +++ b/projectBuilder.xml @@ -1,4 +1,5 @@ + diff --git a/src/plugin.yml b/src/plugin.yml index da98925..e55d5a8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.7.0a3 +version: 3.7.1 commands: money: description: Tells the player the amount of money they are holding. diff --git a/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java b/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java index b986677..f962b40 100644 --- a/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java +++ b/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java @@ -80,7 +80,7 @@ public class AwakenedArtifact { item = setEXP(item,totalval%1000); item = addAP(item,1); double potentialred = 10.0d; - potentialred/=1+(ArtifactAbility.calculateValue(ArtifactAbility.PRESERVATION, artifact.getEnchantmentLevel(Enchantment.LUCK), ArtifactAbility.getEnchantmentLevel(ArtifactAbility.PRESERVATION, artifact))/100d); + potentialred/=1+(GenericFunctions.getAbilityValue(ArtifactAbility.PRESERVATION, artifact)/100d); TwosideKeeper.log("Potential reduction is reduced by "+(10-potentialred), 4); if (ArtifactAbility.containsEnchantment(ArtifactAbility.GREED, item)) { if (ArtifactAbility.getEnchantmentLevel(ArtifactAbility.GREED, item)>1) { @@ -90,7 +90,7 @@ public class AwakenedArtifact { } } if (getPotential(item)>potentialred) { - item = addPotential(item,(int)(-getPotential(item)/potentialred)); + item = setPotential(item,(int)(getPotential(item)-potentialred)); if (Math.random() < (potentialred % 1)) { item = addPotential(item,1); } @@ -203,6 +203,21 @@ public class AwakenedArtifact { return -1; } } + public static ItemStack setPotential(ItemStack artifact, int amt) { + if (GenericFunctions.isArtifactEquip(artifact)) { + ItemMeta m = artifact.getItemMeta(); + List lore = m.getLore(); + int potential = amt; + String potentialline = lore.get(4).split("Potential: ")[0]+"Potential: "+drawPotential(artifact,potential); + lore.set(4, potentialline); + m.setLore(lore); + artifact.setItemMeta(m); + return artifact; + } else { + TwosideKeeper.log("Could not get the Potential value for artifact "+artifact.toString(), 1); + return artifact; + } + } public static ItemStack addPotential(ItemStack artifact, int amt) { if (GenericFunctions.isArtifactEquip(artifact)) { ItemMeta m = artifact.getItemMeta(); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index 194c624..eef9d7d 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -2562,7 +2562,7 @@ public class GenericFunctions { TwosideKeeper.log(GenericFunctions.GetEntityDisplayName(damager)+"->"+ GenericFunctions.GetEntityDisplayName(target)+ChatColor.WHITE+": Damage dealt was "+dmg,2); double oldhp=((LivingEntity)target).getHealth(); - GenericFunctions.subtractHealth(target, dmg); + GenericFunctions.subtractHealth(target, damager, dmg); TwosideKeeper.log(ChatColor.BLUE+" "+oldhp+"->"+((LivingEntity)target).getHealth()+" HP",3); } @@ -2590,6 +2590,21 @@ public class GenericFunctions { } } + public static int getPotionEffectDuration(PotionEffectType type, LivingEntity ent) { + if (ent.hasPotionEffect(type)) { + for (int j=0;jdmg) { - entity.setHealth(entity.getHealth()-dmg); + public static void subtractHealth(LivingEntity entity, LivingEntity damager, double dmg) { + if (damager instanceof Player) { + TwosideKeeper.log("Damage goes from "+dmg+"->"+(dmg+TwosideKeeper.CUSTOM_DAMAGE_IDENTIFIER),5); + entity.damage(dmg+TwosideKeeper.CUSTOM_DAMAGE_IDENTIFIER,damager); + //Bukkit.getPluginManager().callEvent(new EntityDamageByEntityEvent(damager,entity,DamageCause.CUSTOM,dmg+TwosideKeeper.CUSTOM_DAMAGE_IDENTIFIER)); } else { - /*List drops = new ArrayList(); - EntityDeathEvent ev = new EntityDeathEvent(entity,drops); - Bukkit.getPluginManager().callEvent(ev); - entity.setHealth(0);*/ - entity.damage(Integer.MAX_VALUE); + //Use old system if we cannot get a valid damager. + if (entity.getHealth()>dmg) { + entity.setHealth(entity.getHealth()-dmg); + aPlugin.API.sendEntityHurtAnimation(entity); + } else { + //List drops = new ArrayList(); + //EntityDeathEvent ev = new EntityDeathEvent(entity,drops); + //Bukkit.getPluginManager().callEvent(ev); + //entity.setHealth(0); + entity.damage(Integer.MAX_VALUE); + } } } @@ -2702,4 +2725,19 @@ public class GenericFunctions { } return false; } + + public static boolean isSoftBlock(Block b) { + if (b.getType()==Material.SAND || + b.getType()==Material.DIRT || + b.getType()==Material.GRASS || + b.getType()==Material.GRAVEL || + b.getType()==Material.CLAY || + b.getType()==Material.SOIL || + b.getType()==Material.SNOW || + b.getType()==Material.SOUL_SAND) { + return true; + } else { + return false; + } + } } diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/Habitation.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/Habitation.java new file mode 100644 index 0000000..6ba5b42 --- /dev/null +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/Habitation.java @@ -0,0 +1,15 @@ +package sig.plugin.TwosideKeeper.HelperStructures.Common; + +import java.util.HashMap; +import java.util.UUID; + +import org.bukkit.Location; + +public class Habitation { + HashMap locationhashes; + HashMap startinglocs; + + public Habitation() { + + } +} diff --git a/src/sig/plugin/TwosideKeeper/NewCombat.java b/src/sig/plugin/TwosideKeeper/NewCombat.java index b301e7d..e7e89a7 100644 --- a/src/sig/plugin/TwosideKeeper/NewCombat.java +++ b/src/sig/plugin/TwosideKeeper/NewCombat.java @@ -17,6 +17,7 @@ import org.bukkit.entity.Arrow; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.FallingBlock; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.MagmaCube; import org.bukkit.entity.Monster; @@ -30,8 +31,11 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; import com.google.common.collect.Iterables; @@ -71,6 +75,7 @@ public class NewCombat { ev.setDamage(DamageModifier.values()[i],0); } } + ev.setDamage(0); } public static double calculatePlayerDamage(LivingEntity target, Entity damager) { @@ -80,7 +85,7 @@ public class NewCombat { if (shooter!=null) { if (shooter instanceof Player) { Player p = (Player)shooter; - playerPerformMiscActions(p); + playerPerformMiscActions(p,target); if (target instanceof Monster) { Monster m = (Monster)target; setMonsterTarget(m,p); @@ -88,6 +93,7 @@ public class NewCombat { } } finaldmg += calculateTotalDamage(target, damager); + finaldmg = calculateAbsorptionHearts(target, finaldmg); } if (shooter!=null) { @@ -307,9 +313,9 @@ public class NewCombat { return finaldmg; } - static void playerPerformMiscActions(Player p) { + static void playerPerformMiscActions(Player p, Entity target) { //GenericFunctions.PerformDodge(p); - castEruption(p); + castEruption(p, target); removePermEnchantments(p); } @@ -319,36 +325,45 @@ public class NewCombat { } } - private static void castEruption(Player p) { + private static void castEruption(Player p, Entity target) { PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); if (GenericFunctions.isArtifactEquip(p.getEquipment().getItemInMainHand()) && p.getEquipment().getItemInMainHand().getType().toString().contains("SPADE") && p.isSneaking()) { if (ArtifactAbility.containsEnchantment(ArtifactAbility.ERUPTION, p.getEquipment().getItemInMainHand()) && pd.last_shovelspell nearby = p.getNearbyEntities(2, 2, 2); + List finallist = new ArrayList(); + List nearby = target.getNearbyEntities(2, 2, 2); for (int i=0;i 0) { + lvsToRemove++; + } + RemoveAbsorptionLevels(target,2); + } + + private static void RemoveAbsorptionLevels(LivingEntity target, int amountOfAbsorptionLevels) { + int duration = GenericFunctions.getPotionEffectDuration(PotionEffectType.ABSORPTION, target); + int lv = GenericFunctions.getPotionEffectLevel(PotionEffectType.ABSORPTION, target); + target.removePotionEffect(PotionEffectType.ABSORPTION); + if (amountOfAbsorptionLevels=CUSTOM_DAMAGE_IDENTIFIER) { + log("Damage Breakdown:",4); + double storeddmg=ev.getDamage(DamageModifier.BASE); + for (int i=0;i"+ - GenericFunctions.GetEntityDisplayName(ev.getEntity())+ChatColor.GRAY+": Damage dealt was "+dmg,2); - } - if (ev.getCause()==DamageCause.THORNS) { - if (ev.getEntity() instanceof LivingEntity) { - ((LivingEntity)ev.getEntity()).setNoDamageTicks(10); - ((LivingEntity)ev.getEntity()).damage(Math.min(GenericFunctions.getMaxThornsLevel((LivingEntity)ev.getDamager()),((LivingEntity)ev.getEntity()).getHealth()/0.05)); + log("Stored Damage is "+storeddmg+". CUSTOM_DAMAGE_IDENTIFIER:"+CUSTOM_DAMAGE_IDENTIFIER+"\n...Subtracted damage is "+(storeddmg-CUSTOM_DAMAGE_IDENTIFIER),4); + ev.setDamage(DamageModifier.BASE,storeddmg-CUSTOM_DAMAGE_IDENTIFIER); + ev.setDamage(storeddmg-CUSTOM_DAMAGE_IDENTIFIER); + log("New Damage: "+ev.getFinalDamage(),4); + } else { + double dmg = 0.0; + if (ev.getEntity() instanceof Player) { + Player p = (Player)ev.getEntity(); + if (p.hasPotionEffect(PotionEffectType.GLOWING)) { + ev.setCancelled(true); } - } else - if (dmg>=0) { - NewCombat.setupTrueDamage(ev); //Apply this as true damage. - ev.setDamage(0); - if (ev.getEntity() instanceof LivingEntity) { - ((LivingEntity)ev.getEntity()).setNoDamageTicks(10); - double oldhp=((LivingEntity)ev.getEntity()).getHealth(); - GenericFunctions.subtractHealth((LivingEntity)ev.getEntity(),dmg); - log(ChatColor.BLUE+" "+oldhp+"->"+((LivingEntity)ev.getEntity()).getHealth()+" HP",3); + double dodgechance = GenericFunctions.CalculateDodgeChance(p); + 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); + } + + PlayerStructure pd = (PlayerStructure)playerdata.get(p.getUniqueId()); + + if (pd.fulldodge) { + pd.fulldodge=false; + } + + if (Math.random()<=dodgechance) { + //Cancel this event, we dodged the attack. + p.playSound(p.getLocation(), Sound.ENTITY_PLAYER_ATTACK_SWEEP, 3.0f, 1.0f); + log("Triggered Dodge.",3); + for (int i=0;i"+ + GenericFunctions.GetEntityDisplayName(ev.getEntity())+ChatColor.GRAY+": Damage dealt was "+dmg,2); + } + if (ev.getCause()==DamageCause.THORNS) { + if (ev.getEntity() instanceof LivingEntity) { + ((LivingEntity)ev.getEntity()).setNoDamageTicks(10); + ((LivingEntity)ev.getEntity()).damage(Math.min(GenericFunctions.getMaxThornsLevel((LivingEntity)ev.getDamager()),((LivingEntity)ev.getEntity()).getHealth()/0.05)); + } + } else + if (dmg>=0) { + NewCombat.setupTrueDamage(ev); //Apply this as true damage. + ev.setDamage(0); + //ev.setCancelled(true); + if (ev.getEntity() instanceof LivingEntity) { + ((LivingEntity)ev.getEntity()).setNoDamageTicks(10); + double oldhp=((LivingEntity)ev.getEntity()).getHealth(); + if (NewCombat.getDamagerEntity(ev.getDamager()) instanceof Player) { + GenericFunctions.subtractHealth((LivingEntity)ev.getEntity(), NewCombat.getDamagerEntity(ev.getDamager()), dmg); + ev.setCancelled(true); + } else { + //We will instead apply damage directly. + ev.setDamage(dmg); + } + log(ChatColor.BLUE+" "+oldhp+"->"+((LivingEntity)ev.getEntity()).getHealth()+" HP",3); + } + } //Negative damage doesn't make sense. We'd apply it normally. + } } } @@ -4215,13 +4255,14 @@ public class TwosideKeeper extends JavaPlugin implements Listener { affected.get(i).setNoDamageTicks(0); if (ev.getEntity().getCustomName().contains("EW ")) { double dmgdealt=Double.parseDouble(ev.getEntity().getCustomName().split(" ")[1]); + log("Dealing "+dmgdealt+" damage. Player is "+Bukkit.getPlayer(ev.getEntity().getCustomName().split(" ")[2]).getName(),4); double reduceddmg = CalculateDamageReduction(dmgdealt,affected.get(i),null); DamageLogger.AddNewCalculation(Bukkit.getPlayer(ev.getEntity().getCustomName().split(" ")[2]), ChatColor.GREEN+"Earth Wave", dmgdealt, reduceddmg); GenericFunctions.DealDamageToMob(reduceddmg, affected.get(i), Bukkit.getPlayer(ev.getEntity().getCustomName().split(" ")[2])); } else if (ev.getEntity().getCustomName().contains("LD ")) { double dmgdealt=Double.parseDouble(ev.getEntity().getCustomName().split(" ")[1]); - log("Dealing "+dmgdealt+" damage",4); + log("Dealing "+dmgdealt+" damage. Player is "+Bukkit.getPlayer(ev.getEntity().getCustomName().split(" ")[2]).getName(),4); double reduceddmg = CalculateDamageReduction(dmgdealt,affected.get(i),null); DamageLogger.AddNewCalculation(Bukkit.getPlayer(ev.getEntity().getCustomName().split(" ")[2]), ChatColor.GREEN+"Line Drive", dmgdealt, reduceddmg); GenericFunctions.DealDamageToMob(reduceddmg, affected.get(i), Bukkit.getPlayer(ev.getEntity().getCustomName().split(" ")[2])); diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java index 6a55acc..284e8ff 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java @@ -85,6 +85,9 @@ public final class TwosideKeeperAPI { public static int getArtifactAbilityLevel(ArtifactAbility ability, ItemStack item) { return ArtifactAbility.getEnchantmentLevel(ability, item); } + public static double getArtifactAbilityValue(ArtifactAbility ability, ItemStack item) { + return GenericFunctions.getAbilityValue(ability, item); + } //Time Commands. public static long getServerTickTime() { @@ -136,12 +139,15 @@ public final class TwosideKeeperAPI { public static double getModifiedDamage(double dmg_amt, LivingEntity p) { return TwosideKeeper.CalculateDamageReduction(dmg_amt, p, p); } + @Deprecated public static void DealModifiedDamageToEntity(int dmg, LivingEntity damager, LivingEntity target) { GenericFunctions.DealDamageToMob(dmg, target, damager, false); } + @Deprecated public static void DealTrueDamageToEntity(int dmg, LivingEntity damager, LivingEntity target) { GenericFunctions.DealDamageToMob(dmg, target, damager, true); } + @Deprecated public static void DealModifiedDamageToEntity(ItemStack weapon, LivingEntity damager, LivingEntity target) { TwosideKeeper.DealDamageToMob(weapon, damager, target); }