diff --git a/pom.xml b/pom.xml
index d228f09..6b16df2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
com.songoda
UltimateStacker
4.0.0
- 2
+ 2.0.1
clean install
UltimateStacker-${project.version}
diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
index 93ebe90..0b3062c 100644
--- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
+++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
@@ -360,6 +360,12 @@ public class UltimateStacker extends SongodaPlugin {
public void updateHologram(Hologramable stack) {
+ // Is this stack invalid?
+ if (!stack.isValid())
+ if (stack instanceof BlockStack)
+ blockStackManager.removeBlock(stack.getLocation());
+ else if (stack instanceof SpawnerStack)
+ spawnerStackManager.removeSpawner(stack.getLocation());
// are holograms enabled?
if (!stack.areHologramsEnabled() && !HologramManager.getManager().isEnabled()) return;
// create the hologram
diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java
index e95bb07..6ef0884 100644
--- a/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java
+++ b/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java
@@ -76,7 +76,8 @@ public class EntityListeners implements Listener {
ItemStack item = event.getEntity().getItemStack();
int amount = (stack.getAmount() - 1) + item.getAmount();
- item.setAmount(Math.min((stack.getAmount() - 1) + item.getAmount(), item.getMaxStackSize()));
+ if (amount < 1) return;
+ item.setAmount(Math.min(amount, item.getMaxStackSize()));
if (amount > item.getMaxStackSize())
UltimateStacker.updateItemAmount(event.getEntity(), amount);
event.getEntity().setItemStack(item);
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java b/src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java
index 88bcd02..26aee3a 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java
@@ -9,4 +9,6 @@ public interface Hologramable {
String getHologramName();
boolean areHologramsEnabled();
+
+ boolean isValid();
}
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/Stackable.java b/src/main/java/com/songoda/ultimatestacker/stackable/Stackable.java
deleted file mode 100644
index bca977b..0000000
--- a/src/main/java/com/songoda/ultimatestacker/stackable/Stackable.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.songoda.ultimatestacker.stackable;
-
-
-public interface Stackable {
-
- int getAmount();
-}
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java
index 5016b9c..3054473 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java
@@ -4,7 +4,7 @@ import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.settings.Settings;
import com.songoda.ultimatestacker.stackable.Hologramable;
-import com.songoda.ultimatestacker.stackable.Stackable;
+import com.songoda.ultimatestacker.utils.Stackable;
import com.songoda.ultimatestacker.utils.Methods;
import org.bukkit.Location;
import org.bukkit.World;
@@ -34,6 +34,11 @@ public class BlockStack implements Stackable, Hologramable {
return amount;
}
+ @Override
+ public boolean isValid() {
+ return CompatibleMaterial.getMaterial(location.getBlock()) == material;
+ }
+
public void add(int amount) {
this.amount = this.amount + amount;
}
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java
index 6ab607b..0408e32 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java
@@ -3,7 +3,7 @@ package com.songoda.ultimatestacker.stackable.entity;
import com.songoda.core.nms.NmsManager;
import com.songoda.core.nms.nbt.NBTEntity;
import com.songoda.ultimatestacker.UltimateStacker;
-import com.songoda.ultimatestacker.stackable.Stackable;
+import com.songoda.ultimatestacker.utils.Stackable;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
@@ -97,6 +97,11 @@ public class ColdEntityStack implements Stackable {
return stackedEntities.size() + 1;
}
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+
public void createDuplicates(int duplicates) {
this.createDuplicates = duplicates;
}
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java
index d1e2951..91477c6 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java
@@ -1,10 +1,11 @@
package com.songoda.ultimatestacker.stackable.spawner;
+import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.ServerVersion;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.settings.Settings;
import com.songoda.ultimatestacker.stackable.Hologramable;
-import com.songoda.ultimatestacker.stackable.Stackable;
+import com.songoda.ultimatestacker.utils.Stackable;
import com.songoda.ultimatestacker.utils.Methods;
import com.songoda.ultimatestacker.utils.Reflection;
import org.bukkit.Bukkit;
@@ -34,6 +35,11 @@ public class SpawnerStack implements Stackable, Hologramable {
return amount;
}
+ @Override
+ public boolean isValid() {
+ return CompatibleMaterial.getMaterial(location.getBlock()) == CompatibleMaterial.SPAWNER;
+ }
+
public void setAmount(int amount) {
this.amount = amount;
plugin.getDataManager().updateSpawner(this);
diff --git a/src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java b/src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java
index e950c80..f6d8d2b 100644
--- a/src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java
+++ b/src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java
@@ -51,7 +51,8 @@ public class CachedChunk {
if (!Bukkit.getWorld(world).isChunkLoaded(x, z)) {
return new Entity[0];
}
- return getChunk().getEntities();
+ Chunk chunk = getChunk();
+ return chunk == null ? new Entity[0] : getChunk().getEntities();
}
@Override
diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Stackable.java b/src/main/java/com/songoda/ultimatestacker/utils/Stackable.java
new file mode 100644
index 0000000..e0556e7
--- /dev/null
+++ b/src/main/java/com/songoda/ultimatestacker/utils/Stackable.java
@@ -0,0 +1,9 @@
+package com.songoda.ultimatestacker.utils;
+
+
+public interface Stackable {
+
+ int getAmount();
+
+ boolean isValid();
+}