Fixing Mining Double Drops (update configs)

This commit is contained in:
nossr50 2019-03-29 17:44:54 -07:00
parent 8d477a5cf5
commit 53534e0f1d
9 changed files with 76 additions and 37 deletions

View File

@ -7,6 +7,13 @@ Key:
! Change
- Removal
Version 2.1.30
Fixed yet another bug involving double drops
DoubleDrop config tables now must contain all things that can possibly be doubled, such as the Ore block, the ore itself, etc.
Added the following items to the DoubleDrop tables for Mining: Coal, Diamond, Emerald, Glowstone_Dust, Iron_Ingot, Lapis_Lazuli, Nether_Quartz, Redstone, Cobblestone
NOTE: I'm gonna have to blame Bukkit on this one, several API methods I used are actually unfinished and kind of janky. So I hacked something together to make them work.
Version 2.1.29
Fixed a bug where double drops and triple drops were not activating

View File

@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.gmail.nossr50.mcMMO</groupId>
<artifactId>mcMMO</artifactId>
<version>2.1.29</version>
<version>2.1.30-SNAPSHOT</version>
<name>mcMMO</name>
<url>https://github.com/mcMMO-Dev/mcMMO</url>
<scm>

View File

@ -35,6 +35,7 @@ import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.*;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -54,41 +55,65 @@ public class BlockListener implements Listener {
this.plugin = plugin;
}
/* @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockDropItemEvent(BlockDropItemEvent event)
{
Bukkit.broadcastMessage("Debug: Drop Item Event");
for(Item item : event.getItems())
{
ItemStack is = new ItemStack(item.getItemStack());
if(!event.getBlock().getDrops().contains(is))
continue;
if(is.getAmount() <= 0)
continue;
if(event.getBlock().getState().getMetadata(mcMMO.doubleDropKey).size() > 0)
{
//Extra Protection
if(event.getBlock().getState() instanceof Container)
return;
if(!Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.MINING, is.getType())
&& !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.HERBALISM, is.getType())
&& !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.WOODCUTTING, is.getType()))
continue;
event.getBlock().getState().removeMetadata(mcMMO.doubleDropKey, plugin);
if(event.getBlock().getState().getMetadata(mcMMO.doubleDrops).size() > 0)
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
else if(event.getBlock().getState().getMetadata(mcMMO.tripleDrops).size() > 0)
{
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
}
}
}
else if(event.getBlock().getState().getMetadata(mcMMO.tripleDropKey).size() > 0)
/*@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockDropItemEvent(BlockDropItemEvent event)
{
for(Item item : event.getItems())
{
ItemStack is = new ItemStack(item.getItemStack());
if(event.getBlock().getMetadata(mcMMO.doubleDrops).size() > 0)
{
//Extra Protection
if(event.getBlock().getState() instanceof Container)
return;
event.getBlock().getState().removeMetadata(mcMMO.tripleDropKey, plugin);
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
List<MetadataValue> metadataValue = event.getBlock().getMetadata(mcMMO.doubleDrops);
BonusDrops bonusDrops = (BonusDrops) metadataValue.get(0);
Collection<ItemStack> potentialDrops = (Collection<ItemStack>) bonusDrops.value();
if(potentialDrops.contains(is))
{
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
}
event.getBlock().removeMetadata(mcMMO.doubleDrops, plugin);
} else {
if(event.getBlock().getMetadata(mcMMO.tripleDrops).size() > 0) {
List<MetadataValue> metadataValue = event.getBlock().getMetadata(mcMMO.tripleDrops);
BonusDrops bonusDrops = (BonusDrops) metadataValue.get(0);
Collection<ItemStack> potentialDrops = (Collection<ItemStack>) bonusDrops.value();
if (potentialDrops.contains(is)) {
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
}
event.getBlock().removeMetadata(mcMMO.tripleDrops, plugin);
}
}
}
}*/

View File

@ -110,6 +110,8 @@ 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 doubleDrops = "mcMMO: Double Drops";
public final static String tripleDrops = "mcMMO: Triple Drops";
//public final static String customDamageKey = "mcMMO: Custom Damage";
public final static String disarmedItemKey = "mcMMO: Disarmed Item";
public final static String playerDataKey = "mcMMO: Player Data";

