diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 157dfb5..e67e3c1 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/plugin.yml b/src/plugin.yml index 0eb1b64..2880779 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.12.1 +version: 3.12.1a loadbefore: [aPlugin] commands: money: diff --git a/src/sig/plugin/TwosideKeeper/CustomDamage.java b/src/sig/plugin/TwosideKeeper/CustomDamage.java index 73f84bb..951eb0d 100644 --- a/src/sig/plugin/TwosideKeeper/CustomDamage.java +++ b/src/sig/plugin/TwosideKeeper/CustomDamage.java @@ -739,8 +739,8 @@ public class CustomDamage { } if (getDamagerEntity(damager) instanceof Enderman) { if (MonsterController.getMonsterDifficulty(((Monster)getDamagerEntity(damager)))==MonsterDifficulty.HELLFIRE) { - for (int i=0;i<4;i++) { - if (Math.random()<=0.2) { + for (int i=0;i<4;i++) { + if (Math.random()<=0.2) { LivingEntity mm = MonsterController.spawnAdjustedMonster(MonsterType.ENDERMITE, getDamagerEntity(damager).getLocation().add(0,1,0)); mm.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,Integer.MAX_VALUE,2)); } @@ -2796,6 +2796,13 @@ public class CustomDamage { case CHAINMAIL_LEGGINGS: case CHAINMAIL_CHESTPLATE: case CHAINMAIL_HELMET: { + if (target instanceof Player) { + Player p = (Player)target; + if (PVP.isPvPing(p)) { + dmgreduction+=10*((isBlockArmor)?2:1); + break; + } + } dmgreduction+=6*((isBlockArmor)?2:1); }break; case IRON_BOOTS: @@ -3276,7 +3283,11 @@ public class CustomDamage { LivingEntity shooter = getDamagerEntity(damager); if (shooter instanceof Player) { if (PlayerMode.isRanger((Player)shooter)) { - return 4.0; + if (PVP.isPvPing((Player)shooter)) { + return 0.0; + } else { + return 3.0; + } } } return 0.0; @@ -4191,7 +4202,7 @@ public class CustomDamage { mult+=2.0; } if (PVP.isPvPing((Player)shooter)) { - mult /= 4.0; + mult /= 3.0; } if (ItemSet.meetsSlayerSwordConditions(ItemSet.ASSASSIN, 18, 2, (Player)shooter)) { Material name = ((Player)shooter).getEquipment().getItemInMainHand().getType(); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java index 45ba8ea..b3d2492 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ArtifactAbility.java @@ -30,7 +30,7 @@ public enum ArtifactAbility { //Weapon Abilities DAMAGE("Strike","Improves Base Damage by [VAL]",new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}, - new PVPValue(30,1.0),10000,1,UpgradePath.BASIC,1), + new PVPValue(15,1.0),10000,1,UpgradePath.BASIC,1), ARMOR_PEN("Piercing","[VAL]% of your damage is ignored by resistances. ([PENDMG] damage)",new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}, new PVPValue(30,1.0),100,1,UpgradePath.BASIC,1), EXECUTION("Execute","Deals [VAL] extra damage for every 20% of target's missing health.",new double[]{0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3}, @@ -59,9 +59,9 @@ public enum ArtifactAbility { //Armor abilities DAMAGE_REDUCTION("Defense","Increases Base Damage reduction by [VAL]%\n\n"+PlayerMode.RANGER.getColor()+PlayerMode.RANGER.getName()+" Mode "+ChatColor.WHITE+" only receives half the effect.",new double[]{0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245,0.245}, - new PVPValue(80,0.245),100,1,UpgradePath.ARMOR,1), + new PVPValue(50,0.245),100,1,UpgradePath.ARMOR,1), HEALTH("Health","Increases Maximum Health by [VAL].\n\n"+PlayerMode.RANGER.getColor()+PlayerMode.RANGER.getName()+" Mode "+ChatColor.WHITE+" only receives half the effect.",new double[]{0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25}, - new PVPValue(40,0.25),10000,1,UpgradePath.ARMOR,1), + new PVPValue(30,0.25),10000,1,UpgradePath.ARMOR,1), HEALTH_REGEN("Regeneration","Regenerates an extra [VAL] health every 5 seconds.",new double[]{0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125}, new PVPValue(1,0.125),10000,1,UpgradePath.ARMOR,1), STATUS_EFFECT_RESISTANCE("Resistance","When a debuff is applied, there is a [VAL]% chance to remove it.",new double[]{0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25}, @@ -100,9 +100,9 @@ public enum ArtifactAbility { + "Suppression prevents movement, attacking, exploding, and teleportation."+LevelCost(10),new double[]{0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02}, new PVPValue(10,0.02),100,10,UpgradePath.SHOVEL,10), ERUPTION("Eruption","Sneak while Left-clicking a mob to damage mobs for [ERUPTIONVAL] damage and knock them up. The eruption also destroys the ground beneath you.",new double[]{3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0}, - new PVPValue(30,3.0),10000,40,UpgradePath.SHOVEL,1), + new PVPValue(15,3.0),10000,40,UpgradePath.SHOVEL,1), EARTHWAVE("Earth Wave","While in mid-air, right-click to instantly slam into the ground and launch soft blocks. This attack ignores fall damage. The larger the fall, the larger the wave.\n\nDeals [EARTHWAVEVAL] damage to every enemy hit by the wave. Deals double damage and knocks up on soft blocks.",new double[]{2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0}, - new PVPValue(30,2.0),10000,100,UpgradePath.SHOVEL,1), + new PVPValue(15,2.0),10000,100,UpgradePath.SHOVEL,1), //Axe abilities /*BREAKDOWN("Break Down",ChatColor.GRAY+"[Unimplemented] Breaks down armor on mobs. Each hit has a [VAL]% chance to remove a piece of armor from a mob.",new double[]{3,3,3,3,3,3,3,3,3,3}, @@ -124,9 +124,9 @@ public enum ArtifactAbility { //Scythe abilities AOE("Area of Effect","Deals damage to targets up to [AOEVAL]m from the main target hit.",new double[]{0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}, - new PVPValue(3,1.0),10000,1,UpgradePath.SCYTHE,1), + new PVPValue(5,1.0),10000,1,UpgradePath.SCYTHE,1), DEATHMARK("Death Mark","Applies a Death Mark stack to enemies hit. Death mark stacks last for 5 seconds, and refresh on each hit.\n\nMarks can be detonated at any time by right-clicking. Targets killed with Death Mark resets the cooldown. Targets not killed lose half their Death Mark stacks.\n\n Each death mark stack applied deals [VAL] true damage.",new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}, - new PVPValue(3,1.0),10000,10,UpgradePath.SCYTHE,1), + new PVPValue(10,1.0),10000,10,UpgradePath.SCYTHE,1), CRIPPLE("Cripple","Every 10 death marks applied on a monster increases damage dealt from all damage sources by [VAL]%.",new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}, new PVPValue(1,1.0),100,1000,UpgradePath.SCYTHE,1), diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index 53e5be4..24724fa 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -134,7 +134,6 @@ public class GenericFunctions { } public static ItemStack breakHardenedItem(ItemStack item, Player p) { - showStackTrace(); int break_count = getHardenedItemBreaks(item); if (break_count>0) { @@ -2253,6 +2252,11 @@ public class GenericFunctions { leather=false; break; } + ItemSet set = ItemSet.GetItemSet(equip); + if (!ItemSet.isRangerSet(set) && !GenericFunctions.isArtifactArmor(equip)) { + leather=false; + break; + } } return leather; } @@ -3728,6 +3732,8 @@ public class GenericFunctions { if (!revived) { if (PVP.isPvPing(p)) { revived=true; + pd.lastPVPHitReason = reason; + pd.lastPVPHitDamage = dmg; RevivePlayer(p, p.getMaxHealth()); PVP session = PVP.getMatch(p); session.onDeathEvent(p); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java index 30b714c..d627e6a 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java @@ -87,6 +87,17 @@ public enum ItemSet { //ItemSet.SHARD, //ItemSet.TOXIN, }; + + public static final ItemSet[] SLAYER= new ItemSet[]{ + ItemSet.ASSASSIN, + ItemSet.LORASYS, + ItemSet.STEALTH, + }; + + public static final ItemSet[] RANGER2 = new ItemSet[]{ + ItemSet.SHARD, + ItemSet.TOXIN, + }; public static final ItemSet[] MELEE = new ItemSet[]{ ItemSet.DAWNTRACKER, ItemSet.PANROS, @@ -1236,17 +1247,39 @@ public enum ItemSet { } public static boolean isTrinketSet(ItemSet is) { - for (ItemSet tr : TRINKET) { - if (is == tr) { - return true; + if (is!=null) { + for (ItemSet tr : TRINKET) { + if (is == tr) { + return true; + } } } return false; } public static boolean isAssassinSet(ItemSet is) { - if (is == ItemSet.ASSASSIN || is == ItemSet.LORASYS || is == ItemSet.STEALTH) { - return true; + if (is!=null) { + for (ItemSet set : SLAYER) { + if (is==set) { + return true; + } + } + } + return false; + } + + public static boolean isRangerSet(ItemSet is) { + if (is!=null) { + for (ItemSet set : RANGER) { + if (is==set) { + return true; + } + } + for (ItemSet set : RANGER2) { + if (is==set) { + return true; + } + } } return false; } diff --git a/src/sig/plugin/TwosideKeeper/PVP.java b/src/sig/plugin/TwosideKeeper/PVP.java index 0d65c2f..4c47819 100644 --- a/src/sig/plugin/TwosideKeeper/PVP.java +++ b/src/sig/plugin/TwosideKeeper/PVP.java @@ -10,16 +10,22 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.ChunkSnapshot; +import org.bukkit.Color; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; import com.google.common.collect.ImmutableList; @@ -167,6 +173,78 @@ public class PVP { for (int i=9;i<36;i++) { p.getInventory().setItem(i, new ItemStack(Material.AIR)); } + ReplaceGearWithLeatherVersionAndFilterItems(p); + } + + private void ReplaceGearWithLeatherVersionAndFilterItems(Player p) { + for (int i=0;i4) { //This potion is too strong, and cannot be used in a PvP match. + p.getInventory().setItem(i, new ItemStack(Material.AIR)); + } + } + } + //Use of scrolls should also be forbidden. + if (ItemUtils.isValidItem(item) && + item.getType()==Material.PAPER && + item.hasItemMeta() && item.getEnchantments().size()>0) { + //This means it's magical paper and is not allowed. + p.getInventory().setItem(i, new ItemStack(Material.AIR)); + } + } + RemoveAllPlayerBuffs(p); + } + + private void RemoveAllPlayerBuffs(Player p) { + for (PotionEffect pe : p.getActivePotionEffects()) { + GenericFunctions.logAndRemovePotionEffectFromEntity(pe.getType(), p); + } + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.vendetta_amt=0; + pd.weaponcharges=0; + pd.damagepool=0; + HashMap buffs = Buff.getBuffData(p); + for (String s : buffs.keySet()) { + Buff b = buffs.get(s); + Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{ + b.removeBuff(p, s); + }, 1); + } + } + + private void ColorGearBasedOnTeam(Player p, int team) { + for (int i=0;i{ @@ -183,6 +266,7 @@ public class PVP { if (pl!=null && pl.isValid() && pl.isOnline() && !s.equalsIgnoreCase(ss)) { pl.sendMessage(ChatColor.YELLOW+s+" has left the match. Current Participants: "+ChatColor.YELLOW+getParticipants()); } + RemoveAllPlayerBuffs(pl); } },2); } @@ -240,13 +324,7 @@ public class PVP { resetPlayerChoices(); DisplayRoundChoices(); } else { - for (String s : players.keySet()) { - Player pl = Bukkit.getPlayer(s); - if (pl!=null && pl.isValid() && pl.isOnline()) { - pl.sendMessage(ChatColor.YELLOW+"Not enough participants!"+ChatColor.GREEN+" The PVP Match has been disbanded."); - } - } - return false; //Cancelled. + return DisbandMatch(ChatColor.YELLOW+"Not enough participants!"+ChatColor.GREEN+" The PVP Match has been disbanded."); } } //} @@ -277,7 +355,7 @@ public class PVP { p.sendMessage(ChatColor.YELLOW+style.getTitle()+ChatColor.GREEN+" has been voted as the style for this PVP match!"); } } - if (players.size()>=2 && style.name().contains("ROUNDS")) { + if (players.size()>2 && style.name().contains("ROUNDS")) { state = CHOICEENGINE.WAITFORTEAMCHOICES; isTeamMatch=true; lastSelected=TwosideKeeper.getServerTickTime(); @@ -290,13 +368,7 @@ public class PVP { } timer=TwosideKeeper.getServerTickTime(); } else { - for (String s : players.keySet()) { - Player pl = Bukkit.getPlayer(s); - if (pl!=null && pl.isValid() && pl.isOnline()) { - pl.sendMessage(ChatColor.YELLOW+"Not enough participants!"+ChatColor.GREEN+" The PVP Match has been disbanded."); - } - } - return false; //Cancelled. + return DisbandMatch(ChatColor.YELLOW+"Not enough participants!"+ChatColor.GREEN+" The PVP Match has been disbanded."); } } }break; @@ -305,13 +377,7 @@ public class PVP { if (allPlayersHaveChosenATeam() || lastSelected+4000<=TwosideKeeper.getServerTickTime()) { randomlyPickTeams(); if (teamsAreInvalid()) { - for (String s : players.keySet()) { - Player p = Bukkit.getPlayer(s); - if (p!=null) { - p.sendMessage("Not enough players in both teams to begin a PvP Match! The match has been cancelled."); - } - } - return false; + return DisbandMatch("Not enough players in both teams to begin a PvP Match! The match has been cancelled."); } SendTeamList(); resetPlayerChoices(); @@ -367,13 +433,7 @@ public class PVP { } } } else { - for (String s : players.keySet()) { - Player pl = Bukkit.getPlayer(s); - if (pl!=null && pl.isValid() && pl.isOnline()) { - pl.sendMessage(ChatColor.YELLOW+"Not enough participants!"+ChatColor.GREEN+" The PVP Match has been disbanded."); - } - } - return false; //Cancelled. + return DisbandMatch(ChatColor.YELLOW+"Not enough participants!"+ChatColor.GREEN+" The PVP Match has been disbanded."); } } }break; @@ -416,6 +476,18 @@ public class PVP { return true; } + private boolean DisbandMatch(String msg) { + giveBackInventories(); + for (String s : players.keySet()) { + Player pl = Bukkit.getPlayer(s); + if (pl!=null && pl.isValid() && pl.isOnline()) { + pl.sendMessage(msg); + + } + } + return false; //Cancelled. + } + private void giveBackInventories() { for (String s : players.keySet()) { PVPPlayer pp = players.get(s); @@ -424,6 +496,10 @@ public class PVP { for (int i=0;i0) { + DecimalFormat df = new DecimalFormat("0.00"); + sb.append(" for "); + sb.append(ChatColor.RED); + sb.append(df.format(pd.lastPVPHitDamage)); + sb.append(ChatColor.RESET); + sb.append(" damage"); + sb2.append(" for "); + sb2.append(ChatColor.RED); + sb2.append(df.format(pd.lastPVPHitDamage)); + sb2.append(ChatColor.RESET); + sb2.append(" damage"); + } + if (pd.lastPVPHitReason!=null) { + sb.append(" ("); + sb.append(pd.lastPVPHitReason); + sb.append(")."); + sb2.append(" ("); + sb2.append(pd.lastPVPHitReason); + sb2.append(")."); + } else { + sb.append("."); + sb2.append("."); + } + p.sendMessage(sb.toString()); Player killerp = Bukkit.getPlayer(pd.lastplayerHitBy); if (killerp!=null) { - killerp.sendMessage(" Killed "+ChatColor.GREEN+p.getName()+ChatColor.RESET+"."); + killerp.sendMessage(sb2.toString()); + PlayerStructure killerpd = PlayerStructure.GetPlayerStructure(killerp); + killerpd.damagepool=0; + killerpd.customtitle.update(); } } else { if (players.containsKey(p.getName())) { diff --git a/src/sig/plugin/TwosideKeeper/PlayerStructure.java b/src/sig/plugin/TwosideKeeper/PlayerStructure.java index 8a9b730..0d645ff 100644 --- a/src/sig/plugin/TwosideKeeper/PlayerStructure.java +++ b/src/sig/plugin/TwosideKeeper/PlayerStructure.java @@ -178,6 +178,8 @@ public class PlayerStructure { public Location playerLocRef=null; public boolean freshBlood=true; public boolean firstPVPMatch=true; + public String lastPVPHitReason=""; + public double lastPVPHitDamage=0; /*State 1 * 1: Best of 3 Rounds * 2: Best of 5 Rounds diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index a16df08..3798d77 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -173,6 +173,7 @@ import org.bukkit.event.world.WorldSaveEvent; import org.bukkit.generator.ChunkGenerator; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; @@ -3546,12 +3547,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { PVP session = PVP.getMatch(p); if (session!=null) { - PVPPlayer pp = session.players.get(p); + PVPPlayer pp = session.players.get(p.getName()); for (int i=0;i=4 && @@ -4895,7 +4899,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { return; } } else - if (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_BLOCK && GenericFunctions.isDumpableContainer(ev.getClickedBlock().getType())) { + if (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_BLOCK && GenericFunctions.isDumpableContainer(ev.getClickedBlock().getType()) && !PVP.isPvPing(ev.getPlayer())) { //This is an attempt to insert an item cube into a container. See what item cube we're holding. if (ev.getPlayer().getInventory().getItemInMainHand().hasItemMeta() && ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().hasLore() && @@ -5699,7 +5703,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public void onPlayerDeath(PlayerDeathEvent ev) { //Modify the death message. This is a fix for getting rid of the healthbar from the player name. final Player p = ev.getEntity(); - if (!p.getWorld().getName().contains("Instance")) { + if (!p.getWorld().getName().contains("Instance") && !PVP.isPvPing(p)) { if (!DeathManager.deathStructureExists(p)) { PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); pd.playermode_on_death=pd.lastmode; @@ -6471,6 +6475,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } }*/ + if (PVP.isPvPing(ev.getPlayer())) { + ev.setCancelled(true); + return; + } ItemSet.updateItemSets(ev.getPlayer()); return; } @@ -6868,7 +6876,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { //Check for a right-click for a Bauble Pouch. if (ev.getClick()==ClickType.RIGHT && ((ev.getInventory().getType()!=InventoryType.WORKBENCH && ev.getRawSlot()>=0) || - (ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9))) { + (ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9)) && !PVP.isPvPing((Player)ev.getWhoClicked())) { ItemStack item = ev.getCurrentItem(); if (BaublePouch.isBaublePouch(item)) { BaublePouch.openBaublePouch((Player)ev.getWhoClicked(), item); @@ -7316,7 +7324,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { log("Inventory click.",5); //WARNING! This only happens for ITEM CUBES! Do not add other items in here! if (((ev.getInventory().getType()!=InventoryType.WORKBENCH && ev.getRawSlot()>=0) || - (ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9)) && ev.isRightClick() && ev.getCurrentItem()!=null && ev.getCurrentItem().getAmount()==1) { + (ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9)) && ev.isRightClick() && ev.getCurrentItem()!=null && ev.getCurrentItem().getAmount()==1 && + !PVP.isPvPing((Player)ev.getWhoClicked())) { log("Clicked Item: "+ev.getCurrentItem().toString(),5); if (ev.getCurrentItem().hasItemMeta()) { log("Item Meta: "+ev.getCurrentItem().getItemMeta().toString(),5); @@ -9834,6 +9843,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { return; } Player p = ev.getPlayer(); + if (PVP.isPvPing(p)) { + ev.setCancelled(true); + return; + } //log("Item Right now: "+ev.getItem().getItemStack(),0); long time = System.nanoTime(); long totaltime = System.nanoTime(); @@ -9846,6 +9859,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { //TwosideKeeper.log(" New Stack is: "+newstack,0); if (newstack==null || newstack.getType()==Material.AIR) { SoundUtils.playGlobalSound(ev.getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(ev.getItem().getItemStack())); + PlayPickupParticle(ev.getPlayer(),ev.getItem()); if (ev.getRemaining()>0) { Item it = ev.getItem(); it.getItemStack().setAmount(ev.getRemaining()); diff --git a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java index 946bc79..ccf9d59 100644 --- a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java +++ b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java @@ -826,8 +826,14 @@ final public class runServerHeartbeat implements Runnable { } else { p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(ChatColor.RED+ChatColor.stripColor(GenericFunctions.PlayerModePrefix(p))); } + } else { + p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p)); } + } else { + p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p)); } + } else { + p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p)); } } else { p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p));