->Fixed a bug with legacy artifact items causing errors.
->Fixed a bug where players would randomly lose items permanently from the buyback screen by clicking around on the bottom inventory. ->Zombie Leaders no longer randomly have very low amounts of health. ->World shop Purchase messages now survive server restarts so players are aware of all items that were sold. ->Purchasing items from shops now attempts to gives you the item in your inventory directly rather than just dropping it on the ground. ->Localize all Music Discs properly. ->Skulls and Heads have been localized. ->Add a sound for when Deadly Creepers get primed to explode. (Make the sound consistent with Hellfires.) ->Items dropped after a player dies and buys back items will be invulnerable to fires, explosions, etc. ->Fire effects and explosions for Hellfire monsters and angry Creepers has been dramatically reduced! ->Global attack cooldown against Elite monsters reduced from 2.00 seconds to 1.75 seconds. ->Custom arrows no longer show an irrelevant potion effect type in their description. ->Party system has been revamped to be distance-based instead of region-based. Players can be up to 32 blocks away from each other to be considered in the same party. Parties that are nearby other parties will automatically have their parties combined. ->Party bonuses are now applied for each 'additional' party member, not for total party members. (Before you would get +20% Damage / Defense with you and one other party member. Now you only get +10% Damage / Defense.) ->Added IsInSameParty(p,p2), isSetItem(item), getItemSet(item), getItemTier(item) to API. ->Fix Defender Damage Reduction for other party members. ->Zombies can now hold decorative shields. ->Shields display properly when linked in chat now. ->Fixed a bug where respawning on a location with a Nether Portal prevented you from buying back items. ->Bow Artifact Experience is now buffered and held back until you are no longer in combat to prevent the bow from cancelling drawbacks due to XP updates. ->Fixed Lifesteal not being able to fully heal a player.
This commit is contained in:
parent
c4e49639c6
commit
f8efbec088
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
name: TwosideKeeper
|
||||
main: sig.plugin.TwosideKeeper.TwosideKeeper
|
||||
version: 3.8.2r2
|
||||
version: 3.8.3
|
||||
commands:
|
||||
money:
|
||||
description: Tells the player the amount of money they are holding.
|
||||
|
@ -76,6 +76,7 @@ public class EliteMonster {
|
||||
|
||||
List<Player> targetlist = new ArrayList<Player>();
|
||||
List<Player> participantlist = new ArrayList<Player>();
|
||||
HashMap<String,Double> dpslist = new HashMap<String,Double>();
|
||||
//Contains all functionality specific to Elite Monsters.
|
||||
//These are checked every 5 ticks, so have very high control over the monster itself.
|
||||
EliteMonster(Monster m) {
|
||||
@ -117,6 +118,7 @@ public class EliteMonster {
|
||||
}
|
||||
m.teleport(myspawn);
|
||||
m.setHealth(m.getMaxHealth());
|
||||
dpslist.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,7 +276,7 @@ public class EliteMonster {
|
||||
}
|
||||
|
||||
//Triggers when this mob is hit.
|
||||
public void runHitEvent(LivingEntity damager) {
|
||||
public void runHitEvent(LivingEntity damager, double dmg) {
|
||||
if (!targetlist.contains(damager) && (damager instanceof Player)) {
|
||||
targetlist.add((Player)damager);
|
||||
}
|
||||
@ -284,8 +286,13 @@ public class EliteMonster {
|
||||
}
|
||||
if (damager instanceof Player) {
|
||||
Player p = (Player)damager;
|
||||
double currentdps=0;
|
||||
if (dpslist.containsKey(p.getName())) {
|
||||
currentdps = dpslist.get(p.getName());
|
||||
}
|
||||
dpslist.put(p.getName(), currentdps+dmg);
|
||||
if (!p.hasPotionEffect(PotionEffectType.WEAKNESS)) {
|
||||
p.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS,20*2,9),true);
|
||||
p.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS,35,9),true);
|
||||
}
|
||||
}
|
||||
last_regen_time=TwosideKeeper.getServerTickTime();
|
||||
@ -513,4 +520,34 @@ public class EliteMonster {
|
||||
public void removeAllHealthbars() {
|
||||
bar.removeAll();
|
||||
}
|
||||
|
||||
public String generateDPSReport() {
|
||||
//Sorts a list of players by DPS contribution.
|
||||
List<Double> sorted_dmg = new ArrayList<Double>();
|
||||
List<String> sorted_pl = new ArrayList<String>();
|
||||
double totaldmg = 0;
|
||||
for (String pl : dpslist.keySet()) {
|
||||
double dmg = dpslist.get(pl);
|
||||
int slot = 0;
|
||||
totaldmg+=dmg;
|
||||
for (int i=0;i<sorted_dmg.size();i++) {
|
||||
if (dmg>sorted_dmg.get(i)) {
|
||||
break;
|
||||
} else {
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
sorted_pl.add(slot,pl);
|
||||
sorted_dmg.add(slot,dmg);
|
||||
}
|
||||
StringBuilder finalstr = new StringBuilder();
|
||||
DecimalFormat df = new DecimalFormat("0.00");
|
||||
for (int i=0;i<sorted_pl.size();i++) {
|
||||
if (finalstr.length()!=0) {
|
||||
finalstr.append("\n");
|
||||
}
|
||||
finalstr.append(sorted_pl.get(i)+": "+sorted_dmg.get(i)+" dmg ("+df.format((sorted_dmg.get(i)/totaldmg)*100)+"%)");
|
||||
}
|
||||
return finalstr.toString();
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.material.Wool;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
@ -652,6 +653,12 @@ public class GenericFunctions {
|
||||
case RABBIT_FOOT:{
|
||||
return "Rabbit's Foot";
|
||||
}
|
||||
case GOLD_RECORD:{
|
||||
return "Music Disc";
|
||||
}
|
||||
case GREEN_RECORD:{
|
||||
return "Music Disc";
|
||||
}
|
||||
case RECORD_10:{
|
||||
return "Music Disc";
|
||||
}
|
||||
@ -735,7 +742,31 @@ public class GenericFunctions {
|
||||
return "Sign";
|
||||
}
|
||||
case SKULL_ITEM:{
|
||||
return "Skull";
|
||||
switch (type.getDurability()) {
|
||||
case 0:{
|
||||
return "Skeleton Skull";
|
||||
}
|
||||
case 1:{
|
||||
return "Wither Skeleton Skull";
|
||||
}
|
||||
case 2:{
|
||||
return "Zombie Head";
|
||||
}
|
||||
case 3:{
|
||||
SkullMeta sm = (SkullMeta)type.getItemMeta();
|
||||
if (sm.hasOwner()) {
|
||||
return sm.getOwner()+"'s Head";
|
||||
} else {
|
||||
return "Head";
|
||||
}
|
||||
}
|
||||
case 4:{
|
||||
return "Creeper Head";
|
||||
}
|
||||
case 5:{
|
||||
return "Dragon Head";
|
||||
}
|
||||
}
|
||||
}
|
||||
case SMOOTH_BRICK:{
|
||||
switch (type.getDurability()) {
|
||||
@ -2671,7 +2702,13 @@ public class GenericFunctions {
|
||||
(le instanceof Player)) {
|
||||
Player p = (Player)le;
|
||||
double ratio = 1.0-NewCombat.CalculateDamageReduction(1,target,p);
|
||||
if (artifact.getType()!=Material.BOW) {
|
||||
AwakenedArtifact.addPotentialEXP(le.getEquipment().getItemInMainHand(), (int)((ratio*20)+5), p);
|
||||
} else {
|
||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||
pd.storedbowxp += (int)((ratio*20)+5);
|
||||
pd.lasthittarget=TwosideKeeper.getServerTickTime();
|
||||
}
|
||||
NewCombat.increaseArtifactArmorXP(p,(int)(ratio*10)+1);
|
||||
}
|
||||
|
||||
@ -2840,11 +2877,13 @@ public class GenericFunctions {
|
||||
entity.setNoDamageTicks(0);
|
||||
entity.setMaximumNoDamageTicks(0);
|
||||
}
|
||||
dmg = NewCombat.calculateDefenderAbsorbtion(entity, dmg);
|
||||
boolean hitallowed=enoughTicksHavePassed(entity,damager);
|
||||
if (hitallowed) {
|
||||
TwosideKeeper.log("Damage is "+dmg, 3);
|
||||
TwosideKeeper.log("Damage is "+dmg, 4);
|
||||
updateNoDamageTickMap(entity,damager);
|
||||
if (damager instanceof Player) {
|
||||
if (damager instanceof Player &&
|
||||
!(entity instanceof Player)) {
|
||||
Player p = (Player)damager;
|
||||
|
||||
TwosideKeeper.log("Damage goes from "+dmg+"->"+(dmg+TwosideKeeper.CUSTOM_DAMAGE_IDENTIFIER),5);
|
||||
@ -3491,4 +3530,40 @@ public class GenericFunctions {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void RandomlyCreateFire(Location loc, int size) {
|
||||
Block b = loc.getBlock();
|
||||
//Pick a random block
|
||||
for (int i=-size;i<size+1;i++) {
|
||||
for (int j=-size;j<size+1;j++) {
|
||||
for (int k=-size;k<size+1;k++) {
|
||||
TwosideKeeper.log("Block "+i+","+j+","+k+" is "+b.getType(),5);
|
||||
Block testblock = b.getRelative(i, j, k);
|
||||
if (testblock!=null && testblock.getType()==Material.AIR &&
|
||||
testblock.getRelative(i,j-1,k)!=null &&
|
||||
testblock.getRelative(i,j-1,k).getType()!=Material.AIR) {
|
||||
//Random chance this will be set on fire.
|
||||
if (Math.random()<=0.03) {
|
||||
testblock.setType(Material.FIRE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Location FindRandomFreeLocation(Location loc) {
|
||||
Location testloc = loc;
|
||||
if ((testloc.getBlock().getType()==Material.PORTAL ||
|
||||
testloc.getBlock().getType()==Material.ENDER_PORTAL) ||
|
||||
testloc.getBlock().getRelative(0, 1, 0).getType()!=Material.AIR) {
|
||||
do {
|
||||
testloc = testloc.add(2-Math.random()*4,2-Math.random()*4,2-Math.random()*4);
|
||||
TwosideKeeper.log("Testing block "+testloc.getBlock().getType(), 2);
|
||||
} while ((testloc.getBlock().getType()==Material.PORTAL ||
|
||||
testloc.getBlock().getType()==Material.ENDER_PORTAL) ||
|
||||
testloc.getBlock().getRelative(0, 1, 0).getType()!=Material.AIR);
|
||||
}
|
||||
return testloc;
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ public enum ItemSet {
|
||||
item.getItemMeta().hasLore()) {
|
||||
List<String> lore = item.getItemMeta().getLore();
|
||||
for (int i=0;i<lore.size();i++) {
|
||||
if (lore.get(i).contains(ChatColor.GOLD+""+ChatColor.BOLD+"T")) {
|
||||
if (lore.get(i).contains(ChatColor.GOLD+""+ChatColor.BOLD+"T") && !lore.get(i).contains("Recipe")) {
|
||||
//This is the tier line.
|
||||
return ItemSet.valueOf(lore.get(i).replace(ChatColor.GOLD+""+ChatColor.BOLD+"T", "").split(" ")[1].toUpperCase());
|
||||
}
|
||||
|
@ -21,16 +21,16 @@ public class ShopPurchase {
|
||||
int amt;
|
||||
boolean sell;
|
||||
|
||||
public ShopPurchase(String p, Player customer, ItemStack item, double money, int amt) {
|
||||
public ShopPurchase(String p, String customer, ItemStack item, double money, int amt) {
|
||||
ShopPurchase(p,customer,item,money,amt,true); //Assume this is a selling purchase by default.
|
||||
}
|
||||
public ShopPurchase(String p, Player customer, ItemStack item, double money, int amt, boolean sell) {
|
||||
public ShopPurchase(String p, String customer, ItemStack item, double money, int amt, boolean sell) {
|
||||
ShopPurchase(p,customer,item,money,amt,sell); //Assume this is a selling purchase by default.
|
||||
}
|
||||
|
||||
public void ShopPurchase(String p, Player customer, ItemStack item, double money, int amt, boolean sell) {
|
||||
public void ShopPurchase(String p, String customer, ItemStack item, double money, int amt, boolean sell) {
|
||||
this.player = p;
|
||||
this.customer=customer.getName();
|
||||
this.customer=customer;
|
||||
this.item=item;
|
||||
this.money = money;
|
||||
this.amt=amt;
|
||||
@ -43,6 +43,18 @@ public class ShopPurchase {
|
||||
public String getCustomer() {
|
||||
return customer;
|
||||
}
|
||||
public ItemStack getItem() {
|
||||
return item;
|
||||
}
|
||||
public double getMoney() {
|
||||
return money;
|
||||
}
|
||||
public int getAmt() {
|
||||
return amt;
|
||||
}
|
||||
public boolean getSell() {
|
||||
return sell;
|
||||
}
|
||||
|
||||
public TextComponent announcementString() {
|
||||
DecimalFormat df = new DecimalFormat("0.00");
|
||||
|
@ -12,6 +12,7 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Banner;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.block.DoubleChest;
|
||||
@ -27,6 +28,7 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BannerMeta;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
import org.bukkit.inventory.meta.BookMeta;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
@ -217,9 +219,25 @@ public class WorldShop {
|
||||
}
|
||||
}
|
||||
|
||||
if (item.getType()==Material.BANNER) {
|
||||
if (item.getItemMeta() instanceof BannerMeta) {
|
||||
BannerMeta banner = (BannerMeta)item.getItemMeta();
|
||||
if (item.getType()==Material.BANNER || item.getType()==Material.SHIELD) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
if (item.getType()==Material.SHIELD) {
|
||||
ItemMeta shieldmeta = item.getItemMeta();
|
||||
BlockStateMeta bmeta = (BlockStateMeta) meta;
|
||||
Banner banner = (Banner) bmeta.getBlockState();
|
||||
List<Pattern> patterns = banner.getPatterns();
|
||||
DyeColor color = banner.getBaseColor();
|
||||
ItemStack newbanner = new ItemStack(Material.BANNER);
|
||||
BannerMeta newban = (BannerMeta)(newbanner.getItemMeta());
|
||||
newban.setBaseColor(color);
|
||||
newban.setPatterns(patterns);
|
||||
newbanner.setItemMeta(newban);
|
||||
meta = newbanner.getItemMeta();
|
||||
}
|
||||
|
||||
if (meta instanceof BannerMeta) {
|
||||
BannerMeta banner = (BannerMeta)meta;
|
||||
/* Code to generate banners with ENUMs listed respective to the patterns applied in the lore.
|
||||
for (int j=0;j<PatternType.values().length;j+=6) {
|
||||
ItemStack newbanner = new ItemStack(Material.BANNER);
|
||||
|
@ -74,7 +74,9 @@ public class MonsterController {
|
||||
ent.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,Integer.MAX_VALUE,1));
|
||||
Monster m = (Monster)ent;
|
||||
MonsterStructure ms = TwosideKeeper.monsterdata.get(ent.getUniqueId());
|
||||
MonsterDifficulty md = getMonsterDifficulty(m);
|
||||
ms.SetLeader(true);
|
||||
convertMonster(m,md);
|
||||
//Set the HP of the leader to a more proper amount.
|
||||
} else
|
||||
if (meetsConditionsToBeElite(ent) && !minion) {
|
||||
@ -358,6 +360,13 @@ public class MonsterController {
|
||||
}
|
||||
if (Math.random()<0.2) {
|
||||
ItemStack shield = new ItemStack(Material.SHIELD,1,(short)((Math.random()*DyeColor.values().length)));
|
||||
int patterns = (int)(Math.random()*7)+1;
|
||||
List<Pattern> patternlist = new ArrayList<Pattern>();
|
||||
for (int i=0;i<patterns;i++) {
|
||||
patternlist.add(new Pattern(DyeColor.values()[(int)(Math.random()*DyeColor.values().length)],
|
||||
PatternType.values()[(int)(Math.random()*PatternType.values().length)]));
|
||||
}
|
||||
aPlugin.API.setShieldBannerPattern(shield, DyeColor.values()[(int)(Math.random()*DyeColor.values().length)], patternlist);
|
||||
m.getEquipment().setItemInOffHand(shield);
|
||||
}
|
||||
} else {
|
||||
@ -472,6 +481,13 @@ public class MonsterController {
|
||||
}
|
||||
if (Math.random()<0.5) {
|
||||
ItemStack shield = new ItemStack(Material.SHIELD,1,(short)((Math.random()*DyeColor.values().length)));
|
||||
int patterns = (int)(Math.random()*7)+1;
|
||||
List<Pattern> patternlist = new ArrayList<Pattern>();
|
||||
for (int i=0;i<patterns;i++) {
|
||||
patternlist.add(new Pattern(DyeColor.values()[(int)(Math.random()*DyeColor.values().length)],
|
||||
PatternType.values()[(int)(Math.random()*PatternType.values().length)]));
|
||||
}
|
||||
aPlugin.API.setShieldBannerPattern(shield, DyeColor.values()[(int)(Math.random()*DyeColor.values().length)], patternlist);
|
||||
m.getEquipment().setItemInOffHand(shield);
|
||||
}
|
||||
} else {
|
||||
@ -520,6 +536,13 @@ public class MonsterController {
|
||||
}
|
||||
if (Math.random()<0.5) {
|
||||
ItemStack shield = new ItemStack(Material.SHIELD,1,(short)((Math.random()*DyeColor.values().length)));
|
||||
int patterns = (int)(Math.random()*7)+1;
|
||||
List<Pattern> patternlist = new ArrayList<Pattern>();
|
||||
for (int i=0;i<patterns;i++) {
|
||||
patternlist.add(new Pattern(DyeColor.values()[(int)(Math.random()*DyeColor.values().length)],
|
||||
PatternType.values()[(int)(Math.random()*PatternType.values().length)]));
|
||||
}
|
||||
aPlugin.API.setShieldBannerPattern(shield, DyeColor.values()[(int)(Math.random()*DyeColor.values().length)], patternlist);
|
||||
m.getEquipment().setItemInOffHand(shield);
|
||||
}
|
||||
} else {
|
||||
@ -695,6 +718,7 @@ public class MonsterController {
|
||||
m.setHealth(m.getMaxHealth());
|
||||
TwosideKeeper.log(m.getCustomName()+" health is "+m.getMaxHealth(), 5);
|
||||
MonsterStructure.getMonsterStructure(m).SetLeader(true);
|
||||
TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
|
||||
} else {
|
||||
m.setMaxHealth(m.getMaxHealth()*2.0);
|
||||
m.setHealth(m.getMaxHealth());
|
||||
@ -717,6 +741,7 @@ public class MonsterController {
|
||||
m.setMaxHealth(1200); //Target is 1200 HP.
|
||||
m.setHealth(m.getMaxHealth());
|
||||
MonsterStructure.getMonsterStructure(m).SetLeader(true);
|
||||
TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
|
||||
} else {
|
||||
m.setMaxHealth(m.getMaxHealth()*3.0);
|
||||
m.setHealth(m.getMaxHealth());
|
||||
@ -746,6 +771,7 @@ public class MonsterController {
|
||||
m.setMaxHealth(1600); //Target is 1600 HP.
|
||||
m.setHealth(m.getMaxHealth());
|
||||
MonsterStructure.getMonsterStructure(m).SetLeader(true);
|
||||
TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
|
||||
} else {
|
||||
m.setMaxHealth(m.getMaxHealth()*4.0);
|
||||
m.setHealth(m.getMaxHealth());
|
||||
@ -789,6 +815,7 @@ public class MonsterController {
|
||||
m.setHealth(m.getMaxHealth());
|
||||
m.setCustomName("Zombie Leader");
|
||||
MonsterStructure.getMonsterStructure(m).SetLeader(true);
|
||||
TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
|
||||
} else {
|
||||
m.setMaxHealth(m.getMaxHealth()*1.0);
|
||||
m.setHealth(m.getMaxHealth());
|
||||
|
@ -601,7 +601,7 @@ public class NewCombat {
|
||||
|
||||
if (shooter instanceof Monster) {
|
||||
basedmg = 1.0 *calculateMonsterDifficultyMultiplier(shooter);
|
||||
TwosideKeeper.log("New Base damage is "+basedmg, 2);
|
||||
TwosideKeeper.log("New Base damage is "+basedmg, 4);
|
||||
}
|
||||
|
||||
return basedmg * basemult;
|
||||
@ -1019,7 +1019,13 @@ public class NewCombat {
|
||||
if (GenericFunctions.isArtifactEquip(p.getEquipment().getItemInMainHand()) &&
|
||||
GenericFunctions.isArtifactWeapon(p.getEquipment().getItemInMainHand())) {
|
||||
double ratio = 1.0-CalculateDamageReduction(1,target,p);
|
||||
if (p.getEquipment().getItemInMainHand().getType()!=Material.BOW) {
|
||||
AwakenedArtifact.addPotentialEXP(p.getEquipment().getItemInMainHand(), (int)((ratio*20)+5)*((headshot)?2:1), p);
|
||||
} else {
|
||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||
pd.storedbowxp+=(int)((ratio*20)+5)*((headshot)?2:1);
|
||||
pd.lasthittarget=TwosideKeeper.getServerTickTime();
|
||||
}
|
||||
increaseArtifactArmorXP(p,(int)(ratio*10)+1);
|
||||
List<LivingEntity> hitlist = getAOEList(weapon,target);
|
||||
|
||||
@ -1272,7 +1278,7 @@ public class NewCombat {
|
||||
//log("Healed "+healamt+" damage.",2);
|
||||
double newhealth = p.getHealth()+healamt;
|
||||
if (newhealth>p.getMaxHealth()) {
|
||||
p.setMaxHealth(p.getMaxHealth());
|
||||
p.setHealth(p.getMaxHealth());
|
||||
} else {
|
||||
p.setHealth(newhealth);
|
||||
}
|
||||
@ -1574,5 +1580,34 @@ public class NewCombat {
|
||||
return dodgechance;
|
||||
}
|
||||
|
||||
public static double calculateDefenderAbsorbtion(LivingEntity entity, double dmg) {
|
||||
//See if we're in a party with a defender.
|
||||
if (entity instanceof Player) {
|
||||
Player p = (Player)entity;
|
||||
List<Player> partymembers = TwosideKeeperAPI.getPartyMembers(p);
|
||||
for (int i=0;i<partymembers.size();i++) {
|
||||
Player check = partymembers.get(i);
|
||||
if (PartyManager.IsInSameParty(p, check)) {
|
||||
TwosideKeeper.log("In here",2);
|
||||
if (GenericFunctions.isDefender(check) &&
|
||||
check.isBlocking() &&
|
||||
!p.equals(check)) {
|
||||
//This is a defender. Transfer half the damage to them!
|
||||
|
||||
dmg = dmg/2;
|
||||
//Send the rest of the damage to the defender.
|
||||
double defenderdmg = dmg;
|
||||
defenderdmg=NewCombat.CalculateDamageReduction(dmg, check, entity);
|
||||
GenericFunctions.DealDamageToMob(defenderdmg, check, p);
|
||||
TwosideKeeper.log("Damage was absorbed by "+check.getName()+". Took "+defenderdmg+" reduced damage. Original damage: "+dmg,2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
TwosideKeeper.log("In here",2);
|
||||
}
|
||||
return dmg;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,230 +0,0 @@
|
||||
package sig.plugin.TwosideKeeper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
||||
|
||||
public class Party {
|
||||
public List<Player> partyplayers;
|
||||
public List<Player> lastorder;
|
||||
int color;
|
||||
Location region;
|
||||
|
||||
Party(int color, Location rawPos) {
|
||||
partyplayers = new ArrayList<Player>();
|
||||
lastorder = new ArrayList<Player>();
|
||||
rawPos.setX((int)(rawPos.getX()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE));
|
||||
rawPos.setZ((int)(rawPos.getZ()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE));
|
||||
region=rawPos;
|
||||
TwosideKeeper.log("Party Region Position: "+region.toString(),5);
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives remove Party"+color); //Make sure the party is cleared out if it was used for something before...
|
||||
//Bukkit.getScoreboardManager().getMainScoreboard().registerNewObjective("Party"+color, "dummy");
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives add Party"+color+" dummy Party");
|
||||
//Bukkit.getScoreboardManager().getMainScoreboard().getObjective("Party"+color).setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
String color_txt = "";
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives setdisplay sidebar.team."+ConvertColor(color)+" Party"+color);
|
||||
this.color=color;
|
||||
}
|
||||
|
||||
String ConvertColor(int val) {
|
||||
|
||||
switch (val%16) {
|
||||
case 0:{
|
||||
return "white";
|
||||
}
|
||||
case 1:{
|
||||
return "yellow";
|
||||
}
|
||||
case 2:{
|
||||
return "light_purple";
|
||||
}
|
||||
case 3:{
|
||||
return "red";
|
||||
}
|
||||
case 4:{
|
||||
return "aqua";
|
||||
}
|
||||
case 5:{
|
||||
return "green";
|
||||
}
|
||||
case 6:{
|
||||
return "blue";
|
||||
}
|
||||
case 7:{
|
||||
return "dark_gray";
|
||||
}
|
||||
case 8:{
|
||||
return "gray";
|
||||
}
|
||||
case 9:{
|
||||
return "gold";
|
||||
}
|
||||
case 10:{
|
||||
return "dark_purple";
|
||||
}
|
||||
case 11:{
|
||||
return "dark_red";
|
||||
}
|
||||
case 12:{
|
||||
return "dark_aqua";
|
||||
}
|
||||
case 13:{
|
||||
return "dark_green";
|
||||
}
|
||||
case 14:{
|
||||
return "dark_blue";
|
||||
}
|
||||
case 15:{
|
||||
return "black";
|
||||
}
|
||||
default:{
|
||||
return "white";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addPlayer(Player p) {
|
||||
partyplayers.add(p);
|
||||
for (int l=0;l<partyplayers.size();l++) {
|
||||
PlayerStructure pd = (PlayerStructure)TwosideKeeper.playerdata.get(partyplayers.get(l).getUniqueId());
|
||||
pd.currentparty=TeamNumber();
|
||||
pd.partybonus=partyplayers.size()-1;
|
||||
//TwosideKeeper.playerdata.get(k).partybonus=10; //JUST FOR TESTING PURPOSES.
|
||||
if (partyplayers.size()>=2) {
|
||||
//partyplayers.get(l).sendMessage(ChatColor.ITALIC+""+ChatColor.GOLD+"Party Bonuses Applied: "+ChatColor.BLUE+"+"+(partyplayers.size()-1)+"0% damage + defense for "+partyplayers.size()+" party members. Drop Rate +"+(partyplayers.size()-1)+"0%");
|
||||
}
|
||||
}
|
||||
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players set "+p.getName().toLowerCase()+" Party"+color+" "+partyplayers.size()*-1);
|
||||
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard teams option "+p.getName().toLowerCase()+" color "+ConvertColor(color));
|
||||
p.getScoreboard().getTeam(p.getName().toLowerCase()).setAllowFriendlyFire(false);
|
||||
p.getScoreboard().getTeam(p.getName().toLowerCase()).setSuffix(TwosideKeeper.createHealthbar(((p.getHealth())/p.getMaxHealth())*100,p));
|
||||
TwosideKeeper.setPlayerMaxHealth(p);
|
||||
p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p));
|
||||
}
|
||||
|
||||
public void sortPlayers() {
|
||||
//Sorts the players on the scoreboard by proper health values.
|
||||
List<Player> sortedorder = new ArrayList<Player>();
|
||||
int lasti=-1; //The last player that had less health than you did.
|
||||
for (int i=0;i<partyplayers.size();i++) {
|
||||
for (int j=0;j<sortedorder.size();j++) {
|
||||
if (sortedorder.get(j).getHealth()>partyplayers.get(i).getHealth()) {
|
||||
lasti=-1;
|
||||
} else {
|
||||
lasti=j; //This means our health is bigger. We go here.
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (lasti==-1) {
|
||||
//This just gets inserted.
|
||||
sortedorder.add(partyplayers.get(i));
|
||||
} else {
|
||||
sortedorder.add(lasti,partyplayers.get(i));
|
||||
}
|
||||
}
|
||||
if (!lastorder.equals(sortedorder)) {
|
||||
for (int i=0;i<sortedorder.size();i++) {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard players set "+sortedorder.get(i).getName().toLowerCase()+" Party"+color+" "+(i+1)*-1);
|
||||
}
|
||||
lastorder.clear();
|
||||
lastorder.addAll(sortedorder);
|
||||
}
|
||||
}
|
||||
|
||||
public Location getRegion() {
|
||||
return region;
|
||||
}
|
||||
public boolean IsInParty(Player p) {
|
||||
if (partyplayers.contains(p)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public boolean IsInSameRegion(Player p) {
|
||||
if (((int)(p.getLocation().getX()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE)) == (int)region.getX() &&
|
||||
((int)(p.getLocation().getZ()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE)) == (int)region.getZ() &&
|
||||
p.getLocation().getWorld() == region.getWorld()) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public int PlayerCountInParty() {
|
||||
return partyplayers.size();
|
||||
}
|
||||
public int TeamNumber() {
|
||||
return color;
|
||||
}
|
||||
public void UpdateRegion(Location newloc) {
|
||||
newloc.setX((int)(newloc.getX()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE));
|
||||
newloc.setZ((int)(newloc.getZ()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE));
|
||||
region = newloc;
|
||||
TwosideKeeper.log("Region Updated: "+region.toString(),5);
|
||||
}
|
||||
public void RemoveStrayMembers() {
|
||||
int prevsiz=partyplayers.size();
|
||||
TwosideKeeper.log("Previous party size was "+prevsiz,5);
|
||||
for (int i=0;i<partyplayers.size();i++) {
|
||||
if (partyplayers.get(i)==null ||
|
||||
!partyplayers.get(i).isOnline() ||
|
||||
partyplayers.get(i).getWorld() != region.getWorld() ||
|
||||
((int)(partyplayers.get(i).getLocation().getX()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE)) != (int)region.getX() ||
|
||||
((int)(partyplayers.get(i).getLocation().getZ()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE)) != (int)region.getZ()) {
|
||||
TwosideKeeper.log(((int)(partyplayers.get(i).getLocation().getX()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE))+" ;; "+((int)(partyplayers.get(i).getLocation().getZ()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE))+" - DID NOT MATCH",4);
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard players reset "+partyplayers.get(i).getName().toLowerCase()+" Party"+color);
|
||||
for (int l=0;l<partyplayers.size();l++) {
|
||||
PlayerStructure pd = (PlayerStructure)TwosideKeeper.playerdata.get(partyplayers.get(l).getUniqueId());
|
||||
if (pd!=null && pd.currentparty == TeamNumber()) {
|
||||
if (partyplayers.size()-2<0) {
|
||||
pd.partybonus=0;
|
||||
} else {
|
||||
pd.partybonus=partyplayers.size()-2;
|
||||
}
|
||||
pd.currentparty=-1;
|
||||
}
|
||||
}
|
||||
if (partyplayers.size()>=2) {
|
||||
//partyplayers.get(i).sendMessage(ChatColor.DARK_GRAY+""+ChatColor.ITALIC+"Party buffs removed.");
|
||||
}
|
||||
if (partyplayers.get(i)!=null &&
|
||||
partyplayers.get(i).isOnline()) {
|
||||
partyplayers.get(i).getScoreboard().getTeam(partyplayers.get(i).getName().toLowerCase()).setSuffix(TwosideKeeper.createHealthbar(((partyplayers.get(i).getHealth())/partyplayers.get(i).getMaxHealth())*100,partyplayers.get(i)));
|
||||
TwosideKeeper.setPlayerMaxHealth(partyplayers.get(i));
|
||||
partyplayers.get(i).getScoreboard().getTeam(partyplayers.get(i).getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(partyplayers.get(i)));
|
||||
}
|
||||
partyplayers.remove(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
if (prevsiz!=partyplayers.size()) {
|
||||
for (int i=0;i<partyplayers.size();i++) {
|
||||
if (partyplayers.size()==1) {
|
||||
//partyplayers.get(i).sendMessage(ChatColor.DARK_GRAY+""+ChatColor.ITALIC+"Party buffs removed.");
|
||||
} else {
|
||||
PlayerStructure pd = (PlayerStructure)TwosideKeeper.playerdata.get(partyplayers.get(i).getUniqueId());
|
||||
pd.partybonus=partyplayers.size()-1;
|
||||
//partyplayers.get(i).sendMessage(ChatColor.ITALIC+""+ChatColor.GOLD+"Party Bonuses Applied: "+ChatColor.BLUE+"+"+(partyplayers.size()-1)+"0% damage + defense for "+partyplayers.size()+" party members. Drop Rate +"+(partyplayers.size()-1)+"0%");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public static List<Player> getPartyMembers(Player p) {
|
||||
//Find the party this player is in.
|
||||
Party part = null;
|
||||
for (int i=0;i<TwosideKeeper.PartyList.size();i++) {
|
||||
if (TwosideKeeper.PartyList.get(i).IsInParty(p)) {
|
||||
return TwosideKeeper.PartyList.get(i).partyplayers;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
220
src/sig/plugin/TwosideKeeper/PartyManager.java
Normal file
220
src/sig/plugin/TwosideKeeper/PartyManager.java
Normal file
@ -0,0 +1,220 @@
|
||||
package sig.plugin.TwosideKeeper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
||||
|
||||
public class PartyManager {
|
||||
static int totalparties=0;
|
||||
static HashMap<Integer, List<Player>> parties = new HashMap<Integer, List<Player>>();
|
||||
static HashMap<Integer, List<Player>> oldparties = new HashMap<Integer, List<Player>>();
|
||||
static HashMap<Integer, List<Player>> sortedorder = new HashMap<Integer, List<Player>>();
|
||||
public static void SetupParties() {
|
||||
//Place players into numbered parties.
|
||||
totalparties=0;
|
||||
ClearAllParties();
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (!IsInParty(p)) {
|
||||
//We only care about adding a player that's not in a party already.
|
||||
//We have to make a new party for this player.
|
||||
AddPlayerToParty(p,totalparties++);
|
||||
//Now find nearby players and add them to this party.
|
||||
AddNearbyPlayersToSameParty(p);
|
||||
}
|
||||
}
|
||||
UpdatePartyScoreboards();
|
||||
}
|
||||
|
||||
private static void UpdatePartyScoreboards() {
|
||||
for (int i : parties.keySet()) {
|
||||
if (oldparties.containsKey(i)) {
|
||||
if (PartiesAreDifferent(parties.get(i),oldparties.get(i))) {
|
||||
UpdateScoreboard(i,parties.get(i),oldparties.get(i));
|
||||
} else {
|
||||
TwosideKeeper.log("Parties are the same!", 5);
|
||||
}
|
||||
} else {
|
||||
UpdateScoreboard(i,parties.get(i),oldparties.get(i));
|
||||
}
|
||||
sortPlayers(i, parties.get(i), sortedorder);
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateScoreboard(int party, List<Player> partymembers, List<Player> oldmembers) {
|
||||
String color = ConvertColor(party);
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives remove Party"+color); //Make sure the party is cleared out if it was used for something before...
|
||||
//Bukkit.getScoreboardManager().getMainScoreboard().registerNewObjective("Party"+color, "dummy");
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives add Party"+color+" dummy Party");
|
||||
//Bukkit.getScoreboardManager().getMainScoreboard().getObjective("Party"+color).setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives setdisplay sidebar.team."+color+" Party"+color);
|
||||
|
||||
for (int i=0;i<partymembers.size();i++) {
|
||||
Player p = partymembers.get(i);
|
||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||
pd.partybonus = (partymembers.size()>=2)?partymembers.size()-1:0;
|
||||
TwosideKeeper.log("Party bonus is "+pd.partybonus, 2);
|
||||
TwosideKeeper.log("Adding Player "+p.getName()+" to Scoreboard..", 5);
|
||||
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players set "+p.getName().toLowerCase()+" Party"+color+" "+((i+1)*-1));
|
||||
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard teams option "+p.getName().toLowerCase()+" color "+color);
|
||||
p.getScoreboard().getTeam(p.getName().toLowerCase()).setAllowFriendlyFire(false);
|
||||
p.getScoreboard().getTeam(p.getName().toLowerCase()).setSuffix(TwosideKeeper.createHealthbar(((p.getHealth())/p.getMaxHealth())*100,p));
|
||||
TwosideKeeper.setPlayerMaxHealth(p);
|
||||
p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p));
|
||||
}
|
||||
}
|
||||
|
||||
public static void sortPlayers(int party, List<Player> partyplayers, HashMap<Integer,List<Player>> lastorder) {
|
||||
String color = ConvertColor(party);
|
||||
//Sorts the players on the scoreboard by proper health values.
|
||||
List<Player> sortedorder = new ArrayList<Player>();
|
||||
int lasti=-1; //The last player that had less health than you did.
|
||||
for (int i=0;i<partyplayers.size();i++) {
|
||||
for (int j=0;j<sortedorder.size();j++) {
|
||||
if (sortedorder.get(j).getHealth()>partyplayers.get(i).getHealth()) {
|
||||
lasti=-1;
|
||||
} else {
|
||||
lasti=j; //This means our health is bigger. We go here.
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (lasti==-1) {
|
||||
//This just gets inserted.
|
||||
sortedorder.add(partyplayers.get(i));
|
||||
} else {
|
||||
sortedorder.add(lasti,partyplayers.get(i));
|
||||
}
|
||||
}
|
||||
TwosideKeeper.log("Sorted Order: "+sortedorder.toString(), 5);
|
||||
if (lastorder.get(party)==null) {
|
||||
lastorder.put(party,new ArrayList<Player>());
|
||||
}
|
||||
if (!lastorder.get(party).equals(sortedorder)) {
|
||||
for (int i=0;i<sortedorder.size();i++) {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard players set "+sortedorder.get(i).getName().toLowerCase()+" Party"+color+" "+((i+1)*-1));
|
||||
}
|
||||
lastorder.put(party,sortedorder);
|
||||
}
|
||||
}
|
||||
|
||||
private static String ConvertColor(int i) {
|
||||
switch (i%16) {
|
||||
case 0:{
|
||||
return "white";
|
||||
}
|
||||
case 1:{
|
||||
return "yellow";
|
||||
}
|
||||
case 2:{
|
||||
return "light_purple";
|
||||
}
|
||||
case 3:{
|
||||
return "red";
|
||||
}
|
||||
case 4:{
|
||||
return "aqua";
|
||||
}
|
||||
case 5:{
|
||||
return "green";
|
||||
}
|
||||
case 6:{
|
||||
return "blue";
|
||||
}
|
||||
case 7:{
|
||||
return "dark_gray";
|
||||
}
|
||||
case 8:{
|
||||
return "gray";
|
||||
}
|
||||
case 9:{
|
||||
return "gold";
|
||||
}
|
||||
case 10:{
|
||||
return "dark_purple";
|
||||
}
|
||||
case 11:{
|
||||
return "dark_red";
|
||||
}
|
||||
case 12:{
|
||||
return "dark_aqua";
|
||||
}
|
||||
case 13:{
|
||||
return "dark_green";
|
||||
}
|
||||
case 14:{
|
||||
return "dark_blue";
|
||||
}
|
||||
case 15:{
|
||||
return "black";
|
||||
}
|
||||
default:{
|
||||
return "white";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean PartiesAreDifferent(List<Player> newparty, List<Player> oldparty) {
|
||||
if (newparty.size()==oldparty.size()) {
|
||||
return !newparty.containsAll(oldparty);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ClearAllParties() {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||
pd.previousparty=pd.currentparty;
|
||||
pd.currentparty=-1;
|
||||
}
|
||||
oldparties.clear();
|
||||
oldparties.putAll(parties);
|
||||
parties.clear();
|
||||
}
|
||||
|
||||
private static void AddNearbyPlayersToSameParty(Player sourcep) {
|
||||
for (Player checkp : Bukkit.getOnlinePlayers()) {
|
||||
if (!IsInParty(checkp) && sourcep.getLocation().distanceSquared(checkp.getLocation())<=Math.pow(TwosideKeeper.PARTY_CHUNK_SIZE,2)) {
|
||||
AddPlayerToParty(checkp,GetCurrentParty(sourcep));
|
||||
AddNearbyPlayersToSameParty(checkp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int GetCurrentParty(Player sourcep) {
|
||||
return PlayerStructure.GetPlayerStructure(sourcep).currentparty;
|
||||
}
|
||||
|
||||
private static void AddPlayerToParty(Player p, int i) {
|
||||
TwosideKeeper.log("Added player to party "+i, 5);
|
||||
PlayerStructure.GetPlayerStructure(p).currentparty=i;
|
||||
AddToPartyMap(p,i);
|
||||
}
|
||||
|
||||
private static void AddToPartyMap(Player p, int i) {
|
||||
List<Player> playerlist = parties.get(i);
|
||||
if (parties.get(i)==null) {
|
||||
playerlist = new ArrayList<Player>();
|
||||
}
|
||||
playerlist.add(p);
|
||||
parties.put(i, playerlist);
|
||||
}
|
||||
|
||||
private static boolean IsInParty(Player p) {
|
||||
return PlayerStructure.GetPlayerStructure(p).currentparty!=-1;
|
||||
}
|
||||
|
||||
public static boolean IsInSameParty(Player p, Player p2) {
|
||||
return PlayerStructure.GetPlayerStructure(p).currentparty==PlayerStructure.GetPlayerStructure(p2).currentparty;
|
||||
}
|
||||
|
||||
public static List<Player> getPartyMembers(Player p) {
|
||||
List<Player> partymembers = new ArrayList<Player>();
|
||||
int partynumb = GetCurrentParty(p);
|
||||
return parties.get(partynumb);
|
||||
}
|
||||
}
|
@ -90,6 +90,7 @@ public class PlayerStructure {
|
||||
public double vendetta_amt = 0.0;
|
||||
public HashMap<UUID,Long> hitlist = new HashMap<UUID,Long>();
|
||||
public long lastdeath = 0;
|
||||
public int previousparty = -1;
|
||||
|
||||
public double prev_weapondmg=0.0;
|
||||
public double prev_buffdmg=0.0;
|
||||
@ -102,6 +103,8 @@ public class PlayerStructure {
|
||||
public boolean headshot=false;
|
||||
public boolean preemptive=false;
|
||||
public boolean crit=false;
|
||||
public int storedbowxp=0;
|
||||
public long lasthittarget=0;
|
||||
|
||||
public long lastrightclick = 0;
|
||||
|
||||
@ -124,6 +127,7 @@ public class PlayerStructure {
|
||||
this.partybonus=0;
|
||||
this.enderdragon_spawned=false;
|
||||
this.currentparty=-1;
|
||||
this.previousparty=-1;
|
||||
this.spleef_pts=0;
|
||||
this.spleef_wins=0;
|
||||
this.title_task=-1;
|
||||
|
@ -8,6 +8,7 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.ShapelessRecipe;
|
||||
@ -659,6 +660,7 @@ public class Recipes {
|
||||
case "EXPLODE_ARR": {
|
||||
ItemStack explosionarrow = new ItemStack(Material.TIPPED_ARROW);
|
||||
PotionMeta pm = (PotionMeta)explosionarrow.getItemMeta();
|
||||
pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
||||
PotionData data = new PotionData(PotionType.INVISIBILITY);
|
||||
//pm.setBasePotionData(data);
|
||||
pm.addCustomEffect(new PotionEffect(PotionEffectType.INVISIBILITY,0,0),true);
|
||||
@ -672,6 +674,7 @@ public class Recipes {
|
||||
case "TRAP_ARR": {
|
||||
ItemStack trappingarrow = new ItemStack(Material.TIPPED_ARROW);
|
||||
PotionMeta pm = (PotionMeta)trappingarrow.getItemMeta();
|
||||
pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
||||
PotionData data = new PotionData(PotionType.WEAKNESS);
|
||||
//pm.setBasePotionData(data);
|
||||
pm.addCustomEffect(new PotionEffect(PotionEffectType.WEAKNESS,0,0),true);
|
||||
@ -685,6 +688,7 @@ public class Recipes {
|
||||
case "POISON_ARR": {
|
||||
ItemStack poisonarrow = new ItemStack(Material.TIPPED_ARROW);
|
||||
PotionMeta pm = (PotionMeta)poisonarrow.getItemMeta();
|
||||
pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
||||
PotionData data = new PotionData(PotionType.POISON);
|
||||
//pm.setBasePotionData(data);
|
||||
pm.addCustomEffect(new PotionEffect(PotionEffectType.POISON,0,0),true);
|
||||
@ -698,6 +702,7 @@ public class Recipes {
|
||||
case "QUADRUPLE_DAMAGE_ARR": {
|
||||
ItemStack diamondtippedarrow = new ItemStack(Material.TIPPED_ARROW);
|
||||
PotionMeta pm = (PotionMeta)diamondtippedarrow.getItemMeta();
|
||||
pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
||||
PotionData data = new PotionData(PotionType.SPEED);
|
||||
//pm.setBasePotionData(data);
|
||||
pm.addCustomEffect(new PotionEffect(PotionEffectType.SPEED,0,0),true);
|
||||
@ -711,6 +716,7 @@ public class Recipes {
|
||||
case "DOUBLE_DAMAGE_ARR": {
|
||||
ItemStack handmadearrow = new ItemStack(Material.TIPPED_ARROW);
|
||||
PotionMeta pm = (PotionMeta)handmadearrow.getItemMeta();
|
||||
pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
||||
PotionData data = new PotionData(PotionType.FIRE_RESISTANCE);
|
||||
//pm.setBasePotionData(data);
|
||||
pm.addCustomEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE,0,0),true);
|
||||
|
@ -286,7 +286,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
|
||||
public int TeamCounter = 0;
|
||||
public static int time_passed = 0; //The total amount of time lost due to modifications to FullTime().
|
||||
public static List<Party> PartyList = new ArrayList<Party>();
|
||||
public List<Integer> colors_used = new ArrayList<Integer>();
|
||||
public static List<ChargeZombie> chargezombies = new ArrayList<ChargeZombie>();
|
||||
public static List<EliteMonster> elitemonsters = new ArrayList<EliteMonster>();
|
||||
@ -398,6 +397,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
);
|
||||
|
||||
TwosideShops = new WorldShopManager();
|
||||
TwosideShops.LoadShopPurchases();
|
||||
|
||||
//Initialize Player Data structure.
|
||||
playerdata = new HashMap<UUID,PlayerStructure>();
|
||||
@ -682,6 +682,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
pd.target=null;
|
||||
}
|
||||
|
||||
if (pd.lasthittarget+20*15<=getServerTickTime() && pd.storedbowxp>0 && GenericFunctions.isArtifactEquip(p.getEquipment().getItemInMainHand()) &&
|
||||
p.getEquipment().getItemInMainHand().getType()==Material.BOW) {
|
||||
AwakenedArtifact.addPotentialEXP(p.getEquipment().getItemInMainHand(), pd.storedbowxp, p);
|
||||
TwosideKeeper.log("Added "+pd.storedbowxp+" Artifact XP", 2);
|
||||
pd.storedbowxp=0;
|
||||
}
|
||||
|
||||
p.getAttribute(Attribute.GENERIC_ARMOR).setBaseValue(20*(1.0d-NewCombat.CalculateDamageReduction(1,p,p))+subtractVanillaArmorBar(p.getEquipment().getArmorContents()));
|
||||
|
||||
if (pd.last_regen_time+HEALTH_REGENERATION_RATE<=getServerTickTime()) {
|
||||
@ -776,7 +783,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
GenericFunctions.AutoRepairItems(p);
|
||||
|
||||
//Try to fit into an already existing party.
|
||||
boolean inParty=false;
|
||||
/*boolean inParty=false; //LEGACY PARTY CODE.
|
||||
for (int j=0;j<PartyList.size();j++) {
|
||||
if (!PartyList.get(j).IsInParty(p) &&
|
||||
PartyList.get(j).IsInSameRegion(p)) {
|
||||
@ -809,11 +816,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
colors_used.add(coloravailable+1);
|
||||
log("Add Party color "+(coloravailable+1),5);
|
||||
//TeamCounter++;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
for (int j=0;j<PartyList.size();j++) {
|
||||
PartyManager.SetupParties();
|
||||
/*for (int j=0;j<PartyList.size();j++) { //LEGACY PARTY CODE.
|
||||
PartyList.get(j).RemoveStrayMembers();
|
||||
if (PartyList.get(j).PlayerCountInParty()==0) {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives remove Party"+PartyList.get(j).TeamNumber());
|
||||
@ -831,7 +839,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
} else {
|
||||
PartyList.get(j).sortPlayers();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
TwosideSpleefGames.TickEvent();
|
||||
}
|
||||
@ -1389,12 +1397,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||
public void onPlayerJoin(PlayerJoinEvent ev) {
|
||||
|
||||
//Remove stray members from the player's party.
|
||||
|
||||
for (int j=0;j<PartyList.size();j++) {
|
||||
PartyList.get(j).RemoveStrayMembers();
|
||||
}
|
||||
|
||||
for (int i=0;i<Bukkit.getOnlinePlayers().toArray().length;i++) {
|
||||
Player p = (Player)Bukkit.getOnlinePlayers().toArray()[i];
|
||||
if (p!=null) {
|
||||
@ -1894,7 +1896,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ev.getPlayer().getWorld().dropItem(ev.getPlayer().getLocation(), dropitem).setPickupDelay(0);
|
||||
//ev.getPlayer().getWorld().dropItem(ev.getPlayer().getLocation(), dropitem).setPickupDelay(0);
|
||||
GenericFunctions.giveItem(ev.getPlayer(), dropitem);
|
||||
cc.getInventory().removeItem(dropitem);
|
||||
}
|
||||
},1);
|
||||
@ -1903,7 +1906,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
}
|
||||
TwosideShops.UpdateSign(shop, shop.getID(), current_session.GetSign(),false);
|
||||
TwosideShops.SaveWorldShopData(shop);
|
||||
TwosideShops.AddNewPurchase(shop.GetOwner(), ev.getPlayer(), shop.GetItem(), amt*shop.GetUnitPrice(), amt);
|
||||
TwosideShops.AddNewPurchase(shop.GetOwner(), ev.getPlayer().getName(), shop.GetItem(), amt*shop.GetUnitPrice(), amt);
|
||||
final int ID = shopID;
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
|
||||
@Override
|
||||
@ -1971,7 +1974,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
TwosideShops.RemoveSession(ev.getPlayer());
|
||||
givePlayerMoney(ev.getPlayer(), amt*shop.GetUnitPrice());
|
||||
givePlayerBankMoney(shop.GetOwner(), -amt*shop.GetUnitPrice());
|
||||
TwosideShops.AddNewPurchase(shop.GetOwner(), ev.getPlayer(), shop.GetItem(), amt*shop.GetUnitPrice(), amt, false);
|
||||
TwosideShops.AddNewPurchase(shop.GetOwner(), ev.getPlayer().getName(), shop.GetItem(), amt*shop.GetUnitPrice(), amt, false);
|
||||
} else {
|
||||
ev.getPlayer().sendMessage(ChatColor.LIGHT_PURPLE+shop.GetOwner()+ChatColor.WHITE+" only has enough money in their bank to buy "+ChatColor.GREEN+(int)(getPlayerBankMoney(shop.GetOwner())/shop.GetUnitPrice())+ChatColor.WHITE+" of "+ChatColor.GREEN+shop.GetItemName()+ChatColor.WHITE+"! Please try again.");
|
||||
}
|
||||
@ -3165,7 +3168,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
for (int i=0;i<p.getOpenInventory().getTopInventory().getSize();i++) {
|
||||
if (p.getOpenInventory().getTopInventory().getItem(i)!=null &&
|
||||
p.getOpenInventory().getTopInventory().getItem(i).getType()!=Material.AIR) {
|
||||
deathloc.getWorld().dropItemNaturally(deathloc, p.getOpenInventory().getTopInventory().getItem(i));
|
||||
Item it = deathloc.getWorld().dropItemNaturally(deathloc, p.getOpenInventory().getTopInventory().getItem(i));
|
||||
it.setInvulnerable(true);
|
||||
log("Dropping "+p.getOpenInventory().getTopInventory().getItem(i).toString()+" at Death location "+deathloc,3);
|
||||
}
|
||||
}
|
||||
@ -3321,6 +3325,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
if (DeathManager.deathStructureExists(player) && ev.getInventory().getTitle().equalsIgnoreCase("Death Loot")) {
|
||||
//See how many items are in our inventory. Determine final balance.
|
||||
//Count the occupied slots.
|
||||
if (ev.getRawSlot()<45) {
|
||||
if (getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory())>=DeathManager.CalculateDeathPrice(player)) {
|
||||
//player.getInventory().addItem(ev.getCurrentItem());
|
||||
if (ev.getCurrentItem()!=null &&
|
||||
@ -3340,6 +3345,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED+"You cannot afford to salvage any more items!");
|
||||
}
|
||||
}
|
||||
ev.setCancelled(true);
|
||||
}
|
||||
//Check for a left click for an arrow quiver.
|
||||
@ -3718,7 +3724,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
it.setCustomName((it.getItemStack().getItemMeta().hasDisplayName())?it.getItemStack().getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(it.getItemStack()));
|
||||
it.setCustomNameVisible(true);
|
||||
}
|
||||
it.setInvulnerable(true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3767,6 +3772,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
ms.SetElite(true);
|
||||
}
|
||||
if (MonsterController.isZombieLeader(m)) {
|
||||
m = MonsterController.convertMonster(m,md);
|
||||
log("Setting a monster with Difficulty "+MonsterController.getMonsterDifficulty(m).name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
|
||||
ms.SetLeader(true);
|
||||
}
|
||||
}
|
||||
@ -4052,34 +4059,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
//See if we're in a party with a defender.
|
||||
for (int i=0;i<PartyList.size();i++) {
|
||||
Party check = PartyList.get(i);
|
||||
if (check.IsInParty(p)) {
|
||||
for (int j=0;j<check.partyplayers.size();j++) {
|
||||
//See if there's a defender blocking in there.
|
||||
Player pcheck = check.partyplayers.get(j);
|
||||
if (GenericFunctions.isDefender(pcheck) &&
|
||||
pcheck.isBlocking() &&
|
||||
!p.equals(check.partyplayers.get(j))) {
|
||||
//This is a defender. Transfer half the damage to them!
|
||||
ev.setDamage(ev.getDamage()/2);
|
||||
//Send the rest of the damage to the defender.
|
||||
double dmg = ev.getDamage()/2;
|
||||
dmg=NewCombat.CalculateDamageReduction(dmg, pcheck, ev.getEntity());
|
||||
if (pcheck.getHealth()-dmg<0) {
|
||||
pcheck.setHealth(0);
|
||||
} else {
|
||||
pcheck.setHealth(pcheck.getHealth()-dmg);
|
||||
}
|
||||
log("Damage was absorbed by "+pcheck.getName()+". Tanked "+dmg+" damage. Original damage: "+ev.getDamage()/2,4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//If glowing, the player is invulnerable.
|
||||
if (p.hasPotionEffect(PotionEffectType.GLOWING)) {
|
||||
p.setNoDamageTicks(20);
|
||||
@ -4239,10 +4218,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
} else
|
||||
if (c.getCustomName().contains("Deadly")) {
|
||||
log("Preparing to explode.",5);
|
||||
c.getLocation().getWorld().playSound(c.getLocation(), Sound.ENTITY_CREEPER_PRIMED, 1.0f, 1.0f);
|
||||
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(), 32, 6);
|
||||
c.getLocation().getWorld().createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),6.0f,false,false);
|
||||
GenericFunctions.RandomlyCreateFire(c.getLocation(),3);
|
||||
GenericFunctions.DealExplosionDamageToEntities(c.getLocation(), 32, 3);
|
||||
}}
|
||||
,10);
|
||||
} else
|
||||
@ -4251,8 +4232,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
c.getLocation().getWorld().playSound(c.getLocation(), Sound.ENTITY_CREEPER_PRIMED, 1.0f, 1.0f);
|
||||
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(), 64, 8);
|
||||
c.getLocation().getWorld().createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),8.0f,false,false);
|
||||
GenericFunctions.RandomlyCreateFire(c.getLocation(),4);
|
||||
GenericFunctions.DealExplosionDamageToEntities(c.getLocation(), 64, 4);
|
||||
}}
|
||||
,30);
|
||||
}
|
||||
@ -4363,7 +4345,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
for (int i=0;i<elitemonsters.size();i++) {
|
||||
if (elitemonsters.get(i).m.equals(ev.getEntity())) {
|
||||
exists=true;
|
||||
elitemonsters.get(i).runHitEvent((Player)ev.getDamager());
|
||||
elitemonsters.get(i).runHitEvent((Player)ev.getDamager(),ev.getFinalDamage());
|
||||
}
|
||||
}
|
||||
if (!exists) {
|
||||
@ -4457,6 +4439,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
} else {
|
||||
ev.setCancelled(true);
|
||||
}
|
||||
dmg = NewCombat.calculateDefenderAbsorbtion(((LivingEntity)ev.getEntity()), dmg);
|
||||
}
|
||||
if (NewCombat.getDamagerEntity(ev.getDamager()) instanceof Monster &&
|
||||
ev.getEntity() instanceof LivingEntity) {
|
||||
@ -4661,6 +4644,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.YELLOW+"DPS Breakdown:");
|
||||
Bukkit.getServer().broadcastMessage(em.generateDPSReport());
|
||||
aPlugin.API.discordSendRaw(ChatColor.YELLOW+"DPS Breakdown:"+"\n```\n"+em.generateDPSReport()+"\n```");
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.GREEN+participants_list.toString()+ChatColor.WHITE+" have successfully slain "+m.getCustomName()+ChatColor.WHITE+"!");
|
||||
aPlugin.API.discordSendRaw(ChatColor.GREEN+participants_list.toString()+ChatColor.WHITE+" have successfully slain **"+m.getCustomName()+ChatColor.WHITE+"**!");
|
||||
m.getWorld().spawnEntity(m.getLocation(), EntityType.LIGHTNING);
|
||||
@ -4739,11 +4725,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
|
||||
public void run() {
|
||||
if (mer1.getLocation().getBlockY()<48) {
|
||||
mer1.getWorld().createExplosion(mer1.getLocation().getBlockX(), mer1.getLocation().getBlockY(), mer1.getLocation().getBlockZ(), 5.0f, true, true);
|
||||
mer1.getWorld().createExplosion(mer1.getLocation().getBlockX(), mer1.getLocation().getBlockY(), mer1.getLocation().getBlockZ(), 5.0f, false, true);
|
||||
GenericFunctions.DealExplosionDamageToEntities(mer1.getLocation(), 12, 5);
|
||||
GenericFunctions.RandomlyCreateFire(mer1.getLocation(),2);
|
||||
} else {
|
||||
mer1.getWorld().createExplosion(mer1.getLocation().getBlockX(), mer1.getLocation().getBlockY(), mer1.getLocation().getBlockZ(), 6.0f, true, false);
|
||||
mer1.getWorld().createExplosion(mer1.getLocation().getBlockX(), mer1.getLocation().getBlockY(), mer1.getLocation().getBlockZ(), 6.0f, false, false);
|
||||
GenericFunctions.DealExplosionDamageToEntities(mer1.getLocation(), 12, 6);
|
||||
GenericFunctions.RandomlyCreateFire(mer1.getLocation(),3);
|
||||
}
|
||||
}}
|
||||
,30);
|
||||
@ -4811,6 +4799,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||
pd.lastdeath=getServerTickTime();
|
||||
pd.hasDied=false;
|
||||
//log("Block started on is "+ev.getRespawnLocation().getBlock(),2);
|
||||
//p.teleport(GenericFunctions.FindRandomFreeLocation(p.getLocation().add(0,1,0)));
|
||||
ev.setRespawnLocation(GenericFunctions.FindRandomFreeLocation(ev.getRespawnLocation()));
|
||||
}
|
||||
|
||||
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||
@ -5860,6 +5851,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
saveConfig();
|
||||
|
||||
TwosideRecyclingCenter.saveConfig();
|
||||
TwosideShops.SaveShopPurchases();
|
||||
|
||||
//Save user configs here too.
|
||||
saveAllUserConfigs();
|
||||
@ -6687,7 +6679,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
|
||||
public static void log(String logmessage, int loglv) {
|
||||
if (LOGGING_LEVEL>=loglv) {
|
||||
log_messages.add(ChatColor.stripColor(logmessage));
|
||||
//log_messages.add(ChatColor.stripColor(logmessage));
|
||||
switch (loglv) {
|
||||
case 0: {
|
||||
//Only game breaking messages appear in level 0.
|
||||
|
@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.ArtifactAbility;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.ArtifactItem;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.ItemSet;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Loot;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.MonsterDifficulty;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.MonsterType;
|
||||
@ -140,7 +141,10 @@ public final class TwosideKeeperAPI {
|
||||
|
||||
//Party COMMANDS.
|
||||
public static List<Player> getPartyMembers(Player p) {
|
||||
return Party.getPartyMembers(p);
|
||||
return PartyManager.getPartyMembers(p); //LEGACY CODE.
|
||||
}
|
||||
public static boolean IsInSameParty(Player p, Player p2) {
|
||||
return PartyManager.IsInSameParty(p, p2);
|
||||
}
|
||||
|
||||
//Combat COMMANDS.
|
||||
@ -203,6 +207,22 @@ public final class TwosideKeeperAPI {
|
||||
return RecyclingCenter.isRecyclingCenter(b);
|
||||
}
|
||||
|
||||
//Item Set COMMANDS.
|
||||
public static boolean isSetItem(ItemStack item) {
|
||||
return ItemSet.isSetItem(item);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param item
|
||||
* @return The Item Set, or null if none found.
|
||||
*/
|
||||
public static ItemSet getItemSet(ItemStack item) {
|
||||
return ItemSet.GetSet(item);
|
||||
}
|
||||
public static int getItemTier(ItemStack item) {
|
||||
return ItemSet.GetTier(item);
|
||||
}
|
||||
|
||||
//Localization COMMANDS.
|
||||
public static String getLocalizedItemName(ItemStack i) {
|
||||
return GenericFunctions.UserFriendlyMaterialName(i);
|
||||
|
@ -1,6 +1,8 @@
|
||||
package sig.plugin.TwosideKeeper;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
@ -217,10 +219,10 @@ public class WorldShopManager {
|
||||
sessions.remove(ss);
|
||||
}
|
||||
|
||||
public void AddNewPurchase(String owner, Player purchaser, ItemStack item, double price, int amt) {
|
||||
public void AddNewPurchase(String owner, String purchaser, ItemStack item, double price, int amt) {
|
||||
purchases.add(new ShopPurchase(owner, purchaser, item, price, amt));
|
||||
}
|
||||
public void AddNewPurchase(String owner, Player purchaser, ItemStack item, double price, int amt, boolean sell) {
|
||||
public void AddNewPurchase(String owner, String purchaser, ItemStack item, double price, int amt, boolean sell) {
|
||||
purchases.add(new ShopPurchase(owner, purchaser, item, price, amt, sell));
|
||||
}
|
||||
public boolean PlayerHasPurchases(Player p) {
|
||||
@ -272,6 +274,51 @@ public class WorldShopManager {
|
||||
return shop;
|
||||
}
|
||||
|
||||
public void SaveShopPurchases() {
|
||||
File config;
|
||||
config = new File(TwosideKeeper.filesave,"shoppurchases.data");
|
||||
config.delete();
|
||||
FileConfiguration workable = YamlConfiguration.loadConfiguration(config);
|
||||
//workable.set("recycling_center.count", nodes.size());
|
||||
|
||||
for (int i=0;i<purchases.size();i++) {
|
||||
workable.set("player"+i, purchases.get(i).getPlayer());
|
||||
workable.set("customer"+i, purchases.get(i).getCustomer());
|
||||
workable.set("item"+i, purchases.get(i).getItem());
|
||||
workable.set("money"+i, purchases.get(i).getMoney());
|
||||
workable.set("amt"+i, purchases.get(i).getAmt());
|
||||
workable.set("sell"+i, purchases.get(i).getSell());
|
||||
}
|
||||
|
||||
try {
|
||||
workable.save(config);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void LoadShopPurchases() {
|
||||
File config= new File(TwosideKeeper.filesave,"shoppurchases.data");
|
||||
if (config.exists()) {
|
||||
TwosideKeeper.log("Config exists. Entering.",5);
|
||||
FileConfiguration workable = YamlConfiguration.loadConfiguration(config);
|
||||
for (int i=0;i<workable.getKeys(false).size()/6;i++) {
|
||||
purchases.add(
|
||||
new ShopPurchase(
|
||||
workable.getString("player"+i),
|
||||
workable.getString("customer"+i),
|
||||
workable.getItemStack("item"+i),
|
||||
workable.getDouble("money"+i),
|
||||
workable.getInt("amt"+i),
|
||||
workable.getBoolean("sell"+i)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
config.delete();
|
||||
}
|
||||
|
||||
public void Cleanup() {
|
||||
//Removes all shop sessions.
|
||||
sessions.clear();
|
||||
|
Loading…
x
Reference in New Issue
Block a user