mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-19 18:33:00 +01:00
Add a new child skill: Ranching
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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); }
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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"); }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user