->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.
dev
sigonasr2 9 years ago
parent c4e49639c6
commit f8efbec088
  1. BIN
      TwosideKeeper.jar
  2. 2
      src/plugin.yml
  3. 41
      src/sig/plugin/TwosideKeeper/EliteMonster.java
  4. 83
      src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java
  5. 2
      src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java
  6. 20
      src/sig/plugin/TwosideKeeper/HelperStructures/ShopPurchase.java
  7. 24
      src/sig/plugin/TwosideKeeper/HelperStructures/WorldShop.java
  8. 27
      src/sig/plugin/TwosideKeeper/MonsterController.java
  9. 43
      src/sig/plugin/TwosideKeeper/NewCombat.java
  10. 230
      src/sig/plugin/TwosideKeeper/Party.java
  11. 220
      src/sig/plugin/TwosideKeeper/PartyManager.java
  12. 4
      src/sig/plugin/TwosideKeeper/PlayerStructure.java
  13. 6
      src/sig/plugin/TwosideKeeper/Recipes.java
  14. 130
      src/sig/plugin/TwosideKeeper/TwosideKeeper.java
  15. 22
      src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java
  16. 51
      src/sig/plugin/TwosideKeeper/WorldShopManager.java

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);
AwakenedArtifact.addPotentialEXP(le.getEquipment().getItemInMainHand(), (int)((ratio*20)+5), 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);
AwakenedArtifact.addPotentialEXP(p.getEquipment().getItemInMainHand(), (int)((ratio*20)+5)*((headshot)?2:1), 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);
@ -1265,14 +1271,14 @@ public class NewCombat {
}
if (damager instanceof Player) {
Player p = (Player)damager;
Player p = (Player)damager;
double lifestealpct = calculateLifeStealAmount(p);
double healamt = finaldmg*lifestealpct;
//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);
}
@ -1573,6 +1579,35 @@ 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;
}
}

@ -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>();
@ -681,6 +681,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (pd.target!=null && !pd.target.isDead() && pd.target.getLocation().getWorld().equals(p.getWorld()) && pd.target.getLocation().distanceSquared(p.getLocation())>256) {
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()));
@ -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,24 +3325,26 @@ 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 (getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory())>=DeathManager.CalculateDeathPrice(player)) {
//player.getInventory().addItem(ev.getCurrentItem());
if (ev.getCurrentItem()!=null &&
ev.getCurrentItem().getType()!=Material.AIR) {
//player.getLocation().getWorld().dropItemNaturally(player.getLocation(), ev.getCurrentItem()).setPickupDelay(0);
GenericFunctions.giveItem(player, ev.getCurrentItem());
ev.setCurrentItem(new ItemStack(Material.AIR));
final DecimalFormat df = new DecimalFormat("0.00");
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
player.sendMessage(ChatColor.BLUE+"New Balance: "+ChatColor.GREEN+"$"+df.format((getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory()))));
}
},5);
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 &&
ev.getCurrentItem().getType()!=Material.AIR) {
//player.getLocation().getWorld().dropItemNaturally(player.getLocation(), ev.getCurrentItem()).setPickupDelay(0);
GenericFunctions.giveItem(player, ev.getCurrentItem());
ev.setCurrentItem(new ItemStack(Material.AIR));
final DecimalFormat df = new DecimalFormat("0.00");
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
player.sendMessage(ChatColor.BLUE+"New Balance: "+ChatColor.GREEN+"$"+df.format((getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory()))));
}
},5);
}
} else {
player.sendMessage(ChatColor.RED+"You cannot afford to salvage any more items!");
}
} else {
player.sendMessage(ChatColor.RED+"You cannot afford to salvage any more items!");
}
ev.setCancelled(true);
}
@ -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);
}
}
@ -4051,34 +4058,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)) {
@ -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…
Cancel
Save