mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 09:43:00 +01:00
Compare commits
58 Commits
dev-1.4.09
...
dev-alchem
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f4096cf1d | ||
|
|
28a846e0cb | ||
|
|
0185a30ec9 | ||
|
|
38e1947302 | ||
|
|
4fb4d6fc0c | ||
|
|
6d719988bf | ||
|
|
b1c1f0e21e | ||
|
|
3f34cc7365 | ||
|
|
3c6c2837bd | ||
|
|
4bcef76fd8 | ||
|
|
2fd5d7aa81 | ||
|
|
5080c68dce | ||
|
|
3403aef37d | ||
|
|
53a34c12d2 | ||
|
|
59417d6721 | ||
|
|
93d63dbca5 | ||
|
|
4643cf1070 | ||
|
|
91bf54019e | ||
|
|
ead716ef0d | ||
|
|
8fec1af257 | ||
|
|
99248caba3 | ||
|
|
af64bdf742 | ||
|
|
66a4925371 | ||
|
|
8eb6acd60f | ||
|
|
ce6892f2e6 | ||
|
|
c14a4e9305 | ||
|
|
5825eb1696 | ||
|
|
bfebbd0095 | ||
|
|
b204507a82 | ||
|
|
9f53426511 | ||
|
|
03c2282c3f | ||
|
|
20092d55fd | ||
|
|
69a2a5cfff | ||
|
|
618cfad100 | ||
|
|
56e625a9df | ||
|
|
79a1ef5d3e | ||
|
|
10dd7619bf | ||
|
|
f9dfec5bd0 | ||
|
|
a9488bc18b | ||
|
|
f0ee708710 | ||
|
|
3390a31cc6 | ||
|
|
0b4b272223 | ||
|
|
8d200ea653 | ||
|
|
eb359c5595 | ||
|
|
e1b8088c17 | ||
|
|
70a1eea231 | ||
|
|
c744974192 | ||
|
|
faa11a87a9 | ||
|
|
91da5c4ab1 | ||
|
|
da5e770e06 | ||
|
|
09557e378b | ||
|
|
72d26fed0f | ||
|
|
225de799e8 | ||
|
|
334c44760f | ||
|
|
ac7fc1020d | ||
|
|
461871327b | ||
|
|
60ddd799de | ||
|
|
80571fbe8f |
@@ -7,7 +7,7 @@ Key:
|
||||
! Change
|
||||
- Removal
|
||||
|
||||
Version 1.4.09-dev
|
||||
Version 1.5.01-dev
|
||||
+ Added new child skill; Salvage
|
||||
+ Added new feature to Herbalism. Instantly-regrown crops are protected from being broken for 1 second
|
||||
+ Added option to config.yml to show the /mcstats scoreboard automatically after logging in
|
||||
@@ -24,8 +24,23 @@ Version 1.4.09-dev
|
||||
! Changed player data saving. Save tasks are now asynchronous
|
||||
! Vanished players no longer get hit by AoE effects
|
||||
! Changed Alchemy config option 'Prevent_Hopper_Transfer' renamed to 'Prevent_Hopper_Transfer_Ingredients'
|
||||
! Changed Alchemy XP distribution. XP is granted based on the stage of the potion.
|
||||
- Removed salvage ability from Repair, salvage has it's own (child) skill now
|
||||
|
||||
Version 1.5.00
|
||||
+ Added Podzol & Red Sand to Excavation
|
||||
+ Added Hardened Clay, Stained Clay, and Packed Ice to Mining blocks
|
||||
+ Added Acacia and Dark Oak to Woodcutting blocks
|
||||
+ Added Salmon, Clownfish, and Pufferfish to Fishing XP
|
||||
+ Added new flowers and grasses to Herbalism XP
|
||||
+ Added option to config.yml which allows players to always catch fish, even when a treasure is found
|
||||
+ Added option to config.yml to override vanilla Minecraft treasures
|
||||
! Fishing XP now depends on the type of fish.
|
||||
! Woodcutting XP in experience.yml and Woodcutting double drops in config.yml now use the tree species names. Oak is now Generic, and Spruce is now Redwood.
|
||||
! Red_Rose was replaced by Poppy, and so the key in experience.yml has been updated accordingly.
|
||||
- Removed deprecated permission nodes
|
||||
- Removed "Treasure found!" message
|
||||
|
||||
Version 1.4.08
|
||||
+ Added a new skill; Alchemy. Special thanks to EasyMFnE for creating this!
|
||||
+ Added SecondaryAbilityType enum, and new SecondaryAbilityWeightedActivationCheckEvent, fired when a secondary ability checkes its activation chances
|
||||
|
||||
4
pom.xml
4
pom.xml
@@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||
<artifactId>mcMMO</artifactId>
|
||||
<version>1.4.09-SNAPSHOT</version>
|
||||
<version>1.5.01-SNAPSHOT</version>
|
||||
<name>mcMMO</name>
|
||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||
<issueManagement>
|
||||
@@ -121,7 +121,7 @@
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<version>1.6.4-R2.0</version>
|
||||
<version>LATEST</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@@ -98,9 +97,7 @@ public class FishingCommand extends SkillCommand {
|
||||
location = player.getLocation();
|
||||
}
|
||||
|
||||
Biome biome = location.getBlock().getBiome();
|
||||
|
||||
if (biome == Biome.RIVER || biome == Biome.OCEAN) {
|
||||
if (Fishing.masterAnglerBiomes.contains(location.getBlock().getBiome())) {
|
||||
rawBiteChance = rawBiteChance * AdvancedConfig.getInstance().getMasterAnglerBiomeModifier();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TreeSpecies;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
@@ -452,6 +453,7 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
|
||||
/* Fishing */
|
||||
public boolean getFishingDropsEnabled() { return config.getBoolean("Skills.Fishing.Drops_Enabled", true); }
|
||||
public boolean getFishingOverrideTreasures() { return config.getBoolean("Skills.Fishing.Override_Vanilla_Treasures", true); }
|
||||
public boolean getFishingExtraFish() { return config.getBoolean("Skills.Fishing.Extra_Fish", true); }
|
||||
|
||||
/* Mining */
|
||||
@@ -481,10 +483,7 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public double getTamingCOTWRange() { return config.getDouble("Skills.Taming.Call_Of_The_Wild.Range", 40.0D); }
|
||||
|
||||
/* Woodcutting */
|
||||
public boolean getOakDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Oak", true); }
|
||||
public boolean getBirchDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Birch", true); }
|
||||
public boolean getSpruceDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Spruce", true); }
|
||||
public boolean getJungleDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Jungle", true); }
|
||||
public boolean getWoodcuttingDoubleDropsEnabled(TreeSpecies species) { return config.getBoolean("Double_Drops.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
|
||||
public boolean getTreeFellerSoundsEnabled() { return config.getBoolean("Skills.Woodcutting.Tree_Feller_Sounds", true); }
|
||||
|
||||
/* AFK Leveling */
|
||||
|
||||
@@ -4,12 +4,16 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TreeSpecies;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.material.LongGrass;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
import com.gmail.nossr50.config.AutoUpdateConfigLoader;
|
||||
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
|
||||
public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
@@ -77,8 +81,10 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
*/
|
||||
|
||||
/* Alchemy */
|
||||
if (getPotionXP() <= 0) {
|
||||
reason.add("Experience.Alchemy.Potion should be greater than 0!");
|
||||
for (PotionStage potionStage : PotionStage.values()) {
|
||||
if (getPotionXP(potionStage) < 0) {
|
||||
reason.add("Experience.Alchemy.Potion_Stage_" + potionStage.toNumerical() + " should be at least 0!");
|
||||
}
|
||||
}
|
||||
|
||||
/* Combat XP Multipliers */
|
||||
@@ -103,9 +109,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
}
|
||||
|
||||
/* Fishing */
|
||||
if (getFishingBaseXP() <= 0) {
|
||||
reason.add("Experience.Fishing.Base should be greater than 0!");
|
||||
}
|
||||
// TODO: Add validation for each fish type once enum is available.
|
||||
|
||||
if (getFishingShakeXP() <= 0) {
|
||||
reason.add("Experience.Fishing.Shake should be greater than 0!");
|
||||
@@ -126,20 +130,12 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
}
|
||||
|
||||
/* Woodcutting */
|
||||
if (getWoodcuttingXPOak() <= 0) {
|
||||
reason.add("Experience.Woodcutting.Oak should be greater than 0!");
|
||||
}
|
||||
for (TreeSpecies species : TreeSpecies.values()) {
|
||||
String key = "Experience.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_");
|
||||
|
||||
if (getWoodcuttingXPBirch() <= 0) {
|
||||
reason.add("Experience.Woodcutting.Birch should be greater than 0!");
|
||||
}
|
||||
|
||||
if (getWoodcuttingXPSpruce() <= 0) {
|
||||
reason.add("Experience.Woodcutting.Spruce should be greater than 0!");
|
||||
}
|
||||
|
||||
if (getWoodcuttingXPJungle() <= 0) {
|
||||
reason.add("Experience.Woodcutting.Jungle should be greater than 0!");
|
||||
if (config.getInt(key) <= 0) {
|
||||
reason.add(key + " should be greater than 0!");
|
||||
}
|
||||
}
|
||||
|
||||
if (getWoodcuttingXPHugeBrownMushroom() <= 0) {
|
||||
@@ -208,12 +204,111 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
public double getFeatherFallXPModifier() { return config.getDouble("Experience.Acrobatics.FeatherFall_Multiplier", 2.0); }
|
||||
|
||||
/* Alchemy */
|
||||
public double getPotionXP() { return config.getDouble("Experience.Alchemy.Potion", 150D); }
|
||||
public double getPotionXP(PotionStage stage) { return config.getDouble("Experience.Alchemy.Potion_Stage_" + stage.toNumerical(), 10D); }
|
||||
|
||||
/* Fishing */
|
||||
public int getFishingBaseXP() { return config.getInt("Experience.Fishing.Base", 800); }
|
||||
public int getFishXp(MaterialData data) {
|
||||
switch (data.getData()) {
|
||||
case 0x0:
|
||||
return config.getInt("Experience.Fishing.Raw_Fish", 800);
|
||||
|
||||
case 0x1:
|
||||
return config.getInt("Experience.Fishing.Raw_Salmon", 800);
|
||||
|
||||
case 0x2:
|
||||
return config.getInt("Experience.Fishing.Clownfish", 800);
|
||||
|
||||
case 0x3:
|
||||
return config.getInt("Experience.Fishing.Pufferfish", 800);
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int getFishingShakeXP() { return config.getInt("Experience.Fishing.Shake", 50); }
|
||||
|
||||
/* Herbalism */
|
||||
public int getFlowerAndGrassXp(MaterialData data) {
|
||||
Material type = data.getItemType();
|
||||
|
||||
if (type == Material.RED_ROSE) {
|
||||
switch (data.getData()) {
|
||||
case 0x0:
|
||||
return config.getInt("Experience.Herbalism.Poppy", 100);
|
||||
|
||||
case 0x1:
|
||||
return config.getInt("Experience.Herbalism.Blue_Orchid", 150);
|
||||
|
||||
case 0x2:
|
||||
return config.getInt("Experience.Herbalism.Allium", 300);
|
||||
|
||||
case 0x3:
|
||||
return config.getInt("Experience.Herbalism.Azure_Bluet", 150);
|
||||
|
||||
case 0x4:
|
||||
return config.getInt("Experience.Herbalism.Red_Tulip", 150);
|
||||
|
||||
case 0x5:
|
||||
return config.getInt("Experience.Herbalism.Orange_Tulip", 150);
|
||||
|
||||
case 0x6:
|
||||
return config.getInt("Experience.Herbalism.White_Tulip", 150);
|
||||
|
||||
case 0x7:
|
||||
return config.getInt("Experience.Herbalism.Pink_Tulip", 150);
|
||||
|
||||
case 0x8:
|
||||
return config.getInt("Experience.Herbalism.Oxeye_Daisy", 150);
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
else if (type == Material.LONG_GRASS) {
|
||||
switch (((LongGrass) data).getSpecies()) {
|
||||
case DEAD:
|
||||
return config.getInt("Experience.Herbalism.Dead_Bush", 30);
|
||||
|
||||
case FERN_LIKE:
|
||||
return config.getInt("Experience.Herbalism.Small_Fern", 10);
|
||||
|
||||
case NORMAL:
|
||||
return config.getInt("Experience.Herbalism.Small_Grass", 10);
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (type == Material.DOUBLE_PLANT) {
|
||||
switch (data.getData()) {
|
||||
case 0x0:
|
||||
return config.getInt("Experience.Herbalism.Sunflower", 50);
|
||||
|
||||
case 0x1:
|
||||
return config.getInt("Experience.Herbalism.Lilac", 50);
|
||||
|
||||
case 0x2:
|
||||
return config.getInt("Experience.Herbalism.Tall_Grass", 50);
|
||||
|
||||
case 0x3:
|
||||
return config.getInt("Experience.Herbalism.Tall_Fern", 50);
|
||||
|
||||
case 0x4:
|
||||
return config.getInt("Experience.Herbalism.Rose_Bush", 50);
|
||||
|
||||
case 0x5:
|
||||
return config.getInt("Experience.Herbalism.Peony", 50);
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Repair */
|
||||
public double getRepairXPBase() { return config.getDouble("Experience.Repair.Base", 1000.0); }
|
||||
public double getRepairXP(MaterialType repairMaterialType) { return config.getDouble("Experience.Repair." + StringUtils.getCapitalized(repairMaterialType.toString())); }
|
||||
@@ -224,10 +319,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
public int getTamingXPOcelot() { return config.getInt("Experience.Taming.Animal_Taming.Ocelot", 500); }
|
||||
|
||||
/* Woodcutting */
|
||||
public int getWoodcuttingXPOak() { return config.getInt("Experience.Woodcutting.Oak", 70); }
|
||||
public int getWoodcuttingXPBirch() { return config.getInt("Experience.Woodcutting.Birch", 90); }
|
||||
public int getWoodcuttingXPSpruce() { return config.getInt("Experience.Woodcutting.Spruce", 80); }
|
||||
public int getWoodcuttingXPJungle() { return config.getInt("Experience.Woodcutting.Jungle", 100); }
|
||||
public int getWoodcuttingTreeXP(TreeSpecies species) { return config.getInt("Experience.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
|
||||
public int getWoodcuttingXPHugeBrownMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Brown", 70); }
|
||||
public int getWoodcuttingXPHugeRedMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Red", 70); }
|
||||
}
|
||||
|
||||
@@ -68,61 +68,39 @@ public class CustomBlockConfig extends ConfigLoader {
|
||||
Material blockMaterial = Material.matchMaterial(blockInfo[0]);
|
||||
|
||||
if (blockMaterial == null) {
|
||||
plugin.getLogger().warning("Invalid material name. [" + blockInfo[0] + "] This item will be skipped. - " + blockName);
|
||||
plugin.getLogger().warning("Invalid material name. This item will be skipped. - " + blockInfo[0]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (blockInfo.length == 2) {
|
||||
String[] dataInfo = blockInfo[1].split("[-]");
|
||||
byte blockData = (blockInfo.length == 2) ? Byte.valueOf(blockInfo[1]) : 0;
|
||||
MaterialData blockMaterialData = new MaterialData(blockMaterial, blockData);
|
||||
|
||||
if (dataInfo.length == 2) {
|
||||
byte startData = Byte.valueOf(dataInfo[0]);
|
||||
byte endData = Byte.valueOf(dataInfo[1]);
|
||||
System.out.println(blockName + " Data range; [" + startData + " - " + endData + "]");
|
||||
if (blockList != null) {
|
||||
blockList.add(blockMaterialData);
|
||||
}
|
||||
|
||||
for (byte blockData = startData; blockData <= endData; blockData++) {
|
||||
MaterialData blockMaterialData = new MaterialData(blockMaterial, blockData);
|
||||
loadBlock(skillType, blockList, blockName, blockMaterialData);
|
||||
}
|
||||
if (skillType.equals("Ability_Blocks")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return;
|
||||
int xp = config.getInt(skillType + "." + blockName + ".XP_Gain");
|
||||
int smeltingXp = 0;
|
||||
|
||||
if (skillType.equals("Mining") && config.getBoolean(skillType + "." + blockName + ".Is_Ore")) {
|
||||
customOres.add(blockMaterialData);
|
||||
smeltingXp = config.getInt(skillType + "." + blockName + ".Smelting_XP_Gain", xp / 10);
|
||||
}
|
||||
else if (skillType.equals("Woodcutting")) {
|
||||
if (config.getBoolean(skillType + "." + blockName + ".Is_Log")) {
|
||||
customLogs.add(blockMaterialData);
|
||||
}
|
||||
else {
|
||||
customLeaves.add(blockMaterialData);
|
||||
xp = 0; // Leaves don't grant XP
|
||||
}
|
||||
}
|
||||
|
||||
byte blockData = (blockInfo.length == 2) ? Byte.valueOf(blockInfo[1]) : 0;
|
||||
|
||||
MaterialData blockMaterialData = new MaterialData(blockMaterial, blockData);
|
||||
loadBlock(skillType, blockList, blockName, blockMaterialData);
|
||||
customBlockMap.put(blockMaterialData, new CustomBlock(xp, config.getBoolean(skillType + "." + blockName + ".Double_Drops_Enabled"), smeltingXp));
|
||||
}
|
||||
}
|
||||
|
||||
private void loadBlock(String skillType, List<MaterialData> blockList, String blockName, MaterialData blockMaterialData) {
|
||||
System.out.println("Loading block: " + blockMaterialData.getItemType() + " " + blockMaterialData.getData());
|
||||
if (blockList != null) {
|
||||
blockList.add(blockMaterialData);
|
||||
}
|
||||
|
||||
if (skillType.equals("Ability_Blocks")) {
|
||||
return;
|
||||
}
|
||||
|
||||
int xp = config.getInt(skillType + "." + blockName + ".XP_Gain");
|
||||
int smeltingXp = 0;
|
||||
|
||||
if (skillType.equals("Mining") && config.getBoolean(skillType + "." + blockName + ".Is_Ore")) {
|
||||
customOres.add(blockMaterialData);
|
||||
smeltingXp = config.getInt(skillType + "." + blockName + ".Smelting_XP_Gain", xp / 10);
|
||||
}
|
||||
else if (skillType.equals("Woodcutting")) {
|
||||
if (config.getBoolean(skillType + "." + blockName + ".Is_Log")) {
|
||||
customLogs.add(blockMaterialData);
|
||||
}
|
||||
else {
|
||||
customLeaves.add(blockMaterialData);
|
||||
xp = 0; // Leaves don't grant XP
|
||||
}
|
||||
}
|
||||
|
||||
customBlockMap.put(blockMaterialData, new CustomBlock(xp, config.getBoolean(skillType + "." + blockName + ".Double_Drops_Enabled"), smeltingXp));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ public class TreasureConfig extends ConfigLoader {
|
||||
public List<ExcavationTreasure> excavationFromMycel = new ArrayList<ExcavationTreasure>();
|
||||
public List<ExcavationTreasure> excavationFromSoulSand = new ArrayList<ExcavationTreasure>();
|
||||
public List<ExcavationTreasure> excavationFromSnow = new ArrayList<ExcavationTreasure>();
|
||||
public List<ExcavationTreasure> excavationFromRedSand = new ArrayList<ExcavationTreasure>();
|
||||
public List<ExcavationTreasure> excavationFromPodzol = new ArrayList<ExcavationTreasure>();
|
||||
|
||||
public List<HylianTreasure> hylianFromBushes = new ArrayList<HylianTreasure>();
|
||||
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
|
||||
@@ -374,6 +376,14 @@ public class TreasureConfig extends ConfigLoader {
|
||||
if (dropList.contains("Snow")) {
|
||||
excavationFromSnow.add(excavationTreasure);
|
||||
}
|
||||
|
||||
if (dropList.contains("Red_Sand")) {
|
||||
excavationFromRedSand.add(excavationTreasure);
|
||||
}
|
||||
|
||||
if (dropList.contains("Podzol")) {
|
||||
excavationFromPodzol.add(excavationTreasure);
|
||||
}
|
||||
}
|
||||
else if (isHylian) {
|
||||
HylianTreasure hylianTreasure = new HylianTreasure(item, xp, dropChance, dropLevel);
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.gmail.nossr50.datatypes.skills.alchemy;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.Potion;
|
||||
|
||||
public enum PotionStage {
|
||||
FIVE(5),
|
||||
FOUR(4),
|
||||
THREE(3),
|
||||
TWO(2),
|
||||
ONE(1);
|
||||
|
||||
int numerical;
|
||||
|
||||
private PotionStage(int numerical) {
|
||||
this.numerical = numerical;
|
||||
}
|
||||
|
||||
public int toNumerical() {
|
||||
return numerical;
|
||||
}
|
||||
|
||||
private static PotionStage getPotionStageNumerical(int numerical) {
|
||||
for (PotionStage potionStage : values()) {
|
||||
if (numerical >= potionStage.toNumerical()) {
|
||||
return potionStage;
|
||||
}
|
||||
}
|
||||
|
||||
return ONE;
|
||||
}
|
||||
|
||||
public static PotionStage getPotionStage(AlchemyPotion input, AlchemyPotion output) {
|
||||
PotionStage potionStage = getPotionStage(output);
|
||||
if (getPotionStage(input) == potionStage) {
|
||||
potionStage = PotionStage.FIVE;
|
||||
}
|
||||
|
||||
return potionStage;
|
||||
}
|
||||
|
||||
public static PotionStage getPotionStage(AlchemyPotion alchemyPotion) {
|
||||
Potion potion = Potion.fromItemStack(new ItemStack(Material.POTION, 1, alchemyPotion.getDataValue()));
|
||||
|
||||
int stage = 1;
|
||||
|
||||
// Check if potion isn't awkward or mundane
|
||||
if (potion.getType() != null) {
|
||||
stage++;
|
||||
}
|
||||
|
||||
// Check if potion has a glowstone dust amplifier
|
||||
if (potion.getLevel() > 1) {
|
||||
stage++;
|
||||
}
|
||||
|
||||
// Check if potion has a redstone dust amplifier
|
||||
if (potion.hasExtendedDuration()) {
|
||||
stage++;
|
||||
}
|
||||
|
||||
// Check if potion has a gunpowder amplifier
|
||||
if (potion.isSplash()) {
|
||||
stage++;
|
||||
}
|
||||
|
||||
return PotionStage.getPotionStageNumerical(stage);
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,7 @@ import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
@@ -176,7 +177,11 @@ public class EntityListener implements Listener {
|
||||
}
|
||||
|
||||
if (attacker instanceof Projectile) {
|
||||
attacker = ((Projectile) attacker).getShooter();
|
||||
ProjectileSource projectileSource = ((Projectile) attacker).getShooter();
|
||||
|
||||
if (projectileSource instanceof LivingEntity) {
|
||||
attacker = (LivingEntity) projectileSource;
|
||||
}
|
||||
}
|
||||
else if (attacker instanceof Tameable) {
|
||||
AnimalTamer animalTamer = ((Tameable) attacker).getOwner();
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.event.player.PlayerStatisticIncrementEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@@ -225,6 +226,13 @@ public class PlayerListener implements Listener {
|
||||
return;
|
||||
|
||||
case CAUGHT_FISH:
|
||||
//TODO Update to new API once available! Waiting for case CAUGHT_TREASURE:
|
||||
Item fishingCatch = (Item) event.getCaught();
|
||||
|
||||
if (Config.getInstance().getFishingOverrideTreasures() && fishingCatch.getItemStack().getType() != Material.RAW_FISH) {
|
||||
fishingCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
|
||||
}
|
||||
|
||||
if (Permissions.vanillaXpBoost(player, SkillType.FISHING)) {
|
||||
event.setExpToDrop(fishingManager.handleVanillaXpBoost(event.getExpToDrop()));
|
||||
}
|
||||
@@ -694,4 +702,13 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerStatisticIncrementEvent(PlayerStatisticIncrementEvent event) {
|
||||
if (!mcMMO.getHolidayManager().isAprilFirst()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mcMMO.getHolidayManager().handleStatisticEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.runnables.skills;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
@@ -19,6 +20,7 @@ public class AprilTask extends BukkitRunnable {
|
||||
}
|
||||
|
||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||
int random = Misc.getRandom().nextInt(40) + 11;
|
||||
int betterRandom = Misc.getRandom().nextInt(2000);
|
||||
if (betterRandom == 0) {
|
||||
player.playSound(player.getLocation(), Sound.LEVEL_UP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH);
|
||||
@@ -26,10 +28,9 @@ public class AprilTask extends BukkitRunnable {
|
||||
fireworksShow(player);
|
||||
}
|
||||
|
||||
for (HolidayManager.FakeSkillType fakeSkillType : HolidayManager.FakeSkillType.values()) {
|
||||
int random = Misc.getRandom().nextInt(250);
|
||||
if (random == 0) {
|
||||
mcMMO.getHolidayManager().levelUpApril(player, fakeSkillType);
|
||||
for (Statistic statistic : mcMMO.getHolidayManager().movementStatistics) {
|
||||
if (player.getStatistic(statistic) > 0 && player.getStatistic(statistic) % random == 0) {
|
||||
mcMMO.getHolidayManager().levelUpApril(player, HolidayManager.FakeSkillType.getByStatistic(statistic));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
|
||||
import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
|
||||
@@ -64,7 +65,7 @@ public class AlchemyManager extends SkillManager {
|
||||
return Math.min(Alchemy.catalysisMaxSpeed, Alchemy.catalysisMinSpeed + (Alchemy.catalysisMaxSpeed - Alchemy.catalysisMinSpeed) * (skillLevel - Alchemy.catalysisUnlockLevel) / (Alchemy.catalysisMaxBonusLevel - Alchemy.catalysisUnlockLevel)) * (isLucky ? LUCKY_MODIFIER : 1.0);
|
||||
}
|
||||
|
||||
public void handlePotionBrewSuccesses(int amount) {
|
||||
applyXpGain((float) (ExperienceConfig.getInstance().getPotionXP() * amount), XPGainReason.PVE);
|
||||
public void handlePotionBrewSuccesses(PotionStage potionStage, int amount) {
|
||||
applyXpGain((float) (ExperienceConfig.getInstance().getPotionXP(potionStage) * amount), XPGainReason.PVE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
|
||||
import com.gmail.nossr50.runnables.player.PlayerUpdateInventoryTask;
|
||||
import com.gmail.nossr50.runnables.skills.AlchemyBrewCheckTask;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
@@ -114,7 +115,8 @@ public final class AlchemyPotionBrewer {
|
||||
inventory.setItem(i, output.toItemStack(item.getAmount()).clone());
|
||||
|
||||
if (player != null) {
|
||||
UserManager.getPlayer(player).getAlchemyManager().handlePotionBrewSuccesses(1);
|
||||
PotionStage potionStage = PotionStage.getPotionStage(input, output);
|
||||
UserManager.getPlayer(player).getAlchemyManager().handlePotionBrewSuccesses(potionStage, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,13 +21,13 @@ public class Excavation {
|
||||
protected static List<ExcavationTreasure> getTreasures(BlockState blockState) {
|
||||
switch (blockState.getType()) {
|
||||
case DIRT:
|
||||
return TreasureConfig.getInstance().excavationFromDirt;
|
||||
return blockState.getRawData() == 0x2 ? TreasureConfig.getInstance().excavationFromPodzol : TreasureConfig.getInstance().excavationFromDirt;
|
||||
|
||||
case GRASS:
|
||||
return TreasureConfig.getInstance().excavationFromGrass;
|
||||
|
||||
case SAND:
|
||||
return TreasureConfig.getInstance().excavationFromSand;
|
||||
return blockState.getRawData() == 0x1 ? TreasureConfig.getInstance().excavationFromRedSand : TreasureConfig.getInstance().excavationFromSand;
|
||||
|
||||
case GRAVEL:
|
||||
return TreasureConfig.getInstance().excavationFromGravel;
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package com.gmail.nossr50.skills.fishing;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -54,6 +57,13 @@ public final class Fishing {
|
||||
public static int fishermansDietRankLevel2 = fishermansDietRankLevel1 * 2;
|
||||
public static int fishermansDietMaxLevel = fishermansDietRankLevel1 * 5;
|
||||
|
||||
public static Set<Biome> masterAnglerBiomes = EnumSet.of(Biome.RIVER, Biome.OCEAN, Biome.DEEP_OCEAN);
|
||||
public static Set<Biome> iceFishingBiomes = EnumSet.of(
|
||||
Biome.FROZEN_OCEAN, Biome.FROZEN_RIVER,
|
||||
Biome.TAIGA, Biome.TAIGA_HILLS, Biome.TAIGA_MOUNTAINS,
|
||||
Biome.ICE_PLAINS, Biome.ICE_MOUNTAINS, Biome.ICE_PLAINS_SPIKES,
|
||||
Biome.COLD_TAIGA, Biome.COLD_TAIGA_HILLS, Biome.COLD_TAIGA_MOUNTAINS);
|
||||
|
||||
private Fishing() {}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.WeatherType;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@@ -199,10 +198,7 @@ public class FishingManager extends SkillManager {
|
||||
}
|
||||
|
||||
// Make sure this is a body of water, not just a block of ice.
|
||||
Biome biome = block.getBiome();
|
||||
boolean isFrozenBiome = (biome == Biome.FROZEN_OCEAN || biome == Biome.FROZEN_RIVER || biome == Biome.TAIGA || biome == Biome.TAIGA_HILLS || biome == Biome.ICE_PLAINS || biome == Biome.ICE_MOUNTAINS);
|
||||
|
||||
if (!isFrozenBiome && (block.getRelative(BlockFace.DOWN, 3).getType() != Material.STATIONARY_WATER)) {
|
||||
if (!Fishing.iceFishingBiomes.contains(block.getBiome()) && (block.getRelative(BlockFace.DOWN, 3).getType() != Material.STATIONARY_WATER)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -282,12 +278,11 @@ public class FishingManager extends SkillManager {
|
||||
public void masterAngler(Fish hook) {
|
||||
Player player = getPlayer();
|
||||
Location location = hook.getLocation();
|
||||
Biome biome = location.getBlock().getBiome();
|
||||
double biteChance = hook.getBiteChance();
|
||||
|
||||
hookLocation = location;
|
||||
|
||||
if (biome == Biome.RIVER || biome == Biome.OCEAN) {
|
||||
if (Fishing.masterAnglerBiomes.contains(location.getBlock().getBiome())) {
|
||||
biteChance = biteChance * AdvancedConfig.getInstance().getMasterAnglerBiomeModifier();
|
||||
}
|
||||
|
||||
@@ -305,6 +300,7 @@ public class FishingManager extends SkillManager {
|
||||
*/
|
||||
public void handleFishing(Item fishingCatch) {
|
||||
this.fishingCatch = fishingCatch;
|
||||
int fishXp = ExperienceConfig.getInstance().getFishXp(fishingCatch.getItemStack().getData());
|
||||
int treasureXp = 0;
|
||||
Player player = getPlayer();
|
||||
FishingTreasure treasure = null;
|
||||
@@ -315,8 +311,6 @@ public class FishingManager extends SkillManager {
|
||||
}
|
||||
|
||||
if (treasure != null) {
|
||||
player.sendMessage(LocaleLoader.getString("Fishing.Ability.TH.ItemFound"));
|
||||
|
||||
ItemStack treasureDrop = treasure.getDrop().clone(); // Not cloning is bad, m'kay?
|
||||
Map<Enchantment, Integer> enchants = new HashMap<Enchantment, Integer>();
|
||||
|
||||
@@ -356,7 +350,7 @@ public class FishingManager extends SkillManager {
|
||||
}
|
||||
}
|
||||
|
||||
applyXpGain(ExperienceConfig.getInstance().getFishingBaseXP() + treasureXp, XPGainReason.PVE);
|
||||
applyXpGain(fishXp + treasureXp, XPGainReason.PVE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -455,6 +449,8 @@ public class FishingManager extends SkillManager {
|
||||
*/
|
||||
private FishingTreasure getFishingTreasure() {
|
||||
double diceRoll = Misc.getRandom().nextDouble() * 100;
|
||||
diceRoll -= getPlayer().getItemInHand().getEnchantmentLevel(Enchantment.LUCK);
|
||||
|
||||
FishingTreasure treasure = null;
|
||||
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
|
||||
@@ -148,7 +148,12 @@ public class HerbalismManager extends SkillManager {
|
||||
processGreenThumbPlants(blockState, greenTerra);
|
||||
}
|
||||
|
||||
xp = ExperienceConfig.getInstance().getXp(skill, material);
|
||||
if (material == Material.DOUBLE_PLANT || material == Material.RED_ROSE || material == Material.LONG_GRASS) {
|
||||
xp = ExperienceConfig.getInstance().getFlowerAndGrassXp(blockState.getData());
|
||||
}
|
||||
else {
|
||||
xp = ExperienceConfig.getInstance().getXp(skill, material);
|
||||
}
|
||||
|
||||
if (Config.getInstance().getDoubleDropsEnabled(skill, material) && Permissions.secondaryAbilityEnabled(player, SecondaryAbility.HERBALISM_DOUBLE_DROPS)) {
|
||||
drops = blockState.getBlock().getDrops();
|
||||
|
||||
@@ -39,11 +39,13 @@ public class Mining {
|
||||
switch (blockType) {
|
||||
case ENDER_STONE:
|
||||
case GOLD_ORE:
|
||||
case HARD_CLAY:
|
||||
case IRON_ORE:
|
||||
case MOSSY_COBBLESTONE:
|
||||
case NETHERRACK:
|
||||
case OBSIDIAN:
|
||||
case SANDSTONE:
|
||||
case STAINED_CLAY:
|
||||
handleMiningDrops(blockState);
|
||||
return;
|
||||
|
||||
@@ -55,12 +57,13 @@ public class Mining {
|
||||
|
||||
case COAL_ORE:
|
||||
case DIAMOND_ORE:
|
||||
case REDSTONE_ORE:
|
||||
case EMERALD_ORE:
|
||||
case GLOWSTONE:
|
||||
case LAPIS_ORE:
|
||||
case STONE:
|
||||
case EMERALD_ORE:
|
||||
case PACKED_ICE:
|
||||
case QUARTZ_ORE:
|
||||
case REDSTONE_ORE:
|
||||
case STONE:
|
||||
Misc.dropItem(blockState.getLocation(), new ItemStack(blockType));
|
||||
return;
|
||||
|
||||
@@ -82,17 +85,20 @@ public class Mining {
|
||||
case COAL_ORE:
|
||||
case DIAMOND_ORE:
|
||||
case EMERALD_ORE:
|
||||
case GLOWSTONE:
|
||||
case LAPIS_ORE:
|
||||
case STONE:
|
||||
case ENDER_STONE:
|
||||
case GLOWSTONE:
|
||||
case GOLD_ORE:
|
||||
case HARD_CLAY:
|
||||
case IRON_ORE:
|
||||
case LAPIS_ORE:
|
||||
case MOSSY_COBBLESTONE:
|
||||
case NETHERRACK:
|
||||
case OBSIDIAN:
|
||||
case PACKED_ICE:
|
||||
case REDSTONE_ORE:
|
||||
case SANDSTONE:
|
||||
case STAINED_CLAY:
|
||||
case STONE:
|
||||
case QUARTZ_ORE:
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
return;
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TreeSpecies;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -55,28 +56,19 @@ public final class Woodcutting {
|
||||
return mcMMO.getModManager().getBlock(blockState).getXpGain();
|
||||
}
|
||||
|
||||
switch (((Tree) blockState.getData()).getSpecies()) {
|
||||
case GENERIC:
|
||||
return ExperienceConfig.getInstance().getWoodcuttingXPOak();
|
||||
|
||||
case REDWOOD:
|
||||
return ExperienceConfig.getInstance().getWoodcuttingXPSpruce();
|
||||
|
||||
case BIRCH:
|
||||
return ExperienceConfig.getInstance().getWoodcuttingXPBirch();
|
||||
|
||||
case JUNGLE:
|
||||
int xp = ExperienceConfig.getInstance().getWoodcuttingXPJungle();
|
||||
|
||||
if (experienceGainMethod == ExperienceGainMethod.TREE_FELLER) {
|
||||
xp *= 0.5;
|
||||
}
|
||||
|
||||
return xp;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
//TODO Remove this workaround when casting to Tree works again
|
||||
TreeSpecies species = TreeSpecies.GENERIC;
|
||||
if (blockState.getData() instanceof Tree) {
|
||||
species = ((Tree) blockState.getData()).getSpecies();
|
||||
}
|
||||
|
||||
int xp = ExperienceConfig.getInstance().getWoodcuttingTreeXP(species);
|
||||
|
||||
if (species == TreeSpecies.JUNGLE && experienceGainMethod == ExperienceGainMethod.TREE_FELLER) {
|
||||
xp *= 0.5;
|
||||
}
|
||||
|
||||
return xp;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,33 +81,14 @@ public final class Woodcutting {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
else {
|
||||
switch (((Tree) blockState.getData()).getSpecies()) {
|
||||
case GENERIC:
|
||||
if (Config.getInstance().getOakDoubleDropsEnabled()) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
return;
|
||||
//TODO Remove this workaround when casting to Tree works again
|
||||
TreeSpecies species = TreeSpecies.GENERIC;
|
||||
if (blockState.getData() instanceof Tree) {
|
||||
species = ((Tree) blockState.getData()).getSpecies();
|
||||
}
|
||||
|
||||
case REDWOOD:
|
||||
if (Config.getInstance().getSpruceDoubleDropsEnabled()) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
return;
|
||||
|
||||
case BIRCH:
|
||||
if (Config.getInstance().getBirchDoubleDropsEnabled()) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
return;
|
||||
|
||||
case JUNGLE:
|
||||
if (Config.getInstance().getJungleDoubleDropsEnabled()) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
return;
|
||||
|
||||
default:
|
||||
return;
|
||||
if (Config.getInstance().getWoodcuttingDoubleDropsEnabled(species)) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,11 +141,15 @@ public class WoodcuttingManager extends SkillManager {
|
||||
Misc.dropItems(blockState.getLocation(), block.getDrops());
|
||||
}
|
||||
else {
|
||||
Tree tree = (Tree) blockState.getData();
|
||||
tree.setDirection(BlockFace.UP);
|
||||
//TODO Remove this workaround when casting to Tree works again
|
||||
if (blockState.getData() instanceof Tree) {
|
||||
Tree tree = (Tree) blockState.getData();
|
||||
tree.setDirection(BlockFace.UP);
|
||||
}
|
||||
|
||||
switch (material) {
|
||||
case LOG:
|
||||
case LOG_2:
|
||||
if (canGetDoubleDrops()) {
|
||||
Woodcutting.checkForDoubleDrop(blockState);
|
||||
}
|
||||
@@ -154,6 +158,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
break;
|
||||
|
||||
case LEAVES:
|
||||
case LEAVES_2:
|
||||
Misc.dropItems(blockState.getLocation(), block.getDrops());
|
||||
break;
|
||||
|
||||
|
||||
@@ -113,7 +113,9 @@ public final class BlockUtils {
|
||||
switch (blockState.getType()) {
|
||||
case BROWN_MUSHROOM:
|
||||
case CACTUS:
|
||||
case DOUBLE_PLANT:
|
||||
case MELON_BLOCK:
|
||||
case LONG_GRASS:
|
||||
case PUMPKIN:
|
||||
case RED_MUSHROOM:
|
||||
case RED_ROSE:
|
||||
@@ -151,10 +153,13 @@ public final class BlockUtils {
|
||||
switch (blockState.getType()) {
|
||||
case ENDER_STONE:
|
||||
case GLOWSTONE:
|
||||
case HARD_CLAY:
|
||||
case MOSSY_COBBLESTONE:
|
||||
case NETHERRACK:
|
||||
case OBSIDIAN:
|
||||
case PACKED_ICE:
|
||||
case SANDSTONE:
|
||||
case STAINED_CLAY:
|
||||
case STONE:
|
||||
return true;
|
||||
|
||||
@@ -196,6 +201,7 @@ public final class BlockUtils {
|
||||
public static boolean isLog(BlockState blockState) {
|
||||
switch (blockState.getType()) {
|
||||
case LOG:
|
||||
case LOG_2:
|
||||
case HUGE_MUSHROOM_1:
|
||||
case HUGE_MUSHROOM_2:
|
||||
return true;
|
||||
@@ -214,6 +220,7 @@ public final class BlockUtils {
|
||||
public static boolean isLeaves(BlockState blockState) {
|
||||
switch (blockState.getType()) {
|
||||
case LEAVES:
|
||||
case LEAVES_2:
|
||||
return true;
|
||||
|
||||
default:
|
||||
@@ -276,7 +283,7 @@ public final class BlockUtils {
|
||||
* Determine if a given block can be made into Mycelium
|
||||
*
|
||||
* @param blockState The {@link BlockState} of the block to check
|
||||
* @return true if the block can be made in Mycelium, false otherwise
|
||||
* @return true if the block can be made into Mycelium, false otherwise
|
||||
*/
|
||||
public static boolean canMakeShroomy(BlockState blockState) {
|
||||
switch (blockState.getType()) {
|
||||
|
||||
@@ -10,8 +10,10 @@ import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.EnumSet;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
@@ -20,11 +22,13 @@ import org.bukkit.DyeColor;
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Firework;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerStatisticIncrementEvent;
|
||||
import org.bukkit.inventory.meta.FireworkMeta;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
@@ -67,8 +71,45 @@ public final class HolidayManager {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static FakeSkillType getByStatistic(Statistic statistic) {
|
||||
switch (statistic) {
|
||||
case DAMAGE_TAKEN:
|
||||
return FakeSkillType.MACHO;
|
||||
case JUMP:
|
||||
return FakeSkillType.JUMPING;
|
||||
case DROP:
|
||||
return FakeSkillType.THROWING;
|
||||
case MINE_BLOCK:
|
||||
case BREAK_ITEM:
|
||||
return FakeSkillType.WRECKING;
|
||||
case CRAFT_ITEM:
|
||||
return FakeSkillType.CRAFTING;
|
||||
case WALK_ONE_CM:
|
||||
return FakeSkillType.WALKING;
|
||||
case SWIM_ONE_CM:
|
||||
return FakeSkillType.SWIMMING;
|
||||
case FALL_ONE_CM:
|
||||
return FakeSkillType.FALLING;
|
||||
case CLIMB_ONE_CM:
|
||||
return FakeSkillType.CLIMBING;
|
||||
case FLY_ONE_CM:
|
||||
return FakeSkillType.FLYING;
|
||||
case DIVE_ONE_CM:
|
||||
return FakeSkillType.DIVING;
|
||||
case PIG_ONE_CM:
|
||||
return FakeSkillType.PIGGY;
|
||||
default:
|
||||
return FakeSkillType.UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final Set<Statistic> movementStatistics = EnumSet.of(
|
||||
Statistic.WALK_ONE_CM, Statistic.SWIM_ONE_CM, Statistic.FALL_ONE_CM,
|
||||
Statistic.CLIMB_ONE_CM, Statistic.FLY_ONE_CM, Statistic.DIVE_ONE_CM,
|
||||
Statistic.PIG_ONE_CM);
|
||||
|
||||
static {
|
||||
List<Color> colors = new ArrayList<Color>();
|
||||
List<ChatColor> chatColors = new ArrayList<ChatColor>();
|
||||
@@ -301,8 +342,40 @@ public final class HolidayManager {
|
||||
return mcMMO.getHolidayManager().getDateRange(day.getTime(), start.getTime(), end.getTime());
|
||||
}
|
||||
|
||||
public void handleStatisticEvent(PlayerStatisticIncrementEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Statistic statistic = event.getStatistic();
|
||||
int newValue = event.getNewValue();
|
||||
|
||||
int modifier;
|
||||
switch (statistic) {
|
||||
case DAMAGE_TAKEN:
|
||||
modifier = 500;
|
||||
break;
|
||||
case JUMP:
|
||||
modifier = 500;
|
||||
break;
|
||||
case DROP:
|
||||
modifier = 200;
|
||||
break;
|
||||
case MINE_BLOCK:
|
||||
case BREAK_ITEM:
|
||||
modifier = 500;
|
||||
break;
|
||||
case CRAFT_ITEM:
|
||||
modifier = 100;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (newValue % modifier == 0) {
|
||||
mcMMO.getHolidayManager().levelUpApril(player, FakeSkillType.getByStatistic(statistic));
|
||||
}
|
||||
}
|
||||
|
||||
public void levelUpApril(Player player, FakeSkillType fakeSkillType) {
|
||||
int levelTotal = Misc.getRandom().nextInt(UserManager.getPlayer(player).getSkillLevel(SkillType.MINING)) + 1;
|
||||
int levelTotal = Misc.getRandom().nextInt(1 + UserManager.getPlayer(player).getSkillLevel(SkillType.MINING)) + 1;
|
||||
player.playSound(player.getLocation(), Sound.LEVEL_UP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH);
|
||||
player.sendMessage(ChatColor.YELLOW + StringUtils.getCapitalized(fakeSkillType.toString()) + " skill increased by 1. Total (" + levelTotal + ")");
|
||||
ParticleEffectUtils.fireworkParticleShower(player, ALL_COLORS.get(Misc.getRandom().nextInt(ALL_COLORS.size())));
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.CoalType;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.FurnaceRecipe;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.material.Coal;
|
||||
import org.bukkit.material.Dye;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
@@ -586,6 +588,8 @@ public final class ItemUtils {
|
||||
case PUMPKIN_SEEDS:
|
||||
case WATER_LILY:
|
||||
case VINE:
|
||||
case LONG_GRASS:
|
||||
case DOUBLE_PLANT:
|
||||
return true;
|
||||
|
||||
case INK_SACK:
|
||||
@@ -614,7 +618,6 @@ public final class ItemUtils {
|
||||
case PORK:
|
||||
case GRILLED_PORK:
|
||||
case WOOL:
|
||||
case RED_ROSE: // Not sure we should include this, as it will also trigger from herbalism
|
||||
case IRON_INGOT:
|
||||
case SNOW_BALL:
|
||||
case BLAZE_ROD:
|
||||
@@ -627,12 +630,17 @@ public final class ItemUtils {
|
||||
case ARROW:
|
||||
case SLIME_BALL:
|
||||
case NETHER_STAR:
|
||||
case COAL: // Not sure we should include this, as it will also trigger when mining
|
||||
case ROTTEN_FLESH:
|
||||
case GOLD_NUGGET:
|
||||
case EGG:
|
||||
return true;
|
||||
|
||||
case COAL: // Not sure we should include this, as it will also trigger when mining
|
||||
return (((Coal) item.getData()).getType() == CoalType.COAL);
|
||||
|
||||
case RED_ROSE: // Not sure we should include this, as it will also trigger from herbalism
|
||||
return (item.getData().getData() == 0x0);
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -647,7 +655,9 @@ public final class ItemUtils {
|
||||
public static boolean isWoodcuttingDrop(ItemStack item) {
|
||||
switch (item.getType()) {
|
||||
case LOG:
|
||||
case LOG_2:
|
||||
case LEAVES:
|
||||
case LEAVES_2:
|
||||
case SAPLING:
|
||||
case APPLE:
|
||||
return true;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TreeSpecies;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
||||
@@ -30,6 +31,10 @@ public class StringUtils {
|
||||
return createPrettyEnumString(ability.toString());
|
||||
}
|
||||
|
||||
public static String getPrettyTreeSpeciesString(TreeSpecies species) {
|
||||
return createPrettyEnumString(species.toString());
|
||||
}
|
||||
|
||||
public static String getPrettySecondaryAbilityString(SecondaryAbility secondaryAbility) {
|
||||
switch (secondaryAbility) {
|
||||
case HERBALISM_DOUBLE_DROPS:
|
||||
|
||||
@@ -7,7 +7,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
@@ -40,21 +39,21 @@ public class ScoreboardManager {
|
||||
|
||||
static final String POWER_LEVEL = LocaleLoader.getString("Scoreboard.Misc.PowerLevel");
|
||||
|
||||
static final OfflinePlayer LABEL_POWER_LEVEL = getOfflinePlayer(POWER_LEVEL);
|
||||
static final OfflinePlayer LABEL_LEVEL = getOfflinePlayer(LocaleLoader.getString("Scoreboard.Misc.Level"));
|
||||
static final OfflinePlayer LABEL_CURRENT_XP = getOfflinePlayer(LocaleLoader.getString("Scoreboard.Misc.CurrentXP"));
|
||||
static final OfflinePlayer LABEL_REMAINING_XP = getOfflinePlayer(LocaleLoader.getString("Scoreboard.Misc.RemainingXP"));
|
||||
static final OfflinePlayer LABEL_ABILITY_COOLDOWN = getOfflinePlayer(LocaleLoader.getString("Scoreboard.Misc.Cooldown"));
|
||||
static final OfflinePlayer LABEL_OVERALL = getOfflinePlayer(LocaleLoader.getString("Scoreboard.Misc.Overall"));
|
||||
static final String LABEL_POWER_LEVEL = POWER_LEVEL;
|
||||
static final String LABEL_LEVEL = LocaleLoader.getString("Scoreboard.Misc.Level");
|
||||
static final String LABEL_CURRENT_XP = LocaleLoader.getString("Scoreboard.Misc.CurrentXP");
|
||||
static final String LABEL_REMAINING_XP = LocaleLoader.getString("Scoreboard.Misc.RemainingXP");
|
||||
static final String LABEL_ABILITY_COOLDOWN = LocaleLoader.getString("Scoreboard.Misc.Cooldown");
|
||||
static final String LABEL_OVERALL = LocaleLoader.getString("Scoreboard.Misc.Overall");
|
||||
|
||||
static final Map<SkillType, OfflinePlayer> skillLabels;
|
||||
static final Map<AbilityType, OfflinePlayer> abilityLabelsColored;
|
||||
static final Map<AbilityType, OfflinePlayer> abilityLabelsSkill;
|
||||
static final Map<SkillType, String> skillLabels;
|
||||
static final Map<AbilityType, String> abilityLabelsColored;
|
||||
static final Map<AbilityType, String> abilityLabelsSkill;
|
||||
|
||||
static {
|
||||
ImmutableMap.Builder<SkillType, OfflinePlayer> skillLabelBuilder = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<AbilityType, OfflinePlayer> abilityLabelBuilder = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<AbilityType, OfflinePlayer> abilityLabelSkillBuilder = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<SkillType, String> skillLabelBuilder = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<AbilityType, String> abilityLabelBuilder = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<AbilityType, String> abilityLabelSkillBuilder = ImmutableMap.builder();
|
||||
|
||||
if (Config.getInstance().getScoreboardRainbows()) {
|
||||
// Everything but black, gray, gold
|
||||
@@ -78,36 +77,38 @@ public class ScoreboardManager {
|
||||
int i = 0;
|
||||
for (SkillType type : SkillType.values()) {
|
||||
// Include child skills
|
||||
skillLabelBuilder.put(type, getOfflinePlayer(colors.get(i) + type.getName()));
|
||||
skillLabelBuilder.put(type, getShortenedName(colors.get(i) + type.getName(), false));
|
||||
|
||||
if (type.getAbility() != null) {
|
||||
abilityLabelBuilder.put(type.getAbility(), getOfflinePlayer(colors.get(i) + type.getAbility().getName()));
|
||||
abilityLabelBuilder.put(type.getAbility(), getShortenedName(colors.get(i) + type.getAbility().getName()));
|
||||
|
||||
if (type == SkillType.MINING) {
|
||||
abilityLabelBuilder.put(AbilityType.BLAST_MINING, getOfflinePlayer(colors.get(i) + AbilityType.BLAST_MINING.getName()));
|
||||
abilityLabelBuilder.put(AbilityType.BLAST_MINING, getShortenedName(colors.get(i) + AbilityType.BLAST_MINING.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
if (++i == colors.size()) i = 0;
|
||||
if (++i == colors.size()) {
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (SkillType type : SkillType.values()) {
|
||||
// Include child skills
|
||||
skillLabelBuilder.put(type, getOfflinePlayer(ChatColor.GREEN + type.getName()));
|
||||
skillLabelBuilder.put(type, getShortenedName(ChatColor.GREEN + type.getName()));
|
||||
|
||||
if (type.getAbility() != null) {
|
||||
abilityLabelBuilder.put(type.getAbility(), getOfflinePlayerDots(ChatColor.AQUA + type.getAbility().getName()));
|
||||
abilityLabelBuilder.put(type.getAbility(), getShortenedName(ChatColor.AQUA + type.getAbility().getName()));
|
||||
|
||||
if (type == SkillType.MINING) {
|
||||
abilityLabelBuilder.put(AbilityType.BLAST_MINING, getOfflinePlayerDots(ChatColor.AQUA + AbilityType.BLAST_MINING.getName()));
|
||||
abilityLabelBuilder.put(AbilityType.BLAST_MINING, getShortenedName(ChatColor.AQUA + AbilityType.BLAST_MINING.getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (AbilityType type : AbilityType.values()) {
|
||||
abilityLabelSkillBuilder.put(type, getOfflinePlayerDots((type == AbilityType.BLAST_MINING ? ChatColor.BLUE : ChatColor.AQUA) + type.getName()));
|
||||
abilityLabelSkillBuilder.put(type, getShortenedName((type == AbilityType.BLAST_MINING ? ChatColor.BLUE : ChatColor.AQUA) + type.getName()));
|
||||
}
|
||||
|
||||
skillLabels = skillLabelBuilder.build();
|
||||
@@ -117,22 +118,6 @@ public class ScoreboardManager {
|
||||
|
||||
private static List<String> dirtyPowerLevels = new ArrayList<String>();
|
||||
|
||||
private static OfflinePlayer getOfflinePlayer(String name) {
|
||||
return getOfflinePlayer(name, false);
|
||||
}
|
||||
|
||||
private static OfflinePlayer getOfflinePlayerDots(String name) {
|
||||
return getOfflinePlayer(name, true);
|
||||
}
|
||||
|
||||
private static OfflinePlayer getOfflinePlayer(String name, boolean useDots) {
|
||||
if (name.length() > 16) {
|
||||
name = useDots ? name.substring(0, 14) + ".." : name.substring(0, 16);
|
||||
}
|
||||
|
||||
return mcMMO.p.getServer().getOfflinePlayer(name);
|
||||
}
|
||||
|
||||
public enum SidebarType {
|
||||
NONE,
|
||||
SKILL_BOARD,
|
||||
@@ -142,6 +127,18 @@ public class ScoreboardManager {
|
||||
TOP_BOARD;
|
||||
}
|
||||
|
||||
private static String getShortenedName(String name) {
|
||||
return getShortenedName(name, true);
|
||||
}
|
||||
|
||||
private static String getShortenedName(String name, boolean useDots) {
|
||||
if (name.length() > 16) {
|
||||
name = useDots ? name.substring(0, 14) + ".." : name.substring(0, 16);
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
// **** Listener call-ins **** //
|
||||
|
||||
// Called by PlayerJoinEvent listener
|
||||
@@ -338,7 +335,7 @@ public class ScoreboardManager {
|
||||
Player player = mcMMOPlayer.getPlayer();
|
||||
int power = mcMMOPlayer.getPowerLevel();
|
||||
|
||||
mainObjective.getScore(player).setScore(power);
|
||||
mainObjective.getScore(playerName).setScore(power);
|
||||
|
||||
for (ScoreboardWrapper wrapper : PLAYER_SCOREBOARDS.values()) {
|
||||
wrapper.updatePowerLevel(player, power);
|
||||
@@ -351,7 +348,7 @@ public class ScoreboardManager {
|
||||
|
||||
/**
|
||||
* Gets or creates the power level objective on the main scoreboard.
|
||||
* <p>
|
||||
* <p/>
|
||||
* If power levels are disabled, the objective is deleted and null is
|
||||
* returned.
|
||||
*
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
public class ScoreboardWrapper {
|
||||
|
||||
// Initialization variables
|
||||
public final String playerName;
|
||||
private final Scoreboard scoreboard;
|
||||
@@ -59,7 +58,7 @@ public class ScoreboardWrapper {
|
||||
powerObjective.setDisplaySlot(DisplaySlot.BELOW_NAME);
|
||||
|
||||
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) {
|
||||
powerObjective.getScore(mcMMOPlayer.getPlayer()).setScore(mcMMOPlayer.getPowerLevel());
|
||||
powerObjective.getScore(mcMMOPlayer.getProfile().getPlayerName()).setScore(mcMMOPlayer.getPowerLevel());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -69,6 +68,7 @@ public class ScoreboardWrapper {
|
||||
}
|
||||
|
||||
public BukkitTask updateTask = null;
|
||||
|
||||
private class ScoreboardQuickUpdate extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -78,6 +78,7 @@ public class ScoreboardWrapper {
|
||||
}
|
||||
|
||||
public BukkitTask revertTask = null;
|
||||
|
||||
private class ScoreboardChangeTask extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -87,6 +88,7 @@ public class ScoreboardWrapper {
|
||||
}
|
||||
|
||||
public BukkitTask cooldownTask = null;
|
||||
|
||||
private class ScoreboardCooldownTask extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -121,7 +123,8 @@ public class ScoreboardWrapper {
|
||||
try {
|
||||
cooldownTask.cancel();
|
||||
}
|
||||
catch (Throwable ignored) {}
|
||||
catch (Throwable ignored) {
|
||||
}
|
||||
|
||||
cooldownTask = null;
|
||||
}
|
||||
@@ -274,7 +277,7 @@ public class ScoreboardWrapper {
|
||||
targetProfile = null;
|
||||
leaderboardPage = -1;
|
||||
|
||||
loadObjective(ScoreboardManager.skillLabels.get(skill).getName());
|
||||
loadObjective(ScoreboardManager.skillLabels.get(skill));
|
||||
}
|
||||
|
||||
public void setTypeSelfStats() {
|
||||
@@ -355,7 +358,7 @@ public class ScoreboardWrapper {
|
||||
|
||||
int endPosition = page * 15;
|
||||
int startPosition = endPosition - 14;
|
||||
loadObjective(String.format("%s (%2d - %2d)", ScoreboardManager.skillLabels.get(skill).getName(), startPosition, endPosition));
|
||||
loadObjective(String.format("%s (%2d - %2d)", ScoreboardManager.skillLabels.get(skill), startPosition, endPosition));
|
||||
}
|
||||
|
||||
// Setup for after a board type change
|
||||
@@ -381,7 +384,8 @@ public class ScoreboardWrapper {
|
||||
try {
|
||||
updateTask.cancel();
|
||||
}
|
||||
catch (Throwable ignored) {} // catch NullPointerException and IllegalStateException and any Error; don't care
|
||||
catch (Throwable ignored) {
|
||||
} // catch NullPointerException and IllegalStateException and any Error; don't care
|
||||
|
||||
updateTask = null;
|
||||
|
||||
@@ -399,123 +403,123 @@ public class ScoreboardWrapper {
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
switch (sidebarType) {
|
||||
case NONE:
|
||||
break;
|
||||
case NONE:
|
||||
break;
|
||||
|
||||
case SKILL_BOARD:
|
||||
Validate.notNull(targetSkill);
|
||||
case SKILL_BOARD:
|
||||
Validate.notNull(targetSkill);
|
||||
|
||||
if (!targetSkill.isChildSkill()) {
|
||||
int currentXP = mcMMOPlayer.getSkillXpLevel(targetSkill);
|
||||
if (!targetSkill.isChildSkill()) {
|
||||
int currentXP = mcMMOPlayer.getSkillXpLevel(targetSkill);
|
||||
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_CURRENT_XP).setScore(currentXP);
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_REMAINING_XP).setScore(mcMMOPlayer.getXpToLevel(targetSkill) - currentXP);
|
||||
}
|
||||
else {
|
||||
for (SkillType parentSkill : FamilyTree.getParents(targetSkill)) {
|
||||
sidebarObjective.getScore(ScoreboardManager.skillLabels.get(parentSkill)).setScore(mcMMOPlayer.getSkillLevel(parentSkill));
|
||||
}
|
||||
}
|
||||
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
||||
|
||||
if (targetSkill.getAbility() != null) {
|
||||
boolean stopUpdating;
|
||||
|
||||
if (targetSkill == SkillType.MINING) {
|
||||
// Special-Case: Mining has two abilities, both with cooldowns
|
||||
Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.SUPER_BREAKER));
|
||||
Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.BLAST_MINING));
|
||||
int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.SUPER_BREAKER), 0);
|
||||
int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.BLAST_MINING), 0);
|
||||
|
||||
cooldownSB.setScore(secondsSB);
|
||||
cooldownBM.setScore(secondsBM);
|
||||
|
||||
stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_CURRENT_XP).setScore(currentXP);
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_REMAINING_XP).setScore(mcMMOPlayer.getXpToLevel(targetSkill) - currentXP);
|
||||
}
|
||||
else {
|
||||
AbilityType ability = targetSkill.getAbility();
|
||||
Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
||||
for (SkillType parentSkill : FamilyTree.getParents(targetSkill)) {
|
||||
sidebarObjective.getScore(ScoreboardManager.skillLabels.get(parentSkill)).setScore(mcMMOPlayer.getSkillLevel(parentSkill));
|
||||
}
|
||||
}
|
||||
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
||||
|
||||
if (targetSkill.getAbility() != null) {
|
||||
boolean stopUpdating;
|
||||
|
||||
if (targetSkill == SkillType.MINING) {
|
||||
// Special-Case: Mining has two abilities, both with cooldowns
|
||||
Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.SUPER_BREAKER));
|
||||
Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.BLAST_MINING));
|
||||
int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.SUPER_BREAKER), 0);
|
||||
int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.BLAST_MINING), 0);
|
||||
|
||||
cooldownSB.setScore(secondsSB);
|
||||
cooldownBM.setScore(secondsBM);
|
||||
|
||||
stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
||||
}
|
||||
else {
|
||||
AbilityType ability = targetSkill.getAbility();
|
||||
Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
||||
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
||||
|
||||
cooldown.setScore(seconds);
|
||||
|
||||
stopUpdating = seconds == 0;
|
||||
}
|
||||
|
||||
if (stopUpdating) {
|
||||
stopCooldownUpdating();
|
||||
}
|
||||
else {
|
||||
startCooldownUpdating();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case COOLDOWNS_BOARD:
|
||||
boolean anyCooldownsActive = false;
|
||||
|
||||
for (AbilityType ability : AbilityType.values()) {
|
||||
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
||||
|
||||
cooldown.setScore(seconds);
|
||||
if (seconds != 0) {
|
||||
anyCooldownsActive = true;
|
||||
}
|
||||
|
||||
stopUpdating = seconds == 0;
|
||||
sidebarObjective.getScore(ScoreboardManager.abilityLabelsColored.get(ability)).setScore(seconds);
|
||||
}
|
||||
|
||||
if (stopUpdating) {
|
||||
stopCooldownUpdating();
|
||||
}
|
||||
else {
|
||||
if (anyCooldownsActive) {
|
||||
startCooldownUpdating();
|
||||
}
|
||||
}
|
||||
break;
|
||||
else {
|
||||
stopCooldownUpdating();
|
||||
}
|
||||
break;
|
||||
|
||||
case COOLDOWNS_BOARD:
|
||||
boolean anyCooldownsActive = false;
|
||||
case STATS_BOARD:
|
||||
// Select the profile to read from
|
||||
PlayerProfile newProfile;
|
||||
|
||||
for (AbilityType ability : AbilityType.values()) {
|
||||
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
||||
|
||||
if (seconds != 0) {
|
||||
anyCooldownsActive = true;
|
||||
if (targetProfile != null) {
|
||||
newProfile = targetProfile; // offline
|
||||
}
|
||||
else if (targetPlayer == null) {
|
||||
newProfile = mcMMOPlayer.getProfile(); // self
|
||||
}
|
||||
else {
|
||||
newProfile = UserManager.getPlayer(targetPlayer).getProfile(); // online
|
||||
}
|
||||
|
||||
sidebarObjective.getScore(ScoreboardManager.abilityLabelsColored.get(ability)).setScore(seconds);
|
||||
}
|
||||
// Calculate power level here
|
||||
int powerLevel = 0;
|
||||
for (SkillType skill : SkillType.NON_CHILD_SKILLS) { // Don't include child skills, makes the list too long
|
||||
int level = newProfile.getSkillLevel(skill);
|
||||
|
||||
if (anyCooldownsActive) {
|
||||
startCooldownUpdating();
|
||||
}
|
||||
else {
|
||||
stopCooldownUpdating();
|
||||
}
|
||||
break;
|
||||
powerLevel += level;
|
||||
|
||||
case STATS_BOARD:
|
||||
// Select the profile to read from
|
||||
PlayerProfile newProfile;
|
||||
// TODO: Verify that this is what we want - calculated in power level but not displayed
|
||||
if (!skill.getPermissions(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (targetProfile != null) {
|
||||
newProfile = targetProfile; // offline
|
||||
}
|
||||
else if (targetPlayer == null) {
|
||||
newProfile = mcMMOPlayer.getProfile(); // self
|
||||
}
|
||||
else {
|
||||
newProfile = UserManager.getPlayer(targetPlayer).getProfile(); // online
|
||||
}
|
||||
|
||||
// Calculate power level here
|
||||
int powerLevel = 0;
|
||||
for (SkillType skill : SkillType.NON_CHILD_SKILLS) { // Don't include child skills, makes the list too long
|
||||
int level = newProfile.getSkillLevel(skill);
|
||||
|
||||
powerLevel += level;
|
||||
|
||||
// TODO: Verify that this is what we want - calculated in power level but not displayed
|
||||
if (!skill.getPermissions(player)) {
|
||||
continue;
|
||||
sidebarObjective.getScore(ScoreboardManager.skillLabels.get(skill)).setScore(level);
|
||||
}
|
||||
|
||||
sidebarObjective.getScore(ScoreboardManager.skillLabels.get(skill)).setScore(level);
|
||||
}
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_POWER_LEVEL).setScore(powerLevel);
|
||||
break;
|
||||
|
||||
sidebarObjective.getScore(ScoreboardManager.LABEL_POWER_LEVEL).setScore(powerLevel);
|
||||
break;
|
||||
|
||||
case RANK_BOARD:
|
||||
case TOP_BOARD:
|
||||
case RANK_BOARD:
|
||||
case TOP_BOARD:
|
||||
/*
|
||||
* @see #acceptRankData(Map<SkillType, Integer> rank)
|
||||
* @see #acceptLeaderboardData(List<PlayerStat> stats)
|
||||
*/
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -550,11 +554,11 @@ public class ScoreboardWrapper {
|
||||
name = ChatColor.GOLD + "--You--";
|
||||
}
|
||||
|
||||
sidebarObjective.getScore(mcMMO.p.getServer().getOfflinePlayer(name)).setScore(stat.statVal);
|
||||
sidebarObjective.getScore(name).setScore(stat.statVal);
|
||||
}
|
||||
}
|
||||
|
||||
public void updatePowerLevel(Player player, int newPowerLevel) {
|
||||
powerObjective.getScore(player).setScore(newPowerLevel);
|
||||
powerObjective.getScore(player.getName()).setScore(newPowerLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -263,10 +264,10 @@ public final class CombatUtils {
|
||||
}
|
||||
else if (entityType == EntityType.ARROW) {
|
||||
Arrow arrow = (Arrow) damager;
|
||||
LivingEntity shooter = arrow.getShooter();
|
||||
ProjectileSource projectileSource = arrow.getShooter();
|
||||
|
||||
if (shooter != null && shooter instanceof Player && SkillType.ARCHERY.shouldProcess(target)) {
|
||||
Player player = (Player) shooter;
|
||||
if (projectileSource != null && projectileSource instanceof Player && SkillType.ARCHERY.shouldProcess(target)) {
|
||||
Player player = (Player) projectileSource;
|
||||
|
||||
if (!Misc.isNPCEntity(player) && SkillType.ARCHERY.getPermissions(player)) {
|
||||
processArcheryCombat(target, player, event, arrow);
|
||||
|
||||
@@ -294,6 +294,7 @@ Skills:
|
||||
Fishing:
|
||||
Level_Cap: 0
|
||||
Drops_Enabled: true
|
||||
Override_Vanilla_Treasures: true
|
||||
# Always catch fish, even when treasure is found
|
||||
Extra_Fish: false
|
||||
Herbalism:
|
||||
@@ -394,10 +395,12 @@ Double_Drops:
|
||||
Sandstone: true
|
||||
Stone: true
|
||||
Woodcutting:
|
||||
Oak: true
|
||||
Acacia: true
|
||||
Birch: true
|
||||
Spruce: true
|
||||
Dark_Oak: true
|
||||
Generic: true
|
||||
Jungle: true
|
||||
Redwood: true
|
||||
|
||||
#
|
||||
# Settings for commands
|
||||
|
||||
@@ -80,9 +80,22 @@ Experience:
|
||||
# FeatherFall_Multiplier: Multiply Acrobatics XP by this value when wearing boots with the Feather Fall enchant
|
||||
FeatherFall_Multiplier: 2.0
|
||||
Alchemy:
|
||||
Potion: 120
|
||||
# Alchemy potion stages are based on the number of ingredients added
|
||||
# Potion_Stage_1 represents a base potion
|
||||
# Potion_Stage_2 represents a base potion with one ingredient
|
||||
# Potion_Stage_3 represents a base potion with one ingredient and one amplifier
|
||||
# Potion_Stage_4 represents a base potion with one ingredient and two amplifiers
|
||||
# Potion_Stage_5 represents a base potion with one ingredient where the amplifiers are swapped
|
||||
Potion_Stage_1: 15
|
||||
Potion_Stage_2: 30
|
||||
Potion_Stage_3: 60
|
||||
Potion_Stage_4: 120
|
||||
Potion_Stage_5: 0
|
||||
Fishing:
|
||||
Base: 800
|
||||
Raw_Fish: 800
|
||||
Raw_Salmon: 800
|
||||
Clownfish: 800
|
||||
Pufferfish: 800
|
||||
Shake: 50
|
||||
Excavation:
|
||||
Clay: 40
|
||||
@@ -95,27 +108,46 @@ Experience:
|
||||
Snow_Block: 40
|
||||
Soul_Sand: 40
|
||||
Woodcutting:
|
||||
Oak: 70
|
||||
Spruce: 80
|
||||
Acacia: 90
|
||||
Birch: 90
|
||||
Dark_Oak: 90
|
||||
Generic: 70
|
||||
Jungle: 100
|
||||
Redwood: 80
|
||||
Huge_Mushroom_Red: 70
|
||||
Huge_Mushroom_Brown: 70
|
||||
Herbalism:
|
||||
Allium: 300
|
||||
Azure_Bluet: 150
|
||||
Blue_Orchid: 150
|
||||
Brown_Mushroom: 150
|
||||
Cactus: 30
|
||||
Carrot: 50
|
||||
Cocoa: 30
|
||||
Crops: 50
|
||||
Dead_Bush: 30
|
||||
Lilac: 50
|
||||
Melon_Block: 20
|
||||
Nether_Warts: 50
|
||||
Orange_Tulip: 150
|
||||
Oxeye_Daisy: 150
|
||||
Peony: 50
|
||||
Pink_Tulip: 150
|
||||
Poppy: 100
|
||||
Potato: 50
|
||||
Pumpkin: 20
|
||||
Red_Mushroom: 150
|
||||
Red_Rose: 100
|
||||
Red_Tulip: 150
|
||||
Rose_Bush: 50
|
||||
Small_Fern: 10
|
||||
Small_Grass: 10
|
||||
Sugar_Cane_Block: 30
|
||||
Sunflower: 50
|
||||
Tall_Grass: 50
|
||||
Tall_Fern: 50
|
||||
Vine: 10
|
||||
Water_Lily: 100
|
||||
White_Tulip: 150
|
||||
Yellow_Flower: 100
|
||||
Mining:
|
||||
Coal_Ore: 100
|
||||
@@ -124,14 +156,17 @@ Experience:
|
||||
Ender_Stone: 150
|
||||
Glowstone: 30
|
||||
Gold_Ore: 350
|
||||
Hard_Clay: 30
|
||||
Iron_Ore: 250
|
||||
Lapis_Ore: 400
|
||||
Mossy_Cobblestone: 30
|
||||
Netherrack: 30
|
||||
Obsidian: 150
|
||||
Packed_Ice: 50
|
||||
Quartz_Ore: 100
|
||||
Redstone_Ore: 150
|
||||
Sandstone: 30
|
||||
Stained_Clay: 50
|
||||
Stone: 30
|
||||
Repair:
|
||||
Base: 1000.0
|
||||
|
||||
@@ -95,7 +95,6 @@ Fishing.Effect.10=Ryba\u0159en\u00ed v ledu
|
||||
Fishing.Effect.11=Umo\u017e\u0148uje v\u00e1m ryba\u0159it v ledov\u00fdch prost\u0159ed\u00edch
|
||||
Fishing.Chance.Raining=[[BLUE]] De\u0161\u0165ov\u00fd bonus
|
||||
Fishing.Listener=Rybareni:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Nasel si poklad!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]C\u00edt\u00edte dotek magie s t\u00edmto \u00falovkem...
|
||||
Fishing.SkillName=RYBARENI
|
||||
Fishing.Skillup=[[YELLOW]]Dovednost v rybareni byla navysena o {0}. Celkem ({1})
|
||||
|
||||
@@ -87,7 +87,6 @@ Fishing.Effect.6=Fisherman\'s Diet
|
||||
Fishing.Effect.7=Improves hunger restored from fished foods
|
||||
Fishing.Chance.Raining=[[BLUE]] Rain Bonus
|
||||
Fishing.Listener=Fishing:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Treasure found!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.SkillName=FISHING
|
||||
Fishing.Skillup=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
|
||||
@@ -87,7 +87,6 @@ Fishing.Effect.6=Fiskers Diet
|
||||
Fishing.Effect.7=Forbedrer Sult genoprettet af Fisked mad
|
||||
Fishing.Chance.Raining=[[BLUE]] Regn Bonus
|
||||
Fishing.Listener=Fiskeri:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]Du har fundet en skat!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]Du f\u00f8ler et strejf a magi med denne fangst...
|
||||
Fishing.SkillName=FISKER
|
||||
Fishing.Skillup=[[YELLOW]]Fisker evne for\u00f8get med {0}. Total ({1})
|
||||
|
||||
@@ -87,7 +87,6 @@ Fishing.Effect.6=Fischer-Mahlzeit
|
||||
Fishing.Effect.7=Verbessert Effizienz von geangelter Nahrung
|
||||
Fishing.Chance.Raining=[[BLUE]] Rain Bonus
|
||||
Fishing.Listener=Angeln:
|
||||
Fishing.Ability.TH.ItemFound=[[AQUA]]Du hast einen Schatz gefunden!
|
||||
Fishing.Ability.TH.MagicFound=[[AQUA]]Dich ber\u00fchrt ein leichter Zauber bei diesem Fang...
|
||||
Fishing.SkillName=ANGELN
|
||||
Fishing.Skillup=[[YELLOW]]Angel Skill um {0} gestiegen. Gesamt ({1})
|
||||
|
||||
@@ -137,7 +137,6 @@ Fishing.Effect.10=Ice Fishing
|
||||
Fishing.Effect.11=Allows you to fish in icy biomes
|
||||
Fishing.Chance.Raining=[[BLUE]] Rain Bonus
|
||||
Fishing.Listener=Fishing:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Treasure found!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.Ability.TH.Boom=[[GRAY]]BOOM TIME!!!
|
||||
Fishing.Ability.TH.Poison=[[GRAY]]Something doesn't smell quite right...
|
||||
|
||||
@@ -96,7 +96,6 @@ Fishing.Effect.10=Pesca de hielo
|
||||
Fishing.Effect.11=Te permite pescar en biomas de hielo
|
||||
Fishing.Chance.Raining=[[BLUE]] Lluvia de Bonus
|
||||
Fishing.Listener=Pescador:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]\u00a1Tesoro encontrado!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]Sientes un toque de magia con esta pesca...
|
||||
Fishing.SkillName=PESCADOR
|
||||
Fishing.Skillup=[[YELLOW]]Habilidad de Pescador incrementada en {0}. Total ({1})
|
||||
|
||||
@@ -2,7 +2,6 @@ Acrobatics.Listener=Akrobaatika:
|
||||
Acrobatics.SkillName=AKROBAATIKA
|
||||
Acrobatics.Skillup=[[YELLOW]]Akrobaatika oskus kasvanud {0} v\u00f5rra. Kokku ({1})
|
||||
Archery.Skillup=[[YELLOW]]Vibunduse oskus kasvanud {0} v\u00f5rra. Kokku ({1})
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Varandus leitud!
|
||||
Mining.Ability.Lower=[[GRAY]]**TE LANGETASITE OMA KIRKA**
|
||||
Mining.Ability.Ready=[[GREEN]]**TE PANITE OMA KIRKA VALMIS**
|
||||
Mining.Listener=Kaevandamine:
|
||||
|
||||
@@ -36,7 +36,6 @@ Excavation.Skills.GigaDrillBreaker.On=[[GREEN]]**TEHO PORA HAJOITUS AKTIVOITU**
|
||||
Excavation.Skillup=[[YELLOW]]Kaivuu taito nousi {0} tasolla. Kokonaism\u00e4\u00e4r\u00e4 ({1})
|
||||
Fishing.Effect.0=Aarteenmets\u00e4st\u00e4j\u00e4 (Passiivinen)
|
||||
Fishing.Listener=Kalastus:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Treasure found!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.SkillName=KALASTUS
|
||||
Fishing.Skillup=[[YELLOW]]Kalastustaito nousi {0} tasolla. Kokonaism\u00e4\u00e4r\u00e4 ({1})
|
||||
|
||||
@@ -87,7 +87,6 @@ Fishing.Effect.6=R\u00e9gime de fermier
|
||||
Fishing.Effect.7=Am\u00e9liore la nutrition des produits de la ferme
|
||||
Fishing.Chance.Raining=[[BLUE]] Bonus de pluie
|
||||
Fishing.Listener=P\u00eache :
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Tr\u00e9sor d\u00e9couvert !
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]Vous ressentez quelque chose de magique dans cette prise...
|
||||
Fishing.SkillName=P\u00caCHE
|
||||
Fishing.Skillup=[[YELLOW]]Le talent p\u00eache augmente de {0}. Total ({1})
|
||||
|
||||
@@ -25,7 +25,6 @@ Excavation.Skills.GigaDrillBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] haszn\u00
|
||||
Excavation.Skillup=[[YELLOW]]\u00c1s\u00e1s fejl\u0151d\u00f6tt {0} szinttel. \u00d6sszesen: ({1})
|
||||
Fishing.Effect.10=J\u00e9g Horg\u00e1szat
|
||||
Fishing.Listener=Horg\u00e1szat:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Kincs megtal\u00e1lva!
|
||||
Fishing.SkillName=HORG\u00c1SZAT
|
||||
Herbalism.Ability.Lower=[[GRAY]]**LETETTED A KAP\u00c1DAT**
|
||||
Herbalism.Ability.Ready=[[GREEN]]**EL\u0150K\u00c9SZ\u00cdTETTED A KAP\u00c1DAT**
|
||||
|
||||
@@ -98,7 +98,6 @@ Fishing.Effect.10=\uc5bc\uc74c \ub09a\uc2dc
|
||||
Fishing.Effect.11=\uc5bc\uc74c\uc774 \ub36e\ud600\uc788\ub294 \ud658\uacbd\uc5d0\uc11c \ub09a\uc2dc \uac00\ub2a5
|
||||
Fishing.Chance.Raining=[[BLUE]] \ube44 \ubcf4\ub108\uc2a4
|
||||
Fishing.Listener=\ub09a\uc2dc(FISHING):
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]\ubcf4\ubb3c \ubc1c\uacac!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]\uc774 \uc785\uc9c8\uc5d0\uc11c \ub9c8\ubc95\uc774 \ub290\uaef4\uc9d1\ub2c8\ub2e4...
|
||||
Fishing.Ability.TH.Boom=[[GRAY]]\ud3ed\ubc1c \uc2dc\uac04!!!
|
||||
Fishing.Ability.TH.Poison=[[GRAY]]\ubb54\uac00 \uaf64 \uad1c\ucc2e\uc740 \ub0c4\uc0c8\uac00 \ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4...
|
||||
|
||||
@@ -76,7 +76,6 @@ Fishing.Effect.10=Ijs Vissen
|
||||
Fishing.Effect.11=Stelt je in staat om te vissen in de ijzige biomen
|
||||
Fishing.Chance.Raining=[[BLUE]] Regen Bonus
|
||||
Fishing.Listener=Vissen:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Schat gevonden!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]Jij voelt een vleugje magie met deze vangst...
|
||||
Fishing.SkillName=VISSEN
|
||||
Herbalism.Ability.FD=[[RED]]Boeren Dieet: [[YELLOW]]Rank {0}
|
||||
|
||||
@@ -94,7 +94,6 @@ Fishing.Effect.10=Lodowe lowienie ryb
|
||||
Fishing.Effect.11=Pozwala na lowienie ryb w zimowych biomach
|
||||
Fishing.Chance.Raining=[[BLUE]] Bonus od Deszczu
|
||||
Fishing.Listener=Rybactwo
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Treasure found!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]Wyczuwasz w pobli\u017cu \u017ar\u00f3d\u0142o magii...
|
||||
Fishing.SkillName=RYBACTWO
|
||||
Fishing.Skillup=[[YELLOW]]Umiej\u0119tno\u015b\u0107 \u0142owienia wzros\u0142a o {0}. Razem ({1})
|
||||
|
||||
@@ -30,7 +30,6 @@ Excavation.Listener=Escavacao:
|
||||
Excavation.SkillName=Escava\u00e7\u00e3o
|
||||
Excavation.Skillup=[[YELLOW]]Habilidade de Escavacao aumentada em {0}. Total ({1})
|
||||
Fishing.Listener=Pescaria:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Tesouro encontrado!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.SkillName=PESCARIA
|
||||
Fishing.Skillup=[[YELLOW]]Habilidade em Pescaria aumentada em {0}. Total ({1})
|
||||
|
||||
@@ -98,7 +98,6 @@ Fishing.Effect.10=\u041f\u043e\u0434\u043b\u0435\u0434\u043d\u0430\u044f \u0420\
|
||||
Fishing.Effect.11=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0440\u044b\u0431\u0430\u0447\u0438\u0442\u044c \u0432 \u0441\u043d\u0435\u0436\u043d\u044b\u0445 \u0431\u0438\u043e\u043c\u0430\u0445
|
||||
Fishing.Chance.Raining=[[BLUE]] \u0411\u043e\u043d\u0443\u0441 \u0414\u043e\u0436\u0434\u044f
|
||||
Fishing.Listener=\u0420\u044b\u0431\u043e\u043b\u043e\u0432\u0441\u0442\u0432\u043e:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Treasure found!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.Ability.TH.Boom=[[GRAY]]\u0412\u0420\u0415\u041c\u042f \u0412\u0417\u0420\u042b\u0412\u0410\u0422\u042c!!!
|
||||
Fishing.Ability.TH.Poison=[[GRAY]]\u0427\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0430\u043a...
|
||||
|
||||
@@ -25,7 +25,6 @@ Excavation.Listener=Gr\u00e4vning:
|
||||
Excavation.SkillName=Gr\u00e4vning
|
||||
Excavation.Skills.GigaDrillBreaker.On=[[GREEN]]**GIGA BORR KROSSAREN AKTIVERAD**
|
||||
Excavation.Skillup=[[YELLOW]]Gr\u00e4vningsf\u00e4rdigheten har \u00f6kat med {0}. Totalt ({1})
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Skatt hittad!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]] Du f\u00e5r en k\u00e4nsla av magi med denna f\u00e5ngst....
|
||||
Herbalism.Ability.GTh=[[GREEN]]**GR\u00d6NA FINGRAR**
|
||||
Herbalism.Ability.Ready=[[GREEN]]**DU H\u00d6JER DIN SKYFFEL**
|
||||
|
||||
@@ -95,7 +95,6 @@ Fishing.Effect.10=Ice Fishing
|
||||
Fishing.Effect.11=\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e34\u0e43\u0e2b\u0e49\u0e15\u0e01\u0e1b\u0e25\u0e32\u0e43\u0e19\u0e19\u0e49\u0e33\u0e41\u0e02\u0e47\u0e07
|
||||
Fishing.Chance.Raining=[[BLUE]] Rain Bonus
|
||||
Fishing.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Fishing:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]\u0e44\u0e14\u0e49\u0e1e\u0e1a\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34!
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e44\u0e14\u0e49\u0e16\u0e36\u0e07\u0e2a\u0e31\u0e21\u0e1c\u0e31\u0e2a\u0e02\u0e2d\u0e07\u0e40\u0e27\u0e17\u0e21\u0e19\u0e15\u0e23\u0e4c\u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e2a\u0e34\u0e48\u0e07\u0e19\u0e35\u0e49 ...
|
||||
Fishing.SkillName=FISHING
|
||||
Fishing.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Fishing \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
|
||||
@@ -10,7 +10,6 @@ Axes.Effect.2=Kritik Vuruslar
|
||||
Axes.SkillName=BALTALAR
|
||||
Excavation.Ability.Lower=[[GRAY]]**K\u00dcREGINI INDIRIYORSUN**
|
||||
Excavation.SkillName=KAZMA
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]Hazine bulundu!
|
||||
Fishing.SkillName=BALIK TUTMA
|
||||
Herbalism.Ability.Lower=[[GRAY]]**\u00c7APANI INDIRIYORSUN**
|
||||
Herbalism.Ability.Ready=[[GREEN]]**\u00c7APANI HAZIRLIYORSUN**
|
||||
|
||||
@@ -98,7 +98,6 @@ Fishing.Effect.10=\u51b0\u9493
|
||||
Fishing.Effect.11=\u5141\u8bb8\u4f60\u5728\u51b0\u51b7\u7684\u73af\u5883\u4e0b\u9493\u9c7c
|
||||
Fishing.Chance.Raining=[[BLUE]] \u5927\u91cf\u5956\u52b1
|
||||
Fishing.Listener=\u9493\u9c7c(Fishing):
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]\u53d1\u73b0\u5b9d\u7269\u4e86\uff01
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]\u4f60\u611f\u5230\u4e00\u80a1\u9b54\u529b\u7684\u6ce2\u52a8...
|
||||
Fishing.Ability.TH.Boom=[[GRAY]]\u7e41\u8363\u65f6\u671f!!!
|
||||
Fishing.Ability.TH.Poison=[[GRAY]]\u4ec0\u4e48\u4e1c\u897f,\u95fb\u8d77\u6765\u597d\u81ed\u554a...
|
||||
|
||||
@@ -98,7 +98,6 @@ Fishing.Effect.10=\u51b0\u91e3
|
||||
Fishing.Effect.11=\u5141\u8a31\u4f60\u5728\u51b0\u5929\u96ea\u5730\u88e1\u91e3\u9b5a
|
||||
Fishing.Chance.Raining=[[BLUE]] \u5927\u91cf\u734e\u52f5
|
||||
Fishing.Listener=\u91e3\u9b5a:
|
||||
Fishing.Ability.TH.ItemFound=[[GRAY]]\u767c\u73fe\u5bf6\u7269\u4e86\uff01
|
||||
Fishing.Ability.TH.MagicFound=[[GRAY]]\u4f60\u611f\u53d7\u5230\u9b54\u529b\u7684\u6ce2\u52d5...
|
||||
Fishing.Ability.TH.Boom=[[GRAY]]\u6536\u7a6b\u6642\u9593!!!
|
||||
Fishing.Ability.TH.Poison=[[GRAY]]\u4ec0\u9ebc\u6771\u897f,\u805e\u8d77\u4f86\u597d\u81ed\u554a...
|
||||
|
||||
@@ -652,16 +652,6 @@ permissions:
|
||||
mcmmo.bypass.fishingtraps:
|
||||
default: false
|
||||
description: Allows user to bypass finding traps when Fishing
|
||||
mcmmo.bypass.inspect.distance:
|
||||
default: false
|
||||
description: Allows user to bypass Inspect's distance requirements
|
||||
children:
|
||||
mcmmo.commands.inspect.far: true
|
||||
mcmmo.bypass.inspect.offline:
|
||||
default: false
|
||||
description: Allows user to bypass Inspect's offline player requirements
|
||||
children:
|
||||
mcmmo.commands.inspect.offline: true
|
||||
mcmmo.chat.*:
|
||||
default: false
|
||||
description: Implies all mcmmo.chat permissions. (Warning, contains adminchat)
|
||||
@@ -749,11 +739,6 @@ permissions:
|
||||
mcmmo.commands.skillreset.all: true
|
||||
mcmmo.commands.vampirism.all: true
|
||||
mcmmo.commands.xprate.all: true
|
||||
mcmmo.commands.ability:
|
||||
default: false
|
||||
description: Allows access to the mcability command
|
||||
children:
|
||||
mcmmo.commands.mcability: true
|
||||
mcmmo.commands.acrobatics:
|
||||
description: Allows access to the acrobatics command
|
||||
mcmmo.commands.addlevels:
|
||||
@@ -822,11 +807,6 @@ permissions:
|
||||
description: Allows access to the mcability command
|
||||
mcmmo.commands.mcability.others:
|
||||
description: Allows access to the mcability command for other players
|
||||
mcmmo.commands.mcc:
|
||||
default: false
|
||||
description: Allows access to the mcmmo help command
|
||||
children:
|
||||
mcmmo.commands.mcmmo.help: true
|
||||
mcmmo.commands.mcconvert.*:
|
||||
default: false
|
||||
description: Allows access to the mcconvert commands
|
||||
@@ -956,11 +936,6 @@ permissions:
|
||||
description: Allows access to the mmoedit command
|
||||
mcmmo.commands.mmoedit.others:
|
||||
description: Allows access to the mmoedit command for other players
|
||||
mcmmo.commands.mmoupdate:
|
||||
default: false
|
||||
description: Allows access to the mcconvert database command
|
||||
children:
|
||||
mcmmo.commands.mcconvert.database: true
|
||||
mcmmo.commands.mmoshowdb:
|
||||
description: Allows access to the mmoshowdb command
|
||||
mcmmo.commands.mobhealth:
|
||||
@@ -1246,7 +1221,7 @@ permissions:
|
||||
mcmmo.chat.adminchat: true
|
||||
mcmmo.commands.defaultsop: true
|
||||
mcmmo.item.all: true
|
||||
mcmmo.tools.updatecheck: true
|
||||
mcmmo.tools.all: true
|
||||
mcmmo.item.*:
|
||||
default: false
|
||||
description: Implies all mcmmo.item permissions
|
||||
@@ -2016,163 +1991,7 @@ permissions:
|
||||
default: false
|
||||
description: Implies all mcmmo.tools permissions.
|
||||
children:
|
||||
mcmmo.tools.mcgod: true
|
||||
mcmmo.tools.mcrefresh: true
|
||||
mcmmo.tools.mcremove: true
|
||||
mcmmo.tools.mmoedit: true
|
||||
mcmmo.tools.updatecheck: true
|
||||
mcmmo.tools.mcgod:
|
||||
default: false
|
||||
description: Allows access to mcgod command
|
||||
children:
|
||||
mcmmo.commands.mcgod: true
|
||||
mcmmo.tools.mcrefresh:
|
||||
default: false
|
||||
description: Allows access to mcrefresh command
|
||||
children:
|
||||
mcmmo.commands.mcrefresh: true
|
||||
mcmmo.commands.mcrefresh.others: true
|
||||
mcmmo.tools.mcremove:
|
||||
default: false
|
||||
decription: Allows access to mcremove and mcpurge command
|
||||
children:
|
||||
mcmmo.commands.mcremove: true
|
||||
mcmmo.tools.mmoedit:
|
||||
default: false
|
||||
description: Allows access to mmoedit command
|
||||
children:
|
||||
mcmmo.commands.addlevels: true
|
||||
mcmmo.commands.addlevels.others: true
|
||||
mcmmo.commands.addxp: true
|
||||
mcmmo.commands.addxp.others: true
|
||||
mcmmo.commands.mcpurge: true
|
||||
mcmmo.commands.mmoedit: true
|
||||
mcmmo.commands.mmoedit.others: true
|
||||
mcmmo.tools.updatecheck:
|
||||
default: false
|
||||
description: Notifies admins if there is a new version of mcMMO available
|
||||
mcmmo.ability.fishing.shakemob:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.fishing.shake: true
|
||||
mcmmo.ability.axes.impact:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.axes.armorimpact: true
|
||||
mcmmo.ability.taming.fastfoodservice:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.taming.fastfood: true
|
||||
mcmmo.ability.archery.trackarrows:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.archery.retrieve: true
|
||||
mcmmo.ability.repair.repairbonus:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.repair.superrepair: true
|
||||
mcmmo.ability.swords.counterattack:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.swords.counter: true
|
||||
mcmmo.ability.archery.bonusdamage:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.archery.skillshot: true
|
||||
mcmmo.ability.excavation.treasures:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.excavation.treasurehunter: true
|
||||
mcmmo.ability.fishing.treasures:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.fishing.treasurehunter: true
|
||||
mcmmo.ability.fishing.magic:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.fishing.magichunter: true
|
||||
mcmmo.ability.unarmed.bonusdamage:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.unarmed.ironarm: true
|
||||
mcmmo.ability.axes.bonusdamage:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.axes.axemastery: true
|
||||
mcmmo.ability.smelting.doubledrops:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.smelting.secondsmelt: true
|
||||
mcmmo.ability.taming.callofthewild_renamepets:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.taming.callofthewild.renamepets: true
|
||||
mcmmo.ability.blastmining.*:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.mining.blastmining.*: true
|
||||
mcmmo.ability.blastmining.all:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.mining.blastmining.all: true
|
||||
mcmmo.ability.blastmining.biggerbombs:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.mining.blastmining.biggerbombs: true
|
||||
mcmmo.ability.blastmining.demolitionsexpertise:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.mining.blastmining.demolitionsexpertise: true
|
||||
mcmmo.ability.blastmining.detonate:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.mining.blastmining.detonate: true
|
||||
mcmmo.ability.herbalism.greenthumbblocks:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.herbalism.greenthumb.blocks.all: true
|
||||
mcmmo.ability.herbalism.greenthumbcarrots:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.herbalism.greenthumb.plants.carrot: true
|
||||
mcmmo.ability.herbalism.greenthumbcocoa:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.herbalism.greenthumb.plants.cocoa: true
|
||||
mcmmo.ability.herbalism.greenthumbnetherwart:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.herbalism.greenthumb.plants.netherwarts: true
|
||||
mcmmo.ability.herbalism.greenthumbpotatoes:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.herbalism.greenthumb.plants.potato: true
|
||||
mcmmo.ability.herbalism.greenthumbwheat:
|
||||
default: false
|
||||
description: deprecated
|
||||
children:
|
||||
mcmmo.ability.herbalism.greenthumb.plants.crops: true
|
||||
|
||||
@@ -446,7 +446,7 @@ Excavation:
|
||||
XP: 3000
|
||||
Drop_Chance: 0.05
|
||||
Drop_Level: 750
|
||||
Drops_From: [Dirt, Grass, Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
Drops_From: [Dirt, Podzol, Grass, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
SULPHUR:
|
||||
Amount: 1
|
||||
XP: 30
|
||||
@@ -488,13 +488,13 @@ Excavation:
|
||||
XP: 80
|
||||
Drop_Chance: 0.5
|
||||
Drop_Level: 500
|
||||
Drops_From: [Dirt, Grass, Mycelium]
|
||||
Drops_From: [Dirt, Podzol, Grass, Mycelium]
|
||||
BROWN_MUSHROOM:
|
||||
Amount: 1
|
||||
XP: 80
|
||||
Drop_Chance: 0.5
|
||||
Drop_Level: 500
|
||||
Drops_From: [Dirt, Grass, Mycelium]
|
||||
Drops_From: [Dirt, Podzol, Grass, Mycelium]
|
||||
EGG:
|
||||
Amount: 1
|
||||
XP: 100
|
||||
@@ -506,7 +506,7 @@ Excavation:
|
||||
XP: 80
|
||||
Drop_Chance: 0.5
|
||||
Drop_Level: 650
|
||||
Drops_From: [Sand]
|
||||
Drops_From: [Sand, Red_Sand]
|
||||
WATCH:
|
||||
Amount: 1
|
||||
XP: 100
|
||||
@@ -530,43 +530,43 @@ Excavation:
|
||||
XP: 80
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 25
|
||||
Drops_From: [Dirt, Grass, Sand, Mycelium]
|
||||
Drops_From: [Dirt, Podzol, Grass, Sand, Red_Sand, Mycelium]
|
||||
GOLD_RECORD:
|
||||
Amount: 1
|
||||
XP: 3000
|
||||
Drop_Chance: 0.05
|
||||
Drop_Level: 250
|
||||
Drops_From: [Dirt, Grass, Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
Drops_From: [Dirt, Podzol, Grass, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
GREEN_RECORD:
|
||||
Amount: 1
|
||||
XP: 3000
|
||||
Drop_Chance: 0.05
|
||||
Drop_Level: 250
|
||||
Drops_From: [Dirt, Grass, Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
Drops_From: [Dirt, Podzol, Grass, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
DIAMOND:
|
||||
Amount: 1
|
||||
XP: 1000
|
||||
Drop_Chance: 0.13
|
||||
Drop_Level: 350
|
||||
Drops_From: [Dirt, Grass, Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
Drops_From: [Dirt, Podzol, Grass, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
INK_SACK_BROWN:
|
||||
Amount: 1
|
||||
XP: 100
|
||||
Drop_Chance: 1.33
|
||||
Drop_Level: 350
|
||||
Drops_From: [Dirt, Grass, Mycelium]
|
||||
Drops_From: [Dirt, Podzol, Grass, Mycelium]
|
||||
QUARTZ:
|
||||
Amount: 1
|
||||
XP: 100
|
||||
Drop_Chance: 0.5
|
||||
Drop_Level: 850
|
||||
Drops_From: [Dirt, Sand, Gravel, Mycelium, Soul_Sand]
|
||||
Drops_From: [Dirt, Podzol, Sand, Red_Sand, Gravel, Mycelium, Soul_Sand]
|
||||
NAME_TAG:
|
||||
Amount: 1
|
||||
XP: 3000
|
||||
Drop_Chance: 0.05
|
||||
Drop_Level: 250
|
||||
Drops_From: [Dirt, Grass, Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
Drops_From: [Dirt, Podzol, Grass, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
|
||||
#
|
||||
# Settings for Hylian Luck
|
||||
###
|
||||
|
||||
Reference in New Issue
Block a user