Add a new child skill: Ranching

This commit is contained in:
TfT_02 2013-05-18 23:13:42 +02:00
parent f0dcfb0346
commit 1ee82df723
15 changed files with 563 additions and 4 deletions

View File

@ -0,0 +1,146 @@
package com.gmail.nossr50.commands.skills;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.skills.ranching.Ranching;
import com.gmail.nossr50.util.Permissions;
public class RanchingCommand extends SkillCommand {
private String multipleBirthChance;
private String multipleBirthChanceLucky;
private int masterHerderTime;
private String shearsMasteryChance;
private String shearsMasteryChanceLucky;
private String artisanButcherChance;
private String artisanButcherChanceLucky;
private int carnivoresDietRank;
private boolean canMultipleBirth;
private boolean canMasterHerder;
private boolean canShearsMastery;
private boolean canArtisanButcher;
private boolean canCarnivoresDiet;
public RanchingCommand() {
super(SkillType.RANCHING);
}
@Override
protected void dataCalculations() {
// MULTIPLE BIRTH
if (canMultipleBirth) {
String[] multipleBirthStrings = calculateAbilityDisplayValues(Ranching.multipleBirthIncreaseLevel, Ranching.multipleBirthMaxChance);
multipleBirthChance = multipleBirthStrings[0];
multipleBirthChanceLucky = multipleBirthStrings[1];
}
// MASTER HERDER
if (canMasterHerder) {
int masterHerderTime = (int) (300 - (skillValue / Ranching.masterHerderIncreaseLevel) * 10);
if (masterHerderTime < Ranching.masterHerderMinimumSeconds) {
masterHerderTime = Ranching.masterHerderMinimumSeconds;
}
}
// SHEARS MASTERY
if (canShearsMastery) {
String[] shearsMasteryStrings = calculateAbilityDisplayValues(Ranching.shearsMasteryMaxLevel, Ranching.shearsMasteryMaxChance);
shearsMasteryChance = shearsMasteryStrings[0];
shearsMasteryChanceLucky = shearsMasteryStrings[1];
}
// ARTISAN BUTCHER
if (canArtisanButcher) {
String[] artisanButcherStrings = calculateAbilityDisplayValues(Ranching.artisanButcherMaxLevel, Ranching.artisanButcherMaxChance);
artisanButcherChance = artisanButcherStrings[0];
artisanButcherChanceLucky = artisanButcherStrings[1];
}
// CARNIVORES DIET
if (canCarnivoresDiet) {
carnivoresDietRank = calculateRank(Ranching.carnivoresDietMaxLevel, Ranching.carnivoresDietRankLevel1);
}
}
@Override
protected void permissionsCheck() {
canMultipleBirth = Permissions.multipleBirth(player);
canMasterHerder = Permissions.masterHerder(player);
canShearsMastery = Permissions.shearsMastery(player);
canArtisanButcher = Permissions.artisanButcher(player);
canCarnivoresDiet = Permissions.carnivoresDiet(player);
}
@Override
protected boolean effectsHeaderPermissions() {
return canMultipleBirth || canMasterHerder || canShearsMastery || canArtisanButcher || canCarnivoresDiet;
}
@Override
protected void effectsDisplay() {
luckyEffectsDisplay();
if (canMultipleBirth) {
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Ranching.Effect.0"), LocaleLoader.getString("Ranching.Effect.1")));
}
if (canMasterHerder) {
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Ranching.Effect.2"), LocaleLoader.getString("Ranching.Effect.3")));
}
if (canShearsMastery) {
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Ranching.Effect.4"), LocaleLoader.getString("Ranching.Effect.5")));
}
if (canArtisanButcher) {
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Ranching.Effect.6"), LocaleLoader.getString("Ranching.Effect.7")));
}
if (canCarnivoresDiet) {
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Ranching.Effect.8"), LocaleLoader.getString("Ranching.Effect.9")));
}
}
@Override
protected boolean statsHeaderPermissions() {
return canMultipleBirth || canMasterHerder || canShearsMastery || canArtisanButcher || canCarnivoresDiet;
}
@Override
protected void statsDisplay() {
if (canMultipleBirth) {
int unlockLevel = Ranching.multipleBirthIncreaseLevel;
if (skillValue < unlockLevel) {
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Ranching.Ability.Locked.0", unlockLevel)));
}
else {
player.sendMessage(LocaleLoader.getString("Ranching.Ability.MultipleBirth", multipleBirthChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", multipleBirthChanceLucky) : ""));
}
}
if (canMasterHerder) {
int unlockLevel = Ranching.masterHerderIncreaseLevel;
if (skillValue < unlockLevel) {
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Ranching.Ability.Locked.1", unlockLevel)));
}
else {
player.sendMessage(LocaleLoader.getString("Ranching.Ability.MasterHerder", masterHerderTime));
}
}
if (canShearsMastery) {
player.sendMessage(LocaleLoader.getString("Ranching.Ability.ShearsMastery", shearsMasteryChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", shearsMasteryChanceLucky) : ""));
}
if (canArtisanButcher) {
player.sendMessage(LocaleLoader.getString("Ranching.Ability.ArtisanButcher", artisanButcherChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", artisanButcherChanceLucky) : ""));
}
if (canCarnivoresDiet) {
player.sendMessage(LocaleLoader.getString("Ranching.Ability.CarnivoresDiet", carnivoresDietRank));
}
}
}

View File

@ -180,6 +180,38 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
public double getBlastRadiusModifierRank7() { return config.getDouble("Skills.Mining.BlastRadiusModifier_Rank7", 4.0); }
public double getBlastRadiusModifierRank8() { return config.getDouble("Skills.Mining.BlastRadiusModifier_Rank8", 4.0); }
/* RANCHING */
public int getMultipleBirthIncreasekLevel() { return config.getInt("Skills.Ranching.MultipleBirth_IncreaseLevel", 50); }
public int getMultipleBirthMaxChance() { return config.getInt("Skills.Ranching.MultipleBirth_ChanceMax", 30); }
public int getMultipleBirthLitterModifier() { return config.getInt("Skills.Ranching.MultipleBirth_LitterModifier", 30); }
public int getMasterHerderIncreaseLevel() { return config.getInt("Skills.Ranching.MultipleBirth_IncreaseLevel", 50); }
public int getMasterHerderMaxLevel() { return config.getInt("Skills.Ranching.MultipleBirth_MaxBonusLevel", 500); }
public int getMasterHerderMinimumSeconds() { return config.getInt("Skills.Ranching.MultipleBirth_MinimumSeconds", 120); }
public int getShearsMasteryMaxLevel() { return config.getInt("Skills.Ranching.ShearsMastery_MaxBonusLevel", 500); }
public int getShearsMasteryMaxChance() { return config.getInt("Skills.Ranching.ShearsMastery_ChanceMax", 20); }
public int getShearsMasteryMaxBonus() { return config.getInt("Skills.Ranching.ShearsMastery_MaxBonus", 3); }
public int getArtisanButcherMaxLevel() { return config.getInt("Skills.Ranching.ArtisanButcher_MaxBonusLevel", 500); }
public int getArtisanButcherMaxChance() { return config.getInt("Skills.Ranching.ArtisanButcher_ChanceMax", 20); }
public int getArtisanButcherMaxBonus() { return config.getInt("Skills.Ranching.ArtisanButcher_MaxBonus", 3); }
public int getCarnivoresDietRankChange() { return config.getInt("Skills.Ranching.Carnivores_Diet_RankChange", 200); }
public int getRanchingVanillaXPBoostRank1Level() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank1Level", 100); }
public int getRanchingVanillaXPBoostRank2Level() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank2Level", 300); }
public int getRanchingVanillaXPBoostRank3Level() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank3Level", 500); }
public int getRanchingVanillaXPBoostRank4Level() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank4Level", 700); }
public int getRanchingVanillaXPBoostRank5Level() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank5Level", 900); }
public int getRanchingVanillaXPBoostRank1Multiplier() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank1Multiplier", 2); }
public int getRanchingVanillaXPBoostRank2Multiplier() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank2Multiplier", 3); }
public int getRanchingVanillaXPBoostRank3Multiplier() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank3Multiplier", 4); }
public int getRanchingVanillaXPBoostRank4Multiplier() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank4Multiplier", 5); }
public int getRanchingVanillaXPBoostRank5Multiplier() { return config.getInt("Skills.Ranching.VanillaXPBoost_Rank5Multiplier", 6); }
/* REPAIR */
public double getRepairMasteryMaxBonus() { return config.getDouble("Skills.Repair.RepairMastery_MaxBonusPercentage", 200.0D); }
public int getRepairMasteryMaxLevel() { return config.getInt("Skills.Repair.RepairMastery_MaxBonusLevel", 1000); }

View File

@ -29,6 +29,7 @@ import com.gmail.nossr50.skills.excavation.ExcavationManager;
import com.gmail.nossr50.skills.fishing.FishingManager;
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
import com.gmail.nossr50.skills.mining.MiningManager;
import com.gmail.nossr50.skills.ranching.RanchingManager;
import com.gmail.nossr50.skills.repair.Repair;
import com.gmail.nossr50.skills.repair.RepairManager;
import com.gmail.nossr50.skills.smelting.SmeltingManager;
@ -149,6 +150,10 @@ public class McMMOPlayer {
return (MiningManager) skillManagers.get(SkillType.MINING);
}
public RanchingManager getRanchingManager() {
return (RanchingManager) skillManagers.get(SkillType.RANCHING);
}
public RepairManager getRepairManager() {
return (RepairManager) skillManagers.get(SkillType.REPAIR);
}

View File

@ -17,6 +17,7 @@ import com.gmail.nossr50.skills.excavation.ExcavationManager;
import com.gmail.nossr50.skills.fishing.FishingManager;
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
import com.gmail.nossr50.skills.mining.MiningManager;
import com.gmail.nossr50.skills.ranching.RanchingManager;
import com.gmail.nossr50.skills.repair.RepairManager;
import com.gmail.nossr50.skills.smelting.SmeltingManager;
import com.gmail.nossr50.skills.swords.SwordsManager;
@ -40,7 +41,8 @@ public enum SkillType {
SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), AbilityType.SERRATED_STRIKES, ToolType.SWORD),
TAMING(TamingManager.class, Color.PURPLE),
UNARMED(UnarmedManager.class, Color.BLACK, AbilityType.BERSERK, ToolType.FISTS),
WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, AbilityType.TREE_FELLER, ToolType.AXE);
WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, AbilityType.TREE_FELLER, ToolType.AXE),
RANCHING(RanchingManager.class, Color.ORANGE);
private Class<? extends SkillManager> managerClass;
private Color runescapeColor;
@ -134,6 +136,7 @@ public enum SkillType {
public boolean isChildSkill() {
switch (this) {
case SMELTING:
case RANCHING:
return true;
default:

View File

@ -44,6 +44,8 @@ import com.gmail.nossr50.skills.archery.Archery;
import com.gmail.nossr50.skills.fishing.Fishing;
import com.gmail.nossr50.skills.herbalism.Herbalism;
import com.gmail.nossr50.skills.mining.MiningManager;
import com.gmail.nossr50.skills.ranching.Ranching;
import com.gmail.nossr50.skills.ranching.RanchingManager;
import com.gmail.nossr50.skills.taming.Taming;
import com.gmail.nossr50.skills.taming.TamingManager;
import com.gmail.nossr50.util.Misc;
@ -355,13 +357,20 @@ public class EntityListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void onEntityDeath(EntityDeathEvent event) {
LivingEntity entity = event.getEntity();
Player player = event.getEntity().getKiller();
if (Misc.isNPCEntity(entity)) {
if (Misc.isNPCEntity(entity) || Misc.isNPCEntity(player)) {
return;
}
BleedTimerTask.remove(entity);
Archery.arrowRetrievalCheck(entity);
if (Permissions.carnivoresDiet(player)) {
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
RanchingManager ranchingManager = mcMMOPlayer.getRanchingManager();
ranchingManager.handleArtisanButcher(entity);
}
}
/**
@ -510,6 +519,22 @@ public class EntityListener implements Listener {
}
return;
case COOKED_CHICKEN: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */
case GRILLED_PORK: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
case COOKED_BEEF: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
if (Permissions.carnivoresDiet(player)) {
event.setFoodLevel(UserManager.getPlayer(player).getRanchingManager().handleCarnivoresDiet(Ranching.carnivoresDietRankLevel1, newFoodLevel));
}
return;
case RAW_CHICKEN: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
case PORK: /* RESTORES 2 1/2 HUNGER - RESTORES 4 HUNGER @ 1000 */
case RAW_BEEF: /* RESTORES 2 1/2 HUNGER - RESTORES 4 HUNGER @ 1000 */
if (Permissions.carnivoresDiet(player)) {
event.setFoodLevel(UserManager.getPlayer(player).getRanchingManager().handleCarnivoresDiet(Ranching.carnivoresDietRankLevel2, newFoodLevel));
}
return;
default:
return;
}

View File

@ -5,7 +5,9 @@ import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Ageable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fish;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
@ -19,12 +21,15 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
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.PlayerShearEntityEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.chat.ChatManager;
@ -43,6 +48,8 @@ import com.gmail.nossr50.runnables.skills.BleedTimerTask;
import com.gmail.nossr50.skills.fishing.FishingManager;
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
import com.gmail.nossr50.skills.mining.MiningManager;
import com.gmail.nossr50.skills.ranching.Ranching;
import com.gmail.nossr50.skills.ranching.RanchingManager;
import com.gmail.nossr50.skills.repair.Repair;
import com.gmail.nossr50.skills.repair.RepairManager;
import com.gmail.nossr50.skills.taming.TamingManager;
@ -519,6 +526,68 @@ public class PlayerListener implements Listener {
}
}
/**
* Monitor PlayerInteractEntityEvent events.
*
* @param event The event to watch
*/
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
Player player = event.getPlayer();
Entity entity = event.getRightClicked();
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
return;
}
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
ItemStack inHand = player.getItemInHand();
/* RANCHING */
if (entity instanceof Ageable) {
Ageable ageable = (Ageable) entity;
RanchingManager ranchingManager = mcMMOPlayer.getRanchingManager();
if (Permissions.skillEnabled(player, SkillType.RANCHING) && ageable.canBreed() && ranchingManager.isBreedFood(entity, inHand)) {
entity.setMetadata(mcMMO.animalBreedKey, new FixedMetadataValue(plugin, player.getName()));
}
}
}
/**
* Monitor PlayerShearEntityEvent events.
*
* @param event The event to watch
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerShearEntity(PlayerShearEntityEvent event) {
Player player = event.getPlayer();
Entity entity = event.getEntity();
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
return;
}
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
/* RANCHING */
RanchingManager ranchingManager = mcMMOPlayer.getRanchingManager();
/* Shears Mastery */
if (Permissions.shearsMastery(player)) {
if (entity.getType() == EntityType.SHEEP) {
ranchingManager.handleShearsMasterySheep(entity);
}
else if (entity.getType() == EntityType.MUSHROOM_COW) {
ranchingManager.handleShearsMasteryMooshroom(entity);
}
}
if (Permissions.skillEnabled(player, SkillType.RANCHING)) {
ranchingManager.applyXpGain(Ranching.shearExperience);
}
}
/**
* Monitor PlayerChat events.
*

View File

@ -92,6 +92,7 @@ public class mcMMO extends JavaPlugin {
public final static String infiniteArrowKey = "mcMMO: Infinite Arrow";
public final static String bowForceKey = "mcMMO: Bow Force";
public final static String arrowDistanceKey = "mcMMO: Arrow Distance";
public final static String animalBreedKey = "mcMMO: Tracked Animal";
public static FixedMetadataValue metadataValue;

View File

@ -0,0 +1,60 @@
package com.gmail.nossr50.skills.ranching;
import com.gmail.nossr50.config.AdvancedConfig;
public class Ranching {
// The order of the values is extremely important, a few methods depend on it to work properly
protected enum Tier {
FIVE(5) {
@Override public int getLevel() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank5Level(); }
@Override public int getVanillaXPBoostModifier() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank5Multiplier(); }},
FOUR(4) {
@Override public int getLevel() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank4Level(); }
@Override public int getVanillaXPBoostModifier() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank4Multiplier(); }},
THREE(3) {
@Override public int getLevel() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank3Level(); }
@Override public int getVanillaXPBoostModifier() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank3Multiplier(); }},
TWO(2) {
@Override public int getLevel() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank2Level(); }
@Override public int getVanillaXPBoostModifier() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank2Multiplier(); }},
ONE(1) {
@Override public int getLevel() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank1Level(); }
@Override public int getVanillaXPBoostModifier() { return AdvancedConfig.getInstance().getRanchingVanillaXPBoostRank1Multiplier(); }};
int numerical;
private Tier(int numerical) {
this.numerical = numerical;
}
public int toNumerical() {
return numerical;
}
abstract protected int getLevel();
abstract protected int getVanillaXPBoostModifier();
}
public static int multipleBirthIncreaseLevel = AdvancedConfig.getInstance().getMultipleBirthIncreasekLevel();
public static int multipleBirthMaxChance = AdvancedConfig.getInstance().getMultipleBirthMaxChance();
public static int multipleBirthLitterModifier = AdvancedConfig.getInstance().getMultipleBirthLitterModifier();
public static int masterHerderIncreaseLevel = AdvancedConfig.getInstance().getMultipleBirthIncreasekLevel();
public static int masterHerderMaxLevel = AdvancedConfig.getInstance().getMasterHerderMaxLevel();
public static int masterHerderMinimumSeconds = AdvancedConfig.getInstance().getMasterHerderMinimumSeconds();
public static int shearsMasteryMaxLevel = AdvancedConfig.getInstance().getShearsMasteryMaxLevel();
public static int shearsMasteryMaxChance = AdvancedConfig.getInstance().getShearsMasteryMaxChance();
public static int shearsMasteryMaxBonus = AdvancedConfig.getInstance().getShearsMasteryMaxBonus();
public static int artisanButcherMaxLevel = AdvancedConfig.getInstance().getArtisanButcherMaxLevel();
public static int artisanButcherMaxChance = AdvancedConfig.getInstance().getArtisanButcherMaxChance();
public static int artisanButcherMaxBonus = AdvancedConfig.getInstance().getArtisanButcherMaxBonus();
public static int carnivoresDietRankLevel1 = AdvancedConfig.getInstance().getCarnivoresDietRankChange();
public static int carnivoresDietRankLevel2 = carnivoresDietRankLevel1 * 2;
public static int carnivoresDietMaxLevel = carnivoresDietRankLevel1 * 5;
public static float shearExperience = 10;
public static float breedExperience = 10;
}

View File

@ -0,0 +1,126 @@
package com.gmail.nossr50.skills.ranching;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Sheep;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.skills.SkillManager;
import com.gmail.nossr50.skills.ranching.Ranching.Tier;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.skills.SkillUtils;
public class RanchingManager extends SkillManager {
public RanchingManager(McMMOPlayer mcMMOPlayer) {
super(mcMMOPlayer, SkillType.RANCHING);
}
public boolean canUseMultipleBirth() {
return getSkillLevel() >= Ranching.multipleBirthIncreaseLevel && Permissions.multipleBirth(getPlayer());
}
public boolean canUseMasterHerder() {
return getSkillLevel() >= Ranching.masterHerderIncreaseLevel && Permissions.masterHerder(getPlayer());
}
public boolean canUseVanillaXpBoost() {
return getSkillLevel() >= Ranching.Tier.ONE.getLevel() && Permissions.vanillaXpBoost(getPlayer(), skill);
}
/**
* Handle the Carnivore's Diet ability
*
* @param rankChange The # of levels to change rank for the food
* @param eventFoodLevel The initial change in hunger from the event
* @return the modified change in hunger for the event
*/
public int handleCarnivoresDiet(int rankChange, int eventFoodLevel) {
return SkillUtils.handleFoodSkills(getPlayer(), skill, eventFoodLevel, Ranching.carnivoresDietRankLevel1, Ranching.carnivoresDietMaxLevel, rankChange);
}
public void handleShearsMasterySheep(Entity entity) {
if (SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Ranching.shearsMasteryMaxChance, Ranching.shearsMasteryMaxLevel)) {
Location location = entity.getLocation();
Sheep sheep = (Sheep) entity;
MaterialData wool = new MaterialData(Material.WOOL, sheep.getColor().getDyeData());
Misc.randomDropItems(location, wool.toItemStack(), Ranching.shearsMasteryMaxBonus);
}
}
public void handleShearsMasteryMooshroom(Entity entity) {
if (SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Ranching.shearsMasteryMaxChance, Ranching.shearsMasteryMaxLevel)) {
Location location = entity.getLocation();
ItemStack itemStack = new ItemStack(Material.RED_MUSHROOM);
Misc.randomDropItems(location, itemStack, Ranching.shearsMasteryMaxBonus);
}
}
public void handleArtisanButcher(Entity entity) {
if (SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Ranching.artisanButcherMaxChance, Ranching.artisanButcherMaxLevel)) {
Material material = null;
switch (entity.getType()) {
case CHICKEN:
material = Material.RAW_CHICKEN;
break;
case COW:
material = Material.RAW_BEEF;
break;
case PIG:
material = Material.PORK;
break;
default:
return;
}
Misc.randomDropItems(entity.getLocation(), new ItemStack(material), Ranching.artisanButcherMaxBonus);
}
}
/**
* Handle the vanilla XP boost for Ranching
*
* @param experience The amount of experience initially awarded by the event
* @return the modified event damage
*/
public int handleVanillaXpBoost(int experience) {
return experience * getVanillaXpMultiplier();
}
/**
* Gets the vanilla XP multiplier
*
* @return the vanilla XP multiplier
*/
private int getVanillaXpMultiplier() {
int skillLevel = getSkillLevel();
for (Tier tier : Tier.values()) {
if (skillLevel >= tier.getLevel()) {
return tier.getVanillaXPBoostModifier();
}
}
return 0;
}
public void handleMasterHerder(Entity entity, ItemStack inHand) {
// TODO Auto-generated method stub
}
public boolean isBreedFood(Entity entity, ItemStack inHand) {
// TODO Auto-generated method stub
// Check if the entity and the item type match
return false;
}
}

