diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 518b615..4a90692 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/plugin.yml b/src/plugin.yml index 204ba43..5c71ba8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.10.7 +version: 3.10.7a loadbefore: [aPlugin] commands: money: @@ -147,4 +147,19 @@ commands: description: View a full debug report of the Server. usage: /debugreport permission: TwosideKeeper.fulldebugreport + permission-message: No permissions! + vac: + description: Toggle Vacuum Cube suction + usage: /vac + permission: TwosideKeeper.money + permission-message: No permissions! + equip_weapon: + description: Toggle Automatic Equipping of Weapons + usage: /equip_weapon + permission: TwosideKeeper.money + permission-message: No permissions! + equip_armor: + description: Toggle Automatic Equipping of Armor + usage: /equip_armor + permission: TwosideKeeper.money permission-message: No permissions! \ No newline at end of file diff --git a/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java b/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java index 5097fbb..f3ea297 100644 --- a/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java +++ b/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java @@ -60,6 +60,10 @@ public class EliteGuardian extends EliteMonster{ cutscenetimer++; if (cutscenetimer>100) { state=STATE.PASSIVE; + //Play the cutscene for all of these players. + for (Player p : nearby2) { + p.setGameMode(GameMode.SURVIVAL); + } } } m.setAI(false); diff --git a/src/sig/plugin/TwosideKeeper/CustomDamage.java b/src/sig/plugin/TwosideKeeper/CustomDamage.java index 3d6e406..3536757 100644 --- a/src/sig/plugin/TwosideKeeper/CustomDamage.java +++ b/src/sig/plugin/TwosideKeeper/CustomDamage.java @@ -15,6 +15,7 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Arrow; import org.bukkit.entity.Blaze; import org.bukkit.entity.CaveSpider; @@ -738,7 +739,7 @@ public class CustomDamage { private static double modifyFateBasedOnHolidayTreats(Player p, double damage) { PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); boolean consumed=false; - if (p.getHealth()-damage<=0 && pd.lastrevivecandyconsumed+200p.getMaxHealth()) { + pd.regenpool=p.getMaxHealth(); + } DecimalFormat df = new DecimalFormat("0.00"); GenericFunctions.sendActionBarMessage(p, ""); TwosideKeeper.log(p.getName()+" healed "+df.format(lifestealamt)+" dmg from Lifesteal.", 5); @@ -2494,7 +2498,7 @@ public class CustomDamage { TwosideKeeper.log("In here",5); if (!PlayerMode.isDefender(p) && PlayerMode.isDefender(check) && check.isBlocking() && - !p.equals(check) && (reason==null || !reason.equalsIgnoreCase("Cupid Set Tank"))) { + !p.equals(check) && NotTankReason(reason)) { //This is a defender. Transfer half the damage to them! dmg = dmg/2; //Send the rest of the damage to the defender. @@ -2505,7 +2509,7 @@ public class CustomDamage { break; } else if (!isCupidTank(p) && isCupidTank(check) && - !p.equals(check) && (reason==null || !reason.equalsIgnoreCase("Defender Tank"))) { + !p.equals(check) && NotTankReason(reason)) { //This is a defender. Transfer half the damage to them! double origdmg = dmg; dmg = origdmg-(origdmg*(ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(check), check, ItemSet.CUPID)/100d)); @@ -2524,6 +2528,10 @@ public class CustomDamage { return dmg; } + public static boolean NotTankReason(String reason) { + return reason==null || !reason.equalsIgnoreCase("Cupid Set Tank") || !reason.equalsIgnoreCase("Defender Tank"); + } + private static boolean isCupidTank(Player p) { if (ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(p), p, ItemSet.CUPID)>0) { return true; @@ -2655,7 +2663,7 @@ public class CustomDamage { } private static void subtractHealth(double damage, LivingEntity target) { - if (target instanceof Player) {TwosideKeeper.log("Going to subtract "+damage+" damage", 5);} + //if (target instanceof ArmorStand) {TwosideKeeper.log("Going to subtract "+damage+" damage", 0);} if (target.getHealth()>0) { if (target.getHealth()0) { + if (dpslist.size()>0 && !m.isDead()) { Bukkit.getServer().broadcastMessage(GenericFunctions.getDisplayName(m)+" Takedown Failed..."); Bukkit.getServer().broadcastMessage(ChatColor.YELLOW+"DPS Breakdown:"); Bukkit.getServer().broadcastMessage(generateDPSReport()); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index 52f1e21..10e654a 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -3591,8 +3591,12 @@ public class GenericFunctions { } PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); pd.slayermodehp = Math.min(healdmg,p.getMaxHealth()); + pd.vendetta_amt=0; + pd.lastvendettastack=0; + pd.thorns_amt=0; p.setFireTicks(0); CustomDamage.addIframe(40, p); + GenericFunctions.sendActionBarMessage(p, ""); //p.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING,20,0)); //TwosideKeeper.log("Added "+20+" glowing ticks to "+p.getName()+" for reviving.",3); //p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,20,0)); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/MessageUtils.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/MessageUtils.java index 17c2628..cbcdca3 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/MessageUtils.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/MessageUtils.java @@ -1,7 +1,11 @@ package sig.plugin.TwosideKeeper.HelperStructures.Utils; +import java.util.List; + import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import sig.plugin.TwosideKeeper.PartyManager; import sig.plugin.TwosideKeeper.TwosideKeeper; import sig.plugin.TwosideKeeper.HelperStructures.ServerType; @@ -12,4 +16,11 @@ public class MessageUtils { } Bukkit.broadcastMessage(msg); } + + public static void announceMessageToParty(Player p, String msg) { + List partymembers = PartyManager.getPartyMembers(p); + for (Player pl : partymembers) { + pl.sendMessage(msg); + } + } } diff --git a/src/sig/plugin/TwosideKeeper/PlayerStructure.java b/src/sig/plugin/TwosideKeeper/PlayerStructure.java index ed2483d..5b1cd3c 100644 --- a/src/sig/plugin/TwosideKeeper/PlayerStructure.java +++ b/src/sig/plugin/TwosideKeeper/PlayerStructure.java @@ -189,6 +189,9 @@ public class PlayerStructure { public long lastActionBarMessageTime=0; public long lastsantabox2; public double regenpool=0; + public boolean vacuumsuckup=true; + public boolean equipweapons=true; + public boolean equiparmor=true; //Needs the instance of the player object to get all other info. Only to be called at the beginning. @SuppressWarnings("deprecation") @@ -243,6 +246,9 @@ public class PlayerStructure { this.damagelogging=false; this.isPlayingSpleef=false; this.iframetime=TwosideKeeper.getServerTickTime(); + this.vacuumsuckup=true; + this.equipweapons=true; + this.equiparmor=true; //Set defaults first, in case this is a new user. loadConfig(); p.getInventory().addItem(new ItemStack(Material.PORTAL)); @@ -337,6 +343,9 @@ public class PlayerStructure { workable.set("holidaychest3", holidaychest3); workable.set("holidaychest4", holidaychest4); workable.set("lastsantabox2", lastsantabox2); + workable.set("vacuumsuckup", vacuumsuckup); + workable.set("equipweapons", equipweapons); + workable.set("equiparmor", equiparmor); workable.set("playermode_on_death", playermode_on_death.name()); //ConfigurationSection deathlootlist = workable.createSection("deathloot"); if (DeathManager.deathStructureExists(Bukkit.getPlayer(name))) { @@ -419,6 +428,9 @@ public class PlayerStructure { workable.addDefault("holidaychest3", holidaychest3); workable.addDefault("holidaychest4", holidaychest4); workable.addDefault("lastsantabox2", lastsantabox2); + workable.addDefault("vacuumsuckup", vacuumsuckup); + workable.addDefault("equipweapons", equipweapons); + workable.addDefault("equiparmor", equiparmor); workable.addDefault("playermode_on_death", playermode_on_death.name()); workable.addDefault("COOLDOWN_deathmark", last_deathmark); workable.addDefault("COOLDOWN_shovelspell", last_shovelspell); @@ -494,6 +506,9 @@ public class PlayerStructure { this.last_mock = workable.getLong("COOLDOWN_lastmock"); this.lastassassinatetime = workable.getLong("COOLDOWN_lastassassinatetime"); this.lastlifesavertime = workable.getLong("COOLDOWN_lastlifesavertime"); + this.vacuumsuckup = workable.getBoolean("vacuumsuckup"); + this.equipweapons = workable.getBoolean("equipweapons"); + this.equiparmor = workable.getBoolean("equiparmor"); if (this.hasDied) { List deathlootlist = new ArrayList(); diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index 5db5a5c..c899ded 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -41,6 +41,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.AreaEffectCloud; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Arrow; import org.bukkit.entity.Bat; import org.bukkit.entity.Blaze; @@ -127,6 +128,7 @@ import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerAchievementAwardedEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerExpChangeEvent; @@ -229,6 +231,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Utils.EntityUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.InventoryUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils; +import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils; import sig.plugin.TwosideKeeper.HolidayEvents.Christmas; @@ -2023,26 +2026,26 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (CHRISTMASEVENT_ACTIVATED) { switch (InventoryUtils.onlyHoldingFiveDirtBlocks(p)) { case HOLDING5DIRT:{ - Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.GREEN+"READY"+"."); + MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.GREEN+"READY"+"."); }break; case NOTEMPTYINVENTORY: - Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); + MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); p.sendMessage(" You need to get rid of "+ChatColor.RED+"ALL ITEMS"+ChatColor.RESET+" to play."); break; case NOTENOUGHDIRT: - Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); + MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); p.sendMessage(" You need to have exactly "+ChatColor.YELLOW+"5 DIRT BLOCKS"+ChatColor.RESET+" to play."); break; case TOOMUCHDIRT: - Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); + MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); p.sendMessage(" You need to have exactly "+ChatColor.YELLOW+"5 DIRT BLOCKS"+ChatColor.RESET+" to play."); break; } } else { if (args.length>0) { - Bukkit.broadcastMessage(p.getName()+" has issued a ready check. Type "+ChatColor.YELLOW+"/ready"+ChatColor.RESET+" to announce when you are ready."); + MessageUtils.announceMessageToParty(p,p.getName()+" has issued a ready check. Type "+ChatColor.YELLOW+"/ready"+ChatColor.RESET+" to announce when you are ready."); } else { - Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.GREEN+"READY"+"."); + MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.GREEN+"READY"+"."); } } return true; @@ -2063,6 +2066,27 @@ public class TwosideKeeper extends JavaPlugin implements Listener { Player p = (Player)sender; p.sendMessage(aPlugin.API.getHabitatMap(p, 7)); return true; + } else + if (cmd.getName().equalsIgnoreCase("vac")) { + Player p = (Player)sender; + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.vacuumsuckup=!pd.vacuumsuckup; + p.sendMessage("Vacuum Cube suction is now turned "+(pd.vacuumsuckup?ChatColor.GREEN+"ON":ChatColor.RED+"OFF")+ChatColor.RESET+"."); + return true; + } else + if (cmd.getName().equalsIgnoreCase("equip_weapon")) { + Player p = (Player)sender; + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.equipweapons=!pd.equipweapons; + p.sendMessage("Automatic Weapon Equipping is now turned "+(pd.equipweapons?ChatColor.GREEN+"ON":ChatColor.RED+"OFF")+ChatColor.RESET+"."); + return true; + } else + if (cmd.getName().equalsIgnoreCase("equip_armor")) { + Player p = (Player)sender; + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.equiparmor=!pd.equiparmor; + p.sendMessage("Automatic Armor Equipping is now turned "+(pd.equiparmor?ChatColor.GREEN+"ON":ChatColor.RED+"OFF")+ChatColor.RESET+"."); + return true; } } else { //Implement console/admin version later (Let's you check any name's money.) @@ -4865,6 +4889,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } if ((ev.getClick()==ClickType.SHIFT_LEFT || ev.getClick()==ClickType.SHIFT_RIGHT) && + ev.getInventory().getType()==InventoryType.CRAFTING && ev.getWhoClicked().getInventory().getExtraContents()[0]==null && GenericFunctions.AllowedToBeEquippedToOffHand((Player)ev.getWhoClicked(),ev.getCurrentItem(),ev.getRawSlot()) && ((ev.getInventory().getType()!=InventoryType.WORKBENCH && ev.getRawSlot()>=0) || (ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9))) { @@ -4907,7 +4932,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { return; } - if (ev.getClick()==ClickType.RIGHT && Artifact.isMalleableBase(ev.getCurrentItem())) { + /*if (ev.getClick()==ClickType.RIGHT && Artifact.isMalleableBase(ev.getCurrentItem())) { if (MalleableBaseQuest.getStatus(ev.getCurrentItem())==QuestStatus.UNFORMED) { StartMalleableBaseQuest((Player)ev.getWhoClicked()); ev.setCancelled(true); @@ -4917,7 +4942,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.setCancelled(true); return; } - } + }*/ //Left-Click for an Arrow Quiver. if (ev.getClick()==ClickType.LEFT && ev.getCursor()!=null && ev.getCursor().getAmount()>0 && @@ -5861,6 +5886,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { CustomDamage.setupTrueDamage(ev); ev.setDamage(DamageModifier.BASE, dmgdealt); log("BASE damage: "+ev.getDamage(DamageModifier.BASE),5); + if (ev.getEntity() instanceof ArmorStand) { + ArmorStand as = (ArmorStand)ev.getEntity(); + if (as.isVisible() && + !as.isInvulnerable()) { + as.setHealth(Math.max(as.getHealth()-dmgdealt, 0)); + } + } //Only a player can deal custom damage. LivingEntity l = CustomDamage.getDamagerEntity(ev.getDamager()); if (l instanceof Player) { @@ -6250,10 +6282,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener { @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) public void onLightningStrike(LightningStrikeEvent ev) { LightningStrike lightning = ev.getLightning(); - for (int i=0;i<4;i++) { - Item it = lightning.getLocation().getWorld().dropItemNaturally(lightning.getLocation().add(0,2,0), Artifact.createArtifactItem(ArtifactItem.MYSTERIOUS_ESSENCE)); - it.setVelocity(new Vector(Math.random()*10-15,Math.random()*5,Math.random()*10-15)); - //Make them move in a direction violently and spontaneously. + if (!lightning.isEffect()) { + for (int i=0;i<4;i++) { + Item it = lightning.getLocation().getWorld().dropItemNaturally(lightning.getLocation().add(0,2,0), Artifact.createArtifactItem(ArtifactItem.MYSTERIOUS_ESSENCE)); + it.setVelocity(new Vector(Math.random()*10-15,Math.random()*5,Math.random()*10-15)); + //Make them move in a direction violently and spontaneously. + } } } @@ -7128,13 +7162,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } } - } - + } } @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) public void onaPluginPickupEvent(PlayerGainItemEvent ev) { - TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 1); + TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 4); Player p = ev.getPlayer(); ItemStack newstack = InventoryUtils.AttemptToFillPartialSlotsFirst(p,ev.getItemStack()); if (newstack==null) { @@ -7366,6 +7399,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } public boolean AutoEquipItem(ItemStack item, Player p) { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); if (item.getType().toString().contains("BOOTS") || item.getType().toString().contains("LEGGINGS") || item.getType().toString().contains("CHESTPLATE") || @@ -7378,7 +7412,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (armor.getType().toString().contains("BOOTS") && p.getEquipment().getBoots()==null && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && - !PlayerMode.isSlayer(p)) { + !PlayerMode.isSlayer(p) && + pd.equiparmor) { p.getEquipment().setBoots(armor); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); @@ -7389,7 +7424,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (armor.getType().toString().contains("LEGGINGS") && p.getEquipment().getLeggings()==null && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && - !PlayerMode.isSlayer(p)) { + !PlayerMode.isSlayer(p) && + pd.equiparmor) { p.getEquipment().setLeggings(armor); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); @@ -7400,7 +7436,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (armor.getType().toString().contains("CHESTPLATE") && p.getEquipment().getChestplate()==null && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && - !PlayerMode.isSlayer(p)) { + !PlayerMode.isSlayer(p) && + pd.equiparmor) { p.getEquipment().setChestplate(armor); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); @@ -7411,7 +7448,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (armor.getType().toString().contains("HELMET") && p.getEquipment().getHelmet()==null && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && - !PlayerMode.isSlayer(p)) { + !PlayerMode.isSlayer(p) && + pd.equiparmor) { p.getEquipment().setHelmet(armor); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); @@ -7422,7 +7460,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (armor.getType().toString().contains("SHIELD") && (p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null) && !PlayerMode.isStriker(p) && - (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER")))) { + (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && + pd.equipweapons) { if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) { p.getEquipment().setItemInMainHand(armor); } else { @@ -7435,7 +7474,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { return true; } else if (armor.getType().toString().contains("_AXE") && - (p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null)) { + (p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null) && + pd.equipweapons) { if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) { p.getEquipment().setItemInMainHand(armor); } else { @@ -7447,7 +7487,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { p.updateInventory(); return true; } else - if (ArrowQuiver.isValidQuiver(armor) && p.getInventory().getExtraContents()[0]==null) { + if (ArrowQuiver.isValidQuiver(armor) && p.getInventory().getExtraContents()[0]==null && + pd.equipweapons) { p.getInventory().setExtraContents(new ItemStack[]{armor}); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); @@ -8886,7 +8927,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (PlayerMode.isDefender(p)) { hp+=10; - GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.REGENERATION,60,(p.isBlocking())?1:0,p,false); + GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.REGENERATION,60,(p.isBlocking())?3:1,p,false); } if (PlayerMode.isBarbarian(p)) { double red = 1-CustomDamage.CalculateDamageReduction(1,p,null); @@ -9313,6 +9354,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (all || critchance>0) {receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Critical Strike Chance: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(critchance)+"%");} double critdamage = CustomDamage.calculateCriticalStrikeMultiplier(p, p.getEquipment().getItemInMainHand())*100+100; if (all || (critdamage>200 && critchance>0)) {receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Crit Damage: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(critdamage)+"%");} + double armorpen = CustomDamage.calculateArmorPen(p, 1.0, p.getEquipment().getItemInMainHand())/1.0d; + if (all || armorpen>0) { + receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Armor Penetration: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(armorpen*100d)+"%"); + } if (PlayerMode.isDefender(p)) { double dodgechance=0.0; if (!p.isBlocking()) { diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java index 0031eb7..1923bd2 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java @@ -29,6 +29,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Common.ArrowQuiver; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils; +import sig.plugin.TwosideKeeper.HolidayEvents.Christmas; public final class TwosideKeeperAPI { //MONEY COMMANDS. @@ -100,6 +101,41 @@ public final class TwosideKeeperAPI { public static LivingEntityDifficulty getLivingEntityDifficulty(LivingEntity m) { return MonsterController.getLivingEntityDifficulty(m); } + + //Christmas Commands. + public static ItemStack getSmallCandyItem() { + return Christmas.getSmallCandyItem(); + } + public static ItemStack getLargeCandyItem() { + return Christmas.getLargeCandyItem(); + } + public static ItemStack getSourCandyItem() { + return Christmas.getSourCandyItem(); + } + public static ItemStack getSweetCandyItem() { + return Christmas.getSweetCandyItem(); + } + public static ItemStack getMysteryFlavorLollipopItem() { + return Christmas.getMysteryFlavorLollipopItem(); + } + public static ItemStack getHolidayRageCandyBarItem() { + return Christmas.getHolidayRageCandyBarItem(); + } + public static ItemStack getChristmasEventToken() { + return Christmas.getChristmasEventToken(); + } + public static ItemStack getFireworkShooterBox() { + return Christmas.getFireworkShooterBox(); + } + public static ItemStack getRocketBoosterItem() { + return Christmas.getRocketBoosterItem(); + } + public static ItemStack getSantaDimensionalBox() { + return Christmas.getSantaDimensionalBox(); + } + public static ItemStack getWinterSolsticeAugury() { + return Christmas.getWinterSolsticeAugury(); + } //Artifact Commands. public static boolean isArtifactItem(ItemStack item) { diff --git a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java index 955be1f..6fae292 100644 --- a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java +++ b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java @@ -117,7 +117,7 @@ final class runServerHeartbeat implements Runnable { TwosideKeeper.LASTSERVERCHECK=serverTickTime; } - if (Bukkit.getWorld("world").getTime()>=12000) { + if (Bukkit.getWorld("world").getTime()>=12000 || Bukkit.getWorld("world").isThundering()) { Collection players = ServerHeartbeat.getServer().getOnlinePlayers(); //Count the number of players sleeping. Compare to "sleepingplayers" count. TwosideKeeper.log("[DEBUG] Time: "+Bukkit.getWorld("world").getTime()+" Full Time: "+Bukkit.getWorld("world").getFullTime() + " SERVERTICKTIME: "+serverTickTime,4); @@ -605,6 +605,7 @@ final class runServerHeartbeat implements Runnable { public static void runVacuumCubeSuckup(Player p) { if (InventoryUtils.isCarryingVacuumCube(p)) { //Suck up nearby item entities. + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); List ents = p.getNearbyEntities(6, 6, 6); int count=0; for (Entity ent : ents) { @@ -658,7 +659,9 @@ final class runServerHeartbeat implements Runnable { } } } else { - ent.setVelocity(new Vector(xvel,yvel,zvel)); + if (pd.vacuumsuckup) { + ent.setVelocity(new Vector(xvel,yvel,zvel)); + } } /*if (ent.getLocation().getX()