diff --git a/Changelog.txt b/Changelog.txt
index c0898f16a..9bf530fd0 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -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
diff --git a/pom.xml b/pom.xml
index c34c8e55c..3e5ffbdc4 100755
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.gmail.nossr50.mcMMO
mcMMO
- 2.1.29
+ 2.1.30-SNAPSHOT
mcMMO
https://github.com/mcMMO-Dev/mcMMO
diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java
index 96ff2dffb..6d2f95d91 100644
--- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java
@@ -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 = event.getBlock().getMetadata(mcMMO.doubleDrops);
+
+ BonusDrops bonusDrops = (BonusDrops) metadataValue.get(0);
+ Collection potentialDrops = (Collection) 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 = event.getBlock().getMetadata(mcMMO.tripleDrops);
+
+ BonusDrops bonusDrops = (BonusDrops) metadataValue.get(0);
+ Collection potentialDrops = (Collection) 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);
+ }
}
}
}*/
diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java
index aceebcded..7d8664e4b 100644
--- a/src/main/java/com/gmail/nossr50/mcMMO.java
+++ b/src/main/java/com/gmail/nossr50/mcMMO.java
@@ -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";
diff --git a/src/main/java/com/gmail/nossr50/skills/herbalism/Herbalism.java b/src/main/java/com/gmail/nossr50/skills/herbalism/Herbalism.java
index eb7b01c5b..a51cab404 100644
--- a/src/main/java/com/gmail/nossr50/skills/herbalism/Herbalism.java
+++ b/src/main/java/com/gmail/nossr50/skills/herbalism/Herbalism.java
@@ -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);
}
diff --git a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java
index f7501bc86..afb280e98 100644
--- a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java
+++ b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java
@@ -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)) {
diff --git a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java
index a5dd723d9..fa3ceaaa1 100644
--- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java
+++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java
@@ -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()));
}
}
diff --git a/src/main/java/com/gmail/nossr50/util/BlockUtils.java b/src/main/java/com/gmail/nossr50/util/BlockUtils.java
index e3fe60458..66cef68f3 100644
--- a/src/main/java/com/gmail/nossr50/util/BlockUtils.java
+++ b/src/main/java/com/gmail/nossr50/util/BlockUtils.java
@@ -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);
}
/**
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 4c616b22d..7858b9ec5 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -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