View File

@ -67,7 +67,7 @@ public class Herbalism {
dropAmount++;
if(herbalismManager.checkDoubleDrop(target.getState()))
BlockUtils.spawnBonusDrops(target.getState(), triple);
BlockUtils.markDropsAsBonus(target.getState(), triple);
}
for (BlockFace blockFace : new BlockFace[] { BlockFace.UP, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST ,BlockFace.WEST})
@ -110,7 +110,7 @@ public class Herbalism {
dropAmount++;
if(herbalismManager.checkDoubleDrop(relativeBlock.getState()))
BlockUtils.spawnBonusDrops(relativeBlock.getState(), triple);
BlockUtils.markDropsAsBonus(relativeBlock.getState(), triple);
}
}
}
@ -142,7 +142,7 @@ public class Herbalism {
amount += 1;
if(herbalismManager.checkDoubleDrop(relativeUpBlock.getState()))
BlockUtils.spawnBonusDrops(relativeUpBlock.getState(), triple);
BlockUtils.markDropsAsBonus(relativeUpBlock.getState(), triple);
}

View File

@ -147,7 +147,7 @@ public class HerbalismManager extends SkillManager {
if (Permissions.isSubSkillEnabled(player, SubSkillType.HERBALISM_DOUBLE_DROPS) && customBlock.isDoubleDropEnabled()) {
if(checkDoubleDrop(blockState))
BlockUtils.spawnBonusDrops(blockState, greenTerra);
BlockUtils.markDropsAsBonus(blockState, greenTerra);
}
}
else {
@ -165,7 +165,7 @@ public class HerbalismManager extends SkillManager {
} else {
/* MARK SINGLE BLOCK CROP FOR DOUBLE DROP */
if(checkDoubleDrop(blockState))
BlockUtils.spawnBonusDrops(blockState, greenTerra);
BlockUtils.markDropsAsBonus(blockState, greenTerra);
}
if (Permissions.greenThumbPlant(player, material)) {

View File

@ -91,7 +91,7 @@ public class MiningManager extends SkillManager {
//TODO: Make this readable
if (RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS, true)) {
BlockUtils.spawnBonusDrops(blockState, mcMMOPlayer.getAbilityMode(skill.getAbility()));
BlockUtils.markDropsAsBonus(blockState, mcMMOPlayer.getAbilityMode(skill.getAbility()));
}
}

View File

@ -14,7 +14,6 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.data.Ageable;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.HashSet;
@ -27,15 +26,12 @@ public final class BlockUtils {
* @param blockState target blockstate
* @param triple marks the block to give triple drops
*/
public static void spawnBonusDrops(BlockState blockState, boolean triple)
public static void markDropsAsBonus(BlockState blockState, boolean triple)
{
for(ItemStack spawnItem : blockState.getBlock().getDrops())
{
if(triple)
blockState.getWorld().dropItemNaturally(blockState.getLocation(), spawnItem);
blockState.getWorld().dropItemNaturally(blockState.getLocation(), spawnItem);
}
if(triple)
blockState.setMetadata(mcMMO.tripleDrops, mcMMO.metadataValue);
else
blockState.setMetadata(mcMMO.doubleDrops, mcMMO.metadataValue);
}
/**

View File

@ -461,20 +461,29 @@ Double_Drops:
Diorite: true
Granite: true
Coal_Ore: true
Coal: true
Diamond_Ore: true
Diamond: true
Emerald_Ore: true
Emerald: true
End_Stone: true
Glowstone: true
Glowstone_Dust: true
Gold_Ore: true
Iron_Ore: true
Iron_Ingot: true
Lapis_Ore: true
Lapis_Lazuli: true
Mossy_Cobblestone: true
Netherrack: true
Obsidian: true
Nether_Quartz_Ore: true
Nether_Quartz: true
Redstone_Ore: true
Redstone: true
Sandstone: true
Stone: true
Cobblestone: true
Woodcutting:
Acacia_Log: true
Birch_Log: true