diff --git a/pom.xml b/pom.xml
index 02f455e..9314288 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
com.songoda
UltimateStacker
4.0.0
- 1.11.7
+ 1.11.8
clean install
UltimateStacker-${project.version}
diff --git a/src/main/java/com/songoda/ultimatestacker/entity/Check.java b/src/main/java/com/songoda/ultimatestacker/entity/Check.java
index 2c8e983..6e0a4f5 100644
--- a/src/main/java/com/songoda/ultimatestacker/entity/Check.java
+++ b/src/main/java/com/songoda/ultimatestacker/entity/Check.java
@@ -1,6 +1,8 @@
package com.songoda.ultimatestacker.entity;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public enum Check {
@@ -52,6 +54,13 @@ public enum Check {
this.isEnabledByDefault = isEnabledByDefault;
}
+ public static List getChecks(List strChecks) {
+ List checks = new ArrayList<>();
+ for (String checkStr : strChecks)
+ checks.add(getCheck(checkStr));
+ return checks;
+ }
+
public boolean isEnabledByDefault() {
return isEnabledByDefault;
}
diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java
index d97aa09..d3c06d6 100644
--- a/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java
+++ b/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java
@@ -7,6 +7,7 @@ import com.songoda.ultimatestacker.settings.Settings;
import com.songoda.ultimatestacker.utils.Methods;
import org.apache.commons.lang.StringUtils;
import org.bukkit.block.BlockState;
+import org.bukkit.entity.Arrow;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -88,16 +89,16 @@ public class ItemListeners implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPickup(PlayerPickupItemEvent event) {
- if (!Settings.STACK_ITEMS.getBoolean()) return;
+ if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
// Amount here is not the total amount of item (32 if more than 32) but the amount of item the player can retrieve
// ie there is x64 diamonds blocks (so 32), the player pick 8 items so the amount is 8 and not 32
- int amount = UltimateStacker.getActualItemAmount(event.getItem());
- if (/*event.getItem().getItemStack().getAmount()*/amount < (event.getItem().getItemStack().getMaxStackSize() / 2)) {
- // Update
- UltimateStacker.updateItemAmount(event.getItem(), event.getRemaining());
- return;
- }
- event.setCancelled(true);
+
+ Item item = event.getItem();
+ ItemStack stack = item.getItemStack();
+ int amount = UltimateStacker.getActualItemAmount(item);
+ if (amount < (stack.getMaxStackSize() / 2)) return;
+
+ event.getItem().setItemStack(stack);
event.getPlayer().playSound(event.getPlayer().getLocation(), CompatibleSound.ENTITY_ITEM_PICKUP.getSound(), .2f, (float) (1 + Math.random()));
diff --git a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java b/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java
index 17291f5..5e2647b 100644
--- a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java
+++ b/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java
@@ -146,9 +146,11 @@ public class StackingTask extends BukkitRunnable {
int maxEntityStackSize = getEntityStackSize(livingEntity);
// Get similar entities around our entity and make sure those entities are both compatible and stackable.
- List stackableFriends = plugin.getEntityUtils().getSimilarEntitiesAroundEntity(livingEntity, location)
- .stream().filter(entity -> isEntityStackable(entity, location))
- .collect(Collectors.toCollection(LinkedList::new));
+ List stackableFriends = new LinkedList<>();
+ for (LivingEntity entity : plugin.getEntityUtils().getSimilarEntitiesAroundEntity(livingEntity, location)) {
+ if (!isEntityStackable(entity, location)) continue;
+ stackableFriends.add(entity);
+ }
// Loop through our similar stackable entities.
for (LivingEntity entity : stackableFriends) {
diff --git a/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java b/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java
index 598fdbe..7497071 100644
--- a/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java
+++ b/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java
@@ -19,7 +19,7 @@ public class EntityUtils {
UltimateStacker plugin = UltimateStacker.getInstance();
- private final List checks = Settings.STACK_CHECKS.getStringList();
+ private final List checks = Check.getChecks(Settings.STACK_CHECKS.getStringList());
private final boolean stackFlyingDown = Settings.ONLY_STACK_FLYING_DOWN.getBoolean(),
keepFire = Settings.KEEP_FIRE.getBoolean(),
keepPotion = Settings.KEEP_POTION.getBoolean(),
@@ -100,8 +100,7 @@ public class EntityUtils {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12))
newEntity.setInvulnerable(false);
- for (String checkStr : checks) {
- Check check = Check.valueOf(checkStr);
+ for (Check check : checks) {
switch (check) {
case AGE: {
if (!(toClone instanceof Ageable) || ((Ageable) toClone).isAdult()) break;
@@ -255,15 +254,17 @@ public class EntityUtils {
public List getSimilarEntitiesAroundEntity(LivingEntity initialEntity, Location location) {
// Create a list of all entities around the initial entity of the same type.
- List entityList = getNearbyEntities(location, searchRadius, stackWholeChunk)
- .stream().filter(entity -> entity.getType() == initialEntity.getType() && entity != initialEntity)
- .collect(Collectors.toCollection(LinkedList::new));
+ List entityList = new LinkedList<>();
+ for (LivingEntity entity : getNearbyEntities(location, searchRadius, stackWholeChunk)) {
+ if (entity.getType() != initialEntity.getType() || entity == initialEntity)
+ continue;
+ entityList.add(entity);
+ }
if (stackFlyingDown && Methods.canFly(initialEntity))
entityList.removeIf(entity -> entity.getLocation().getY() > initialEntity.getLocation().getY());
- for (String checkStr : checks) {
- Check check = Check.getCheck(checkStr);
+ for (Check check : checks) {
if (check == null) continue;
switch (check) {
case SPAWN_REASON: {