View File

@ -166,6 +166,13 @@ public final class Permissions {
public static boolean remoteDetonation(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.mining.blastmining.detonate"); }
public static boolean superBreaker(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.mining.superbreaker"); }
/* RANCHING */
public static boolean multipleBirth(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.ranching.multiplebirth"); }
public static boolean masterHerder(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.ranching.masterherder"); }
public static boolean shearsMastery(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.ranching.shearsmastery"); }
public static boolean artisanButcher(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.ranching.artisanbutcher"); }
public static boolean carnivoresDiet(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.ranching.carnivoresdiet"); }
/* REPAIR */
public static boolean arcaneForging(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.repair.arcaneforging"); }
public static boolean repairMastery(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.repair.repairmastery"); }

View File

@ -40,6 +40,7 @@ import com.gmail.nossr50.commands.skills.ExcavationCommand;
import com.gmail.nossr50.commands.skills.FishingCommand;
import com.gmail.nossr50.commands.skills.HerbalismCommand;
import com.gmail.nossr50.commands.skills.MiningCommand;
import com.gmail.nossr50.commands.skills.RanchingCommand;
import com.gmail.nossr50.commands.skills.RepairCommand;
import com.gmail.nossr50.commands.skills.SmeltingCommand;
import com.gmail.nossr50.commands.skills.SwordsCommand;
@ -102,6 +103,10 @@ public final class CommandRegistrationManager {
command.setExecutor(new MiningCommand());
break;
case RANCHING:
command.setExecutor(new RanchingCommand());
break;
case REPAIR:
command.setExecutor(new RepairCommand());
break;

View File

@ -244,6 +244,7 @@ public class SkillUtils {
public static boolean hasMiscSkills(Player player) {
return Permissions.skillEnabled(player, SkillType.ACROBATICS)
|| Permissions.skillEnabled(player, SkillType.SMELTING)
|| Permissions.skillEnabled(player, SkillType.RANCHING)
|| Permissions.skillEnabled(player, SkillType.REPAIR);
}

View File

@ -8,4 +8,7 @@
#####
Smelting:
- Mining
- Repair
- Repair
Ranching:
- Herbalism
- Taming

View File

@ -628,6 +628,7 @@ Guides.Herbalism=[[DARK_AQUA]]About Herbalism:\n[[YELLOW]]Herbalism is about col
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]crouch and right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
Guides.Page.Invalid=Not a valid page number!
Guides.Page.OutOfRange=That page does not exist, there are only {0} total pages.
Guides.Ranching=Coming soon...
Guides.Repair=[[DARK_AQUA]]About Repair:\n[[YELLOW]]Repair allows you to use an iron block to repair armor and\n[[YELLOW]]tools, or a gold block to salvage armor and tools.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]Repair tools or armor using the mcMMO Anvil. This is an\n[[YELLOW]]iron block by default and should not be confused with\n[[YELLOW]]the Vanilla Minecraft Anvil.\n[[DARK_AQUA]]How can I use Repair?\n[[YELLOW]]Place down a mcMMO Anvil and right-click to repair the item \n[[YELLOW]]you're currently holding. This consumes 1 item on every use.\n\n[[DARK_AQUA]]How does Repair Mastery work?\n[[YELLOW]]Repair Mastery increases the repair amount. The extra amount\n[[YELLOW]]repaired is influenced by your Repair skill level.\n\n[[DARK_AQUA]]How does Super Repair work?\n[[YELLOW]]Super Repair is a passive ability. When repairing an item,\n[[YELLOW]]it grants players a chance to repair an item with\n[[YELLOW]]double effectiveness.\n\n\n\n\n[[DARK_AQUA]]How does Arcane Forging work?\n[[YELLOW]]This passive ability allows you to repair items with a certain\n[[YELLOW]]chance of maintaining its enchantments. The enchants may be\n[[YELLOW]]kept at their existing levels, downgraded to a lower level,\n[[YELLOW]]or lost entirely.\n\n\n\n[[DARK_AQUA]]How does Salvage work?\n[[YELLOW]]Place down a mcMMO Salvage Anvil and right-click to salvage\n[[YELLOW]]the item you're currently holding.\n[[YELLOW]]This will break the item apart en give back the used ingots.\n[[YELLOW]]Note: You can only salvage fully repaired tools or armor.
Guides.Swords=[[DARK_AQUA]]About Swords:\n[[YELLOW]]This skill awards combat bonuses to anyone fighting with a\n[[YELLOW]]sword.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]XP is gained based on the amount of damage dealt to mobs or \n[[YELLOW]]other players when wielding a sword.\n\n[[DARK_AQUA]]How does Serrated Strikes work?\n[[YELLOW]]Serrated Strikes is an active ability, you can activate it by\n[[YELLOW]]right-clicking with a sword. This ability allows you to deal \n[[YELLOW]]an AoE (Area of Effect) hit. This AoE will do a bonus 25%\n[[YELLOW]]damage and will inflict a bleed effect that lasts for 5 ticks.\n\n\n\n[[DARK_AQUA]]How does Counter Attack work?\n[[YELLOW]]Counter Attack is a passive ability. When taking hits from mobs,\n[[YELLOW]]you will have a chance to reflect 50% of the damage that was \n[[YELLOW]]taken.\n\n\n\n\n[[DARK_AQUA]]How does Bleed work?\n[[YELLOW]]Bleed causes enemies to take damage every two seconds. The \n[[YELLOW]]target will bleed until the effect wears off, or death, \n[[YELLOW]]whichever comes first.\n[[YELLOW]]The duration of the bleed is increased by your sword skill.
Guides.Smelting=Coming soon...
@ -737,6 +738,29 @@ Smelting.FluxMining.Success=[[GREEN]]That ore smelted itself!
Smelting.Listener=Smelting:
Smelting.SkillName=SMELTING
#RANCHING
Ranching.Ability.MultipleBirth=[[RED]]Multiple Birth Chance: [[YELLOW]]{0}
Ranching.Ability.MasterHerder=[[RED]]Decreased Cooldown: [[YELLOW]]{0}
Ranching.Ability.ShearsMastery=[[RED]]Shear Mastery Chance: [[YELLOW]]{0}
Ranching.Ability.ArtisanButcher=[[RED]]Artisan Butcher Chance: [[YELLOW]]{0}
Ranching.Ability.CarnivoresDiet=[[RED]]Carnivores Diet: [[YELLOW]]Rank {0}
Ranching.Ability.Locked.0=LOCKED UNTIL {0}+ SKILL (MULTIPLE BIRTH)
Ranching.Ability.Locked.1=LOCKED UNTIL {0}+ SKILL (MASTER HERDER)
Ranching.Effect.0=Multiple Birth
Ranching.Effect.1=Chance for animals to have twins
Ranching.Effect.2=Master Herder
Ranching.Effect.3=Decrease the cooldown between breeds
Ranching.Effect.4=Vanilla XP Boost
Ranching.Effect.5=Increase vanilla XP gained while breeding
Ranching.Effect.6=Shears Mastery
Ranching.Effect.7=Gives a chance to gain more wool
Ranching.Effect.8=Artisan Butcher
Ranching.Effect.9=Gives a chance to loot more meat
Ranching.Effect.10=Carnivores Diet
Ranching.Effect.11=Improves hunger restored from meat
Ranching.Listener=Ranching:
Ranching.SkillName=RANCHING
#COMMAND DESCRIPTIONS
Commands.Description.addlevels=Add mcMMO levels to a user
Commands.Description.adminchat=Toggle mcMMO admin chat on/off or send admin chat messages

View File

@ -86,6 +86,8 @@ commands:
description: Detailed mcMMO skill info
acrobatics:
description: Detailed mcMMO skill info
ranching:
description: Detailed mcMMO skill info
repair:
description: Detailed mcMMO skill info
fishing:
@ -147,6 +149,7 @@ permissions:
mcmmo.ability.fishing.all: true
mcmmo.ability.herbalism.all: true
mcmmo.ability.mining.all: true
mcmmo.ability.ranching.all: true
mcmmo.ability.repair.all: true
mcmmo.ability.smelting.all: true
mcmmo.ability.swords.all: true
@ -418,7 +421,30 @@ permissions:
mcmmo.ability.mining.doubledrops:
description: Allows double drop chance when mining
mcmmo.ability.mining.superbreaker:
description: Allows access to the Super Breaker ability
description: Allows access to the Super Breaker ability
mcmmo.ability.ranching.*:
default: false
description: Allows access to all Ranching abilities
children:
mcmmo.ability.ranching.all: true
mcmmo.ability.ranching.all:
description: Allows access to all Ranching abilities
children:
mcmmo.ability.ranching.multiplebirth: true
mcmmo.ability.ranching.masterherder: true
mcmmo.ability.ranching.shearsmastery: true
mcmmo.ability.ranching.artisanbutcher: true
mcmmo.ability.ranching.carnivoresdiet: true
mcmmo.ability.ranching.multiplebirth:
description: Allows access to the Multiple Birth ability
mcmmo.ability.ranching.masterherder:
description: Allows access to the Master Herder ability
mcmmo.ability.ranching.shearsmastery:
description: Allows access to the Shears Mastery ability
mcmmo.ability.ranching.artisanbutcher:
description: Allows access to the Artisan Butcher ability
mcmmo.ability.ranching.carnivoresdiet:
description: Allows access to the Carnivores Diet ability
mcmmo.ability.repair.*:
default: false
description: Allows access to all Repair abilities
@ -687,6 +713,7 @@ permissions:
mcmmo.commands.mobhealth: true
mcmmo.commands.party.all: true
mcmmo.commands.ptp.all: true
mcmmo.commands.ranching: true
mcmmo.commands.repair: true
mcmmo.commands.smelting: true
mcmmo.commands.swords: true
@ -869,6 +896,7 @@ permissions:
mcmmo.commands.mctop.fishing: true
mcmmo.commands.mctop.herbalism: true
mcmmo.commands.mctop.mining: true
mcmmo.commands.mctop.ranching: true
mcmmo.commands.mctop.repair: true
mcmmo.commands.mctop.smelting: true
mcmmo.commands.mctop.swords: true
@ -889,6 +917,8 @@ permissions:
description: Allows access to the mctop command for fishing
mcmmo.commands.mctop.herbalism:
description: Allows access to the mctop command for herbalism
mcmmo.commands.mctop.ranching:
description: Allows access to the mctop command for ranching
mcmmo.commands.mctop.mining:
description: Allows access to the mctop command for mining
mcmmo.commands.mctop.repair:
@ -1017,6 +1047,8 @@ permissions:
mcmmo.commands.ptp.world.all: true
mcmmo.commands.ptp.world.all:
description: Implies access to all mcmmo.commands.ptp.world permissions
mcmmo.commands.ranching:
description: Allows access to the ranching command
mcmmo.commands.repair:
description: Allows access to the repair command
mcmmo.commands.skillreset.*:
@ -1036,6 +1068,7 @@ permissions:
mcmmo.commands.skillreset.herbalism: true
mcmmo.commands.skillreset.mining: true
mcmmo.commands.skillreset.others.all: true
mcmmo.commands.skillreset.ranching: true
mcmmo.commands.skillreset.repair: true
mcmmo.commands.skillreset.smelting: true
mcmmo.commands.skillreset.swords: true
@ -1074,6 +1107,7 @@ permissions:
mcmmo.commands.skillreset.others.fishing: true
mcmmo.commands.skillreset.others.herbalism: true
mcmmo.commands.skillreset.others.mining: true
mcmmo.commands.skillreset.others.ranching: true
mcmmo.commands.skillreset.others.repair: true
mcmmo.commands.skillreset.others.smelting: true
mcmmo.commands.skillreset.others.swords: true
@ -1096,6 +1130,8 @@ permissions:
description: Allows access to the skillreset command for herbalism for other players
mcmmo.commands.skillreset.others.mining:
description: Allows access to the skillreset command for mining for other players
mcmmo.commands.skillreset.others.ranching:
description: Allows access to the skillreset command for ranching for other players
mcmmo.commands.skillreset.others.repair:
description: Allows access to the skillreset command for repair for other players
mcmmo.commands.skillreset.others.smelting:
@ -1108,6 +1144,8 @@ permissions:
description: Allows access to the skillreset command for unarmed for other players
mcmmo.commands.skillreset.others.woodcutting:
description: Allows access to the skillreset command for woodcutting for other players
mcmmo.commands.skillreset.ranching:
description: Allows access to the skillreset command for ranching
mcmmo.commands.skillreset.repair:
description: Allows access to the skillreset command for repair
mcmmo.commands.skillreset.smelting:
@ -1163,6 +1201,7 @@ permissions:
mcmmo.commands.xplock.fishing: true
mcmmo.commands.xplock.herbalism: true
mcmmo.commands.xplock.mining: true
mcmmo.commands.xplock.ranching: true
mcmmo.commands.xplock.repair: true
mcmmo.commands.xplock.smelting: true
mcmmo.commands.xplock.swords: true
@ -1183,6 +1222,8 @@ permissions:
description: Allows access to the xplock command for fishing
mcmmo.commands.xplock.herbalism:
description: Allows access to the xplock command for herbalism
mcmmo.commands.xplock.ranching:
description: Allows access to the xplock command for ranching
mcmmo.commands.xplock.mining:
description: Allows access to the xplock command for mining
mcmmo.commands.xplock.repair:
@ -1330,6 +1371,7 @@ permissions:
mcmmo.perks.lucky.fishing: true
mcmmo.perks.lucky.herbalism: true
mcmmo.perks.lucky.mining: true
mcmmo.perks.lucky.ranching: true
mcmmo.perks.lucky.repair: true
mcmmo.perks.lucky.smelting: true
mcmmo.perks.lucky.swords: true
@ -1357,6 +1399,9 @@ permissions:
mcmmo.perks.lucky.mining:
default: false
description: Gives Mining abilities & skills a 33.3% better chance to activate.
mcmmo.perks.lucky.ranching:
default: false
description: Gives Ranching abilities & skills a 33.3% better chance to activate.
mcmmo.perks.lucky.repair:
default: false
description: Gives Repair abilities & skills a 33.3% better chance to activate.
@ -1425,6 +1470,7 @@ permissions:
mcmmo.skills.fishing: true
mcmmo.skills.herbalism: true
mcmmo.skills.mining: true
mcmmo.skills.ranching: true
mcmmo.skills.repair: true
mcmmo.skills.swords: true
mcmmo.skills.smelting: true
@ -1473,6 +1519,12 @@ permissions:
mcmmo.ability.mining.all: true
mcmmo.commands.mining: true
mcmmo.commands.xplock.mining: true
mcmmo.skills.ranching:
description: Allows access to the Ranching skill
children:
mcmmo.ability.ranching.all: true
mcmmo.commands.ranching: true
mcmmo.commands.xplock.ranching: true
mcmmo.skills.repair:
description: Allows access to the Repair skill
children: