瀏覽代碼

Patching a bug where mcMMO drops too few items, and yet another concurrent modification exception.

Glitchfinder 12 年之前
父節點
當前提交
d444e088c4

+ 7 - 1
src/main/java/com/gmail/nossr50/util/Misc.java

@@ -5,6 +5,7 @@ import java.util.Random;
 import org.bukkit.Location;
 import org.bukkit.Location;
 import org.bukkit.Material;
 import org.bukkit.Material;
 import org.bukkit.block.Block;
 import org.bukkit.block.Block;
+import org.bukkit.entity.Item;
 import org.bukkit.entity.LivingEntity;
 import org.bukkit.entity.LivingEntity;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Player;
 import org.bukkit.event.entity.EntityDamageEvent;
 import org.bukkit.event.entity.EntityDamageEvent;
@@ -253,7 +254,12 @@ public class Misc {
             return;
             return;
         }
         }
 
 
-        location.getWorld().dropItemNaturally(location, itemStack).setItemStack(itemStack);
+        Item newItem = location.getWorld().dropItemNaturally(location, itemStack);
+
+        ItemStack cloned = itemStack.clone();
+        cloned.setAmount(newItem.getItemStack().getAmount());
+
+        newItem.setItemStack(cloned);
     }
     }
 
 
     /**
     /**

+ 4 - 2
src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/HashChunkManager.java

@@ -254,14 +254,16 @@ public class HashChunkManager implements ChunkManager {
         if(store.containsKey(world.getName() + "," + cx + "," + cz)) {
         if(store.containsKey(world.getName() + "," + cx + "," + cz)) {
             ChunkStore out = store.get(world.getName() + "," + cx + "," + cz);
             ChunkStore out = store.get(world.getName() + "," + cx + "," + cz);
 
 
-            for(Entity entity : spawnedMobs) {
+            List<Entity> tempSpawnedMobs = new ArrayList<Entity>(spawnedMobs);
+            for(Entity entity : tempSpawnedMobs) {
                 if(!isEntityInChunk(entity, cx, cz, world))
                 if(!isEntityInChunk(entity, cx, cz, world))
                     continue;
                     continue;
 
 
                 out.addSpawnedMob(entity.getUniqueId());
                 out.addSpawnedMob(entity.getUniqueId());
             }
             }
 
 
-            for(Entity entity : spawnedPets) {
+            List<Entity> tempSpawnedPets = new ArrayList<Entity>(spawnedPets);
+            for(Entity entity : tempSpawnedPets) {
                 if(!isEntityInChunk(entity, cx, cz, world))
                 if(!isEntityInChunk(entity, cx, cz, world))
                     continue;
                     continue;