mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 14:16:45 +01:00
Merge branch 'master' of https://github.com/mcMMO-Dev/mcMMO into tridentsxbows
This commit is contained in:
commit
d21368f3e6
@ -103,7 +103,26 @@ Version 2.2.000
|
|||||||
Parties got unnecessarily complex in my absence, I have removed many party features in order to simplify parties and bring them closer to my vision. I have also added new features which should improve parties where it matters.
|
Parties got unnecessarily complex in my absence, I have removed many party features in order to simplify parties and bring them closer to my vision. I have also added new features which should improve parties where it matters.
|
||||||
About the removed party features, all the features I removed I consider poor quality features and I don't think they belong in mcMMO. Feel free to yell at me in discord if you disagree.
|
About the removed party features, all the features I removed I consider poor quality features and I don't think they belong in mcMMO. Feel free to yell at me in discord if you disagree.
|
||||||
I don't know what genius decided to make parties public by default, when I found out that parties had been changed to such a system I could barely contain my disgust. Parties are back to being private, you get invited by a party leader or party officer. That is the only way to join a party.
|
I don't know what genius decided to make parties public by default, when I found out that parties had been changed to such a system I could barely contain my disgust. Parties are back to being private, you get invited by a party leader or party officer. That is the only way to join a party.
|
||||||
|
Version 2.1.183
|
||||||
|
Players now gain Acrobatics XP from falling even if they don't have the Roll permission node (checks for Acrobatics skill permission)
|
||||||
|
treasures.yml now has separate settings for Drop_Level for Standard/Retro mode (see notes / this change is automatic)
|
||||||
|
Updated Russian locale (thanks ImDaniX)
|
||||||
|
Added Donkeys to beat lore (thanks QuantumToasted)
|
||||||
|
Alchemy guide now correctly labels Rabbit's foot for potion of leaping (thanks mldriscoll)
|
||||||
|
Fixed a bug where sweet berry bushes would give XP in situations where they shouldn't
|
||||||
|
The /mmoinfo for Roll is removed for the time being, it will return in a future update (see notes)
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
Previously treasures.yml would take drop_level and multiply it by 10 if you were on Retro Mode, this is confusing so it has been changed
|
||||||
|
treasures.yml will update old entries to follow the new format automatically, please review them to make sure they match expected values, and if not edit them and save then reboot your server
|
||||||
|
Roll is actually the only skill that had an /mmoinfo, its one big mess, I'll fix it in the future
|
||||||
|
|
||||||
Version 2.1.182
|
Version 2.1.182
|
||||||
|
Players now receive XP from harvesting Sweet Berry bushes (double XP for harvesting fully grown berries)
|
||||||
|
Fixed an error when using mcMMO with Featherboard that broke mcMMO skill boards when using certain commands
|
||||||
|
Fixed a NPE with Scoreboards enabled when trying to update scoreboards
|
||||||
|
Added 'Scoreboard.Recovery' locale key
|
||||||
|
Sweet Berry Bush will no longer ready tools for Super Abilities
|
||||||
You can now use '.all' (for example: mcmmo.perks.xp.customboost.all) to give an XP perk to all skills
|
You can now use '.all' (for example: mcmmo.perks.xp.customboost.all) to give an XP perk to all skills
|
||||||
Removed hardcore and vampirism commands, these commands are dangerous, just modify the config file if you want to use hardcore / vampirism
|
Removed hardcore and vampirism commands, these commands are dangerous, just modify the config file if you want to use hardcore / vampirism
|
||||||
Fixed several errors in de locale (Thanks TheBusyBiscuit & w1tcherrr)
|
Fixed several errors in de locale (Thanks TheBusyBiscuit & w1tcherrr)
|
||||||
@ -112,8 +131,10 @@ Version 2.1.182
|
|||||||
Removed a few silent exceptions for scoreboards & mcMMO
|
Removed a few silent exceptions for scoreboards & mcMMO
|
||||||
Added warning about UltraPermissions to mcMMO
|
Added warning about UltraPermissions to mcMMO
|
||||||
Fixed a potential NPE in McMMOPlayerExperienceEvent
|
Fixed a potential NPE in McMMOPlayerExperienceEvent
|
||||||
|
Added Sweet Berry Bush to config.yml bonus drops for Herbalism
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
|
Sweet Berry Bushes won't give double drops for now, looking into an elegant solution
|
||||||
mcMMO will do a better job reporting if something went wrong with scoreboards, which may lead to improved plugin compatibility between mcMMO and other plugins touching scoreboards.
|
mcMMO will do a better job reporting if something went wrong with scoreboards, which may lead to improved plugin compatibility between mcMMO and other plugins touching scoreboards.
|
||||||
|
|
||||||
Version 2.1.181
|
Version 2.1.181
|
||||||
|
@ -71,22 +71,10 @@ public class MmoInfoCommand implements TabExecutor {
|
|||||||
|
|
||||||
private void displayInfo(Player player, String subSkillName)
|
private void displayInfo(Player player, String subSkillName)
|
||||||
{
|
{
|
||||||
//Check to see if the skill exists in the new system
|
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.Header"));
|
||||||
AbstractSubSkill abstractSubSkill = InteractionManager.getAbstractByName(subSkillName);
|
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.SubSkillHeader", subSkillName));
|
||||||
if(abstractSubSkill != null)
|
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.DetailsHeader"));
|
||||||
{
|
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.OldSkill"));
|
||||||
/* New System Skills are programmable */
|
|
||||||
abstractSubSkill.printInfo(player);
|
|
||||||
//TextComponentFactory.sendPlayerUrlHeader(player);
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* Skill is only in the old system
|
|
||||||
*/
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.Header"));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.SubSkillHeader", subSkillName));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.DetailsHeader"));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.MmoInfo.OldSkill"));
|
|
||||||
}
|
|
||||||
|
|
||||||
for(SubSkillType subSkillType : SubSkillType.values())
|
for(SubSkillType subSkillType : SubSkillType.values())
|
||||||
{
|
{
|
||||||
|
@ -43,7 +43,7 @@ public class SalvageConfig extends ConfigLoader {
|
|||||||
if(mcMMO.getUpgradeManager().shouldUpgrade(UpgradeType.FIX_NETHERITE_SALVAGE_QUANTITIES)) {
|
if(mcMMO.getUpgradeManager().shouldUpgrade(UpgradeType.FIX_NETHERITE_SALVAGE_QUANTITIES)) {
|
||||||
mcMMO.p.getLogger().info("Fixing incorrect Salvage quantities on Netherite gear, this will only run once...");
|
mcMMO.p.getLogger().info("Fixing incorrect Salvage quantities on Netherite gear, this will only run once...");
|
||||||
for(String namespacedkey : mcMMO.getMaterialMapStore().getNetheriteArmor()) {
|
for(String namespacedkey : mcMMO.getMaterialMapStore().getNetheriteArmor()) {
|
||||||
config.set("Salvageables." + namespacedkey.toUpperCase() + ".MaximumQuantity", 4);
|
config.set("Salvageables." + namespacedkey.toUpperCase() + ".MaximumQuantity", 4); //TODO: Doesn't make sense to default to 4 for everything
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -164,7 +164,7 @@ public class FishingTreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dropLevel < 0) {
|
if (dropLevel < 0) {
|
||||||
reason.add(treasureName + " has an invalid Drop_Level: " + dropLevel);
|
reason.add("Fishing Config: " + treasureName + " has an invalid Drop_Level: " + dropLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3,6 +3,7 @@ package com.gmail.nossr50.config.treasure;
|
|||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||||
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.text.StringUtils;
|
import com.gmail.nossr50.util.text.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -14,6 +15,7 @@ import org.bukkit.inventory.meta.PotionMeta;
|
|||||||
import org.bukkit.potion.PotionData;
|
import org.bukkit.potion.PotionData;
|
||||||
import org.bukkit.potion.PotionType;
|
import org.bukkit.potion.PotionType;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -21,6 +23,9 @@ import java.util.List;
|
|||||||
public class TreasureConfig extends ConfigLoader {
|
public class TreasureConfig extends ConfigLoader {
|
||||||
|
|
||||||
public static final String FILENAME = "treasures.yml";
|
public static final String FILENAME = "treasures.yml";
|
||||||
|
public static final String LEVEL_REQUIREMENT_RETRO_MODE = ".Level_Requirement.Retro_Mode";
|
||||||
|
public static final String LEVEL_REQUIREMENT_STANDARD_MODE = ".Level_Requirement.Standard_Mode";
|
||||||
|
public static final String LEGACY_DROP_LEVEL = ".Drop_Level";
|
||||||
private static TreasureConfig instance;
|
private static TreasureConfig instance;
|
||||||
|
|
||||||
public HashMap<String, List<ExcavationTreasure>> excavationMap = new HashMap<>();
|
public HashMap<String, List<ExcavationTreasure>> excavationMap = new HashMap<>();
|
||||||
@ -60,6 +65,7 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadTreasures(String type) {
|
private void loadTreasures(String type) {
|
||||||
|
boolean updatedFile = false;
|
||||||
boolean isExcavation = type.equals("Excavation");
|
boolean isExcavation = type.equals("Excavation");
|
||||||
boolean isHylian = type.equals("Hylian_Luck");
|
boolean isHylian = type.equals("Hylian_Luck");
|
||||||
|
|
||||||
@ -103,7 +109,29 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
|
|
||||||
int xp = config.getInt(type + "." + treasureName + ".XP");
|
int xp = config.getInt(type + "." + treasureName + ".XP");
|
||||||
double dropChance = config.getDouble(type + "." + treasureName + ".Drop_Chance");
|
double dropChance = config.getDouble(type + "." + treasureName + ".Drop_Chance");
|
||||||
int dropLevel = config.getInt(type + "." + treasureName + ".Drop_Level");
|
int legacyDropLevel = config.getInt(type + "." + treasureName + LEGACY_DROP_LEVEL, -1);
|
||||||
|
int dropLevel = -1;
|
||||||
|
|
||||||
|
if(legacyDropLevel >= 0) {
|
||||||
|
//Config needs to be updated to be more specific
|
||||||
|
mcMMO.p.getLogger().info("(" + treasureName + ") Updating Drop_Level in treasures.yml for treasure to match new expected format");
|
||||||
|
config.set(type + "." + treasureName + LEGACY_DROP_LEVEL, null);
|
||||||
|
config.set(type + "." + treasureName + LEVEL_REQUIREMENT_RETRO_MODE, legacyDropLevel * 10);
|
||||||
|
config.set(type + "." + treasureName + LEVEL_REQUIREMENT_STANDARD_MODE, legacyDropLevel);
|
||||||
|
updatedFile = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mcMMO.isRetroModeEnabled()) {
|
||||||
|
dropLevel = config.getInt(type + "." + treasureName + LEVEL_REQUIREMENT_RETRO_MODE, 0);
|
||||||
|
} else {
|
||||||
|
dropLevel = config.getInt(type + "." + treasureName + LEVEL_REQUIREMENT_STANDARD_MODE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dropLevel < 0) {
|
||||||
|
mcMMO.p.getLogger().info("Treasure drop level wasn't valid, using a default value.");
|
||||||
|
//Set it to the "max" if we don't have a drop level
|
||||||
|
dropLevel = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (xp < 0) {
|
if (xp < 0) {
|
||||||
reason.add(treasureName + " has an invalid XP value: " + xp);
|
reason.add(treasureName + " has an invalid XP value: " + xp);
|
||||||
@ -113,9 +141,6 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
reason.add(treasureName + " has an invalid Drop_Chance: " + dropChance);
|
reason.add(treasureName + " has an invalid Drop_Chance: " + dropChance);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dropLevel < 0) {
|
|
||||||
reason.add(treasureName + " has an invalid Drop_Level: " + dropLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Itemstack
|
* Itemstack
|
||||||
@ -219,6 +244,15 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Apply our fix
|
||||||
|
if(updatedFile) {
|
||||||
|
try {
|
||||||
|
config.save(getFile());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddHylianTreasure(String dropper, HylianTreasure treasure) {
|
private void AddHylianTreasure(String dropper, HylianTreasure treasure) {
|
||||||
|
@ -12,7 +12,6 @@ import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
|||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
|
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.experience.MMOExperienceBarManager;
|
import com.gmail.nossr50.util.experience.MMOExperienceBarManager;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
@ -80,6 +80,8 @@ public class McMMOPlayer extends PlayerProfile implements OnlineMMOPlayer, Ident
|
|||||||
private final @NotNull SuperSkillManagerImpl superSkillManagerImpl;
|
private final @NotNull SuperSkillManagerImpl superSkillManagerImpl;
|
||||||
private final @NotNull AbilityActivationProcessor abilityActivationProcessor;
|
private final @NotNull AbilityActivationProcessor abilityActivationProcessor;
|
||||||
|
|
||||||
|
private PrimarySkillType lastSkillShownScoreboard = PrimarySkillType.values()[0];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new {@link OnlineMMOPlayer} with default values for a {@link Player}
|
* Create a new {@link OnlineMMOPlayer} with default values for a {@link Player}
|
||||||
* @param player target player
|
* @param player target player
|
||||||
@ -176,6 +178,14 @@ public class McMMOPlayer extends PlayerProfile implements OnlineMMOPlayer, Ident
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull PrimarySkillType getLastSkillShownScoreboard() {
|
||||||
|
return lastSkillShownScoreboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastSkillShownScoreboard(PrimarySkillType primarySkillType) {
|
||||||
|
this.lastSkillShownScoreboard = primarySkillType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the last login to the current system time
|
* Update the last login to the current system time
|
||||||
*/
|
*/
|
||||||
|
@ -3,6 +3,9 @@ package com.gmail.nossr50.datatypes.skills.subskills.acrobatics;
|
|||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
@ -80,6 +83,9 @@ public class Roll extends AcrobaticsSubSkill {
|
|||||||
entityDamageEvent.setCancelled(true);
|
entityDamageEvent.setCancelled(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} else if(Permissions.skillEnabled(player, PrimarySkillType.ACROBATICS)) {
|
||||||
|
//Give XP Anyways
|
||||||
|
SkillUtils.applyXpGain(mcMMOPlayer, getPrimarySkill(), calculateRollXP(player, ((EntityDamageEvent) event).getFinalDamage(), false), XPGainReason.PVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,31 +373,34 @@ public class Roll extends AcrobaticsSubSkill {
|
|||||||
MaxBonusLevel: 100
|
MaxBonusLevel: 100
|
||||||
DamageThreshold: 7.0
|
DamageThreshold: 7.0
|
||||||
*/
|
*/
|
||||||
double rollChanceHalfMax, graceChanceHalfMax, damageThreshold, chancePerLevel;
|
|
||||||
|
|
||||||
//Chance to roll at half max skill
|
return "Under Construction: This will work in a future update.";
|
||||||
RandomChanceSkill rollHalfMaxSkill = new RandomChanceSkill(null, subSkillType);
|
//
|
||||||
int halfMaxSkillValue = AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL)/2;
|
// double rollChanceHalfMax, graceChanceHalfMax, damageThreshold, chancePerLevel;
|
||||||
rollHalfMaxSkill.setSkillLevel(halfMaxSkillValue);
|
//
|
||||||
|
// //Chance to roll at half max skill
|
||||||
//Chance to graceful roll at full skill
|
// RandomChanceSkill rollHalfMaxSkill = new RandomChanceSkill(null, subSkillType);
|
||||||
RandomChanceSkill rollGraceHalfMaxSkill = new RandomChanceSkill(null, subSkillType);
|
// int halfMaxSkillValue = AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL)/2;
|
||||||
rollGraceHalfMaxSkill.setSkillLevel(halfMaxSkillValue * 2); //Double the effective odds
|
// rollHalfMaxSkill.setSkillLevel(halfMaxSkillValue);
|
||||||
|
//
|
||||||
//Chance to roll per level
|
// //Chance to graceful roll at full skill
|
||||||
RandomChanceSkill rollOneSkillLevel = new RandomChanceSkill(null, subSkillType);
|
// RandomChanceSkill rollGraceHalfMaxSkill = new RandomChanceSkill(null, subSkillType);
|
||||||
rollGraceHalfMaxSkill.setSkillLevel(1); //Level 1 skill
|
// rollGraceHalfMaxSkill.setSkillLevel(halfMaxSkillValue * 2); //Double the effective odds
|
||||||
|
//
|
||||||
//Chance Stat Calculations
|
// //Chance to roll per level
|
||||||
rollChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollHalfMaxSkill);
|
// RandomChanceSkill rollOneSkillLevel = new RandomChanceSkill(null, subSkillType);
|
||||||
graceChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollGraceHalfMaxSkill);
|
// rollGraceHalfMaxSkill.setSkillLevel(1); //Level 1 skill
|
||||||
damageThreshold = AdvancedConfig.getInstance().getRollDamageThreshold();
|
//
|
||||||
|
// //Chance Stat Calculations
|
||||||
chancePerLevel = RandomChanceUtil.getRandomChanceExecutionChance(rollOneSkillLevel);
|
// rollChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollHalfMaxSkill);
|
||||||
|
// graceChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollGraceHalfMaxSkill);
|
||||||
double maxLevel = AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL);
|
// damageThreshold = AdvancedConfig.getInstance().getRollDamageThreshold();
|
||||||
|
//
|
||||||
return LocaleLoader.getString("Acrobatics.SubSkill.Roll.Mechanics", rollChanceHalfMax, graceChanceHalfMax, maxLevel, chancePerLevel, damageThreshold, damageThreshold * 2,halfMaxSkillValue);
|
// chancePerLevel = RandomChanceUtil.getRandomChanceExecutionChance(rollOneSkillLevel);
|
||||||
|
//
|
||||||
|
// double maxLevel = AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL);
|
||||||
|
//
|
||||||
|
// return LocaleLoader.getString("Acrobatics.SubSkill.Roll.Mechanics", rollChanceHalfMax, graceChanceHalfMax, maxLevel, chancePerLevel, damageThreshold, damageThreshold * 2,halfMaxSkillValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.gmail.nossr50.datatypes.treasure;
|
package com.gmail.nossr50.datatypes.treasure;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public abstract class Treasure {
|
public abstract class Treasure {
|
||||||
@ -41,10 +40,6 @@ public abstract class Treasure {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getDropLevel() {
|
public int getDropLevel() {
|
||||||
//If they are in retro mode all requirements are scaled up by 10
|
|
||||||
if(Config.getInstance().getIsRetroMode())
|
|
||||||
return dropLevel * 10;
|
|
||||||
|
|
||||||
return dropLevel;
|
return dropLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ import com.gmail.nossr50.util.skills.CombatUtils;
|
|||||||
import com.gmail.nossr50.util.skills.SkillActivationType;
|
import com.gmail.nossr50.util.skills.SkillActivationType;
|
||||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
||||||
import com.gmail.nossr50.worldguard.WorldGuardUtils;
|
import com.gmail.nossr50.worldguard.WorldGuardUtils;
|
||||||
import com.neetgames.mcmmo.player.OnlineMMOPlayer;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
@ -68,6 +67,30 @@ public class EntityListener implements Listener {
|
|||||||
persistentDataLayer = mcMMO.getCompatibilityManager().getPersistentDataLayer();
|
persistentDataLayer = mcMMO.getCompatibilityManager().getPersistentDataLayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
// public void onBlockDropItemEvent(EntityDropItemEvent event) {
|
||||||
|
// if(event.getEntity() instanceof Block) {
|
||||||
|
// Block itemDispensingBlock = (Block) event.getEntity();
|
||||||
|
//
|
||||||
|
// //Is it a berry bush?
|
||||||
|
// if(itemDispensingBlock.getType().toString().equalsIgnoreCase("sweet_berry_bush")) {
|
||||||
|
// //Berry Bush Time!
|
||||||
|
// if (event.getEntity().getMetadata(mcMMO.BONUS_DROPS_METAKEY).size() > 0) {
|
||||||
|
// Bukkit.broadcastMessage("Pop pop!");
|
||||||
|
// BonusDropMeta bonusDropMeta = (BonusDropMeta) event.getEntity().getMetadata(mcMMO.BONUS_DROPS_METAKEY).get(0);
|
||||||
|
// int bonusCount = bonusDropMeta.asInt();
|
||||||
|
//
|
||||||
|
// for (int i = 0; i < bonusCount; i++) {
|
||||||
|
// Misc.spawnItemNaturally(event.getEntity().getLocation(), event.getItemDrop().getItemStack(), ItemSpawnReason.BONUS_DROPS);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if(event.getEntity().hasMetadata(mcMMO.BONUS_DROPS_METAKEY))
|
||||||
|
// event.getEntity().removeMetadata(mcMMO.BONUS_DROPS_METAKEY, pluginRef);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onEntityTransform(EntityTransformEvent event) {
|
public void onEntityTransform(EntityTransformEvent event) {
|
||||||
if(event.getEntity() instanceof LivingEntity) {
|
if(event.getEntity() instanceof LivingEntity) {
|
||||||
|
@ -195,6 +195,7 @@ public class PlayerListener implements Listener {
|
|||||||
*
|
*
|
||||||
* @param event The event to monitor
|
* @param event The event to monitor
|
||||||
*/
|
*/
|
||||||
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerWorldChange(PlayerChangedWorldEvent event) {
|
public void onPlayerWorldChange(PlayerChangedWorldEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -204,19 +205,15 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Profile not loaded
|
//Profile not loaded
|
||||||
if(UserManager.queryPlayer(player) == null)
|
if(UserManager.getPlayer(player) == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OnlineMMOPlayer mmoPlayer = UserManager.queryPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
if(mmoPlayer == null) {
|
mcMMOPlayer.checkGodMode();
|
||||||
return;
|
mcMMOPlayer.checkParty();
|
||||||
}
|
|
||||||
|
|
||||||
mmoPlayer.validateGodMode();
|
|
||||||
mmoPlayer.validateParty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -781,7 +778,134 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mmoPlayer.getAbilityActivationProcessor().processAbilityAndToolActivations(playerInteractEvent);
|
switch (event.getAction()) {
|
||||||
|
case RIGHT_CLICK_BLOCK:
|
||||||
|
if(player.getInventory().getItemInOffHand().getType() != Material.AIR && !player.isInsideVehicle() && !player.isSneaking()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Hmm
|
||||||
|
if(event.getClickedBlock() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Block block = event.getClickedBlock();
|
||||||
|
BlockState blockState = block.getState();
|
||||||
|
|
||||||
|
/* ACTIVATION & ITEM CHECKS */
|
||||||
|
if (BlockUtils.canActivateTools(blockState)) {
|
||||||
|
if (Config.getInstance().getAbilitiesEnabled()) {
|
||||||
|
if (BlockUtils.canActivateHerbalism(blockState)) {
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.HERBALISM);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.AXES);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.EXCAVATION);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.MINING);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.SWORDS);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.UNARMED);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.WOODCUTTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
ChimaeraWing.activationCheck(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GREEN THUMB CHECK */
|
||||||
|
HerbalismManager herbalismManager = mcMMOPlayer.getHerbalismManager();
|
||||||
|
|
||||||
|
if (heldItem.getType() == Material.BONE_MEAL) {
|
||||||
|
switch (blockState.getType()) {
|
||||||
|
case BEETROOTS:
|
||||||
|
case CARROT:
|
||||||
|
case COCOA:
|
||||||
|
case WHEAT:
|
||||||
|
case NETHER_WART_BLOCK:
|
||||||
|
case POTATO:
|
||||||
|
mcMMO.getPlaceStore().setFalse(blockState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FakePlayerAnimationEvent fakeSwing = new FakePlayerAnimationEvent(event.getPlayer()); //PlayerAnimationEvent compat
|
||||||
|
if(!event.isCancelled() || event.useInteractedBlock() != Event.Result.DENY) {
|
||||||
|
if (herbalismManager.canGreenThumbBlock(blockState)) {
|
||||||
|
//call event for Green Thumb Block
|
||||||
|
if(!EventUtils.callSubSkillBlockEvent(player, SubSkillType.HERBALISM_GREEN_THUMB, block).isCancelled()) {
|
||||||
|
Bukkit.getPluginManager().callEvent(fakeSwing);
|
||||||
|
player.getInventory().getItemInMainHand().setAmount(heldItem.getAmount() - 1);
|
||||||
|
player.updateInventory();
|
||||||
|
if (herbalismManager.processGreenThumbBlocks(blockState) && EventUtils.simulateBlockBreak(block, player, false)) {
|
||||||
|
blockState.update(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* SHROOM THUMB CHECK */
|
||||||
|
else if (herbalismManager.canUseShroomThumb(blockState)) {
|
||||||
|
if(!EventUtils.callSubSkillBlockEvent(player, SubSkillType.HERBALISM_SHROOM_THUMB, block).isCancelled()) {
|
||||||
|
Bukkit.getPluginManager().callEvent(fakeSwing);
|
||||||
|
event.setCancelled(true);
|
||||||
|
if (herbalismManager.processShroomThumb(blockState)
|
||||||
|
&& EventUtils.simulateBlockBreak(block, player, false)) {
|
||||||
|
blockState.update(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
herbalismManager.processBerryBushHarvesting(blockState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RIGHT_CLICK_AIR:
|
||||||
|
if(player.getInventory().getItemInOffHand().getType() != Material.AIR && !player.isInsideVehicle() && !player.isSneaking()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ACTIVATION CHECKS */
|
||||||
|
if (Config.getInstance().getAbilitiesEnabled()) {
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.AXES);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.EXCAVATION);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.HERBALISM);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.MINING);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.SWORDS);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.UNARMED);
|
||||||
|
mcMMOPlayer.processAbilityActivation(PrimarySkillType.WOODCUTTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ITEM CHECKS */
|
||||||
|
ChimaeraWing.activationCheck(player);
|
||||||
|
|
||||||
|
/* BLAST MINING CHECK */
|
||||||
|
MiningManager miningManager = mcMMOPlayer.getMiningManager();
|
||||||
|
if (miningManager.canDetonate()) {
|
||||||
|
miningManager.remoteDetonation();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LEFT_CLICK_AIR:
|
||||||
|
case LEFT_CLICK_BLOCK:
|
||||||
|
|
||||||
|
if (!player.isSneaking()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CALL OF THE WILD CHECKS */
|
||||||
|
Material type = heldItem.getType();
|
||||||
|
TamingManager tamingManager = mcMMOPlayer.getTamingManager();
|
||||||
|
|
||||||
|
if (type == Config.getInstance().getTamingCOTWMaterial(CallOfTheWildType.WOLF.getConfigEntityTypeEntry())) {
|
||||||
|
tamingManager.summonWolf();
|
||||||
|
}
|
||||||
|
else if (type == Config.getInstance().getTamingCOTWMaterial(CallOfTheWildType.CAT.getConfigEntityTypeEntry())) {
|
||||||
|
tamingManager.summonOcelot();
|
||||||
|
}
|
||||||
|
else if (type == Config.getInstance().getTamingCOTWMaterial(CallOfTheWildType.HORSE.getConfigEntityTypeEntry())) {
|
||||||
|
tamingManager.summonHorse();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -163,6 +163,9 @@ public class mcMMO extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
try {
|
try {
|
||||||
|
//Store this value so other plugins can check it
|
||||||
|
isRetroModeEnabled = Config.getInstance().getIsRetroMode();
|
||||||
|
|
||||||
//Platform Manager
|
//Platform Manager
|
||||||
platformManager = new PlatformManager();
|
platformManager = new PlatformManager();
|
||||||
|
|
||||||
@ -190,9 +193,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Store this value so other plugins can check it
|
|
||||||
isRetroModeEnabled = Config.getInstance().getIsRetroMode();
|
|
||||||
|
|
||||||
if(projectKorraEnabled) {
|
if(projectKorraEnabled) {
|
||||||
getLogger().info("ProjectKorra was detected, this can cause some issues with weakness potions and combat skills for mcMMO");
|
getLogger().info("ProjectKorra was detected, this can cause some issues with weakness potions and combat skills for mcMMO");
|
||||||
}
|
}
|
||||||
@ -268,12 +268,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
metrics.addCustomChart(new SimplePie("leveling_system", () -> "Standard"));
|
metrics.addCustomChart(new SimplePie("leveling_system", () -> "Standard"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Can't confirm this bug myself as the plugin is premium
|
|
||||||
// //TODO: Remove this when ChatControlRed fixes itself
|
|
||||||
// if(pluginManager.getPlugin("ChatControlRed") != null) {
|
|
||||||
// getLogger().severe("mcMMO has detected ChatControlRed on your server, users have reported a severe plugin conflict between these two plugins which degrades server performance and wastes many server resources.");
|
|
||||||
// getLogger().severe("It is HIGHLY RECOMMENDED that you do --NOT-- use ChatControlRed until this issue is resolved!");
|
|
||||||
// }
|
|
||||||
if(pluginManager.getPlugin(ULTRA_PERMISSONS) != null) {
|
if(pluginManager.getPlugin(ULTRA_PERMISSONS) != null) {
|
||||||
Bukkit.getScheduler().runTaskTimer(this, () -> {
|
Bukkit.getScheduler().runTaskTimer(this, () -> {
|
||||||
getLogger().severe(UP_WARNING_1);
|
getLogger().severe(UP_WARNING_1);
|
||||||
@ -286,6 +280,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
}, 0L, 1200L);
|
}, 0L, 1200L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (Throwable t) {
|
catch (Throwable t) {
|
||||||
getLogger().severe("There was an error while enabling mcMMO!");
|
getLogger().severe("There was an error while enabling mcMMO!");
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -60,6 +61,10 @@ public class HerbalismManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canUseShroomThumb(BlockState blockState) {
|
public boolean canUseShroomThumb(BlockState blockState) {
|
||||||
|
if(!BlockUtils.canMakeShroomy(blockState)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if(!RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.HERBALISM_SHROOM_THUMB))
|
if(!RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.HERBALISM_SHROOM_THUMB))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -67,7 +72,57 @@ public class HerbalismManager extends SkillManager {
|
|||||||
PlayerInventory inventory = player.getInventory();
|
PlayerInventory inventory = player.getInventory();
|
||||||
Material itemType = inventory.getItemInMainHand().getType();
|
Material itemType = inventory.getItemInMainHand().getType();
|
||||||
|
|
||||||
return (itemType == Material.BROWN_MUSHROOM || itemType == Material.RED_MUSHROOM) && inventory.contains(Material.BROWN_MUSHROOM, 1) && inventory.contains(Material.RED_MUSHROOM, 1) && BlockUtils.canMakeShroomy(blockState) && Permissions.isSubSkillEnabled(player, SubSkillType.HERBALISM_SHROOM_THUMB);
|
return (itemType == Material.BROWN_MUSHROOM
|
||||||
|
|| itemType == Material.RED_MUSHROOM)
|
||||||
|
&& inventory.contains(Material.BROWN_MUSHROOM, 1)
|
||||||
|
&& inventory.contains(Material.RED_MUSHROOM, 1)
|
||||||
|
&& Permissions.isSubSkillEnabled(player, SubSkillType.HERBALISM_SHROOM_THUMB);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processBerryBushHarvesting(@NotNull BlockState blockState) {
|
||||||
|
/* Check if the player is harvesting a berry bush */
|
||||||
|
if(blockState.getType().toString().equalsIgnoreCase("sweet_berry_bush")) {
|
||||||
|
if(mmoPlayer.isDebugMode()) {
|
||||||
|
mmoPlayer.getPlayer().sendMessage("Processing sweet berry bush rewards");
|
||||||
|
}
|
||||||
|
//Check the age
|
||||||
|
if(blockState.getBlockData() instanceof Ageable) {
|
||||||
|
int rewardByAge = 0;
|
||||||
|
|
||||||
|
Ageable ageable = (Ageable) blockState.getBlockData();
|
||||||
|
|
||||||
|
if(ageable.getAge() == 2) {
|
||||||
|
rewardByAge = 1; //Normal XP
|
||||||
|
} else if(ageable.getAge() == 3) {
|
||||||
|
rewardByAge = 2; //Double XP
|
||||||
|
} else {
|
||||||
|
return; //Not old enough, back out of processing
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mmoPlayer.isDebugMode()) {
|
||||||
|
mmoPlayer.getPlayer().sendMessage("Bush Reward Multiplier: " + rewardByAge);
|
||||||
|
}
|
||||||
|
|
||||||
|
int xpReward = ExperienceConfig.getInstance().getXp(PrimarySkillType.HERBALISM, blockState) * rewardByAge;
|
||||||
|
|
||||||
|
if(mmoPlayer.isDebugMode()) {
|
||||||
|
mmoPlayer.getPlayer().sendMessage("Bush XP: " + xpReward);
|
||||||
|
}
|
||||||
|
|
||||||
|
// //Check for double drops
|
||||||
|
// if(checkDoubleDrop(blockState)) {
|
||||||
|
//
|
||||||
|
// if(mmoPlayer.isDebugMode()) {
|
||||||
|
// mmoPlayer.getPlayer().sendMessage("Double Drops succeeded for Berry Bush");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// //Add metadata to mark this block for double or triple drops
|
||||||
|
// markForBonusDrops(blockState);
|
||||||
|
// }
|
||||||
|
|
||||||
|
applyXpGain(xpReward, XPGainReason.PVE, XPGainSource.SELF);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canUseHylianLuck() {
|
public boolean canUseHylianLuck() {
|
||||||
|
@ -28,6 +28,7 @@ import com.neetgames.mcmmo.player.OnlineMMOPlayer;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -248,13 +249,18 @@ public class TamingManager extends SkillManager {
|
|||||||
|
|
||||||
message = message.concat(LocaleLoader.getString("Combat.BeastLoreHealth", target.getHealth(), target.getMaxHealth()));
|
message = message.concat(LocaleLoader.getString("Combat.BeastLoreHealth", target.getHealth(), target.getMaxHealth()));
|
||||||
|
|
||||||
if (beast instanceof Horse) {
|
// Bred mules & donkeys can actually have horse-like stats, but llamas cannot.
|
||||||
Horse horse = (Horse) beast;
|
if (beast instanceof AbstractHorse && !(beast instanceof Llama)) {
|
||||||
double jumpStrength = horse.getAttribute(Attribute.HORSE_JUMP_STRENGTH).getValue();
|
AbstractHorse horseLikeCreature = (AbstractHorse) beast;
|
||||||
// Taken from https://minecraft.gamepedia.com/Horse#Jump_strength
|
AttributeInstance jumpAttribute = horseLikeCreature.getAttribute(Attribute.HORSE_JUMP_STRENGTH);
|
||||||
jumpStrength = -0.1817584952 * Math.pow(jumpStrength, 3) + 3.689713992 * Math.pow(jumpStrength, 2) + 2.128599134 * jumpStrength - 0.343930367;
|
|
||||||
message = message.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseSpeed", horse.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getValue() * 43))
|
if(jumpAttribute != null) {
|
||||||
.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseJumpStrength", jumpStrength));
|
double jumpStrength = jumpAttribute.getValue();
|
||||||
|
// Taken from https://minecraft.gamepedia.com/Horse#Jump_strength
|
||||||
|
jumpStrength = -0.1817584952 * Math.pow(jumpStrength, 3) + 3.689713992 * Math.pow(jumpStrength, 2) + 2.128599134 * jumpStrength - 0.343930367;
|
||||||
|
message = message.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseSpeed", horseLikeCreature.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getValue() * 43))
|
||||||
|
.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseJumpStrength", jumpStrength));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player.sendMessage(message);
|
player.sendMessage(message);
|
||||||
|
@ -1265,6 +1265,7 @@ public class MaterialMapStore {
|
|||||||
toolBlackList.add("stonecutter");
|
toolBlackList.add("stonecutter");
|
||||||
toolBlackList.add("lodestone");
|
toolBlackList.add("lodestone");
|
||||||
toolBlackList.add("respawn_anchor");
|
toolBlackList.add("respawn_anchor");
|
||||||
|
toolBlackList.add("sweet_berry_bush");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isIntendedToolPickaxe(Material material) {
|
public boolean isIntendedToolPickaxe(Material material) {
|
||||||
|
@ -120,16 +120,39 @@ public final class Permissions {
|
|||||||
public static boolean lucky(Permissible permissible, PrimarySkillType primarySkillType) { return permissible.hasPermission("mcmmo.perks.lucky." + primarySkillType.getRawSkillName().toLowerCase(Locale.ENGLISH)); }
|
public static boolean lucky(Permissible permissible, PrimarySkillType primarySkillType) { return permissible.hasPermission("mcmmo.perks.lucky." + primarySkillType.getRawSkillName().toLowerCase(Locale.ENGLISH)); }
|
||||||
|
|
||||||
/* XP PERKS */
|
/* XP PERKS */
|
||||||
public static boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
public static boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
public static boolean tripleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
return permissible.hasPermission("mcmmo.perks.xp.quadruple.all")
|
||||||
public static boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
|| permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
}
|
||||||
public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
|
||||||
public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
public static boolean tripleXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.triple.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.150percentboost.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.double.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.50percentboost.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.10percentboost.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) {
|
public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) {
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.customboost.all")
|
return permissible.hasPermission("mcmmo.perks.xp.customboost.all")
|
||||||
||permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|| permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -284,6 +284,9 @@ public class ScoreboardManager {
|
|||||||
// **** Setup methods **** //
|
// **** Setup methods **** //
|
||||||
|
|
||||||
public static void enablePlayerSkillScoreboard(Player player, PrimarySkillType skill) {
|
public static void enablePlayerSkillScoreboard(Player player, PrimarySkillType skill) {
|
||||||
|
McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
|
||||||
|
mmoPlayer.setLastSkillShownScoreboard(skill);
|
||||||
|
|
||||||
ScoreboardWrapper wrapper = getWrapper(player);
|
ScoreboardWrapper wrapper = getWrapper(player);
|
||||||
|
|
||||||
if(wrapper == null) {
|
if(wrapper == null) {
|
||||||
@ -299,6 +302,25 @@ public class ScoreboardManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void retryLastSkillBoard(Player player) {
|
||||||
|
McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
|
||||||
|
PrimarySkillType primarySkillType = mmoPlayer.getLastSkillShownScoreboard();
|
||||||
|
|
||||||
|
ScoreboardWrapper wrapper = getWrapper(player);
|
||||||
|
|
||||||
|
if(wrapper == null) {
|
||||||
|
setupPlayer(player);
|
||||||
|
wrapper = getWrapper(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(wrapper != null) {
|
||||||
|
wrapper.setOldScoreboard();
|
||||||
|
wrapper.setTypeSkill(primarySkillType);
|
||||||
|
|
||||||
|
changeScoreboard(wrapper, Config.getInstance().getSkillScoreboardTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void enablePlayerSkillLevelUpScoreboard(Player player, PrimarySkillType skill) {
|
public static void enablePlayerSkillLevelUpScoreboard(Player player, PrimarySkillType skill) {
|
||||||
ScoreboardWrapper wrapper = getWrapper(player);
|
ScoreboardWrapper wrapper = getWrapper(player);
|
||||||
|
|
||||||
@ -527,8 +549,7 @@ public class ScoreboardManager {
|
|||||||
return mcMMO.p.getServer().getScoreboardManager();
|
return mcMMO.p.getServer().getScoreboardManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void changeScoreboard(ScoreboardWrapper wrapper, int displayTime) {
|
||||||
private static void changeScoreboard(ScoreboardWrapper wrapper, int displayTime) {
|
|
||||||
if (displayTime == -1) {
|
if (displayTime == -1) {
|
||||||
wrapper.showBoardWithNoRevert();
|
wrapper.showBoardWithNoRevert();
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.gmail.nossr50.util.scoreboards;
|
|||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||||
@ -13,9 +14,11 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.skills.child.FamilyTree;
|
import com.gmail.nossr50.skills.child.FamilyTree;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType;
|
||||||
import com.neetgames.mcmmo.player.OnlineMMOPlayer;
|
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
@ -42,7 +45,7 @@ public class ScoreboardWrapper {
|
|||||||
// Internal usage variables (should exist)
|
// Internal usage variables (should exist)
|
||||||
private SidebarType sidebarType;
|
private SidebarType sidebarType;
|
||||||
private Objective sidebarObjective;
|
private Objective sidebarObjective;
|
||||||
private final Objective powerObjective;
|
private Objective powerObjective;
|
||||||
|
|
||||||
// Parameter variables (May be null / invalid)
|
// Parameter variables (May be null / invalid)
|
||||||
private Scoreboard oldBoard = null;
|
private Scoreboard oldBoard = null;
|
||||||
@ -50,21 +53,34 @@ public class ScoreboardWrapper {
|
|||||||
public PrimarySkillType targetSkill = null;
|
public PrimarySkillType targetSkill = null;
|
||||||
private PlayerProfile targetProfile = null;
|
private PlayerProfile targetProfile = null;
|
||||||
public int leaderboardPage = -1;
|
public int leaderboardPage = -1;
|
||||||
|
private boolean registered = false;
|
||||||
|
|
||||||
public ScoreboardWrapper(Player player, Scoreboard scoreboard) {
|
public ScoreboardWrapper(Player player, Scoreboard scoreboard) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.playerName = player.getName();
|
this.playerName = player.getName();
|
||||||
this.scoreboard = scoreboard;
|
this.scoreboard = scoreboard;
|
||||||
|
initBoard();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initBoard() {
|
||||||
sidebarType = SidebarType.NONE;
|
sidebarType = SidebarType.NONE;
|
||||||
sidebarObjective = this.scoreboard.registerNewObjective(ScoreboardManager.SIDEBAR_OBJECTIVE, "dummy", SIDE_OBJECTIVE);
|
if(registered) {
|
||||||
powerObjective = this.scoreboard.registerNewObjective(ScoreboardManager.POWER_OBJECTIVE, "dummy", POWER_OBJECTIVE);
|
//Make sure our references are pointed at the right things
|
||||||
|
sidebarObjective = scoreboard.getObjective(ScoreboardManager.SIDEBAR_OBJECTIVE);
|
||||||
|
powerObjective = scoreboard.getObjective(ScoreboardManager.POWER_OBJECTIVE);
|
||||||
|
} else {
|
||||||
|
//Register Objectives
|
||||||
|
sidebarObjective = this.scoreboard.registerNewObjective(ScoreboardManager.SIDEBAR_OBJECTIVE, "dummy", SIDE_OBJECTIVE);
|
||||||
|
powerObjective = this.scoreboard.registerNewObjective(ScoreboardManager.POWER_OBJECTIVE, "dummy", POWER_OBJECTIVE);
|
||||||
|
registered = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (Config.getInstance().getPowerLevelTagsEnabled()) {
|
if (Config.getInstance().getPowerLevelTagsEnabled()) {
|
||||||
powerObjective.setDisplayName(ScoreboardManager.TAG_POWER_LEVEL);
|
powerObjective.setDisplayName(ScoreboardManager.TAG_POWER_LEVEL);
|
||||||
powerObjective.setDisplaySlot(DisplaySlot.BELOW_NAME);
|
powerObjective.setDisplaySlot(DisplaySlot.BELOW_NAME);
|
||||||
|
|
||||||
for (OnlineMMOPlayer mmoPlayer : UserManager.getPlayers()) {
|
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) {
|
||||||
powerObjective.getScore(mmoPlayer.getPlayerName()).setScore(mmoPlayer.getExperienceHandler().getPowerLevel());
|
powerObjective.getScore(mcMMOPlayer.getProfile().getPlayerName()).setScore(mcMMOPlayer.getPowerLevel());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -207,7 +223,7 @@ public class ScoreboardWrapper {
|
|||||||
if(UserManager.getPlayer(playerName) == null)
|
if(UserManager.getPlayer(playerName) == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PlayerProfile profile = UserManager.queryPlayer(player);
|
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
|
||||||
|
|
||||||
if (profile.getScoreboardTipsShown() >= Config.getInstance().getTipsAmount()) {
|
if (profile.getScoreboardTipsShown() >= Config.getInstance().getTipsAmount()) {
|
||||||
return;
|
return;
|
||||||
@ -244,7 +260,7 @@ public class ScoreboardWrapper {
|
|||||||
oldBoard = null;
|
oldBoard = null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mcMMO.p.getLogger().info("Not reverting targetBoard for " + playerName + " - targetBoard was changed by another plugin (Consider disabling the mcMMO scoreboards if you don't want them!)");
|
mcMMO.p.debug("Not reverting targetBoard for " + playerName + " - targetBoard was changed by another plugin (Consider disabling the mcMMO scoreboards if you don't want them!)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,7 +414,19 @@ public class ScoreboardWrapper {
|
|||||||
//Unregister objective
|
//Unregister objective
|
||||||
McMMOScoreboardObjectiveEvent unregisterEvent = callObjectiveEvent(ScoreboardObjectiveEventReason.UNREGISTER_THIS_OBJECTIVE);
|
McMMOScoreboardObjectiveEvent unregisterEvent = callObjectiveEvent(ScoreboardObjectiveEventReason.UNREGISTER_THIS_OBJECTIVE);
|
||||||
if(!unregisterEvent.isCancelled()) {
|
if(!unregisterEvent.isCancelled()) {
|
||||||
sidebarObjective.unregister();
|
try {
|
||||||
|
sidebarObjective.unregister();
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
|
mcMMO.p.debug("Recovering scoreboard for player: " + player.getName());
|
||||||
|
|
||||||
|
if(mmoPlayer.isDebugMode())
|
||||||
|
NotificationManager.sendPlayerInformationChatOnlyPrefixed(player, "Scoreboard.Recovery");
|
||||||
|
|
||||||
|
initBoard(); //Start over
|
||||||
|
Bukkit.getScheduler().runTaskLater(mcMMO.p, () -> ScoreboardManager.retryLastSkillBoard(player), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Register objective
|
//Register objective
|
||||||
@ -427,14 +455,16 @@ public class ScoreboardWrapper {
|
|||||||
* Load new values into the sidebar.
|
* Load new values into the sidebar.
|
||||||
*/
|
*/
|
||||||
private void updateSidebar() {
|
private void updateSidebar() {
|
||||||
try {
|
if(updateTask != null) {
|
||||||
updateTask.cancel();
|
try {
|
||||||
}
|
updateTask.cancel();
|
||||||
catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
updateTask = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTask = null;
|
|
||||||
|
|
||||||
if (sidebarType == SidebarType.NONE) {
|
if (sidebarType == SidebarType.NONE) {
|
||||||
return;
|
return;
|
||||||
@ -447,9 +477,9 @@ public class ScoreboardWrapper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OnlineMMOPlayer mmoPlayer = UserManager.queryPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
if(mmoPlayer == null)
|
if(mcMMOPlayer == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (sidebarType) {
|
switch (sidebarType) {
|
||||||
@ -460,28 +490,28 @@ public class ScoreboardWrapper {
|
|||||||
Validate.notNull(targetSkill);
|
Validate.notNull(targetSkill);
|
||||||
|
|
||||||
if (!targetSkill.isChildSkill()) {
|
if (!targetSkill.isChildSkill()) {
|
||||||
int currentXP = mmoPlayer.getExperienceHandler().getSkillXpValue(targetSkill);
|
int currentXP = mcMMOPlayer.getSkillXpLevel(targetSkill);
|
||||||
|
|
||||||
sidebarObjective.getScore(ScoreboardManager.LABEL_CURRENT_XP).setScore(currentXP);
|
sidebarObjective.getScore(ScoreboardManager.LABEL_CURRENT_XP).setScore(currentXP);
|
||||||
sidebarObjective.getScore(ScoreboardManager.LABEL_REMAINING_XP).setScore(mmoPlayer.getExperienceHandler().getExperienceToNextLevel(targetSkill) - currentXP);
|
sidebarObjective.getScore(ScoreboardManager.LABEL_REMAINING_XP).setScore(mcMMOPlayer.getXpToLevel(targetSkill) - currentXP);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (PrimarySkillType parentSkill : FamilyTree.getParents(targetSkill)) {
|
for (PrimarySkillType parentSkill : FamilyTree.getParents(targetSkill)) {
|
||||||
sidebarObjective.getScore(ScoreboardManager.skillLabels.get(parentSkill)).setScore(mmoPlayer.getExperienceHandler().getSkillLevel(parentSkill));
|
sidebarObjective.getScore(ScoreboardManager.skillLabels.get(parentSkill)).setScore(mcMMOPlayer.getSkillLevel(parentSkill));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mmoPlayer.getExperienceHandler().getSkillLevel(targetSkill));
|
sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
||||||
|
|
||||||
if (targetSkill.getSuperAbilityType() != null) {
|
if (targetSkill.getAbility() != null) {
|
||||||
boolean stopUpdating;
|
boolean stopUpdating;
|
||||||
|
|
||||||
if (targetSkill == PrimarySkillType.MINING) {
|
if (targetSkill == PrimarySkillType.MINING) {
|
||||||
// Special-Case: Mining has two abilities, both with cooldowns
|
// Special-Case: Mining has two abilities, both with cooldowns
|
||||||
Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbilityType.SUPER_BREAKER));
|
Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbilityType.SUPER_BREAKER));
|
||||||
Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbilityType.BLAST_MINING));
|
Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbilityType.BLAST_MINING));
|
||||||
int secondsSB = Math.max(mmoPlayer.getCooldownSeconds(SuperAbilityType.SUPER_BREAKER), 0);
|
int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(SuperAbilityType.SUPER_BREAKER), 0);
|
||||||
int secondsBM = Math.max(mmoPlayer.getCooldownSeconds(SuperAbilityType.BLAST_MINING), 0);
|
int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(SuperAbilityType.BLAST_MINING), 0);
|
||||||
|
|
||||||
cooldownSB.setScore(secondsSB);
|
cooldownSB.setScore(secondsSB);
|
||||||
cooldownBM.setScore(secondsBM);
|
cooldownBM.setScore(secondsBM);
|
||||||
@ -489,9 +519,9 @@ public class ScoreboardWrapper {
|
|||||||
stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SuperAbilityType ability = targetSkill.getSuperAbilityType();
|
SuperAbilityType ability = targetSkill.getAbility();
|
||||||
Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
||||||
int seconds = Math.max(mmoPlayer.getCooldownSeconds(ability), 0);
|
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
||||||
|
|
||||||
cooldown.setScore(seconds);
|
cooldown.setScore(seconds);
|
||||||
|
|
||||||
@ -511,7 +541,7 @@ public class ScoreboardWrapper {
|
|||||||
boolean anyCooldownsActive = false;
|
boolean anyCooldownsActive = false;
|
||||||
|
|
||||||
for (SuperAbilityType ability : SuperAbilityType.values()) {
|
for (SuperAbilityType ability : SuperAbilityType.values()) {
|
||||||
int seconds = Math.max(mmoPlayer.getCooldownSeconds(ability), 0);
|
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
||||||
|
|
||||||
if (seconds != 0) {
|
if (seconds != 0) {
|
||||||
anyCooldownsActive = true;
|
anyCooldownsActive = true;
|
||||||
@ -536,16 +566,16 @@ public class ScoreboardWrapper {
|
|||||||
newProfile = targetProfile; // offline
|
newProfile = targetProfile; // offline
|
||||||
}
|
}
|
||||||
else if (targetPlayer == null) {
|
else if (targetPlayer == null) {
|
||||||
newProfile = mmoPlayer; // self
|
newProfile = mcMMOPlayer.getProfile(); // self
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newProfile = UserManager.getPlayer(targetPlayer); // online
|
newProfile = UserManager.getPlayer(targetPlayer).getProfile(); // online
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate power level here
|
// Calculate power level here
|
||||||
int powerLevel = 0;
|
int powerLevel = 0;
|
||||||
for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) { // Don't include child skills, makes the list too long
|
for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) { // Don't include child skills, makes the list too long
|
||||||
int level = newProfile.getExperienceHandler().getSkillLevel(skill);
|
int level = newProfile.getSkillLevel(skill);
|
||||||
|
|
||||||
powerLevel += level;
|
powerLevel += level;
|
||||||
|
|
||||||
@ -562,10 +592,10 @@ public class ScoreboardWrapper {
|
|||||||
|
|
||||||
case RANK_BOARD:
|
case RANK_BOARD:
|
||||||
case TOP_BOARD:
|
case TOP_BOARD:
|
||||||
/*
|
/*
|
||||||
* @see #acceptRankData(Map<PrimarySkillType, Integer> rank)
|
* @see #acceptRankData(Map<PrimarySkillType, Integer> rank)
|
||||||
* @see #acceptLeaderboardData(List<PlayerStat> stats)
|
* @see #acceptLeaderboardData(List<PlayerStat> stats)
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -472,6 +472,7 @@ Green_Thumb_Replanting_Crops:
|
|||||||
###
|
###
|
||||||
Bonus_Drops:
|
Bonus_Drops:
|
||||||
Herbalism:
|
Herbalism:
|
||||||
|
Sweet_Berry_Bush: true
|
||||||
Weeping_Vines: true
|
Weeping_Vines: true
|
||||||
Twisting_Vines: true
|
Twisting_Vines: true
|
||||||
Shroomlight: true
|
Shroomlight: true
|
||||||
|
@ -904,13 +904,14 @@ Guides.Acrobatics.Section.0=&3About Acrobatics:\n&eAcrobatics is the art of movi
|
|||||||
Guides.Acrobatics.Section.1=&3How does Rolling work?\n&eYou have a passive chance when you take fall damage\n&eto negate the damage done. You can hold the sneak button to\n&edouble your chances during the fall.\n&eThis triggers a Graceful Roll instead of a standard one.\n&eGraceful Rolls are like regular rolls but are twice as likely to\n&eoccur and provide more damage safety than regular rolls.\n&eRolling chance is tied to your skill level
|
Guides.Acrobatics.Section.1=&3How does Rolling work?\n&eYou have a passive chance when you take fall damage\n&eto negate the damage done. You can hold the sneak button to\n&edouble your chances during the fall.\n&eThis triggers a Graceful Roll instead of a standard one.\n&eGraceful Rolls are like regular rolls but are twice as likely to\n&eoccur and provide more damage safety than regular rolls.\n&eRolling chance is tied to your skill level
|
||||||
Guides.Acrobatics.Section.2=&3How does Dodge work?\n&eDodge is a passive chance when you are\n&einjured in combat to halve the damage taken.\n&eIt is tied to your skill level.
|
Guides.Acrobatics.Section.2=&3How does Dodge work?\n&eDodge is a passive chance when you are\n&einjured in combat to halve the damage taken.\n&eIt is tied to your skill level.
|
||||||
##Alchemy
|
##Alchemy
|
||||||
Guides.Alchemy.Section.0=&3About Alchemy:\n&eAlchemy is about brewing potions.\n&eIt provides a speed increase in the potion brew time, as well\n&eas the addition of new (previously) unobtainable potions.\n\n\n&3XP GAIN:\n&eTo gain XP in this skill you need to brew potions.
|
Guides.Alchemy.Section.0=[[DARK_AQUA]]About Alchemy:\n[[YELLOW]]Alchemy is about brewing potions.\n[[YELLOW]]It provides a speed increase in the potion brew time, as well\n[[YELLOW]]as the addition of new (previously) unobtainable potions.\n\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to brew potions.
|
||||||
Guides.Alchemy.Section.1=&3How does Catalysis work?\n&eCatalysis speeds of the brewing process, with a\n&emax speed of 4x at level 1000.\n&eThis ability is unlocked at level 100 by default.
|
Guides.Alchemy.Section.1=[[DARK_AQUA]]How does Catalysis work?\n[[YELLOW]]Catalysis speeds of the brewing process, with a\n[[YELLOW]]max speed of 4x at level 1000.\n[[YELLOW]]This ability is unlocked at level 100 by default.
|
||||||
Guides.Alchemy.Section.2=&3How does Concoctions work?\n&eConcoctions allows brewing of more potions with custom ingredients.\n&eWhich special ingredients are unlocked is determined\n&eby your Rank. There are 8 ranks to unlock.
|
Guides.Alchemy.Section.2=[[DARK_AQUA]]How does Concoctions work?\n[[YELLOW]]Concoctions allows brewing of more potions with custom ingredients.\n[[YELLOW]]Which special ingredients are unlocked is determined\n[[YELLOW]]by your Rank. There are 8 ranks to unlock.
|
||||||
Guides.Alchemy.Section.3=&3Concoctions tier 1 ingredients:\n&eBlaze Powder, Fermented Spider Eye, Ghast Tear, Redstone,\n&eGlowstone Dust, Sugar, Glistering Melon, Golden Carrot,\n&eMagma Cream, Nether Wart, Spider Eye, Suplhur, Water Lily,\n&ePufferfish\n&e(Vanilla Potions)
|
Guides.Alchemy.Section.3=[[DARK_AQUA]]Concoctions tier 1 ingredients:\n[[YELLOW]]Blaze Powder, Fermented Spider Eye, Ghast Tear, Redstone,\n[[YELLOW]]Glowstone Dust, Sugar, Glistering Melon, Golden Carrot,\n[[YELLOW]]Magma Cream, Nether Wart, Spider Eye, Suplhur, Water Lily,\n[[YELLOW]]Pufferfish\n[[YELLOW]](Vanilla Potions)
|
||||||
Guides.Alchemy.Section.4=&3Concoctions tier 2 ingredients:\n&eCarrot (Potion of Haste)\n&eSlimeball (Potion of Dullness)\n\n&3Concoctions tier 3 ingredients:\n&eQuartz (Potion of Absorption)\n&eRed Mushroom (Potion of Leaping)
|
Guides.Alchemy.Section.4=[[DARK_AQUA]]Concoctions tier 2 ingredients:\n[[YELLOW]]Carrot (Potion of Haste)\n[[YELLOW]]Slimeball (Potion of Dullness)\n\n[[DARK_AQUA]]Concoctions tier 3 ingredients:\n[[YELLOW]]Quartz (Potion of Absorption)\n[[YELLOW]]Rabbit's Foot (Potion of Leaping)
|
||||||
Guides.Alchemy.Section.5=&3Concoctions tier 4 ingredients:\n&eApple (Potion of Health Boost)\n&eRotten Flesh (Potion of Hunger)\n\n&3Concoctions tier 5 ingredients:\n&eBrown Mushroom (Potion of Nausea)\n&eInk Sack (Potion of Blindness)
|
Guides.Alchemy.Section.5=[[DARK_AQUA]]Concoctions tier 4 ingredients:\n[[YELLOW]]Apple (Potion of Health Boost)\n[[YELLOW]]Rotten Flesh (Potion of Hunger)\n\n[[DARK_AQUA]]Concoctions tier 5 ingredients:\n[[YELLOW]]Brown Mushroom (Potion of Nausea)\n[[YELLOW]]Ink Sack (Potion of Blindness)
|
||||||
Guides.Alchemy.Section.6=&3Concoctions tier 6 ingredients:\n&eFern (Potion of Saturation)\n\n&3Concoctions tier 7 ingredients:\n&ePoisonous Potato (Potion of Decay)\n\n&3Concoctions tier 8 ingredients:\n&eRegular Golden Apple (Potion of Resistance)
|
Guides.Alchemy.Section.6=[[DARK_AQUA]]Concoctions tier 6 ingredients:\n[[YELLOW]]Fern (Potion of Saturation)\n\n[[DARK_AQUA]]Concoctions tier 7 ingredients:\n[[YELLOW]]Poisonous Potato (Potion of Decay)\n\n[[DARK_AQUA]]Concoctions tier 8 ingredients:\n[[YELLOW]]Regular Golden Apple (Potion of Resistance)
|
||||||
|
|
||||||
##Archery
|
##Archery
|
||||||
Guides.Archery.Section.0=&3About Archery:\n&eArchery is about shooting with your bow and arrow.\n&eIt provides various combat bonuses, such as a damage boost\nðat scales with your level and the ability to daze your\n&eopponents in PvP. In addition to this, you can retrieve\n&esome of your spent arrows from the corpses of your foes.\n\n\n&3XP GAIN:\n&eTo gain XP in this skill you need to shoot mobs or\n&eother players.
|
Guides.Archery.Section.0=&3About Archery:\n&eArchery is about shooting with your bow and arrow.\n&eIt provides various combat bonuses, such as a damage boost\nðat scales with your level and the ability to daze your\n&eopponents in PvP. In addition to this, you can retrieve\n&esome of your spent arrows from the corpses of your foes.\n\n\n&3XP GAIN:\n&eTo gain XP in this skill you need to shoot mobs or\n&eother players.
|
||||||
Guides.Archery.Section.1=&3How does Skill Shot work?\n&eSkill Shot provides additional damage to your shots.\n&eThe bonus damage from Skill Shot increases as you\n&elevel in Archery.\n&eWith the default settings, your archery damage increases 10%\n&eevery 50 levels, to a maximum of 200% bonus damage.
|
Guides.Archery.Section.1=&3How does Skill Shot work?\n&eSkill Shot provides additional damage to your shots.\n&eThe bonus damage from Skill Shot increases as you\n&elevel in Archery.\n&eWith the default settings, your archery damage increases 10%\n&eevery 50 levels, to a maximum of 200% bonus damage.
|
||||||
@ -1188,3 +1189,4 @@ Chat.Channel.Off=&6(&amcMMO-Chat&6) &7Your chat messages will no longer be autom
|
|||||||
Chat.Spy.Party=&6[&eSPY&6-&a{2}&6] &r{0} &b\u2192 &r{1}
|
Chat.Spy.Party=&6[&eSPY&6-&a{2}&6] &r{0} &b\u2192 &r{1}
|
||||||
Broadcasts.LevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached level &a{1}&7 in &3{2}&7!
|
Broadcasts.LevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached level &a{1}&7 in &3{2}&7!
|
||||||
Broadcasts.PowerLevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached a Power level of &a{1}&7!
|
Broadcasts.PowerLevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached a Power level of &a{1}&7!
|
||||||
|
Scoreboard.Recovery=Attempting to recover mcMMO scoreboard...
|
@ -1138,3 +1138,4 @@ Chat.Channel.Off=&6(&amcMMO-\u0447\u0430\u0442&6) &e\u0412\u0430\u0448\u0438 \u0
|
|||||||
Chat.Spy.Party=&6[&e\u0428\u041F\u0418\u041A&6-&a{2}&6] &r{0} &b\u2192 &r{1}
|
Chat.Spy.Party=&6[&e\u0428\u041F\u0418\u041A&6-&a{2}&6] &r{0} &b\u2192 &r{1}
|
||||||
Broadcasts.LevelUpMilestone=&6(&amcMMO&6) {0}&7 \u0434\u043E\u0441\u0442\u0438\u0433 \u0443\u0440\u043E\u0432\u043D\u044F &a{1}&7 \u0432 &e{2}&7\\!
|
Broadcasts.LevelUpMilestone=&6(&amcMMO&6) {0}&7 \u0434\u043E\u0441\u0442\u0438\u0433 \u0443\u0440\u043E\u0432\u043D\u044F &a{1}&7 \u0432 &e{2}&7\\!
|
||||||
Broadcasts.PowerLevelUpMilestone=&6(&amcMMO&6) {0}&7 \u0434\u043E\u0441\u0442\u0438\u0433 \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0438\u043B\u044B &a{1}&7\\!
|
Broadcasts.PowerLevelUpMilestone=&6(&amcMMO&6) {0}&7 \u0434\u043E\u0441\u0442\u0438\u0433 \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0438\u043B\u044B &a{1}&7\\!
|
||||||
|
Scoreboard.Recovery=\u041F\u043E\u043F\u044B\u0442\u043A\u0430 \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0442\u0443 \u0442\u0430\u0431\u043B\u0438\u0446\u044B mcMMO...
|
||||||
|
@ -25,7 +25,7 @@ Concoctions:
|
|||||||
- PHANTOM_MEMBRANE
|
- PHANTOM_MEMBRANE
|
||||||
Tier_Three_Ingredients:
|
Tier_Three_Ingredients:
|
||||||
- QUARTZ
|
- QUARTZ
|
||||||
- RED_MUSHROOM
|
- RABBIT_FOOT
|
||||||
Tier_Four_Ingredients:
|
Tier_Four_Ingredients:
|
||||||
- APPLE
|
- APPLE
|
||||||
- ROTTEN_FLESH
|
- ROTTEN_FLESH
|
||||||
|
@ -1,137 +1,174 @@
|
|||||||
#
|
#
|
||||||
# Settings for Excavation's Archaeology
|
# Settings for Excavation's Archaeology
|
||||||
# If you are in retro mode, Drop_Level is multiplied by 10.
|
|
||||||
###
|
###
|
||||||
Excavation:
|
Excavation:
|
||||||
CAKE:
|
CAKE:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 3000
|
XP: 3000
|
||||||
Drop_Chance: 0.05
|
Drop_Chance: 0.05
|
||||||
Drop_Level: 75
|
Drop_Level:
|
||||||
|
Standard: 75
|
||||||
|
Retro_Mode: 750
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
||||||
GUNPOWDER:
|
GUNPOWDER:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 30
|
XP: 30
|
||||||
Drop_Chance: 10.0
|
Drop_Chance: 10.0
|
||||||
Drop_Level: 10
|
Drop_Level:
|
||||||
|
Standard: 10
|
||||||
|
Retro_Mode: 1000
|
||||||
Drops_From: [Gravel]
|
Drops_From: [Gravel]
|
||||||
BONE:
|
BONE:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 30
|
XP: 30
|
||||||
Drop_Chance: 10.0
|
Drop_Chance: 10.0
|
||||||
Drop_Level: 20
|
Drop_Level:
|
||||||
|
Standard: 20
|
||||||
|
Retro_Mode: 200
|
||||||
Drops_From: [Gravel]
|
Drops_From: [Gravel]
|
||||||
APPLE:
|
APPLE:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 0.1
|
Drop_Chance: 0.1
|
||||||
Drop_Level: 25
|
Drop_Level:
|
||||||
|
Standard: 25
|
||||||
|
Retro_Mode: 250
|
||||||
Drops_From: [Grass_Block, Mycelium]
|
Drops_From: [Grass_Block, Mycelium]
|
||||||
SLIME_BALL:
|
SLIME_BALL:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 5.0
|
Drop_Chance: 5.0
|
||||||
Drop_Level: 15
|
Drop_Level:
|
||||||
|
Standard: 15
|
||||||
|
Retro_Mode: 150
|
||||||
Drops_From: [Clay]
|
Drops_From: [Clay]
|
||||||
BUCKET:
|
BUCKET:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 0.1
|
Drop_Chance: 0.1
|
||||||
Drop_Level: 50
|
Drop_Level:
|
||||||
|
Standard: 50
|
||||||
|
Retro_Mode: 500
|
||||||
Drops_From: [Clay]
|
Drops_From: [Clay]
|
||||||
NETHERRACK:
|
NETHERRACK:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 30
|
XP: 30
|
||||||
Drop_Chance: 0.5
|
Drop_Chance: 0.5
|
||||||
Drop_Level: 85
|
Drop_Level:
|
||||||
|
Standard: 85
|
||||||
|
Retro_Mode: 850
|
||||||
Drops_From: [Gravel]
|
Drops_From: [Gravel]
|
||||||
RED_MUSHROOM:
|
RED_MUSHROOM:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 80
|
XP: 80
|
||||||
Drop_Chance: 0.5
|
Drop_Chance: 0.5
|
||||||
Drop_Level: 50
|
Drop_Level:
|
||||||
|
Standard: 50
|
||||||
|
Retro_Mode: 500
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Mycelium]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Mycelium]
|
||||||
BROWN_MUSHROOM:
|
BROWN_MUSHROOM:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 80
|
XP: 80
|
||||||
Drop_Chance: 0.5
|
Drop_Chance: 0.5
|
||||||
Drop_Level: 50
|
Drop_Level:
|
||||||
|
Standard: 50
|
||||||
|
Retro_Mode: 500
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Mycelium]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Mycelium]
|
||||||
EGG:
|
EGG:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 1.0
|
Drop_Chance: 1.0
|
||||||
Drop_Level: 25
|
Drop_Level:
|
||||||
|
Standard: 25
|
||||||
|
Retro_Mode: 250
|
||||||
Drops_From: [Grass_Block]
|
Drops_From: [Grass_Block]
|
||||||
SOUL_SAND:
|
SOUL_SAND:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 80
|
XP: 80
|
||||||
Drop_Chance: 0.5
|
Drop_Chance: 0.5
|
||||||
Drop_Level: 65
|
Drop_Level:
|
||||||
|
Standard: 65
|
||||||
|
Retro_Mode: 650
|
||||||
Drops_From: [Sand, Red_Sand]
|
Drops_From: [Sand, Red_Sand]
|
||||||
CLOCK:
|
CLOCK:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 0.1
|
Drop_Chance: 0.1
|
||||||
Drop_Level: 50
|
Drop_Level:
|
||||||
|
Standard: 50
|
||||||
|
Retro_Mode: 500
|
||||||
Drops_From: [Clay]
|
Drops_From: [Clay]
|
||||||
COBWEB:
|
COBWEB:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 150
|
XP: 150
|
||||||
Drop_Chance: 5.0
|
Drop_Chance: 5.0
|
||||||
Drop_Level: 75
|
Drop_Level:
|
||||||
Lore:
|
Standard: 75
|
||||||
- Line 1
|
Retro_Mode: 750
|
||||||
- Line 2
|
|
||||||
Custom_Name: Custom Name Test
|
|
||||||
Drops_From: [Clay]
|
Drops_From: [Clay]
|
||||||
STRING:
|
STRING:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 200
|
XP: 200
|
||||||
Drop_Chance: 5.0
|
Drop_Chance: 5.0
|
||||||
Drop_Level: 25
|
Drop_Level:
|
||||||
|
Standard: 25
|
||||||
|
Retro_Mode: 250
|
||||||
Drops_From: [Clay]
|
Drops_From: [Clay]
|
||||||
GLOWSTONE_DUST:
|
GLOWSTONE_DUST:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 80
|
XP: 80
|
||||||
Drop_Chance: 5.0
|
Drop_Chance: 5.0
|
||||||
Drop_Level: 5
|
Drop_Level:
|
||||||
|
Standard: 5
|
||||||
|
Retro_Mode: 50
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Mycelium]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Mycelium]
|
||||||
MUSIC_DISC_13:
|
MUSIC_DISC_13:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 3000
|
XP: 3000
|
||||||
Drop_Chance: 0.05
|
Drop_Chance: 0.05
|
||||||
Drop_Level: 25
|
Drop_Level:
|
||||||
|
Standard: 25
|
||||||
|
Retro_Mode: 250
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
||||||
MUSIC_DISC_CAT:
|
MUSIC_DISC_CAT:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 3000
|
XP: 3000
|
||||||
Drop_Chance: 0.05
|
Drop_Chance: 0.05
|
||||||
Drop_Level: 25
|
Drop_Level:
|
||||||
|
Standard: 25
|
||||||
|
Retro_Mode: 250
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
||||||
DIAMOND:
|
DIAMOND:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 1000
|
XP: 1000
|
||||||
Drop_Chance: 0.13
|
Drop_Chance: 0.13
|
||||||
Drop_Level: 35
|
Drop_Level:
|
||||||
|
Standard: 35
|
||||||
|
Retro_Mode: 350
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
||||||
COCOA_BEANS:
|
COCOA_BEANS:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 1.33
|
Drop_Chance: 1.33
|
||||||
Drop_Level: 35
|
Drop_Level:
|
||||||
|
Standard: 35
|
||||||
|
Retro_Mode: 350
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Mycelium]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Mycelium]
|
||||||
QUARTZ:
|
QUARTZ:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 100
|
XP: 100
|
||||||
Drop_Chance: 0.5
|
Drop_Chance: 0.5
|
||||||
Drop_Level: 85
|
Drop_Level:
|
||||||
|
Standard: 85
|
||||||
|
Retro_Mode: 850
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Mycelium, Soul_Sand, Soul_Soil]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Mycelium, Soul_Sand, Soul_Soil]
|
||||||
NAME_TAG:
|
NAME_TAG:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 3000
|
XP: 3000
|
||||||
Drop_Chance: 0.05
|
Drop_Chance: 0.05
|
||||||
Drop_Level: 25
|
Drop_Level:
|
||||||
|
Standard: 25
|
||||||
|
Retro_Mode: 250
|
||||||
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
|
||||||
#
|
#
|
||||||
# Settings for Hylian Luck
|
# Settings for Hylian Luck
|
||||||
@ -142,53 +179,71 @@ Hylian_Luck:
|
|||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Bushes]
|
Drops_From: [Bushes]
|
||||||
PUMPKIN_SEEDS:
|
PUMPKIN_SEEDS:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Bushes]
|
Drops_From: [Bushes]
|
||||||
COCOA_BEANS:
|
COCOA_BEANS:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Bushes]
|
Drops_From: [Bushes]
|
||||||
CARROT:
|
CARROT:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Flowers]
|
Drops_From: [Flowers]
|
||||||
POTATO:
|
POTATO:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Flowers]
|
Drops_From: [Flowers]
|
||||||
APPLE:
|
APPLE:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Flowers]
|
Drops_From: [Flowers]
|
||||||
EMERALD:
|
EMERALD:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Pots]
|
Drops_From: [Pots]
|
||||||
DIAMOND:
|
DIAMOND:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Pots]
|
Drops_From: [Pots]
|
||||||
GOLD_NUGGET:
|
GOLD_NUGGET:
|
||||||
Amount: 1
|
Amount: 1
|
||||||
XP: 0
|
XP: 0
|
||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level:
|
||||||
|
Standard: 0
|
||||||
|
Retro_Mode: 0
|
||||||
Drops_From: [Pots]
|
Drops_From: [Pots]
|
Loading…
Reference in New Issue
Block a user