Fixes #3832 - Resolved issue with double drops & herbalism, similar fixes coming to woodcutting/mining soon. Reminder to update config.yml, read changelog for instructions.

If you harvest crops with a Hoe it does not require seeds to replant on successful Green Thumb
This commit is contained in:
nossr50
2019-03-23 16:21:25 -07:00
parent ce6553d857
commit 255f7bf335
13 changed files with 108 additions and 61 deletions

View File

@@ -31,7 +31,6 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.Collection;
import java.util.List;
public class HerbalismManager extends SkillManager {
@@ -138,8 +137,7 @@ public class HerbalismManager extends SkillManager {
return;
}
Collection<ItemStack> drops = null;
int amount = 1;
int amount;
int xp;
boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getAbility());
@@ -148,45 +146,44 @@ public class HerbalismManager extends SkillManager {
xp = customBlock.getXpGain();
if (Permissions.isSubSkillEnabled(player, SubSkillType.HERBALISM_DOUBLE_DROPS) && customBlock.isDoubleDropEnabled()) {
drops = blockState.getBlock().getDrops();
if(checkDoubleDrop(blockState))
BlockUtils.markBlocksForBonusDrops(blockState, greenTerra);
}
}
else {
xp = ExperienceConfig.getInstance().getXp(skill, blockState.getBlockData());
if (Config.getInstance().getDoubleDropsEnabled(skill, material) && Permissions.isSubSkillEnabled(player, SubSkillType.HERBALISM_DOUBLE_DROPS)) {
drops = blockState.getBlock().getDrops();
}
if (!oneBlockPlant) {
//Kelp is actually two blocks mixed together
if(material == Material.KELP_PLANT || material == Material.KELP) {
amount = Herbalism.calculateKelpPlantDrops(blockState);
amount = Herbalism.countAndMarkDoubleDropsKelp(blockState, greenTerra,this);
} else {
amount = Herbalism.calculateMultiBlockPlantDrops(blockState);
amount = Herbalism.countAndMarkDoubleDropsMultiBlockPlant(blockState, greenTerra, this);
}
xp *= amount;
} else {
/* MARK SINGLE BLOCK CROP FOR DOUBLE DROP */
if(checkDoubleDrop(blockState))
BlockUtils.markBlocksForBonusDrops(blockState, greenTerra);
}
if (Permissions.greenThumbPlant(player, material)) {
processGreenThumbPlants(blockState, greenTerra);
}
}
applyXpGain(xp, XPGainReason.PVE);
}
if (drops == null) {
return;
}
for (int i = greenTerra ? 2 : 1; i != 0; i--) {
if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.HERBALISM_DOUBLE_DROPS, player)) {
for (ItemStack item : drops) {
Misc.dropItems(Misc.getBlockCenter(blockState), item, amount);
}
}
}
/**
* Check for success on herbalism double drops
* @param blockState target block state
* @return true if double drop succeeds
*/
public boolean checkDoubleDrop(BlockState blockState)
{
return BlockUtils.checkDoubleDrops(getPlayer(), blockState, skill, SubSkillType.HERBALISM_DOUBLE_DROPS);
}
/**
@@ -320,11 +317,7 @@ public class HerbalismManager extends SkillManager {
ItemStack seedStack = new ItemStack(seed);
if (!playerInventory.containsAtLeast(seedStack, 1)) {
return;
}
if (!greenTerra && !RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.HERBALISM_GREEN_THUMB, player)) {
if (!greenTerra && !RandomChanceUtil.checkRandomChanceExecutionSuccess(player, SubSkillType.HERBALISM_GREEN_THUMB, true)) {
return;
}
@@ -332,8 +325,16 @@ public class HerbalismManager extends SkillManager {
return;
}
playerInventory.removeItem(seedStack);
player.updateInventory(); // Needed until replacement available
if(!ItemUtils.isHoe(getPlayer().getInventory().getItemInMainHand()))
{
if (!playerInventory.containsAtLeast(seedStack, 1)) {
return;
}
playerInventory.removeItem(seedStack);
player.updateInventory(); // Needed until replacement available
}
new HerbalismBlockUpdaterTask(blockState).runTaskLater(mcMMO.p, 0);
}