+>Added the /vac, /equip_weapons, and /equip_armor commands. These

commands are toggles to turn on/off Vacuum Cube suction, Auto-Equipping
weapons, and Auto-Equipping armor functionality.
+>Base Regeneration Level for Defenders increased. Not Blocking:
Regeneration 1 -> Regeneration 2, Blocking: Regeneration 2 ->
Regeneration 4
>Sleep voting system now works for thunderstorm weather conditions.
>Armor Stands properly subtract health when taking damage now.
->Regen Pool is now hard capped to your maximum health.
->Arrow Quivers no longer equip to your off-hand when viewing other
inventories.
->Vendetta Stacks reset if revival is triggered.
testdev
sigonasr2 8 years ago
parent d8f2edd51e
commit 37dbd8b417
  1. BIN
      TwosideKeeper.jar
  2. 17
      src/plugin.yml
  3. 4
      src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java
  4. 20
      src/sig/plugin/TwosideKeeper/CustomDamage.java
  5. 10
      src/sig/plugin/TwosideKeeper/Drops/DropRandomFirework.java
  6. 2
      src/sig/plugin/TwosideKeeper/EliteMonster.java
  7. 4
      src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java
  8. 11
      src/sig/plugin/TwosideKeeper/HelperStructures/Utils/MessageUtils.java
  9. 15
      src/sig/plugin/TwosideKeeper/PlayerStructure.java
  10. 91
      src/sig/plugin/TwosideKeeper/TwosideKeeper.java
  11. 36
      src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java
  12. 7
      src/sig/plugin/TwosideKeeper/runServerHeartbeat.java

Binary file not shown.

@ -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!

@ -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);

@ -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+200<TwosideKeeper.getServerTickTime()) {
if (p.getHealth()-damage<=0 && pd.lastrevivecandyconsumed+400<TwosideKeeper.getServerTickTime()) {
for (int i=0;i<9;i++) {
ItemStack item = p.getInventory().getItem(i);
if (item!=null) {
@ -755,7 +756,7 @@ public class CustomDamage {
GenericFunctions.RandomlyBreakBaubles(p, hotbar);
SoundUtils.playLocalSound(p, Sound.ENTITY_GENERIC_EAT, 1.0f, 1.0f);
pd.lastrevivecandyconsumed=TwosideKeeper.getServerTickTime();
aPlugin.API.sendCooldownPacket(p, Material.GOLDEN_APPLE, 200);
aPlugin.API.sendCooldownPacket(p, Material.GOLDEN_APPLE, 400);
return 0;
}
}
@ -1254,6 +1255,9 @@ public class CustomDamage {
} else {
pd.regenpool += lifestealamt;
}
if (pd.regenpool>p.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()<damage) {
target.setHealth(0.00001);
@ -2701,7 +2709,7 @@ public class CustomDamage {
return finaldmg;
}
private static double calculateArmorPen(Entity pl, double dmg, ItemStack weapon) {
public static double calculateArmorPen(Entity pl, double dmg, ItemStack weapon) {
double finaldmg = 0.0;
if (pl instanceof Player) {
Player p = (Player)pl;

@ -7,14 +7,20 @@ import aPlugin.Drop;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
public class DropRandomFirework extends Drop {
int min,max;
public DropRandomFirework(int min, int max, int weight) {
super(min,max,weight,"Holiday Firework");
this.min=min;
this.max=max;
}
@Override
public ItemStack getItemStack() {
return ItemUtils.createRandomFirework();
ItemStack randomfirework = ItemUtils.createRandomFirework();
randomfirework.setAmount((int)(((Math.random()*(max-min))+min)));
return randomfirework;
}
}

@ -163,7 +163,7 @@ public class EliteMonster {
}
private void AnnounceFailedTakedown() {
if (dpslist.size()>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());

@ -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));

@ -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<Player> partymembers = PartyManager.getPartyMembers(p);
for (Player pl : partymembers) {
pl.sendMessage(msg);
}
}
}

@ -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<ItemStack> deathlootlist = new ArrayList<ItemStack>();

@ -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()) {

@ -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) {

@ -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<? extends Player> 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<Entity> 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()<p.getLocation().getX()) {
ent.setVelocity(ent.getVelocity().setX(SPD*(10-Math.min(10,Math.abs()))));

Loading…
Cancel
Save