mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-01 08:09:39 +01:00
Merge branch 'master' of github.com:mcMMO-Dev/mcMMO into configurable
This commit is contained in:
commit
b069480244
125
Changelog.txt
125
Changelog.txt
@ -194,6 +194,131 @@ Version 2.2.0
|
||||
Added API method to grab the level cap of a skill by its PrimarySkillType ENUM definition
|
||||
Added API method to check if a skill was being level capped
|
||||
Added 'UndefinedSkillBehaviour' for trying to use a method that has no behaviour defined for the provided skill
|
||||
Version 2.1.91
|
||||
mcMMO is now more compatible with plugins that spawn arrows in unexpected ways, this fixes some NPE in mcMMO when using certain plugins
|
||||
|
||||
Version 2.1.90
|
||||
Salvaged items now travel much slower towards the player
|
||||
Books from salvage will now travel towards the player
|
||||
Salvaged items travelling towards you will now have their speed adjusted based on distance
|
||||
|
||||
Common Materials found when mining have had their XP gains reduced and rare materials have had their XP gains increased
|
||||
Diamond Ore has had its XP increased from 750 to 2400
|
||||
Gold Ore has had its XP increased from 350 to 1300
|
||||
Iron Ore has had its XP increased from 250 to 900
|
||||
Lapis Ore has had its XP increased from 400 to 800
|
||||
Nether Quartz Ore has had its XP increased from 100 to 300
|
||||
Redstone Ore has had its XP increased from 150 to 600
|
||||
Blue_Ice has had its default XP value reduced to 15
|
||||
Packed_Ice has had its default XP value reduced to 15
|
||||
Netherrack has had its default XP value reduced to 15
|
||||
Coal Ore has had its XP increased from 100 to 400
|
||||
Stone has had its XP decreased from 30 to 15
|
||||
Granite has had its XP decreased from 30 to 15
|
||||
Andesite has had its XP decreased from 30 to 15
|
||||
Diorite has had its XP decreased from 30 to 15
|
||||
End Stone has had its XP decreased from 30 to 15
|
||||
Glow Stone has had its XP decreased from 30 to 15
|
||||
End Bricks has had its XP decreased from 200 to 50
|
||||
|
||||
|
||||
NOTES:
|
||||
You can either apply the default XP changes manually to experience.yml or delete it to generate a new file
|
||||
|
||||
Sorry about salvaged items traveling too quickly, in testing on my LAN server with ideal conditions they always entered my inventory and never shot past me so the high speed of the items was not an apparent issue.
|
||||
I've tested the new changes to how they travel towards you pretty thoroughly, they never go fast enough to go past you and they adjust their speed based on distance to you with some speed limitations.
|
||||
In testing the new tweaks work well whether the salvage anvil is above, below, or at the same height as you.
|
||||
|
||||
I'll be tweaking XP values across all skills more carefully in the upcoming content patch due after 2.2. Some tweaks to XP gains will be applied for 2.2.
|
||||
|
||||
Version 2.1.89
|
||||
Many changes were made to this version that affect default values in the config, read the notes carefully if you wish to apply these changes. They are optional.
|
||||
mcMMO is compatible with the new 1.14.3, in addition to this it is still compatible with 1.14.2, 1.14.1, 1.14, and 1.13.2. This did not require any changes to be made to mcMMO, but I thought I'd add this to the notes for those wondering.
|
||||
|
||||
RetroMode is the default level scaling mode again
|
||||
The default level for players has been changed back to 0 from 1 (you can change it back to 1 by editing 'Skills.General.StartingLevel' in advanced.yml) if you wish to apply this change read the notes
|
||||
Super Abilities now scale in length up to level 100/1000 instead of 50/500 by default (you can edit this in advanced.yml under 'Skills.General.Ability.Length.xxx')
|
||||
Early Game Boost now only applies when leveling from level 0 to level 1
|
||||
Removed the config setting 'MaxLevelMultiplier' from experience.yml as it is no longer used.
|
||||
When finding a treasure via Excavation players have a 1-8% chance to have a small amount vanilla experience orbs to be found alongside the treasure, the chance and number of orbs are based on the players Archaeology rank
|
||||
Tweaked the locale string 'Excavation.SubSkill.Archaeology.Description'
|
||||
Added locale string 'Excavation.SubSkill.Archaeology.Stat'
|
||||
Added locale string 'Excavation.SubSkill.Archaeology.Stat.Extra'
|
||||
Tweaked the locale string 'Fishing.SubSkill.MasterAngler.Stat'
|
||||
The interval at which you can gain Acrobatics XP from fall damage has been reduced to 3 seconds from 10 seconds, this will be configurable in 2.2.
|
||||
|
||||
When using WorldGuard (WG) with mcMMO, mcMMO now examines WG more carefully to determine if it is a compatible version or not, see the notes. Keep in mind WG is optional and not needed to run mcMMO.
|
||||
Fixed a bug that could result in Tree Feller failing to remove parts of a tree in snowy biomes. (This fix won't apply retroactively to old trees, see the notes)
|
||||
Updated Japanese locale (thanks snake)
|
||||
Tree Feller and other Super Abilities will damage tools with the Enchantment named 'Durability/Unbreaking' again, this does not apply to the NBT tag named Ubreakable (Unbreakable NBT tag is safe from damage however, try not to confuse them as they share similar names)
|
||||
Added new setting 'ExploitFix.TreeFellerReducedXP' to experience.yml
|
||||
Tree Feller will no longer give full XP for each block destroyed and instead give diminishing returns on XP for each block removed. You can turn this off by setting 'ExploitFix.TreeFellerReducedXP' in experience.yml to false
|
||||
Many skills which used to unlock at level 5/50 now unlock at level 1 instead
|
||||
Arrow Retrieval now unlocks at level 1 in both Standard and RetroMode
|
||||
Skill Shot now unlocks at level 1 in both Standard and RetroMode
|
||||
Dodge now unlocks at level 1 in both Standard and RetroMode
|
||||
Critical Strikes now unlocks at level 1 in both Standard and RetroMode
|
||||
Armor Impact now unlocks at level 1 in both Standard and RetroMode
|
||||
Beast Lore now unlocks at level 1 in both Standard and RetroMode
|
||||
Call Of The Wild now unlocks at level 1 in both Standard and RetroMode
|
||||
Scrap Collector now unlocks at level 1 in both Standard and RetroMode
|
||||
Treasure Hunter now unlocks at level 1 in both Standard and RetroMode
|
||||
Rupture now unlocks at level 1 in both Standard and RetroMode
|
||||
Iron Arm Style now unlocks at level 1 in both Standard and RetroMode
|
||||
Harvest Lumber now unlocks at level 1 in both Standard and RetroMode
|
||||
Archaeology now unlocks at level 1 in both Standard and RetroMode
|
||||
Repair Mastery now unlocks at level 1 in both Standard and RetroMode
|
||||
Double Drops (Herbalism and Mining) now have ranks and unlock at level 1 in both Standard and RetroMode
|
||||
Concoctions rank 2 now unlocks at Level 1 for both Standard and RetroMode
|
||||
Serrated Strikes now unlocks at levels 5/50 instead of 10/100
|
||||
Berserk now unlocks at levels 5/50 instead of 10/100
|
||||
|
||||
NOTES:
|
||||
I'm looking into adding 1.12.2 support sooner than expected.
|
||||
|
||||
Editing your config files is not required for this patch (and never will be), however I would highly recommend it. Read the notes below this line carefully.
|
||||
If you want to update to this patch easily and you don't mind default config values, delete skillranks.yml, advanced.yml, and experience.yml before starting your server with 2.1.89 of mcMMO applied.
|
||||
Many skills now unlock at level 1 and the default starting level is back to 0. It is recommended you change this number from 1 to 0 manually by editing 'Skills.General.StartingLevel' in advanced.yml or deleting advanced.yml and generating a new file when 2.1.89 starts.
|
||||
It is recommended you make the manual edits to skillranks.yml to apply this change or delete skillranks.yml and a new one will be generated once you start 2.1.89.
|
||||
|
||||
Early Game Boost was used to help players get to level 5 quickly by boosting their XP until they got there, this caused some confusion as they appeared to be 'learning a skill' for multiple levels, on RetroMode this lasted until level 50.
|
||||
I have changed Early Game Boost to only last from level 0-1 on both RetroMode and Standard, and now important skills are unlocked at level 1.
|
||||
I was going to wait until 2.2 was done to deploy this change, but 2.2 is some time away and the previous system was causing some confusion.
|
||||
Early Game Boost gives players extra XP for skills that are level 0, you can turn this system off by setting 'EarlyGameBoost.Enabled' in experience.yml to false
|
||||
Early Game Boost will show 'Learning a new skill...' if XP bars are enabled
|
||||
|
||||
https://mcmmo.org/wiki/World_guard - A list of WG flags supported by mcMMO.
|
||||
It is not necessary to have WG installed, but if you do have WG installed mcMMO hooks into it to provide some additional features.
|
||||
Previously mcMMO used to determine if WG was compatible just by checking to see if it was version 7 of WG, however version 7 of WG is not guaranteed to be compatible as necessary classes that mcMMO hooks into were added during its development and some users are still running early dev versions of WG7.
|
||||
In order to decrease the chance of error, mcMMO now uses reflection when checking to see if WG is compatible in addition to checking its version number, if its not compatible mcMMO will print a message and refrain from hooking into WG.
|
||||
WG is an optional dependency for mcMMO, and unfortunately before this change if mcMMO thought you were running a compatible version of WG and it turned out you weren't then mcMMO would not function correctly.
|
||||
|
||||
Archaeology does something now, it will be tweaked again in the future. Previously rank 1 of Archaeology was required to find treasures but that was all it did, now each rank of Archaeology also adds a small chance to find experience orbs when a player finds treasure.
|
||||
|
||||
In a prior patch I removed damage on tools if they had Unbreakable NBT or Unbreaking Enchantment, at the time I made this change I did not realize they were different things and just shared the same name, this patch fixes this mistake. My intention was to prevent damage on tools with the NBT unbreakable tag which makes an item never suffer from durability loss.
|
||||
mcMMO reduces damage to tools from super abilities if they have the "Durability/Unbreaking" enchantment already, this behaviour has been in mcMMO for a long time.
|
||||
|
||||
Tree Feller will now give reduced XP per block destroyed by Tree Feller and will never go below 1 XP per block, you can turn this off with 'ExploitFix.TreeFellerReducedXP' in experience.yml
|
||||
There was a bug fixed in this patch that prevents an issue where Tree Feller was not removing all blocks left behind, unfortunately this will only affect new trees made in the world. The only trees that suffered from this bug were ones in snowy areas that had snow form on them.
|
||||
|
||||
RetroMode and Standard mode will be getting renamed in 2.2, probably to something like 1000-scale and 100-scale respectively.
|
||||
Retro Mode was accidental genius is the short reason for the change to make it the default level scaling for mcMMO again.
|
||||
Standard Mode is not going anywhere, it is just opt-in now instead of the default.
|
||||
If you delete config.yml you will need to turn RetroMode off to use Standard mode as mcMMO doesn't keep track of what level scaling you are using outside of that.
|
||||
|
||||
Version 2.1.88
|
||||
mcMMO is now more compatible with a plugin named Project Korra
|
||||
mcMMO will no longer process combat triggers for damage at or below 0
|
||||
|
||||
Version 2.1.87
|
||||
(Level caps are not on by default in mcMMO, this is something you can turn on)
|
||||
|
||||
Players who reach either the power level cap or skill level cap will now be informed that they have done so
|
||||
XP Bars will no longer be sent to players who have reached the power level or skill level cap respectively
|
||||
Level up messages will no longer be sent to players who have reached the power level or skill level cap respectively
|
||||
Fixed a bug where mcMMO would send level up notifications to a player if the custom level up event from mcMMO was cancelled
|
||||
New locale strings 'LevelCap.PowerLevel' & 'LevelCap.Skill'
|
||||
|
||||
Version 2.1.86
|
||||
Players will no longer be told they got a perfect result when salvaging if they are below max skill level
|
||||
Salvage results will now travel towards the player instead of moving in a random direction
|
||||
|
2
pom.xml
2
pom.xml
@ -228,7 +228,7 @@
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-core</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
|
@ -744,7 +744,7 @@ public final class ExperienceAPI {
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getLevelCap(String skillType) {
|
||||
return mcMMO.getPlayerLevelingSettings().getLevelCap(getSkillType(skillType));
|
||||
return mcMMO.getPlayerLevelingSettings().getSkillLevelCap(getSkillType(skillType));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -757,7 +757,7 @@ public final class ExperienceAPI {
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getLevelCap(PrimarySkillType skillType) {
|
||||
return mcMMO.getPlayerLevelingSettings().getLevelCap(skillType);
|
||||
return mcMMO.getPlayerLevelingSettings().getSkillLevelCap(skillType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -767,7 +767,7 @@ public final class ExperienceAPI {
|
||||
* @return true if the skill has a level cap
|
||||
*/
|
||||
public static boolean isSkillLevelCapped(PrimarySkillType skillType) {
|
||||
return mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(skillType);
|
||||
return mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(skillType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -778,7 +778,7 @@ public final class ExperienceAPI {
|
||||
* @return the overall power level cap
|
||||
*/
|
||||
public static int getPowerLevelCap() {
|
||||
return mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap();
|
||||
return mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().getLevelCap();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.gmail.nossr50.commands.admin;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class PlayerDebug implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
return false;
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ public class AddlevelsCommand extends ExperienceCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
||||
EventUtils.tryLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -36,7 +36,7 @@ public class MmoeditCommand extends ExperienceCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
EventUtils.handleLevelChangeEventEdit(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel);
|
||||
EventUtils.tryLevelEditEvent(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -131,7 +131,7 @@ public class SkillresetCommand implements TabExecutor {
|
||||
return;
|
||||
}
|
||||
|
||||
EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
||||
EventUtils.tryLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
||||
}
|
||||
|
||||
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||
|
@ -48,9 +48,9 @@ public class McstatsCommand implements TabExecutor {
|
||||
CommandUtils.printCombatSkills(player);
|
||||
CommandUtils.printMiscSkills(player);
|
||||
|
||||
int powerLevelCap = mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap();
|
||||
int powerLevelCap = mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().getLevelCap();
|
||||
|
||||
if (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().isLevelCapEnabled()) {
|
||||
if (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().isLevelCapEnabled()) {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", UserManager.getPlayer(player).getPowerLevel(), powerLevelCap));
|
||||
} else {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", UserManager.getPlayer(player).getPowerLevel()));
|
||||
|
@ -3,8 +3,10 @@ package com.gmail.nossr50.commands.skills;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.TextComponentFactory;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -43,6 +45,8 @@ public class ExcavationCommand extends SkillCommand {
|
||||
protected List<String> statsDisplay(Player player, double skillValue, boolean hasEndurance, boolean isLucky) {
|
||||
List<String> messages = new ArrayList<>();
|
||||
|
||||
ExcavationManager excavationManager = UserManager.getPlayer(player).getExcavationManager();
|
||||
|
||||
if (canGigaDrill) {
|
||||
messages.add(getStatMessage(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, gigaDrillBreakerLength)
|
||||
+ (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", gigaDrillBreakerLengthEndurance) : ""));
|
||||
@ -50,6 +54,14 @@ public class ExcavationCommand extends SkillCommand {
|
||||
//messages.add(LocaleLoader.getString("Excavation.Effect.Length", gigaDrillBreakerLength) + (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", gigaDrillBreakerLengthEndurance) : ""));
|
||||
}
|
||||
|
||||
if(canUseSubskill(player, SubSkillType.EXCAVATION_ARCHAEOLOGY)) {
|
||||
messages.add(getStatMessage(false, false, SubSkillType.EXCAVATION_ARCHAEOLOGY,
|
||||
percent.format(excavationManager.getArchaelogyExperienceOrbChance() / 100.0D)));
|
||||
messages.add(getStatMessage(true, false, SubSkillType.EXCAVATION_ARCHAEOLOGY,
|
||||
String.valueOf(excavationManager.getExperienceOrbsReward())));
|
||||
|
||||
}
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ public class MiningCommand extends SkillCommand {
|
||||
canBiggerBombs = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_BIGGER_BOMBS) && Permissions.biggerBombs(player);
|
||||
canBlast = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_BLAST_MINING) && Permissions.remoteDetonation(player);
|
||||
canDemoExpert = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_DEMOLITIONS_EXPERTISE) && Permissions.demolitionsExpertise(player);
|
||||
canDoubleDrop = Permissions.isSubSkillEnabled(player, SubSkillType.MINING_DOUBLE_DROPS);
|
||||
canDoubleDrop = canUseSubskill(player, SubSkillType.MINING_DOUBLE_DROPS);
|
||||
canSuperBreaker = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_SUPER_BREAKER) && Permissions.superBreaker(player);
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ public class ConfigSectionExploitAcrobatics {
|
||||
private static final int ACROBATIC_LOCATION_LIMIT_DEFAULT = 50;
|
||||
private static final boolean PREVENT_ACROBATICS_ABUSE_DEFAULT = true;
|
||||
private static final int TELEPORT_COOLDOWN_DEFAULT = 30;
|
||||
private static final int ROLL_XP_GAIN_CD_DEFAULT = 10;
|
||||
private static final int ROLL_XP_GAIN_CD_DEFAULT = 3;
|
||||
|
||||
@Setting(value = "Player-Fall-Location-Tracking",
|
||||
comment = "The amount of locations to keep track of for player falls." +
|
||||
|
@ -3,6 +3,7 @@ package com.gmail.nossr50.config.hocon.experience;
|
||||
import com.gmail.nossr50.datatypes.experience.CustomXPPerk;
|
||||
import com.gmail.nossr50.datatypes.experience.SpecialXPKey;
|
||||
import com.gmail.nossr50.datatypes.skills.ItemMaterialCategory;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import ninja.leaping.configurate.objectmapping.Setting;
|
||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||
|
||||
@ -184,6 +185,10 @@ public class ConfigExperience {
|
||||
return getConfigExperienceSkills().getExcavationExperienceMap();
|
||||
}
|
||||
|
||||
public boolean isReduceTreeFellerXP() {
|
||||
return getExperienceWoodcutting().isReduceTreeFellerXP();
|
||||
}
|
||||
|
||||
public HashMap<String, Integer> getFishingXPMap() {
|
||||
return getConfigExperienceSkills().getFishingXPMap();
|
||||
}
|
||||
@ -196,6 +201,12 @@ public class ConfigExperience {
|
||||
return configExperienceSkills;
|
||||
}
|
||||
|
||||
public double getSkillGlobalMultiplier(PrimarySkillType primarySkillType) {
|
||||
return configExperienceSkillMultiplier.getSkillGlobalMultiplier(primarySkillType);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public double getGlobalXPMultiplier() {
|
||||
return globalXPMultiplier;
|
||||
}
|
||||
|
@ -45,6 +45,10 @@ public class ConfigExperienceSkills {
|
||||
@Setting(value = "Z-Combat", comment = "XP Settings for Combat")
|
||||
private ConfigExperienceCombat experienceCombat = new ConfigExperienceCombat();
|
||||
|
||||
public boolean isReduceTreeFellerXP() {
|
||||
return experienceWoodcutting.isReduceTreeFellerXP();
|
||||
}
|
||||
|
||||
/*
|
||||
* BOILER PLATE GETTERS
|
||||
*/
|
||||
|
@ -9,6 +9,7 @@ import java.util.HashMap;
|
||||
public class ConfigExperienceWoodcutting {
|
||||
|
||||
private static final HashMap<String, Integer> WOODCUTTING_EXPERIENCE_DEFAULT;
|
||||
public static final boolean REDUCE_TREE_FELLER_XP_DEFAULT = true;
|
||||
|
||||
static {
|
||||
WOODCUTTING_EXPERIENCE_DEFAULT = new HashMap<>();
|
||||
@ -46,10 +47,19 @@ public class ConfigExperienceWoodcutting {
|
||||
WOODCUTTING_EXPERIENCE_DEFAULT.put("minecraft:mushroom_stem", 80);
|
||||
}
|
||||
|
||||
@Setting(value = "Reduce-Tree-Feller-XP", comment = "If set to true players will receive diminishing returns on XP from tree feller." +
|
||||
"\nIf set to false, players will get the full XP from every block destroyed by tree feller." +
|
||||
"\nDefault value: "+REDUCE_TREE_FELLER_XP_DEFAULT)
|
||||
private boolean reduceTreeFellerXP = REDUCE_TREE_FELLER_XP_DEFAULT;
|
||||
|
||||
@Setting(value = "Woodcutting-Experience")
|
||||
private HashMap<String, Integer> woodcuttingExperienceMap = WOODCUTTING_EXPERIENCE_DEFAULT;
|
||||
|
||||
public HashMap<String, Integer> getWoodcuttingExperienceMap() {
|
||||
return woodcuttingExperienceMap;
|
||||
}
|
||||
|
||||
public boolean isReduceTreeFellerXP() {
|
||||
return reduceTreeFellerXP;
|
||||
}
|
||||
}
|
||||
|
@ -134,6 +134,18 @@ public class ConfigLeveling {
|
||||
return configSectionLevelCaps;
|
||||
}
|
||||
|
||||
public ConfigSectionSkillLevelCap getPowerLevelSettings() {
|
||||
return configSectionLevelCaps.getPowerLevelSettings();
|
||||
}
|
||||
|
||||
public boolean getReducePlayerSkillsAboveCap() {
|
||||
return configSectionLevelCaps.getReducePlayerSkillsAboveCap();
|
||||
}
|
||||
|
||||
public ConfigSectionSkillLevelCaps getConfigSectionSkillLevelCaps() {
|
||||
return configSectionLevelCaps.getConfigSectionSkillLevelCaps();
|
||||
}
|
||||
|
||||
public ConfigSectionLevelingGeneral getConfigSectionLevelingGeneral() {
|
||||
return configSectionLevelingGeneral;
|
||||
}
|
||||
@ -194,11 +206,19 @@ public class ConfigLeveling {
|
||||
return configExperienceFormula.getLinearMultiplier();
|
||||
}
|
||||
|
||||
public boolean isPowerLevelCapEnabled() {
|
||||
return configSectionLevelCaps.isPowerLevelCapEnabled();
|
||||
}
|
||||
|
||||
public int getPowerLevelCap() {
|
||||
return configSectionLevelCaps.getPowerLevelCap();
|
||||
}
|
||||
|
||||
/*
|
||||
* HELPER METHODS
|
||||
*/
|
||||
|
||||
public int getLevelCap(PrimarySkillType primarySkillType) {
|
||||
public int getSkillLevelCap(PrimarySkillType primarySkillType) {
|
||||
switch (primarySkillType) {
|
||||
case ACROBATICS:
|
||||
return configSectionLevelCaps.getConfigSectionSkillLevelCaps().getAcrobatics().getLevelCap();
|
||||
@ -236,7 +256,7 @@ public class ConfigLeveling {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isLevelCapEnabled(PrimarySkillType primarySkillType) {
|
||||
public boolean isSkillLevelCapEnabled(PrimarySkillType primarySkillType) {
|
||||
switch (primarySkillType) {
|
||||
case ACROBATICS:
|
||||
return configSectionLevelCaps.getConfigSectionSkillLevelCaps().getAcrobatics().isLevelCapEnabled();
|
||||
|
@ -29,10 +29,18 @@ public class ConfigSectionLevelCaps {
|
||||
* GETTER BOILERPLATE
|
||||
*/
|
||||
|
||||
public ConfigSectionSkillLevelCap getPowerLevel() {
|
||||
public ConfigSectionSkillLevelCap getPowerLevelSettings() {
|
||||
return powerLevel;
|
||||
}
|
||||
|
||||
public boolean isPowerLevelCapEnabled() {
|
||||
return powerLevel.isLevelCapEnabled();
|
||||
}
|
||||
|
||||
public int getPowerLevelCap() {
|
||||
return powerLevel.getLevelCap();
|
||||
}
|
||||
|
||||
public boolean getReducePlayerSkillsAboveCap() {
|
||||
return truncateSkillsAboveCap;
|
||||
}
|
||||
|
@ -899,8 +899,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
continue;
|
||||
}
|
||||
//Level Cap
|
||||
if (mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(skill)) {
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getLevelCap(skill);
|
||||
if (mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(skill)) {
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getSkillLevelCap(skill);
|
||||
if (Integer.valueOf(character[index]) > cap) {
|
||||
mcMMO.p.getLogger().warning("Truncating " + skill.getName() + " to configured max level for player " + character[USERNAME]);
|
||||
character[index] = cap + "";
|
||||
|
@ -891,11 +891,11 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
||||
//Level Cap Stuff
|
||||
if (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getReducePlayerSkillsAboveCap()) {
|
||||
for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) {
|
||||
if (!mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(skill))
|
||||
if (!mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(skill))
|
||||
continue;
|
||||
|
||||
//Shrink skills above the cap
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getLevelCap(skill);
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getSkillLevelCap(skill);
|
||||
statement = connection.prepareStatement("UPDATE `" + tablePrefix + "skills` SET `" + skill.name().toLowerCase() + "` = " + cap + " WHERE `" + skill.name().toLowerCase() + "` > " + cap);
|
||||
statement.executeUpdate();
|
||||
tryClose(statement);
|
||||
|
@ -165,7 +165,15 @@ public class McMMOPlayer {
|
||||
experienceBarManager.hideExperienceBar(primarySkillType);
|
||||
}*/
|
||||
|
||||
public void processPostXpEvent(XPGainReason xpGainReason, PrimarySkillType primarySkillType, Plugin plugin, XPGainSource xpGainSource) {
|
||||
public void processPostXpEvent(PrimarySkillType primarySkillType, Plugin plugin, XPGainSource xpGainSource)
|
||||
{
|
||||
//Check if they've reached the power level cap just now
|
||||
if(hasReachedPowerLevelCap()) {
|
||||
mcMMO.getNotificationManager().sendPlayerInformationChatOnly(player, "LevelCap.PowerLevel", String.valueOf(mcMMO.getConfigManager().getConfigLeveling().getPowerLevelCap()));
|
||||
} else if(hasReachedLevelCap(primarySkillType)) {
|
||||
mcMMO.getNotificationManager().sendPlayerInformationChatOnly(player, "LevelCap.Skill", String.valueOf(mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(primarySkillType)), primarySkillType.getName());
|
||||
}
|
||||
|
||||
//Updates from Party sources
|
||||
if (xpGainSource == XPGainSource.PARTY_MEMBERS && !mcMMO.getConfigManager().getConfigLeveling().isPartyExperienceTriggerXpBarDisplay())
|
||||
return;
|
||||
@ -474,6 +482,31 @@ public class McMMOPlayer {
|
||||
return powerLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not a player is level capped
|
||||
* If they are at the power level cap, this will return true, otherwise it checks their skill level
|
||||
* @param primarySkillType
|
||||
* @return
|
||||
*/
|
||||
public boolean hasReachedLevelCap(PrimarySkillType primarySkillType) {
|
||||
if(hasReachedPowerLevelCap())
|
||||
return true;
|
||||
|
||||
if(getSkillLevel(primarySkillType) >= mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(primarySkillType))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not a player is power level capped
|
||||
* Compares their power level total to the current set limit
|
||||
* @return true if they have reached the power level cap
|
||||
*/
|
||||
public boolean hasReachedPowerLevelCap() {
|
||||
return this.getPowerLevel() >= mcMMO.getConfigManager().getConfigLeveling().getPowerLevelCap();
|
||||
}
|
||||
|
||||
/**
|
||||
* Begins an experience gain. The amount will be affected by skill modifiers, global rate, perks, and may be shared with the party
|
||||
*
|
||||
@ -564,8 +597,11 @@ public class McMMOPlayer {
|
||||
* @param primarySkillType The skill to check
|
||||
*/
|
||||
private void checkXp(PrimarySkillType primarySkillType, XPGainReason xpGainReason, XPGainSource xpGainSource) {
|
||||
if(hasReachedLevelCap(primarySkillType))
|
||||
return;
|
||||
|
||||
if (getSkillXpLevelRaw(primarySkillType) < getXpToLevel(primarySkillType)) {
|
||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
||||
processPostXpEvent(primarySkillType, mcMMO.p, xpGainSource);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -573,7 +609,7 @@ public class McMMOPlayer {
|
||||
double xpRemoved = 0;
|
||||
|
||||
while (getSkillXpLevelRaw(primarySkillType) >= getXpToLevel(primarySkillType)) {
|
||||
if (mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(primarySkillType)
|
||||
if (mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(primarySkillType)
|
||||
&& hasReachedLevelCap(primarySkillType)) {
|
||||
setSkillXpLevel(primarySkillType, 0);
|
||||
break;
|
||||
@ -583,8 +619,7 @@ public class McMMOPlayer {
|
||||
levelsGained++;
|
||||
}
|
||||
|
||||
if (!EventUtils.handleLevelChangeEvent(player, primarySkillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
||||
if (EventUtils.tryLevelChangeEvent(player, primarySkillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -597,7 +632,7 @@ public class McMMOPlayer {
|
||||
mcMMO.getNotificationManager().sendPlayerLevelUpNotification(this, primarySkillType, levelsGained, profile.getSkillLevel(primarySkillType));
|
||||
|
||||
//UPDATE XP BARS
|
||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
||||
processPostXpEvent(primarySkillType, mcMMO.p, xpGainSource);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -770,8 +805,8 @@ public class McMMOPlayer {
|
||||
*/
|
||||
private double modifyXpGain(PrimarySkillType primarySkillType, double xp) {
|
||||
if (((primarySkillType.getMaxLevel() <= getSkillLevel(primarySkillType))
|
||||
&& mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(primarySkillType))
|
||||
|| (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap() <= getPowerLevel())) {
|
||||
&& mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(primarySkillType))
|
||||
|| (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().getLevelCap() <= getPowerLevel())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -921,11 +956,6 @@ public class McMMOPlayer {
|
||||
return (int) (((deactivatedTimestamp + (PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
|
||||
}
|
||||
|
||||
private boolean hasReachedLevelCap(PrimarySkillType skill) {
|
||||
return (skill.getMaxLevel() < getSkillLevel(skill) + 1)
|
||||
|| (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap() < getPowerLevel() + 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions are wrapped from PlayerProfile so that we don't always have to store it alongside the McMMOPlayer object.
|
||||
*/
|
||||
|
@ -419,7 +419,7 @@ public class PlayerProfile {
|
||||
int sum = 0;
|
||||
|
||||
for (PrimarySkillType parent : parents) {
|
||||
if (mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(parent))
|
||||
if (mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(parent))
|
||||
sum += Math.min(getSkillLevel(parent), parent.getMaxLevel());
|
||||
else
|
||||
sum += getSkillLevel(parent);
|
||||
|
@ -179,7 +179,7 @@ public enum PrimarySkillType {
|
||||
* @return the max level of this skill
|
||||
*/
|
||||
public int getMaxLevel() {
|
||||
return mcMMO.getPlayerLevelingSettings().getLevelCap(this);
|
||||
return mcMMO.getPlayerLevelingSettings().getSkillLevelCap(this);
|
||||
}
|
||||
|
||||
/*public boolean getDoubleDropsDisabled() {
|
||||
|
@ -41,7 +41,7 @@ public enum SubSkillType {
|
||||
FISHING_SHAKE(1),
|
||||
|
||||
/* Herbalism */
|
||||
HERBALISM_DOUBLE_DROPS,
|
||||
HERBALISM_DOUBLE_DROPS(1),
|
||||
HERBALISM_FARMERS_DIET(5),
|
||||
HERBALISM_GREEN_TERRA(1),
|
||||
HERBALISM_GREEN_THUMB(4),
|
||||
@ -52,7 +52,7 @@ public enum SubSkillType {
|
||||
MINING_BIGGER_BOMBS(1),
|
||||
MINING_BLAST_MINING(8),
|
||||
MINING_DEMOLITIONS_EXPERTISE(1),
|
||||
MINING_DOUBLE_DROPS,
|
||||
MINING_DOUBLE_DROPS(1),
|
||||
MINING_SUPER_BREAKER(1),
|
||||
|
||||
/* Repair */
|
||||
|
@ -169,10 +169,15 @@ public class BlockListener implements Listener {
|
||||
/* WORLD BLACKLIST CHECK */
|
||||
if (WorldBlacklist.isWorldBlacklisted(event.getBlock().getWorld()))
|
||||
return;
|
||||
|
||||
Block newBlock = event.getNewState().getBlock();
|
||||
Material material = newBlock.getType();
|
||||
|
||||
if (mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitSkills().isPreventCobblestoneStoneGeneratorXP()) {
|
||||
if (event.getNewState().getType() != Material.OBSIDIAN && BlockUtils.shouldBeWatched(event.getNewState())) {
|
||||
mcMMO.getPlaceStore().setTrue(event.getNewState());
|
||||
if (material != Material.OBSIDIAN
|
||||
&& BlockUtils.shouldBeWatched(material)
|
||||
&& mcMMO.getDynamicSettingsManager().getExperienceManager().hasMiningXp(material)) { //Hacky fix to prevent trees growing from being marked as unnatural
|
||||
mcMMO.getPlaceStore().setTrue(newBlock);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -275,7 +280,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -284,7 +289,6 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
BlockState blockState = event.getBlock().getState();
|
||||
Location location = blockState.getLocation();
|
||||
|
||||
if (!BlockUtils.shouldBeWatched(blockState)) {
|
||||
return;
|
||||
@ -370,7 +374,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -439,7 +443,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -509,7 +513,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -582,12 +586,12 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard main flag is permitted for this player in this region");
|
||||
else
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard main flag is DENIED for this player in this region");
|
||||
|
||||
if (WorldGuardManager.getInstance().hasXPFlag(player))
|
||||
if (plugin.getWorldGuardManager().hasXPFlag(player))
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard xp flag is permitted for this player in this region");
|
||||
else
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard xp flag is not permitted for this player in this region");
|
||||
|
@ -88,7 +88,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -121,20 +121,17 @@ public class EntityListener implements Listener {
|
||||
|
||||
if(event.getEntity().getShooter() instanceof Player)
|
||||
{
|
||||
|
||||
Player player = (Player) event.getEntity().getShooter();
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
Projectile projectile = event.getEntity();//Hacky stuff for 1.13/1.14 compat
|
||||
Projectile projectile = event.getEntity();
|
||||
|
||||
String itemKey = player.getInventory().getItemInMainHand().getType().getKey().toString();
|
||||
|
||||
if(!itemKey.equalsIgnoreCase("minecraft:bow") && !itemKey.equalsIgnoreCase("minecraft:crossbow"))
|
||||
if(!(projectile instanceof Arrow))
|
||||
return;
|
||||
|
||||
projectile.setMetadata(MetadataConstants.BOW_FORCE_METAKEY, new FixedMetadataValue(plugin, 1.0));
|
||||
@ -293,7 +290,7 @@ public class EntityListener implements Listener {
|
||||
{
|
||||
if(attacker instanceof Player) {
|
||||
|
||||
if(!WorldGuardManager.getInstance().hasMainFlag((Player) attacker))
|
||||
if(!plugin.getWorldGuardManager().hasMainFlag((Player) attacker))
|
||||
return;
|
||||
|
||||
} else if(attacker instanceof Projectile) {
|
||||
@ -301,7 +298,7 @@ public class EntityListener implements Listener {
|
||||
Projectile projectile = (Projectile) attacker;
|
||||
|
||||
if(projectile.getShooter() instanceof Player) {
|
||||
if(!WorldGuardManager.getInstance().hasMainFlag((Player) projectile.getShooter()))
|
||||
if(!plugin.getWorldGuardManager().hasMainFlag((Player) projectile.getShooter()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -398,6 +395,19 @@ public class EntityListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This was put here to solve a plugin conflict with a mod called Project Korra
|
||||
* Project Korra sends out a damage event with exactly 0 damage
|
||||
* mcMMO does some calculations for the damage in an event and it ends up dividing by zero,
|
||||
* as a result of the modifiers for the event being 0 and the damage set for this event being 0.
|
||||
*
|
||||
* Surprising this kind of thing
|
||||
*
|
||||
*/
|
||||
if(damage <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
CombatUtils.processCombatAttack(event, attacker, target);
|
||||
CombatUtils.handleHealthbars(attacker, target, event.getFinalDamage(), plugin);
|
||||
|
||||
@ -452,7 +462,7 @@ public class EntityListener implements Listener {
|
||||
Player player = (Player) event.getEntity();
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -530,7 +540,7 @@ public class EntityListener implements Listener {
|
||||
Player player = (Player) owner;
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -724,7 +734,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -762,7 +772,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -825,7 +835,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -926,7 +936,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -972,7 +982,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -135,7 +135,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -234,7 +234,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -352,7 +352,7 @@ public class InventoryListener implements Listener {
|
||||
//
|
||||
// /* WORLD GUARD MAIN FLAG CHECK */
|
||||
// if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
// if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
// if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
@ -456,7 +456,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getEntity()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getEntity()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -160,7 +160,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(killedPlayer))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(killedPlayer))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -256,7 +256,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -331,7 +331,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -424,7 +424,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -576,7 +576,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -689,7 +689,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ public class SelfListener implements Listener {
|
||||
event.getXpGainReason() == XPGainReason.SHARED_PVE ||
|
||||
event.getXpGainReason() == XPGainReason.SHARED_PVP) {
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasXPFlag(player)) {
|
||||
if (!plugin.getWorldGuardManager().hasXPFlag(player)) {
|
||||
event.setRawXpGained(0);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
||||
import com.gmail.nossr50.worldguard.WorldGuardUtils;
|
||||
import net.shatteredlands.shatt.backup.ZipLibrary;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -67,6 +68,7 @@ public class mcMMO extends JavaPlugin {
|
||||
private static NotificationManager notificationManager;
|
||||
private static CommandRegistrationManager commandRegistrationManager;
|
||||
private static NBTManager nbtManager;
|
||||
private static WorldGuardManager worldGuardManager;
|
||||
|
||||
/* File Paths */
|
||||
private static String mainDirectory;
|
||||
@ -196,9 +198,13 @@ public class mcMMO extends JavaPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
if (getServer().getPluginManager().getPlugin("WorldGuard") != null)
|
||||
WorldGuardManager.getInstance().registerFlags();
|
||||
public void onLoad()
|
||||
{
|
||||
worldGuardManager = new WorldGuardManager();
|
||||
|
||||
if(getServer().getPluginManager().getPlugin("WorldGuard") != null) {
|
||||
worldGuardManager.registerFlags();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -610,4 +616,8 @@ public class mcMMO extends JavaPlugin {
|
||||
public static NotificationManager getNotificationManager() {
|
||||
return notificationManager;
|
||||
}
|
||||
|
||||
public WorldGuardManager getWorldGuardManager() {
|
||||
return worldGuardManager;
|
||||
}
|
||||
}
|
@ -53,6 +53,10 @@ public class ArcheryManager extends SkillManager {
|
||||
* @param damager The {@link Entity} who shot the arrow
|
||||
*/
|
||||
public double distanceXpBonusMultiplier(LivingEntity target, Entity damager) {
|
||||
//Hacky Fix - some plugins spawn arrows and assign them to players after the ProjectileLaunchEvent fires
|
||||
if(!damager.hasMetadata(MetadataConstants.ARROW_DISTANCE_METAKEY))
|
||||
return damager.getLocation().distance(target.getLocation());
|
||||
|
||||
Location firedLocation = (Location) damager.getMetadata(MetadataConstants.ARROW_DISTANCE_METAKEY).get(0).value();
|
||||
Location targetLocation = target.getLocation();
|
||||
|
||||
|
@ -10,9 +10,12 @@ import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
@ -40,6 +43,13 @@ public class ExcavationManager extends SkillManager {
|
||||
for (ExcavationTreasure treasure : treasures) {
|
||||
if (skillLevel >= treasure.getDropLevel()
|
||||
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), PrimarySkillType.EXCAVATION, treasure.getDropChance())) {
|
||||
|
||||
//Spawn Vanilla XP orbs if a dice roll succeeds
|
||||
if(RandomChanceUtil.rollDice(getArchaelogyExperienceOrbChance(), 100)) {
|
||||
ExperienceOrb experienceOrb = (ExperienceOrb) getPlayer().getWorld().spawnEntity(location, EntityType.EXPERIENCE_ORB);
|
||||
experienceOrb.setExperience(getExperienceOrbsReward());
|
||||
}
|
||||
|
||||
xp += treasure.getXp();
|
||||
Misc.dropItem(location, treasure.getDrop());
|
||||
}
|
||||
@ -50,7 +60,20 @@ public class ExcavationManager extends SkillManager {
|
||||
applyXpGain(xp, XPGainReason.PVE);
|
||||
}
|
||||
|
||||
public void printExcavationDebug(Player player, BlockState blockState) {
|
||||
public int getExperienceOrbsReward() {
|
||||
return 1 * getArchaeologyRank();
|
||||
}
|
||||
|
||||
public double getArchaelogyExperienceOrbChance() {
|
||||
return getArchaeologyRank() * 2;
|
||||
}
|
||||
|
||||
public int getArchaeologyRank() {
|
||||
return RankUtils.getRank(getPlayer(), SubSkillType.EXCAVATION_ARCHAEOLOGY);
|
||||
}
|
||||
|
||||
public void printExcavationDebug(Player player, BlockState blockState)
|
||||
{
|
||||
if (Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.EXCAVATION_ARCHAEOLOGY)) {
|
||||
List<ExcavationTreasure> treasures = Excavation.getTreasures(blockState);
|
||||
|
||||
|
@ -72,6 +72,10 @@ public class MiningManager extends SkillManager {
|
||||
return getSkillLevel() >= BlastMining.getBiggerBombsUnlockLevel() && Permissions.biggerBombs(getPlayer());
|
||||
}
|
||||
|
||||
public boolean canDoubleDrop() {
|
||||
return RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS) && Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process double drops & XP gain for Mining.
|
||||
*
|
||||
@ -82,16 +86,11 @@ public class MiningManager extends SkillManager {
|
||||
|
||||
applyXpGain(Mining.getBlockXp(blockState), XPGainReason.PVE);
|
||||
|
||||
if (!Permissions.isSubSkillEnabled(player, SubSkillType.MINING_DOUBLE_DROPS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mcMMOPlayer.getAbilityMode(skill.getSuperAbility())) {
|
||||
SkillUtils.handleDurabilityChange(getPlayer().getInventory().getItemInMainHand(), mcMMO.getConfigManager().getConfigSuperAbilities().getSuperAbilityLimits().getToolDurabilityDamage());
|
||||
}
|
||||
|
||||
//if ((mcMMO.getModManager().isCustomMiningBlock(blockState) && !mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) || !MainConfig.getInstance().getDoubleDropsEnabled(skill, material)) {
|
||||
if (!mcMMO.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType()))
|
||||
if (!canDoubleDrop() || !mcMMO.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType()))
|
||||
return;
|
||||
|
||||
boolean silkTouch = player.getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH);
|
||||
|
@ -136,17 +136,28 @@ public class SalvageManager extends SkillManager {
|
||||
return;
|
||||
}
|
||||
|
||||
Location anvilLoc = location.clone();
|
||||
Location playerLoc = player.getLocation().clone();
|
||||
double distance = anvilLoc.distance(playerLoc);
|
||||
|
||||
double speedLimit = .6;
|
||||
double minSpeed = .3;
|
||||
|
||||
//Clamp the speed and vary it by distance
|
||||
double vectorSpeed = Math.min(speedLimit, Math.max(minSpeed, distance * .2));
|
||||
|
||||
//Add a very small amount of height
|
||||
anvilLoc.add(0, .1, 0);
|
||||
|
||||
if (enchantBook != null) {
|
||||
Misc.dropItem(location, enchantBook);
|
||||
Misc.spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), enchantBook, vectorSpeed);
|
||||
}
|
||||
|
||||
Misc.spawnItemTowardsLocation(location, player.getLocation().add(0, 0.25, 0), salvageResults);
|
||||
Misc.spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), salvageResults, vectorSpeed);
|
||||
|
||||
// BWONG BWONG BWONG - CLUNK!
|
||||
if (mcMMO.getConfigManager().getConfigSalvage().getGeneral().isAnvilUseSounds()) {
|
||||
SoundManager.sendSound(player, player.getLocation(), SoundType.ITEM_BREAK);
|
||||
|
||||
//player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
mcMMO.getNotificationManager().sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Salvage.Skills.Success");
|
||||
|
@ -7,7 +7,6 @@ import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -29,23 +28,44 @@ public final class Woodcutting {
|
||||
protected static boolean treeFellerReachedThreshold = false;
|
||||
|
||||
private Woodcutting() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the experience reward from a log
|
||||
*
|
||||
* @param blockState Log being broken
|
||||
* @param experienceGainMethod How the log is being broken
|
||||
* @param blockState Log being broken
|
||||
* @return Amount of experience
|
||||
*/
|
||||
protected static int getExperienceFromLog(BlockState blockState, ExperienceGainMethod experienceGainMethod) {
|
||||
/*if (mcMMO.getModManager().isCustomLog(blockState)) {
|
||||
return mcMMO.getModManager().getBlock(blockState).getXpGain();
|
||||
}*/
|
||||
|
||||
protected static int getExperienceFromLog(BlockState blockState) {
|
||||
return mcMMO.getDynamicSettingsManager().getExperienceManager().getWoodcuttingXp(blockState.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the experience reward from logging via Tree Feller
|
||||
* Experience is reduced per log processed so far
|
||||
* Experience is only reduced if the config option to reduce Tree Feller XP is set
|
||||
* Experience per log will not fall below 1 unless the experience for that log is set to 0 in the config
|
||||
*
|
||||
* @param blockState Log being broken
|
||||
* @param woodCount how many logs have given out XP for this tree feller so far
|
||||
* @return Amount of experience
|
||||
*/
|
||||
protected static int processTreeFellerXPGains(BlockState blockState, int woodCount) {
|
||||
int rawXP = mcMMO.getDynamicSettingsManager().getExperienceManager().getWoodcuttingXp(blockState.getType());
|
||||
|
||||
if(rawXP <= 0)
|
||||
return 0;
|
||||
|
||||
if(mcMMO.getConfigManager().getConfigExperience().getExperienceWoodcutting().isReduceTreeFellerXP()) {
|
||||
int reducedXP = 1 + (woodCount * 5);
|
||||
rawXP = Math.max(1, rawXP - reducedXP);
|
||||
return rawXP;
|
||||
} else {
|
||||
return mcMMO.getDynamicSettingsManager().getExperienceManager().getWoodcuttingXp(blockState.getType());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for double drops
|
||||
*
|
||||
@ -136,9 +156,8 @@ public final class Woodcutting {
|
||||
* @return True if the tool can sustain the durability loss
|
||||
*/
|
||||
protected static boolean handleDurabilityLoss(Set<BlockState> treeFellerBlocks, ItemStack inHand) {
|
||||
|
||||
if((inHand.getItemMeta().getEnchants().get(Enchantment.DURABILITY) != null && inHand.getItemMeta().getEnchants().get(Enchantment.DURABILITY) >= 1)
|
||||
|| (inHand.getItemMeta() != null && inHand.getItemMeta().isUnbreakable())) {
|
||||
//Treat the NBT tag for unbreakable and the durability enchant differently
|
||||
if(inHand.getItemMeta() != null && inHand.getItemMeta().isUnbreakable()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.skills.woodcutting.Woodcutting.ExperienceGainMethod;
|
||||
import com.gmail.nossr50.util.*;
|
||||
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
||||
import com.gmail.nossr50.util.skills.CombatUtils;
|
||||
@ -52,7 +51,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
* @param blockState Block being broken
|
||||
*/
|
||||
public void woodcuttingBlockCheck(BlockState blockState) {
|
||||
int xp = Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.DEFAULT);
|
||||
int xp = Woodcutting.getExperienceFromLog(blockState);
|
||||
|
||||
switch (blockState.getType()) {
|
||||
case BROWN_MUSHROOM_BLOCK:
|
||||
@ -114,6 +113,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
private void dropBlocks(Set<BlockState> treeFellerBlocks) {
|
||||
Player player = getPlayer();
|
||||
int xp = 0;
|
||||
int processedLogCount = 0;
|
||||
|
||||
for (BlockState blockState : treeFellerBlocks) {
|
||||
Block block = blockState.getBlock();
|
||||
@ -124,30 +124,16 @@ public class WoodcuttingManager extends SkillManager {
|
||||
|
||||
Material material = blockState.getType();
|
||||
|
||||
//TODO: Update this to drop the correct items/blocks via NMS
|
||||
if (material == Material.BROWN_MUSHROOM_BLOCK || material == Material.RED_MUSHROOM_BLOCK) {
|
||||
xp += Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.TREE_FELLER);
|
||||
xp += Woodcutting.processTreeFellerXPGains(blockState, processedLogCount);
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}
|
||||
/*else if (mcMMO.getModManager().isCustomLog(blockState)) {
|
||||
if (canGetDoubleDrops()) {
|
||||
Woodcutting.checkForDoubleDrop(blockState);
|
||||
}
|
||||
|
||||
CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState);
|
||||
xp = customBlock.getXpGain();
|
||||
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}
|
||||
else if (mcMMO.getModManager().isCustomLeaf(blockState)) {
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}*/
|
||||
else {
|
||||
|
||||
} else {
|
||||
if (BlockUtils.isLog(blockState)) {
|
||||
if (canGetDoubleDrops()) {
|
||||
Woodcutting.checkForDoubleDrop(blockState);
|
||||
}
|
||||
xp += Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.TREE_FELLER);
|
||||
xp += Woodcutting.processTreeFellerXPGains(blockState, processedLogCount);
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}
|
||||
if (BlockUtils.isLeaves(blockState)) {
|
||||
@ -157,6 +143,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
|
||||
blockState.setType(Material.AIR);
|
||||
blockState.update(true);
|
||||
processedLogCount+=1;
|
||||
}
|
||||
|
||||
applyXpGain(xp, XPGainReason.PVE);
|
||||
|
@ -207,7 +207,7 @@ public class EventUtils {
|
||||
|
||||
}
|
||||
|
||||
public static boolean handleLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, double xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
|
||||
public static boolean tryLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
|
||||
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
@ -220,10 +220,10 @@ public class EventUtils {
|
||||
profile.addXp(skill, xpRemoved);
|
||||
}
|
||||
|
||||
return !isCancelled;
|
||||
return isCancelled;
|
||||
}
|
||||
|
||||
public static void handleLevelChangeEventEdit(Player player, PrimarySkillType skill, int levelsChanged, double xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
|
||||
public static boolean tryLevelEditEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
|
||||
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
@ -236,6 +236,7 @@ public class EventUtils {
|
||||
profile.addXp(skill, xpRemoved);
|
||||
}
|
||||
|
||||
return isCancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,40 +119,58 @@ public final class Misc {
|
||||
/**
|
||||
* Drop items at a given location.
|
||||
*
|
||||
* @param location The location to drop the items at
|
||||
* @param fromLocation The location to drop the items at
|
||||
* @param is The items to drop
|
||||
* @param speed the speed that the item should travel
|
||||
* @param quantity The amount of items to drop
|
||||
*/
|
||||
public static void spawnItemsTowardsLocation(Location location, Location targetLocation, ItemStack is, int quantity) {
|
||||
public static void spawnItemsTowardsLocation(Location fromLocation, Location toLocation, ItemStack is, int quantity, double speed) {
|
||||
for (int i = 0; i < quantity; i++) {
|
||||
spawnItemTowardsLocation(location, targetLocation, is);
|
||||
spawnItemTowardsLocation(fromLocation, toLocation, is, speed);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop an item at a given location.
|
||||
* This method is fairly expensive as it creates clones of everything passed to itself since they are mutable objects
|
||||
*
|
||||
* @param spawnLocation The location to drop the item at
|
||||
* @param itemStack The item to drop
|
||||
* @param fromLocation The location to drop the item at
|
||||
* @param toLocation The location the item will travel towards
|
||||
* @param itemToSpawn The item to spawn
|
||||
* @param speed the speed that the item should travel
|
||||
* @return Dropped Item entity or null if invalid or cancelled
|
||||
*/
|
||||
public static Item spawnItemTowardsLocation(Location spawnLocation, Location targetLocation, ItemStack itemStack) {
|
||||
if (itemStack.getType() == Material.AIR) {
|
||||
public static Item spawnItemTowardsLocation(Location fromLocation, Location toLocation, ItemStack itemToSpawn, double speed) {
|
||||
if (itemToSpawn.getType() == Material.AIR) {
|
||||
return null;
|
||||
}
|
||||
|
||||
//Work with fresh copies of everything
|
||||
ItemStack clonedItem = itemToSpawn.clone();
|
||||
Location spawnLocation = fromLocation.clone();
|
||||
Location targetLocation = toLocation.clone();
|
||||
|
||||
// We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event.
|
||||
McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(spawnLocation, itemStack);
|
||||
McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(spawnLocation, clonedItem);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) {
|
||||
//Something cancelled the event so back out
|
||||
if (event.isCancelled() || event.getItemStack() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Item item = spawnLocation.getWorld().dropItem(spawnLocation, itemStack);
|
||||
Vector vector = targetLocation.toVector().subtract(spawnLocation.toVector()).normalize();
|
||||
item.setVelocity(vector);
|
||||
return item;
|
||||
//Use the item from the event
|
||||
Item spawnedItem = spawnLocation.getWorld().dropItem(spawnLocation, clonedItem);
|
||||
Vector vecFrom = spawnLocation.clone().toVector().clone();
|
||||
Vector vecTo = targetLocation.clone().toVector().clone();
|
||||
|
||||
//Vector which is pointing towards out target location
|
||||
Vector direction = vecTo.subtract(vecFrom).normalize();
|
||||
|
||||
//Modify the speed of the vector
|
||||
direction = direction.multiply(speed);
|
||||
spawnedItem.setVelocity(direction);
|
||||
return spawnedItem;
|
||||
}
|
||||
|
||||
public static void profileCleanup(String playerName) {
|
||||
|
@ -64,7 +64,7 @@ public class FormulaManager {
|
||||
public int[] calculateNewLevel(PrimarySkillType primarySkillType, int experience) {
|
||||
int newLevel = 0;
|
||||
int remainder = 0;
|
||||
int maxLevel = mcMMO.getConfigManager().getConfigLeveling().getLevelCap(primarySkillType);
|
||||
int maxLevel = mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(primarySkillType);
|
||||
|
||||
while (experience > 0 && newLevel < maxLevel) {
|
||||
int experienceToNextLevel = getXPtoNextLevel(newLevel, currentFormula);
|
||||
|
@ -8,17 +8,13 @@ import com.gmail.nossr50.util.Permissions;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class PlayerLevelUtils {
|
||||
private HashMap<PrimarySkillType, Integer> earlyGameBoostCutoffs;
|
||||
private HashSet<CustomXPPerk> customXpPerkNodes;
|
||||
|
||||
public PlayerLevelUtils() {
|
||||
registerCustomPerkPermissions();
|
||||
earlyGameBoostCutoffs = new HashMap<>();
|
||||
calculateEarlyGameBoostCutoffs();
|
||||
applyConfigPerks();
|
||||
}
|
||||
|
||||
@ -38,29 +34,14 @@ public class PlayerLevelUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the the final level at which players will still receive an early game XP boost
|
||||
* Note: This doesn't mean early game boosts are enabled on the server, as that is a config toggle
|
||||
*
|
||||
* Check if a player is currently qualifying for the early game boosted XP
|
||||
* Will return false only if a player is above the boost level cutoff, it does not check config settings to see if the early game boost is on
|
||||
* @param mcMMOPlayer target player
|
||||
* @param primarySkillType target skill
|
||||
* @return this skills maximum early game boost level
|
||||
* @return if the player would qualify for the XP boost if its enabled
|
||||
*/
|
||||
public int getEarlyGameCutoff(PrimarySkillType primarySkillType) {
|
||||
return earlyGameBoostCutoffs.get(primarySkillType);
|
||||
}
|
||||
|
||||
private void calculateEarlyGameBoostCutoffs() {
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
int levelCap = mcMMO.getConfigManager().getConfigLeveling().getLevelCap(primarySkillType);
|
||||
int cap;
|
||||
|
||||
if (levelCap == Integer.MAX_VALUE || levelCap <= 0) {
|
||||
cap = mcMMO.isRetroModeEnabled() ? 50 : 5;
|
||||
} else {
|
||||
cap = (int) (levelCap * mcMMO.getConfigManager().getConfigLeveling().getEarlyGameBoostMultiplier());
|
||||
}
|
||||
|
||||
earlyGameBoostCutoffs.put(primarySkillType, cap);
|
||||
}
|
||||
public static boolean qualifiesForEarlyGameBoost(McMMOPlayer mcMMOPlayer, PrimarySkillType primarySkillType) {
|
||||
return mcMMOPlayer.getSkillLevel(primarySkillType) < 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,15 +112,4 @@ public class PlayerLevelUtils {
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a player is currently qualifying for the early game boosted XP
|
||||
* Will return false only if a player is above the boost level cutoff, it does not check config settings to see if the early game boost is on
|
||||
* @param mcMMOPlayer target player
|
||||
* @param primarySkillType target skill
|
||||
* @return if the player would qualify for the XP boost if its enabled
|
||||
*/
|
||||
public static boolean qualifiesForEarlyGameBoost(McMMOPlayer mcMMOPlayer, PrimarySkillType primarySkillType) {
|
||||
return mcMMOPlayer.getSkillLevel(primarySkillType) < mcMMO.getPlayerLevelUtils().getEarlyGameCutoff(primarySkillType);
|
||||
}
|
||||
}
|
||||
|
@ -225,9 +225,13 @@ public final class CombatUtils {
|
||||
}
|
||||
|
||||
double distanceMultiplier = archeryManager.distanceXpBonusMultiplier(target, arrow);
|
||||
double forceMultiplier = 1.0; //Hacky Fix - some plugins spawn arrows and assign them to players after the ProjectileLaunchEvent fires
|
||||
|
||||
if(arrow.hasMetadata(MetadataConstants.BOW_FORCE_METAKEY))
|
||||
forceMultiplier = arrow.getMetadata(MetadataConstants.BOW_FORCE_METAKEY).get(0).asDouble();
|
||||
|
||||
applyScaledModifiers(initialDamage, finalDamage, event);
|
||||
startGainXp(mcMMOPlayer, target, PrimarySkillType.ARCHERY, arrow.getMetadata(MetadataConstants.BOW_FORCE_METAKEY).get(0).asDouble() * distanceMultiplier);
|
||||
startGainXp(mcMMOPlayer, target, PrimarySkillType.ARCHERY, forceMultiplier * distanceMultiplier);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -399,7 +399,7 @@ public class RankUtils {
|
||||
}
|
||||
|
||||
//Default to the max level for the skill if any errors were encountered incorrect
|
||||
return mcMMO.getConfigManager().getConfigLeveling().getLevelCap(subSkillType.getParentSkill());
|
||||
return mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(subSkillType.getParentSkill());
|
||||
}
|
||||
|
||||
public static boolean isPlayerMaxRankInSubSkill(Player player, SubSkillType subSkillType) {
|
||||
|
@ -253,8 +253,7 @@ public class SkillUtils {
|
||||
* @param maxDamageModifier the amount to adjust the max damage by
|
||||
*/
|
||||
public static void handleDurabilityChange(ItemStack itemStack, double durabilityModifier, double maxDamageModifier) {
|
||||
if((itemStack.getItemMeta().getEnchants().get(Enchantment.DURABILITY) != null && itemStack.getItemMeta().getEnchants().get(Enchantment.DURABILITY) >= 1)
|
||||
|| (itemStack.getItemMeta() != null && itemStack.getItemMeta().isUnbreakable())) {
|
||||
if(itemStack.getItemMeta() != null && itemStack.getItemMeta().isUnbreakable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,6 @@ import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
@ -14,31 +13,18 @@ import org.bukkit.plugin.Plugin;
|
||||
import static org.bukkit.Bukkit.getServer;
|
||||
|
||||
public class WorldGuardManager {
|
||||
private static WorldGuardManager instance;
|
||||
private WorldGuardPlugin worldGuardPluginRef;
|
||||
|
||||
public WorldGuardManager() {
|
||||
|
||||
}
|
||||
|
||||
public static WorldGuardManager getInstance() {
|
||||
if (instance == null)
|
||||
instance = new WorldGuardManager();
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
public boolean hasMainFlag(Player player) {
|
||||
if (player == null)
|
||||
public boolean hasMainFlag(Player player)
|
||||
{
|
||||
if(player == null)
|
||||
return false;
|
||||
|
||||
BukkitPlayer localPlayer = BukkitAdapter.adapt(player);
|
||||
com.sk89q.worldedit.util.Location loc = localPlayer.getLocation();
|
||||
|
||||
|
||||
//WorldGuardPlugin worldGuard = getWorldGuard();
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
|
||||
|
||||
//ApplicableRegionSet set = query.getApplicableRegions(loc);
|
||||
|
||||
@ -53,8 +39,7 @@ public class WorldGuardManager {
|
||||
com.sk89q.worldedit.util.Location loc = localPlayer.getLocation();
|
||||
|
||||
//WorldGuardPlugin worldGuard = getWorldGuard();
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
|
||||
|
||||
//ApplicableRegionSet set = query.getApplicableRegions(loc);
|
||||
|
||||
@ -70,8 +55,7 @@ public class WorldGuardManager {
|
||||
com.sk89q.worldedit.util.Location loc = localPlayer.getLocation();
|
||||
|
||||
//WorldGuardPlugin worldGuard = getWorldGuard();
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
|
||||
|
||||
//ApplicableRegionSet set = query.getApplicableRegions(loc);
|
||||
|
||||
@ -90,15 +74,12 @@ public class WorldGuardManager {
|
||||
return worldGuardPluginRef;
|
||||
}
|
||||
|
||||
public void registerFlags() {
|
||||
if (getWorldGuard() == null)
|
||||
return;
|
||||
|
||||
public void registerFlags()
|
||||
{
|
||||
FlagRegistry registry = WorldGuard.getInstance().getFlagRegistry();
|
||||
|
||||
try {
|
||||
// register our flag with the registry
|
||||
/*registry.register(WorldGuardFlags.MCMMO_ENABLE_WG_FLAG);
|
||||
registry.register(WorldGuardFlags.MCMMO_XP_WG_FLAG);*/
|
||||
registry.register(WorldGuardFlags.MCMMO_ENABLE_WG_FLAG);
|
||||
registry.register(WorldGuardFlags.MCMMO_XP_WG_FLAG);
|
||||
registry.register(WorldGuardFlags.MCMMO_HARDCORE_WG_FLAG);
|
||||
@ -113,5 +94,4 @@ public class WorldGuardManager {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -4,53 +4,122 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.bukkit.Bukkit.getServer;
|
||||
|
||||
public class WorldGuardUtils {
|
||||
private static WorldGuardPlugin worldGuardPluginRef;
|
||||
private static boolean isLoaded = false;
|
||||
private static boolean hasWarned = false;
|
||||
private static boolean detectedIncompatibleWG = false;
|
||||
private static final ArrayList<String> WGClassList;
|
||||
|
||||
public static boolean isWorldGuardLoaded() {
|
||||
WorldGuardPlugin plugin = getWorldGuard();
|
||||
static {
|
||||
/*
|
||||
These are the classes mcMMO tries to hook into for WG support, if any of them are missing it is safe to consider WG is not compatible
|
||||
com.sk89q.worldedit.bukkit.BukkitAdapter
|
||||
com.sk89q.worldedit.bukkit.BukkitPlayer
|
||||
com.sk89q.worldguard.WorldGuard
|
||||
com.sk89q.worldguard.bukkit.WorldGuardPlugin
|
||||
com.sk89q.worldguard.protection.flags.registry.FlagConflictException
|
||||
com.sk89q.worldguard.protection.flags.registry.FlagRegistry
|
||||
com.sk89q.worldguard.protection.regions.RegionContainer
|
||||
com.sk89q.worldguard.protection.regions.RegionQuery
|
||||
*/
|
||||
|
||||
try {
|
||||
// WorldGuard may not be loaded
|
||||
if (plugin == null) {
|
||||
return false; // Maybe you want throw an exception instead
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
//Silently Fail
|
||||
//mcMMO.p.getLogger().severe("Failed to detect worldguard.");
|
||||
WGClassList = new ArrayList<>();
|
||||
WGClassList.add("com.sk89q.worldedit.bukkit.BukkitAdapter");
|
||||
WGClassList.add("com.sk89q.worldedit.bukkit.BukkitPlayer");
|
||||
WGClassList.add("com.sk89q.worldguard.WorldGuard");
|
||||
WGClassList.add("com.sk89q.worldguard.bukkit.WorldGuardPlugin");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.flags.registry.FlagConflictException");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.flags.registry.FlagRegistry");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.regions.RegionContainer");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.regions.RegionQuery");
|
||||
}
|
||||
|
||||
public static boolean isWorldGuardLoaded()
|
||||
{
|
||||
if(detectedIncompatibleWG)
|
||||
return false;
|
||||
|
||||
worldGuardPluginRef = getWorldGuard();
|
||||
|
||||
return isLoaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the instance of the WG plugin if its compatible
|
||||
* Results are cached
|
||||
* @return the instance of WG plugin, null if its not compatible or isn't present
|
||||
*/
|
||||
private static WorldGuardPlugin getWorldGuard()
|
||||
{
|
||||
//WG plugin reference is already cached so just return it
|
||||
if(isLoaded)
|
||||
return worldGuardPluginRef;
|
||||
|
||||
//Grab WG if it exists
|
||||
Plugin plugin = getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
if(plugin == null) {
|
||||
//WG is not present
|
||||
detectedIncompatibleWG = true;
|
||||
mcMMO.p.getLogger().info("WorldGuard was not detected.");
|
||||
} else {
|
||||
//Check that its actually of class WorldGuardPlugin
|
||||
if(plugin instanceof WorldGuardPlugin)
|
||||
{
|
||||
if(isCompatibleVersion(plugin))
|
||||
{
|
||||
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
||||
isLoaded = true;
|
||||
}
|
||||
} else {
|
||||
//Plugin is not of the expected type
|
||||
markWGIncompatible();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
return worldGuardPluginRef;
|
||||
}
|
||||
|
||||
private static WorldGuardPlugin getWorldGuard() {
|
||||
if (isLoaded)
|
||||
return worldGuardPluginRef;
|
||||
|
||||
Plugin plugin = getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
if (plugin instanceof WorldGuardPlugin) {
|
||||
if (plugin.getDescription().getVersion().startsWith("7")) {
|
||||
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
||||
|
||||
if (worldGuardPluginRef != null)
|
||||
isLoaded = true;
|
||||
|
||||
} else {
|
||||
if (!hasWarned) {
|
||||
mcMMO.p.getLogger().severe("mcMMO only supports WorldGuard version 7! Make sure you have WG 7! This warning will not appear again.");
|
||||
hasWarned = true;
|
||||
/**
|
||||
* Checks to make sure the version of WG installed is compatible
|
||||
* Does this by checking for necessary WG classes via Reflection
|
||||
* This does not guarantee compatibility, but it should help reduce the chance that mcMMO tries to hook into WG and its not compatible
|
||||
* @return true if the version of WG appears to be compatible
|
||||
*/
|
||||
private static boolean isCompatibleVersion(Plugin plugin) {
|
||||
//Check that the version of WG is at least version 7.xx
|
||||
if(!plugin.getDescription().getVersion().startsWith("7")) {
|
||||
markWGIncompatible();
|
||||
} else {
|
||||
//Use Reflection to check for a class not present in all versions of WG7
|
||||
for(String classString : WGClassList) {
|
||||
try {
|
||||
Class<?> checkForClass = Class.forName(classString);
|
||||
detectedIncompatibleWG = false; //In case this was set to true previously
|
||||
} catch (ClassNotFoundException e) {
|
||||
mcMMO.p.getLogger().severe("Missing WorldGuard class - "+classString);
|
||||
markWGIncompatible();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return worldGuardPluginRef;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark WG as being incompatible to avoid unnecessary operations
|
||||
*/
|
||||
private static void markWGIncompatible() {
|
||||
mcMMO.p.getLogger().severe("You are using a version of WG that is not compatible with mcMMO, " +
|
||||
"WG features for mcMMO will be disabled. mcMMO requires you to be using a new version of WG7 " +
|
||||
"in order for it to use WG features. Not all versions of WG7 are compatible.");
|
||||
mcMMO.p.getLogger().severe("mcMMO will continue to function normally, but if you wish to use WG support you must use a compatible version.");
|
||||
detectedIncompatibleWG = true;
|
||||
}
|
||||
}
|
||||
|
@ -74,13 +74,14 @@ Feedback:
|
||||
SendCopyOfMessageToChat: true
|
||||
Skills:
|
||||
General:
|
||||
StartingLevel: 0
|
||||
Ability:
|
||||
Length:
|
||||
Standard:
|
||||
CapLevel: 50
|
||||
CapLevel: 100
|
||||
IncreaseLevel: 5
|
||||
RetroMode:
|
||||
CapLevel: 500
|
||||
CapLevel: 1000
|
||||
IncreaseLevel: 50
|
||||
EnchantBuff: 5
|
||||
# IncreaseLevel: This setting will determine when the length of every ability gets longer with 1 second
|
||||
|
@ -11,7 +11,7 @@ General:
|
||||
# Everything in your config related to skill level requirements, skill level bonuses, etc will be multiplied by 10 when this mode is on
|
||||
# This change is purely cosmetic, it retains the old feel of mcMMO where you could level up thousands of times
|
||||
RetroMode:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
Locale: en_US
|
||||
AprilFoolsEvent: true
|
||||
MOTD_Enabled: true
|
||||
|
@ -23,8 +23,6 @@
|
||||
# The bar is one solid piece
|
||||
EarlyGameBoost:
|
||||
Enabled: true
|
||||
#Used to determine the cap of the max boot, with default level cap it will be 5 on standard, and 50 on retro
|
||||
MaxLevelMultiplier: 0.05
|
||||
ExploitFix:
|
||||
UnsafeEnchantments: false
|
||||
# Prevent many exploits related to fishing
|
||||
@ -32,6 +30,7 @@ ExploitFix:
|
||||
EndermanEndermiteFarms: true
|
||||
Acrobatics: true
|
||||
LavaStoneAndCobbleFarming: true
|
||||
TreeFellerReducedXP: true
|
||||
Experience_Bars:
|
||||
# Turn this to false if you wanna disable XP bars
|
||||
Enable: true
|
||||
@ -354,24 +353,24 @@ Experience_Values:
|
||||
Bubble_Coral_Block: 70
|
||||
Fire_Coral_Block: 90
|
||||
Horn_Coral_Block: 125
|
||||
Coal_Ore: 100
|
||||
Diamond_Ore: 750
|
||||
Coal_Ore: 400
|
||||
Diamond_Ore: 2400
|
||||
Emerald_Ore: 1000
|
||||
End_Bricks: 200
|
||||
End_Bricks: 50
|
||||
Nether_Brick: 50
|
||||
End_Stone: 30
|
||||
Glowstone: 30
|
||||
Gold_Ore: 350
|
||||
End_Stone: 15
|
||||
Glowstone: 15
|
||||
Gold_Ore: 1300
|
||||
Terracotta: 30
|
||||
Iron_Ore: 250
|
||||
Lapis_Ore: 400
|
||||
Iron_Ore: 900
|
||||
Lapis_Ore: 800
|
||||
Mossy_Cobblestone: 30
|
||||
Netherrack: 30
|
||||
Netherrack: 15
|
||||
Obsidian: 150
|
||||
Packed_Ice: 50
|
||||
Blue_Ice: 100
|
||||
Nether_Quartz_Ore: 100
|
||||
Redstone_Ore: 150
|
||||
Packed_Ice: 15
|
||||
Blue_Ice: 15
|
||||
Nether_Quartz_Ore: 300
|
||||
Redstone_Ore: 600
|
||||
Sandstone: 30
|
||||
Black_Terracotta: 50
|
||||
Blue_Terracotta: 50
|
||||
@ -389,10 +388,10 @@ Experience_Values:
|
||||
Red_Terracotta: 50
|
||||
White_Terracotta: 50
|
||||
Yellow_Terracotta: 50
|
||||
Stone: 30
|
||||
Granite: 30
|
||||
Andesite: 30
|
||||
Diorite: 30
|
||||
Stone: 15
|
||||
Granite: 15
|
||||
Andesite: 15
|
||||
Diorite: 15
|
||||
Stone_Bricks: 50
|
||||
Cracked_Stone_Bricks: 50
|
||||
Mossy_Stone_Bricks: 50
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -210,7 +210,9 @@ Excavation.SubSkill.GigaDrillBreaker.Name=Giga Drill Breaker
|
||||
Excavation.SubSkill.GigaDrillBreaker.Description=3x Drop Rate, 3x EXP, +Speed
|
||||
Excavation.SubSkill.GigaDrillBreaker.Stat=Giga Drill Breaker Duration
|
||||
Excavation.SubSkill.Archaeology.Name=Archaeology
|
||||
Excavation.SubSkill.Archaeology.Description=Unearth the secrets of the land!
|
||||
Excavation.SubSkill.Archaeology.Description=Unearth the secrets of the land! High skill levels increase your odds of finding experience orbs when you find treasure!
|
||||
Excavation.SubSkill.Archaeology.Stat=Archaelogy Experience Orb Chance
|
||||
Excavation.SubSkill.Archaeology.Stat.Extra=Archaeoloy Experience Orb Amount
|
||||
Excavation.Listener=Excavation:
|
||||
Excavation.SkillName=EXCAVATION
|
||||
Excavation.Skills.GigaDrillBreaker.Off=**Giga Drill Breaker has worn off**
|
||||
@ -243,7 +245,7 @@ Fishing.SubSkill.FishermansDiet.Description=Improves hunger restored from fished
|
||||
Fishing.SubSkill.FishermansDiet.Stat=Fisherman's Diet:[[GREEN]] Rank {0}
|
||||
Fishing.SubSkill.MasterAngler.Name=Master Angler
|
||||
Fishing.SubSkill.MasterAngler.Description=Improves chance of getting a bite while fishing
|
||||
Fishing.SubSkill.MasterAngler.Stat=Added Bite Chance at your current location: [[GREEN]]+[[YELLOW]]{0}
|
||||
Fishing.SubSkill.MasterAngler.Stat=Added Bite Chance at your current location: [[GREEN]]+{0}
|
||||
Fishing.SubSkill.IceFishing.Name=Ice Fishing
|
||||
Fishing.SubSkill.IceFishing.Description=Allows you to fish in icy biomes
|
||||
Fishing.SubSkill.IceFishing.Stat=Ice Fishing
|
||||
@ -1094,4 +1096,8 @@ Reminder.Squelched=[[GRAY]]Reminder: You are currently not receiving notificatio
|
||||
#Misc
|
||||
Commands.Reload.Start=mcMMO is reloading... this may take a moment
|
||||
Commands.Reload.Finished=mcMMO has finished reloading!
|
||||
#Locale
|
||||
Locale.Reloaded=[[GREEN]]Locale reloaded!
|
||||
#Player Leveling Stuff
|
||||
LevelCap.PowerLevel=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[YELLOW]]You have reached the power level cap of [[RED]]{0}[[YELLOW]]. You will cease to level in skills from this point on.
|
||||
LevelCap.Skill=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[YELLOW]]You have reached the level cap of [[RED]]{0}[[YELLOW]] for [[GOLD]]{1}[[YELLOW]]. You will cease to level in this skill from this point on.
|
||||
|
@ -364,8 +364,6 @@ Repair.Arcane.Perfect=[[GREEN]]\u3042\u306a\u305f\u306f\u3053\u306e\u30a2\u30a4\
|
||||
Salvage.Pretty.Name=\u30b5\u30eb\u30d9\u30fc\u30b8
|
||||
Salvage.SubSkill.UnderstandingTheArt.Name=\u82b8\u8853\u3092\u7406\u89e3\u3059\u308b\u3002
|
||||
Salvage.SubSkill.UnderstandingTheArt.Description=\u3042\u306a\u305f\u306f\u305f\u3060\u3042\u306a\u305f\u306e\u96a3\u4eba\u306e\u30b4\u30df\u3092\u6398\u308a\u4e0b\u3052\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u3042\u306a\u305f\u306f\u74b0\u5883\u306e\u4e16\u8a71\u3092\u3057\u3066\u3044\u307e\u3059\u3002\n\u30b5\u30eb\u30d9\u30fc\u30b8\u306e\u69d8\u3005\u306a\u7279\u6027\u3092\u5f15\u304d\u51fa\u3059\u3002
|
||||
Salvage.SubSkill.AdvancedSalvage.Name=\u9ad8\u5ea6\u306a\u30b5\u30eb\u30d9\u30fc\u30b8
|
||||
Salvage.SubSkill.AdvancedSalvage.Description=\u8010\u4e45\u5024\u306e\u6e1b\u3063\u305f\u30a2\u30a4\u30c6\u30e0\u3092\u30b5\u30eb\u30d9\u30fc\u30b8\u3059\u308b\u3002
|
||||
Salvage.SubSkill.ScrapCollector.Name=\u30b9\u30af\u30e9\u30c3\u30d7\u30b3\u30ec\u30af\u30bf\u30fc
|
||||
Salvage.SubSkill.ScrapCollector.Description=\u30b5\u30eb\u30d9\u30fc\u30b8\u306b\u3088\u308b\u30a2\u30a4\u30c6\u30e0\u304b\u3089\u306e\u7d20\u6750\u56de\u53ce\u3001\u5b8c\u74a7\u306a\u30b5\u30eb\u30d9\u30fc\u30b8\u306f\u30b9\u30ad\u30eb\u3068\u904b\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
|
||||
Salvage.SubSkill.ScrapCollector.Stat=\u30b9\u30af\u30e9\u30c3\u30d7\u30b3\u30ec\u30af\u30bf\u30fc: [[GREEN]]\u6700\u5927[[YELLOW]]{0}\u500b[[GREEN]]\u306e\u30a2\u30a4\u30c6\u30e0\u3092\u30b5\u30eb\u30d9\u30fc\u30b8\u3002\u904b\u304c\u95a2\u4fc2\u3057\u3066\u3044\u307e\u3059\u3002
|
||||
@ -386,6 +384,10 @@ Salvage.Skills.ArcaneSuccess=[[GREEN]]\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306b
|
||||
Salvage.Listener.Anvil=[[DARK_RED]]\u3042\u306a\u305f\u306f\u30b5\u30eb\u30d9\u30fc\u30b8\u30a2\u30f3\u30d3\u30eb\u3092\u8a2d\u7f6e\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3092\u30c4\u30fc\u30eb\u3068\u9632\u5177\u306e\u30b5\u30eb\u30d9\u30fc\u30b8\u306b\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
Salvage.Listener=\u30b5\u30eb\u30d9\u30fc\u30b8:
|
||||
Salvage.SkillName=\u30b5\u30eb\u30d9\u30fc\u30b8
|
||||
Salvage.Skills.Lottery.Normal=[[YELLOW]]{1}[[GOLD]]\u304b\u3089[[DARK_AQUA]]{0}[[GOLD]]\u306e\u7d20\u6750\u3092\u56de\u53ce\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002
|
||||
Salvage.Skills.Lottery.Perfect=[[GREEN]][[BOLD]]\u30d1\u30fc\u30d5\u30a7\u30af\u30c8\uff01[[RESET]][[GOLD]] \u3042\u306a\u305f\u306f [[DARK_AQUA]]{1}[[GOLD]]\u3092\u30b5\u30eb\u30d9\u30fc\u30b8\u3057\u3001[[DARK_AQUA]]{0}[[GOLD]]\u500b\u306e\u7d20\u6750\u3092\u56de\u53ce\u3057\u307e\u3057\u305f\u3002
|
||||
Salvage.Skills.Lottery.Untrained=[[GRAY]]\u3042\u306a\u305f\u306f\u30b5\u30eb\u30d9\u30fc\u30b8\u3092\u6b63\u3057\u304f\u8a13\u7df4\u3067\u304d\u3066\u3044\u307e\u305b\u3093\u3002 [[GREEN]]{1}[[GRAY]]\u304b\u3089[[RED]]{0}[[GRAY]]\u500b\u306e\u7d20\u6750\u3057\u304b\u56de\u53ce\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
|
||||
|
||||
|
||||
#Anvil (Shared between SALVAGE and REPAIR)
|
||||
Anvil.Unbreakable=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306f\u58ca\u308c\u307e\u305b\u3093\uff01
|
||||
@ -659,6 +661,18 @@ Commands.Event.XP=[[DARK_AQUA]]XP\u30ec\u30fc\u30c8\u306f\u73fe\u5728[[GOLD]]{0}
|
||||
Commands.xprate.started.0=[[GOLD]]mcMMO\u306eXP\u30a4\u30d9\u30f3\u30c8\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff01
|
||||
Commands.xprate.started.1=[[GOLD]]mcMMO\u306eXP\u30ec\u30fc\u30c8\u306f3\u500d\u306b\u306a\u308a\u307e\u3057\u305f\uff01
|
||||
|
||||
# Admin Notifications
|
||||
Server.ConsoleName=[[YELLOW]][Server]
|
||||
Notifications.Admin.XPRate.Start.Self=[[GRAY]]\u3042\u306a\u305f\u306f[[GOLD]]{0}x[[GRAY]]\u306b\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Self=[[GRAY]]XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Others={0}[[GRAY]]\u306fXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.XPRate.Start.Others={0}[[GRAY]]\u304c{1}x\u3067\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u59cb\u307e\u305f\u306f\u5909\u66f4\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.Format.Others=[[GOLD]]([[GREEN]]mcMMO [[DARK_AQUA]]\u7ba1\u7406\u8005[[GOLD]]) [[GRAY]]{0}
|
||||
Notifications.Admin.Format.Self=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[GRAY]]{0}
|
||||
|
||||
# Event
|
||||
XPRate.Event=[[GOLD]]mcMMO\u306f\u73fe\u5728XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u4e2d\u3067\u3059\uff01XP\u30ec\u30fc\u30c8\u306f{0}x\u3067\u3059\uff01
|
||||
|
||||
#GUIDES
|
||||
Guides.Available=[[GRAY]]\u5229\u7528\u53ef\u80fd\u306a{0}\u306e\u30ac\u30a4\u30c9 - \/{1} ? [\u30da\u30fc\u30b8]
|
||||
Guides.Header=[[GOLD]]-=[[GREEN]]{0} \u30ac\u30a4\u30c9[[GOLD]]=-
|
||||
@ -762,20 +776,42 @@ Guides.Woodcutting.Section.1=[[DARK_AQUA]]How does Tree Feller work?\n[[YELLOW]]
|
||||
Guides.Woodcutting.Section.2=[[DARK_AQUA]]How does Leaf Blower work?\n[[YELLOW]]Leaf Blower is a passive ability that will cause leaf\n[[YELLOW]]blocks to break instantly when hit with an axe. By default,\n[[YELLOW]]this ability unlocks at level 100.
|
||||
Guides.Woodcutting.Section.3=[[DARK_AQUA]]How do Double Drops work?\n[[YELLOW]]This passive ability gives you a chance to obtain an extra\n[[YELLOW]]block for every log you chop.
|
||||
|
||||
#INSPECT
|
||||
Inspect.Offline= [[RED]]\u3042\u306a\u305f\u306f\u30aa\u30d5\u30e9\u30a4\u30f3\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8abf\u3079\u308b\u6a29\u9650\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\uff01
|
||||
Inspect.OfflineStats=\u30aa\u30d5\u30e9\u30a4\u30f3\u30d7\u30ec\u30fc\u30e4\u30fc\u306emcMMO\u7d71\u8a08[[YELLOW]]{0}
|
||||
Inspect.Stats=[[YELLOW]]{0}[[GREEN]]\u306emcMMO\u7d71\u8a08
|
||||
Inspect.TooFar=\u305d\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8abf\u3079\u308b\u306b\u306f\u9060\u3059\u304e\u307e\u3059\uff01
|
||||
|
||||
#ITEMS
|
||||
Item.ChimaeraWing.Fail=[[RED]]**\u30ad\u30e1\u30e9\u306e\u7ffc \u5931\u6557\uff01**
|
||||
Item.ChimaeraWing.Pass=**\u30ad\u30e1\u30e9\u306e\u7ffc**
|
||||
Item.ChimaeraWing.Name=\u30ad\u30e1\u30e9\u306e\u7ffc
|
||||
Item.ChimaeraWing.Lore=[[GRAY]]\u3042\u306a\u305f\u3092\u30d9\u30c3\u30c9\u306b\u30c6\u30ec\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002
|
||||
|
||||
#TELEPORTATION
|
||||
Teleport.Commencing=[[GOLD]]({0})[[GREY]]\u79d2\u3067\u30c6\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u59cb\u3057\u3066\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
|
||||
Teleport.Cancelled=[[DARK_RED]]\u30c6\u30ec\u30dd\u30fc\u30c8\u306f\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002
|
||||
|
||||
#SKILLS
|
||||
Skills.Child=[[GOLD]](\u5b50\u30b9\u30ad\u30eb)
|
||||
Skills.Disarmed=[[DARK_RED]]\u3042\u306a\u305f\u306f\u6b66\u88c5\u89e3\u9664\u3055\u308c\u307e\u3057\u305f\uff01
|
||||
Skills.Header=-----[] [[GREEN]]{0}[[RED]] []-----
|
||||
Skills.NeedMore=[[DARK_RED]]\u3082\u3063\u3068[[GRAY]]{0}[[DARK_RED]]\u304c\u5fc5\u8981\u3067\u3059
|
||||
Skills.NeedMore.Extra=[[DARK_RED]]\u3082\u3063\u3068[[GRAY]]{0}{1}[[DARK_RED]]\u304c\u5fc5\u8981\u3067\u3059
|
||||
Skills.Parents= PARENTS
|
||||
Skills.Stats={0}[[GREEN]]{1}[[DARK_AQUA]] XP([[GRAY]]{2}[[DARK_AQUA]]/[[GRAY]]{3}[[DARK_AQUA]])
|
||||
Skills.ChildStats={0}[[GREEN]]{1}
|
||||
Skills.TooTired=\u305d\u306e\u30a2\u30d3\u30ea\u30c6\u30a3\u3092\u518d\u3073\u4f7f\u3046\u306e\u306b\u306f\u98fd\u304d\u904e\u304e\u3066\u3044\u307e\u3059\u3002 [[YELLOW]]({0}\u79d2)
|
||||
Skills.Cancelled=[[GOLD]]{0} [[RED]]\u30ad\u30e3\u30f3\u30bb\u30eb\uff01
|
||||
Skills.ConfirmOrCancel=[[GREEN]]\u3082\u3046\u4e00\u5ea6\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066[[GOLD]]{0}[[GREEN]]\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u306b\u306f\u5de6\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
Skills.AbilityGateRequirementFail=[[GRAY]]\u3053\u306e\u30a2\u30d3\u30ea\u30c6\u30a3\u3092\u4f7f\u3046\u305f\u3081\u306b\u306f[[YELLOW]]{0}[[GRAY]]\u30ec\u30d9\u30eb\u306e[[DARK_AQUA]]{1}[[GRAY]]\u304c\u5fc5\u8981\u3067\u3059\u3002
|
||||
|
||||
#STATISTICS
|
||||
Stats.Header.Combat=[[GOLD]]-=\u30b3\u30f3\u30d0\u30c3\u30c8\u30b9\u30ad\u30eb=-
|
||||
Stats.Header.Gathering=[[GOLD]]-=\u53ce\u96c6\u30b9\u30ad\u30eb=-
|
||||
Stats.Header.Misc=[[GOLD]]-=\u305d\u306e\u4ed6\u306e\u30b9\u30ad\u30eb=-
|
||||
Stats.Own.Stats=[[GREEN]][mcMMO] \u7d71\u8a08
|
||||
|
||||
#PERKS
|
||||
Perks.XP.Name=\u7d4c\u9a13
|
||||
Perks.XP.Desc=\u7279\u5b9a\u306e\u30b9\u30ad\u30eb\u306e\u30d6\u30fc\u30b9\u30c8XP\u3092\u53d7\u3051\u53d6\u308b\u3002
|
||||
@ -783,6 +819,15 @@ Perks.Lucky.Name=\u30e9\u30c3\u30af
|
||||
Perks.Lucky.Desc={0}\u306e\u30b9\u30ad\u30eb\u3068\u80fd\u529b\u306b\u300133.3\uff05\u306e\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8\u306e\u78ba\u7387\u3092\u4e0e\u3048\u307e\u3059\u3002
|
||||
Perks.Lucky.Desc.Login=\u7279\u5b9a\u306e\u30b9\u30ad\u30eb\u3084\u80fd\u529b\u306b33.3\uff05\u306e\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8\u306e\u78ba\u7387\u3092\u4e0e\u3048\u308b\u3002
|
||||
|
||||
#MOTD
|
||||
MOTD.Donate=[[DARK_AQUA]]\u5bc4\u4ed8\u60c5\u5831:
|
||||
MOTD.Hardcore.Enabled=[[GOLD]][mcMMO] [[DARK_AQUA]]\u30cf\u30fc\u30c9\u30b3\u30a2\u30e2\u30fc\u30c9\u6709\u52b9: [[DARK_RED]]{0}
|
||||
MOTD.Hardcore.DeathStatLoss.Stats=[[GOLD]][mcMMO] [[DARK_AQUA]]\u30b9\u30ad\u30eb\u30c7\u30b9\u30da\u30ca\u30eb\u30c6\u30a3: [[DARK_RED]]{0}%
|
||||
MOTD.Hardcore.Vampirism.Stats=[[GOLD]][mcMMO] [[DARK_AQUA]]\u30f4\u30a1\u30f3\u30d1\u30a4\u30a2\u5438\u8840\u7d71\u8a08: [[DARK_RED]]{0}%
|
||||
MOTD.PerksPrefix=[[GOLD]][mcMMO \u30d1\u30fc\u30af]
|
||||
MOTD.Version=[[GOLD]][mcMMO] \u5b9f\u884c\u4e2d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 [[DARK_AQUA]]{0}
|
||||
MOTD.Website=[[GOLD]][mcMMO] [[GREEN]]{0}[[YELLOW]] - mcMMO \u30a6\u30a7\u30d6\u30b5\u30a4\u30c8
|
||||
|
||||
#SMELTING
|
||||
Smelting.SubSkill.UnderstandingTheArt.Name=\u82b8\u8853\u3092\u7406\u89e3\u3059\u308b
|
||||
Smelting.SubSkill.UnderstandingTheArt.Description=\u6d1e\u7a9f\u306e\u4e2d\u3067\u88fd\u932c\u306b\u6642\u9593\u3092\u304b\u3051\u904e\u304e\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\n\u88fd\u932c\u306e\u3055\u307e\u3056\u307e\u306a\u7279\u6027\u3092\u5f37\u5316\u3057\u307e\u3059\u3002
|
||||
@ -803,17 +848,38 @@ Smelting.SubSkill.FluxMining.Stat=\u30d5\u30e9\u30c3\u30af\u30b9\u30de\u30a4\u30
|
||||
Smelting.Listener=\u7cbe\u932c:
|
||||
Smelting.SkillName=\u7cbe\u932c
|
||||
|
||||
# Admin Notifications
|
||||
Server.ConsoleName=[[YELLOW]][Server]
|
||||
Notifications.Admin.XPRate.Start.Self=[[GRAY]]\u3042\u306a\u305f\u306f[[GOLD]]{0}x[[GRAY]]\u306b\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Self=[[GRAY]]XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Others={0}[[GRAY]]\u306fXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.XPRate.Start.Others={0}[[GRAY]]\u304c{1}x\u3067\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u59cb\u307e\u305f\u306f\u5909\u66f4\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.Format.Others=[[GOLD]]([[GREEN]]mcMMO [[DARK_AQUA]]\u7ba1\u7406\u8005[[GOLD]]) [[GRAY]]{0}
|
||||
Notifications.Admin.Format.Self=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[GRAY]]{0}
|
||||
|
||||
# Event
|
||||
XPRate.Event=[[GOLD]]mcMMO\u306f\u73fe\u5728XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u4e2d\u3067\u3059\uff01XP\u30ec\u30fc\u30c8\u306f{0}x\u3067\u3059\uff01
|
||||
#COMMAND DESCRIPTIONS
|
||||
Commands.Description.addlevels=\u30e6\u30fc\u30b6\u30fc\u306bmcMMO\u30ec\u30d9\u30eb\u3092\u8ffd\u52a0\u3059\u308b
|
||||
Commands.Description.adminchat=mcMMO\u7ba1\u7406\u8005\u30c1\u30e3\u30c3\u30c8\u306e\u30aa\u30f3\/\u30aa\u30d5\u306e\u5207\u308a\u66ff\u3048\u3001\u307e\u305f\u306f\u7ba1\u7406\u8005\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9001\u4fe1
|
||||
Commands.Description.addxp=\u30e6\u30fc\u30b6\u30fc\u306bmcMMO XP\u3092\u8ffd\u52a0\u3059\u308b
|
||||
Commands.Description.hardcore=mcMMO\u30cf\u30fc\u30c9\u30b3\u30a2\u306e\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3092\u5909\u66f4\u3059\u308b\u304b\u3001\u30cf\u30fc\u30c9\u30b3\u30a2\u30e2\u30fc\u30c9\u306e\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.inspect=\u4ed6\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u8a73\u7d30\u306amcMMO\u60c5\u5831\u3092\u898b\u308b
|
||||
Commands.Description.mcability=\u53f3\u30af\u30ea\u30c3\u30af\u3067mcMMO\u30a2\u30d3\u30ea\u30c6\u30a3\u306e\u6709\u52b9\u306b\u3064\u3044\u3066\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mccooldown=mcMMO\u30a2\u30d3\u30ea\u30c6\u30a3\u306e\u30af\u30fc\u30eb\u30c0\u30a6\u30f3\u3092\u3059\u3079\u3066\u898b\u308b
|
||||
Commands.Description.mcchatspy=mcMMO\u30d1\u30fc\u30c6\u30a3\u30fc\u30c1\u30e3\u30c3\u30c8\u306e\u30b9\u30d1\u30a4\u306b\u3064\u3044\u3066\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mcgod=mcMMO\u306e\u30b4\u30c3\u30c9\u30e2\u30fc\u30c9\u306e\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mchud=mcMMO HUD\u30b9\u30bf\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b
|
||||
Commands.Description.mcmmo=mcMMO\u306e\u7c21\u5358\u306a\u8aac\u660e\u3092\u8868\u793a\u3059\u308b
|
||||
Commands.Description.mcnotify=mcMMO\u30a2\u30d3\u30ea\u30c6\u30a3\u306e\u30c1\u30e3\u30c3\u30c8\u8868\u793a\u901a\u77e5\u306b\u3064\u3044\u3066\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mcpurge=mcMMO\u30ec\u30d9\u30eb\u306e\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u304a\u3088\u3073{0}\u30f6\u6708\u4ee5\u4e0a\u63a5\u7d9a\u3057\u3066\u3044\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u3092mcMMO\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u524a\u9664\u3057\u307e\u3059\u3002
|
||||
Commands.Description.mcrank=\u30d7\u30ec\u30a4\u30e4\u30fc\u306emcMMO\u30e9\u30f3\u30ad\u30f3\u30b0\u3092\u8868\u793a\u3059\u308b
|
||||
Commands.Description.mcrefresh=mcMMO\u306e\u3059\u3079\u3066\u306e\u30af\u30fc\u30eb\u30c0\u30a6\u30f3\u3092\u66f4\u65b0\u3059\u308b
|
||||
Commands.Description.mcremove=mcMMO\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u3092\u524a\u9664\u3059\u308b
|
||||
Commands.Description.mcscoreboard=mcMMO\u30b9\u30b3\u30a2\u30dc\u30fc\u30c9\u3092\u7ba1\u7406\u3059\u308b
|
||||
Commands.Description.mcstats=mcMMO\u30ec\u30d9\u30eb\u3068XP\u3092\u8868\u793a
|
||||
Commands.Description.mctop=mcMMO\u30ea\u30fc\u30c0\u30fc\u30dc\u30fc\u30c9\u3092\u8868\u793a
|
||||
Commands.Description.mmoedit=\u30e6\u30fc\u30b6\u30fc\u306emcMMO\u30ec\u30d9\u30eb\u3092\u7de8\u96c6
|
||||
Commands.Description.mmoupdate=mcMMO\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u53e4\u3044\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u79fb\u884c\u3057\u307e\u3059\u3002
|
||||
Commands.Description.mcconvert=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7a2e\u985e\u307e\u305f\u306f\u7d4c\u9a13\u5024\u5f0f\u306e\u7a2e\u985e\u3092\u5909\u63db\u3059\u308b
|
||||
Commands.Description.mmoshowdb=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7\u306e\u540d\u524d\u3092\u8868\u793a\u3057\u307e\u3059\uff08\u5f8c\u3067\/mmoupdate\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\uff09
|
||||
Commands.Description.party=\u3055\u307e\u3056\u307e\u306amcMMO\u30d1\u30fc\u30c6\u30a3\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3059\u308b
|
||||
Commands.Description.partychat=mcMMO\u30d1\u30fc\u30c6\u30a3\u30c1\u30e3\u30c3\u30c8\u306e\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u305f\u308a\u3001\u30d1\u30fc\u30c6\u30a3\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3057\u305f\u308a\u3057\u307e\u3059
|
||||
Commands.Description.ptp=mcMMO\u30d1\u30fc\u30c6\u30a3\u30fc\u30e1\u30f3\u30d0\u30fc\u306b\u30c6\u30ec\u30dd\u30fc\u30c8\u3059\u308b
|
||||
Commands.Description.Skill={0}\u306e\u8a73\u7d30\u306amcMMO\u30b9\u30ad\u30eb\u60c5\u5831\u3092\u8868\u793a\u3057\u307e\u3059
|
||||
Commands.Description.skillreset=\u30e6\u30fc\u30b6\u30fc\u306emcMMO\u30ec\u30d9\u30eb\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b
|
||||
Commands.Description.vampirism=mcMMO\u306e\u30f4\u30a1\u30f3\u30d1\u30a4\u30a2\u306e\u5272\u5408\u3092\u5909\u66f4\u3059\u308b\u304b\u3001\u307e\u305f\u306f\u30f4\u30a1\u30f3\u30d1\u30a4\u30a2\u30e2\u30fc\u30c9\u306e\u30aa\u30f3\/\u30aa\u30d5\u306b\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.xplock=mcMMO XP\u30d0\u30fc\u3092\u7279\u5b9a\u306emcMMO\u30b9\u30ad\u30eb\u306b\u56fa\u5b9a\u3059\u308b
|
||||
Commands.Description.xprate=mcMMO XP\u306e\u30ec\u30fc\u30c8\u3092\u5909\u66f4\u3059\u308b\u304b\u3001mcMMO XP\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u59cb\u3059\u308b
|
||||
|
||||
#UPDATE CHECKER
|
||||
UpdateChecker.Outdated=\u3042\u306a\u305f\u306f\u53e4\u3044mcMMO\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\uff01
|
||||
@ -839,8 +905,16 @@ Profile.Loading.Success=[[GREEN]]\u3042\u306a\u305f\u306emcMMO\u30d7\u30ed\u30d5
|
||||
Profile.Loading.FailurePlayer=[[RED]]mcMMO\u306e\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002[[GREEN]]{0}[[RED]]\u56de\u8aad\u307f\u8fbc\u307f\u3092\u8a66\u3057\u307e\u3057\u305f\u3002[[LIGHT_GRAY]] \u3053\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u30b5\u30fc\u30d0\u30fc\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002mcMMO\u306f\u3042\u306a\u305f\u304c\u5207\u65ad\u3059\u308b\u307e\u3067\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u306a\u3044\u9593XP\u3092\u7372\u5f97\u3067\u304d\u306a\u3044\u304b\u3001\u30b9\u30ad\u30eb\u3092\u4f7f\u3046\u3053\u3068\u304c\u51fa\u6765\u307e\u305b\u3093\u3002
|
||||
Profile.Loading.FailureNotice=[[DARK_RED]][A][[RED]] mcMMO\u306f[[YELLOW]]{0}[[RED]]\u306e\u30d7\u30ec\u30fc\u30e4\u30fc\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002 [[LIGHT_PURPLE]]\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u307e\u3067\u306e\u8a66\u884c\u56de\u6570\u306f{1}\u56de\u3067\u3059\u3002
|
||||
|
||||
#Holiday
|
||||
Holiday.AprilFools.Levelup=[[GOLD]]{0}\u306f\u30ec\u30d9\u30eb[[GREEN]]{1}[[GOLD]]\u306b\u306a\u308a\u307e\u3057\u305f\u3002
|
||||
Holiday.Anniversary=[[BLUE]]{0}\u5468\u5e74\u8a18\u5ff5\uff01\n[[BLUE]]nossr50\u306e\u5168\u3066\u306e\u4ed5\u4e8b\u3068\u5168\u3066\u306e\u958b\u767a\u3092\u8a18\u5ff5\u3057\u3066\uff01
|
||||
|
||||
#Reminder Messages
|
||||
Reminder.Squelched=[[GRAY]]\u30ea\u30de\u30a4\u30f3\u30c0\u30fc: \u3042\u306a\u305f\u306f\u73fe\u5728mcMMO\u304b\u3089\u901a\u77e5\u3092\u53d7\u3051\u53d6\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u901a\u77e5\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u306f\/mcnotify\u30b3\u30de\u30f3\u30c9\u3092\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u81ea\u52d5\u5316\u3055\u308c\u305f1\u6642\u9593\u3054\u3068\u306e\u901a\u77e5\u3067\u3059\u3002
|
||||
|
||||
#Locale
|
||||
Locale.Reloaded=[[GREEN]]\u30ed\u30b1\u30fc\u30eb \u30ea\u30ed\u30fc\u30c9\uff01
|
||||
Locale.Reloaded=[[GREEN]]\u30ed\u30b1\u30fc\u30eb \u30ea\u30ed\u30fc\u30c9\uff01
|
||||
|
||||
#Player Leveling Stuff
|
||||
LevelCap.PowerLevel=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[RED]]{0}[[YELLOW]]\u306e\u30d1\u30ef\u30fc\u30ec\u30d9\u30eb\u306e\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30d7\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u4ee5\u964d\u30b9\u30ad\u30eb\u306e\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u306f\u3057\u307e\u305b\u3093\u3002
|
||||
LevelCap.Skill=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[GOLD]]{1}[[YELLOW]]\u306e\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30d7[[RED]]{0}[[YELLOW]]\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u4ee5\u964d\u30b9\u30ad\u30eb\u306e\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u306f\u3057\u307e\u305b\u3093\u3002
|
@ -14,7 +14,7 @@ Alchemy:
|
||||
Concoctions:
|
||||
Standard:
|
||||
Rank_1: 0
|
||||
Rank_2: 25
|
||||
Rank_2: 1
|
||||
Rank_3: 35
|
||||
Rank_4: 50
|
||||
Rank_5: 65
|
||||
@ -23,7 +23,7 @@ Alchemy:
|
||||
Rank_8: 100
|
||||
RetroMode:
|
||||
Rank_1: 0
|
||||
Rank_2: 250
|
||||
Rank_2: 1
|
||||
Rank_3: 350
|
||||
Rank_4: 500
|
||||
Rank_5: 650
|
||||
@ -56,12 +56,12 @@ Archery:
|
||||
Rank_10: 1000
|
||||
ArrowRetrieval:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
SkillShot:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 10
|
||||
Rank_3: 15
|
||||
Rank_4: 20
|
||||
@ -82,7 +82,7 @@ Archery:
|
||||
Rank_19: 95
|
||||
Rank_20: 100
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 100
|
||||
Rank_3: 150
|
||||
Rank_4: 200
|
||||
@ -105,9 +105,9 @@ Archery:
|
||||
Acrobatics:
|
||||
Dodge:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Axes:
|
||||
AxesLimitBreak:
|
||||
Standard:
|
||||
@ -139,9 +139,9 @@ Axes:
|
||||
Rank_1: 50
|
||||
CriticalStrikes:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
GreaterImpact:
|
||||
Standard:
|
||||
Rank_1: 25
|
||||
@ -149,7 +149,7 @@ Axes:
|
||||
Rank_1: 250
|
||||
ArmorImpact:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 10
|
||||
Rank_3: 15
|
||||
Rank_4: 20
|
||||
@ -170,7 +170,7 @@ Axes:
|
||||
Rank_19: 95
|
||||
Rank_20: 100
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 100
|
||||
Rank_3: 150
|
||||
Rank_4: 200
|
||||
@ -204,9 +204,9 @@ Axes:
|
||||
Taming:
|
||||
BeastLore:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Gore:
|
||||
Standard:
|
||||
Rank_1: 15
|
||||
@ -214,9 +214,9 @@ Taming:
|
||||
Rank_1: 150
|
||||
CallOfTheWild:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Pummel:
|
||||
Standard:
|
||||
Rank_1: 20
|
||||
@ -284,7 +284,7 @@ Smelting:
|
||||
Salvage:
|
||||
ScrapCollector:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
Rank_2: 10
|
||||
Rank_3: 15
|
||||
Rank_4: 20
|
||||
@ -293,7 +293,7 @@ Salvage:
|
||||
Rank_7: 35
|
||||
Rank_8: 40
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Rank_2: 100
|
||||
Rank_3: 150
|
||||
Rank_4: 200
|
||||
@ -321,6 +321,11 @@ Salvage:
|
||||
Rank_7: 850
|
||||
Rank_8: 1000
|
||||
Mining:
|
||||
DoubleDrops:
|
||||
Standard:
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 1
|
||||
SuperBreaker:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
@ -358,6 +363,11 @@ Mining:
|
||||
Rank_7: 850
|
||||
Rank_8: 1000
|
||||
Herbalism:
|
||||
DoubleDrops:
|
||||
Standard:
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 1
|
||||
GreenTerra:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
@ -423,7 +433,7 @@ Fishing:
|
||||
Rank_5: 1000
|
||||
TreasureHunter:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
Rank_1: 1
|
||||
Rank_2: 25
|
||||
Rank_3: 35
|
||||
Rank_4: 50
|
||||
@ -432,7 +442,7 @@ Fishing:
|
||||
Rank_7: 85
|
||||
Rank_8: 100
|
||||
RetroMode:
|
||||
Rank_1: 100
|
||||
Rank_1: 1
|
||||
Rank_2: 250
|
||||
Rank_3: 350
|
||||
Rank_4: 500
|
||||
@ -487,20 +497,20 @@ Swords:
|
||||
Rank_1: 200
|
||||
Rupture:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 15
|
||||
Rank_3: 75
|
||||
Rank_4: 90
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 150
|
||||
Rank_3: 750
|
||||
Rank_4: 900
|
||||
SerratedStrikes:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
Rank_1: 5
|
||||
RetroMode:
|
||||
Rank_1: 100
|
||||
Rank_1: 50
|
||||
Unarmed:
|
||||
UnarmedLimitBreak:
|
||||
Standard:
|
||||
@ -527,9 +537,9 @@ Unarmed:
|
||||
Rank_10: 1000
|
||||
Berserk:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
Rank_1: 5
|
||||
RetroMode:
|
||||
Rank_1: 100
|
||||
Rank_1: 50
|
||||
ArrowDeflect:
|
||||
Standard:
|
||||
Rank_1: 20
|
||||
@ -547,13 +557,13 @@ Unarmed:
|
||||
Rank_1: 600
|
||||
IronArmStyle:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
Rank_2: 25
|
||||
Rank_3: 50
|
||||
Rank_4: 75
|
||||
Rank_5: 100
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Rank_2: 250
|
||||
Rank_3: 500
|
||||
Rank_4: 750
|
||||
@ -604,7 +614,7 @@ Woodcutting:
|
||||
Standard:
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 10
|
||||
Rank_1: 1
|
||||
LeafBlower:
|
||||
Standard:
|
||||
Rank_1: 15
|
||||
@ -622,7 +632,7 @@ Excavation:
|
||||
Rank_1: 50
|
||||
Archaeology:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 25
|
||||
Rank_3: 35
|
||||
Rank_4: 50
|
||||
@ -631,7 +641,7 @@ Excavation:
|
||||
Rank_7: 85
|
||||
Rank_8: 100
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 250
|
||||
Rank_3: 350
|
||||
Rank_4: 500
|
||||
@ -642,9 +652,9 @@ Excavation:
|
||||
Repair:
|
||||
RepairMastery:
|
||||
Standard:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 200
|
||||
Rank_1: 1
|
||||
SuperRepair:
|
||||
Standard:
|
||||
Rank_1: 40
|
||||
|
Loading…
Reference in New Issue
Block a user