diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index dcc5745..0000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-stages:
-- build
-
-variables:
- name: "UltimateStacker"
- path: "/builds/$CI_PROJECT_PATH"
- version: "1.10.22"
-
-build:
- stage: build
- image: maven:3.5.3-jdk-8
- script:
- - find $path/ -type f -name "*.xml" -print0 | xargs -0 sed -i -e s/maven-version-number/$version/g
- - find $path/ -type f -name "*.yml" -print0 | xargs -0 sed -i -e s/maven-version-number/$version/g
- - mvn clean package
- - find $path/ -depth -path '*original*' -delete
- - mv -v $path/target/*.jar $path
- artifacts:
- name: $name-$version
- paths:
- - "$path/*.jar"
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index da2854e..5c7b954 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
com.songoda
UltimateStacker
4.0.0
- maven-version-number
+ 1.10.23
clean install
UltimateStacker-${project.version}
@@ -16,6 +16,28 @@
1.8
+
+ com.google.code.maven-replacer-plugin
+ replacer
+ 1.5.3
+
+
+ prepare-package
+
+ replace
+
+
+
+
+ ${project.build.directory}/classes/plugin.yml
+
+
+ maven-version-number
+ ${project.version}
+
+
+
+
org.apache.maven.plugins
maven-shade-plugin
@@ -35,6 +57,9 @@
com.songoda:SongodaCore
com.songoda:Lootables
+ com.zaxxer:HikariCP
+ org.slf4j:slf4j-api
+ org.slf4j:slf4j-nop
diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
index aa04f38..ebf1098 100644
--- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
+++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
@@ -342,8 +342,6 @@ public class UltimateStacker extends SongodaPlugin {
public void updateHologram(SpawnerStack stack) {
// are holograms enabled?
if(!Settings.SPAWNER_HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return;
- // verify that this is a spawner stack
- if (stack.getLocation().getBlock().getType() != CompatibleMaterial.SPAWNER.getMaterial()) return;
// grab the spawner block
CreatureSpawner creatureSpawner = (CreatureSpawner) stack.getLocation().getBlock().getState();
String name = Methods.compileSpawnerName(creatureSpawner.getSpawnedType(), stack.getAmount());
diff --git a/src/main/java/com/songoda/ultimatestacker/entity/Check.java b/src/main/java/com/songoda/ultimatestacker/entity/Check.java
index a8dd5df..2c8e983 100644
--- a/src/main/java/com/songoda/ultimatestacker/entity/Check.java
+++ b/src/main/java/com/songoda/ultimatestacker/entity/Check.java
@@ -13,6 +13,7 @@ public enum Check {
ANIMAL_OWNER(true),
SKELETON_TYPE(true),
ZOMBIE_BABY(true),
+ HAS_EQUIPMENT(true),
SLIME_SIZE(true),
PIG_SADDLE(true),
SHEEP_SHEARED(true),
diff --git a/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java b/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java
index e9d2541..a3505b1 100644
--- a/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java
@@ -146,6 +146,9 @@ public class EntityStack {
newEntity.getEquipment().setItemInHand(CompatibleMaterial.GOLDEN_SWORD.getItem());
if (Settings.CARRY_OVER_METADATA_ON_DEATH.getBoolean()) {
+ if (killed.hasMetadata("US_REASON"))
+ newEntity.setMetadata("US_REASON", killed.getMetadata("US_REASON").get(0));
+
if (killed.hasMetadata("ES"))
newEntity.setMetadata("ES", killed.getMetadata("ES").get(0));
@@ -197,7 +200,9 @@ public class EntityStack {
if (entity == null) return;
synchronized (healthLock) {
entity.setHealth(Settings.STACK_ENTITY_HEALTH.getBoolean()
- && !this.health.isEmpty() ? this.health.removeFirst() : entity.getMaxHealth());
+ && !health.isEmpty()
+ ? (health.getFirst() > entity.getMaxHealth() ? entity.getMaxHealth() : health.removeFirst())
+ : entity.getMaxHealth());
}
}
diff --git a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java b/src/main/java/com/songoda/ultimatestacker/settings/Settings.java
index 03bd3a7..f2e50c1 100644
--- a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java
+++ b/src/main/java/com/songoda/ultimatestacker/settings/Settings.java
@@ -133,7 +133,7 @@ public class Settings {
"This list is ignored if Only Stack From Spawners = true.",
"The following reasons can be added to the list:",
"\"NATURAL\", \"JOCKEY\", \"CHUNK_GEN\", \"SPAWNER\",",
- "\"EGG\", \"SPAWNER_EGG\", \"LIGHTNING\", \"BUILD_SNOWMAN\",",
+ "\"EGG\", \"SPAWNER_EGG\", \"LIGHTNING\", \"BUILD_SNOWMAN\", \"HAS_EQUIPMENT\",",
"\"BUILD_IRONGOLEM\", \"BUILD_WITHER\", \"VILLAGE_DEFENSE\", \"VILLAGE_INVASION\",",
"\"BREEDING\", \"SLIME_SPLIT\", \"REINFORCEMENTS\", \"NETHER_PORTAL\",",
"\"DISPENSE_EGG\", \"INFECTION\", \"CURED\", \"OCELOT_BABY\",",
diff --git a/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java b/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java
index 8b3839b..a8896e0 100644
--- a/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java
+++ b/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java
@@ -5,9 +5,7 @@ import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.entity.Check;
import com.songoda.ultimatestacker.entity.EntityStack;
import com.songoda.ultimatestacker.settings.Settings;
-import org.bukkit.Chunk;
-import org.bukkit.Location;
-import org.bukkit.World;
+import org.bukkit.*;
import org.bukkit.entity.*;
import java.util.*;
@@ -241,27 +239,27 @@ public class EntityUtils {
return newEntity;
}
- public List getSimilarEntitiesAroundEntity(LivingEntity initalEntity, Location location) {
+ 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() == initalEntity.getType() && entity != initalEntity)
+ .stream().filter(entity -> entity.getType() == initialEntity.getType() && entity != initialEntity)
.collect(Collectors.toCollection(LinkedList::new));
- if (stackFlyingDown && Methods.canFly(initalEntity))
- entityList.removeIf(entity -> entity.getLocation().getY() > initalEntity.getLocation().getY());
+ if (stackFlyingDown && Methods.canFly(initialEntity))
+ entityList.removeIf(entity -> entity.getLocation().getY() > initialEntity.getLocation().getY());
for (String checkStr : checks) {
Check check = Check.getCheck(checkStr);
if (check == null) continue;
switch (check) {
case SPAWN_REASON: {
- if (initalEntity.hasMetadata("US_REASON"))
+ if (initialEntity.hasMetadata("US_REASON"))
entityList.removeIf(entity -> entity.hasMetadata("US_REASON") && !entity.getMetadata("US_REASON").get(0).asString().equals("US_REASON"));
}
case AGE: {
- if (!(initalEntity instanceof Ageable)) break;
+ if (!(initialEntity instanceof Ageable)) break;
- if (((Ageable) initalEntity).isAdult()) {
+ if (((Ageable) initialEntity).isAdult()) {
entityList.removeIf(entity -> !((Ageable) entity).isAdult());
} else {
entityList.removeIf(entity -> ((Ageable) entity).isAdult());
@@ -270,45 +268,45 @@ public class EntityUtils {
}
case NERFED: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) break;
- entityList.removeIf(entity -> entity.hasAI() != initalEntity.hasAI());
+ entityList.removeIf(entity -> entity.hasAI() != initialEntity.hasAI());
}
case IS_TAMED: {
- if (!(initalEntity instanceof Tameable)) break;
- if (((Tameable) initalEntity).isTamed()) {
+ if (!(initialEntity instanceof Tameable)) break;
+ if (((Tameable) initialEntity).isTamed()) {
entityList.removeIf(entity -> !((Tameable) entity).isTamed());
} else {
entityList.removeIf(entity -> ((Tameable) entity).isTamed());
}
}
case ANIMAL_OWNER: {
- if (!(initalEntity instanceof Tameable)) break;
+ if (!(initialEntity instanceof Tameable)) break;
- Tameable tameable = ((Tameable) initalEntity);
+ Tameable tameable = ((Tameable) initialEntity);
entityList.removeIf(entity -> ((Tameable) entity).getOwner() != tameable.getOwner());
}
case PIG_SADDLE: {
- if (!(initalEntity instanceof Pig)) break;
+ if (!(initialEntity instanceof Pig)) break;
entityList.removeIf(entity -> ((Pig) entity).hasSaddle());
break;
}
case SKELETON_TYPE: {
- if (!(initalEntity instanceof Skeleton)) break;
+ if (!(initialEntity instanceof Skeleton)) break;
- Skeleton skeleton = (Skeleton) initalEntity;
+ Skeleton skeleton = (Skeleton) initialEntity;
entityList.removeIf(entity -> ((Skeleton) entity).getSkeletonType() != skeleton.getSkeletonType());
break;
}
case SHEEP_COLOR: {
- if (!(initalEntity instanceof Sheep)) break;
+ if (!(initialEntity instanceof Sheep)) break;
- Sheep sheep = ((Sheep) initalEntity);
+ Sheep sheep = ((Sheep) initialEntity);
entityList.removeIf(entity -> ((Sheep) entity).getColor() != sheep.getColor());
break;
}
case SHEEP_SHEARED: {
- if (!(initalEntity instanceof Sheep)) break;
+ if (!(initialEntity instanceof Sheep)) break;
- Sheep sheep = ((Sheep) initalEntity);
+ Sheep sheep = ((Sheep) initialEntity);
if (sheep.isSheared()) {
entityList.removeIf(entity -> !((Sheep) entity).isSheared());
} else {
@@ -318,9 +316,9 @@ public class EntityUtils {
}
case SNOWMAN_DERPED: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)
- || !(initalEntity instanceof Snowman)) break;
+ || !(initialEntity instanceof Snowman)) break;
- Snowman snowman = ((Snowman) initalEntity);
+ Snowman snowman = ((Snowman) initialEntity);
if (snowman.isDerp()) {
entityList.removeIf(entity -> !((Snowman) entity).isDerp());
} else {
@@ -330,162 +328,184 @@ public class EntityUtils {
}
case LLAMA_COLOR: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)
- || !(initalEntity instanceof Llama)) break;
- Llama llama = ((Llama) initalEntity);
+ || !(initialEntity instanceof Llama)) break;
+ Llama llama = ((Llama) initialEntity);
entityList.removeIf(entity -> ((Llama) entity).getColor() != llama.getColor());
break;
}
case LLAMA_STRENGTH: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)
- || !(initalEntity instanceof Llama)) break;
- Llama llama = ((Llama) initalEntity);
+ || !(initialEntity instanceof Llama)) break;
+ Llama llama = ((Llama) initialEntity);
entityList.removeIf(entity -> ((Llama) entity).getStrength() != llama.getStrength());
break;
}
case VILLAGER_PROFESSION: {
- if (!(initalEntity instanceof Villager)) break;
- Villager villager = ((Villager) initalEntity);
+ if (!(initialEntity instanceof Villager)) break;
+ Villager villager = ((Villager) initialEntity);
entityList.removeIf(entity -> ((Villager) entity).getProfession() != villager.getProfession());
break;
}
case SLIME_SIZE: {
- if (!(initalEntity instanceof Slime)) break;
- Slime slime = ((Slime) initalEntity);
+ if (!(initialEntity instanceof Slime)) break;
+ Slime slime = ((Slime) initialEntity);
entityList.removeIf(entity -> ((Slime) entity).getSize() != slime.getSize());
break;
}
case HORSE_CARRYING_CHEST: {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) {
- if (!(initalEntity instanceof ChestedHorse)) break;
+ if (!(initialEntity instanceof ChestedHorse)) break;
entityList.removeIf(entity -> ((ChestedHorse) entity).isCarryingChest());
} else {
- if (!(initalEntity instanceof Horse)) break;
+ if (!(initialEntity instanceof Horse)) break;
entityList.removeIf(entity -> ((Horse) entity).isCarryingChest());
}
break;
}
case HORSE_HAS_ARMOR: {
- if (!(initalEntity instanceof Horse)) break;
+ if (!(initialEntity instanceof Horse)) break;
entityList.removeIf(entity -> ((Horse) entity).getInventory().getArmor() != null);
break;
}
case HORSE_HAS_SADDLE: {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- && initalEntity instanceof AbstractHorse) {
+ && initialEntity instanceof AbstractHorse) {
entityList.removeIf(entity -> ((AbstractHorse) entity).getInventory().getSaddle() != null);
break;
}
- if (!(initalEntity instanceof Horse)) break;
+ if (!(initialEntity instanceof Horse)) break;
entityList.removeIf(entity -> ((Horse) entity).getInventory().getSaddle() != null);
break;
}
case HORSE_JUMP: {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) {
- if (!(initalEntity instanceof AbstractHorse)) break;
- AbstractHorse horse = ((AbstractHorse) initalEntity);
+ if (!(initialEntity instanceof AbstractHorse)) break;
+ AbstractHorse horse = ((AbstractHorse) initialEntity);
entityList.removeIf(entity -> ((AbstractHorse) entity).getJumpStrength() != horse.getJumpStrength());
} else {
- if (!(initalEntity instanceof Horse)) break;
- Horse horse = ((Horse) initalEntity);
+ if (!(initialEntity instanceof Horse)) break;
+ Horse horse = ((Horse) initialEntity);
entityList.removeIf(entity -> ((Horse) entity).getJumpStrength() != horse.getJumpStrength());
}
break;
}
case HORSE_COLOR: {
- if (!(initalEntity instanceof Horse)) break;
- Horse horse = ((Horse) initalEntity);
+ if (!(initialEntity instanceof Horse)) break;
+ Horse horse = ((Horse) initialEntity);
entityList.removeIf(entity -> ((Horse) entity).getColor() != horse.getColor());
break;
}
case HORSE_STYLE: {
- if (!(initalEntity instanceof Horse)) break;
- Horse horse = ((Horse) initalEntity);
+ if (!(initialEntity instanceof Horse)) break;
+ Horse horse = ((Horse) initialEntity);
entityList.removeIf(entity -> ((Horse) entity).getStyle() != horse.getStyle());
break;
}
case ZOMBIE_BABY: {
- if (!(initalEntity instanceof Zombie)) break;
- Zombie zombie = (Zombie) initalEntity;
+ if (!(initialEntity instanceof Zombie)) break;
+ Zombie zombie = (Zombie) initialEntity;
entityList.removeIf(entity -> ((Zombie) entity).isBaby() != zombie.isBaby());
break;
}
case WOLF_COLLAR_COLOR: {
- if (!(initalEntity instanceof Wolf)) break;
- Wolf wolf = (Wolf) initalEntity;
+ if (!(initialEntity instanceof Wolf)) break;
+ Wolf wolf = (Wolf) initialEntity;
entityList.removeIf(entity -> ((Wolf) entity).getCollarColor() != wolf.getCollarColor());
break;
}
case OCELOT_TYPE: {
- if (!(initalEntity instanceof Ocelot)) break;
- Ocelot ocelot = (Ocelot) initalEntity;
+ if (!(initialEntity instanceof Ocelot)) break;
+ Ocelot ocelot = (Ocelot) initialEntity;
entityList.removeIf(entity -> ((Ocelot) entity).getCatType() != ocelot.getCatType());
}
case CAT_TYPE: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_14)
- || !(initalEntity instanceof Cat)) break;
- Cat cat = (Cat) initalEntity;
+ || !(initialEntity instanceof Cat)) break;
+ Cat cat = (Cat) initialEntity;
entityList.removeIf(entity -> ((Cat) entity).getCatType() != cat.getCatType());
break;
}
+ case HAS_EQUIPMENT: {
+ if (initialEntity.getEquipment() == null) break;
+ boolean imEquipped = isEquipped(initialEntity);
+ if (imEquipped)
+ entityList = new ArrayList<>();
+ else
+ entityList.removeIf(this::isEquipped);
+ break;
+ }
case RABBIT_TYPE: {
- if (!(initalEntity instanceof Rabbit)) break;
- Rabbit rabbit = (Rabbit) initalEntity;
+ if (!(initialEntity instanceof Rabbit)) break;
+ Rabbit rabbit = (Rabbit) initialEntity;
entityList.removeIf(entity -> ((Rabbit) entity).getRabbitType() != rabbit.getRabbitType());
break;
}
case PARROT_TYPE: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)
- || !(initalEntity instanceof Parrot)) break;
- Parrot parrot = (Parrot) initalEntity;
+ || !(initialEntity instanceof Parrot)) break;
+ Parrot parrot = (Parrot) initialEntity;
entityList.removeIf(entity -> ((Parrot) entity).getVariant() != parrot.getVariant());
break;
}
case PUFFERFISH_STATE: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- || !(initalEntity instanceof PufferFish)) break;
- PufferFish pufferFish = (PufferFish) initalEntity;
+ || !(initialEntity instanceof PufferFish)) break;
+ PufferFish pufferFish = (PufferFish) initialEntity;
entityList.removeIf(entity -> ((PufferFish) entity).getPuffState() != pufferFish.getPuffState());
break;
}
case TROPICALFISH_PATTERN: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- || !(initalEntity instanceof TropicalFish)) break;
- TropicalFish tropicalFish = (TropicalFish) initalEntity;
+ || !(initialEntity instanceof TropicalFish)) break;
+ TropicalFish tropicalFish = (TropicalFish) initialEntity;
entityList.removeIf(entity -> ((TropicalFish) entity).getPattern() != tropicalFish.getPattern());
break;
}
case TROPICALFISH_PATTERN_COLOR: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- || !(initalEntity instanceof TropicalFish)) break;
- TropicalFish tropicalFish = (TropicalFish) initalEntity;
+ || !(initialEntity instanceof TropicalFish)) break;
+ TropicalFish tropicalFish = (TropicalFish) initialEntity;
entityList.removeIf(entity -> ((TropicalFish) entity).getPatternColor() != tropicalFish.getPatternColor());
break;
}
case TROPICALFISH_BODY_COLOR: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- || !(initalEntity instanceof TropicalFish)) break;
- TropicalFish tropicalFish = (TropicalFish) initalEntity;
+ || !(initialEntity instanceof TropicalFish)) break;
+ TropicalFish tropicalFish = (TropicalFish) initialEntity;
entityList.removeIf(entity -> ((TropicalFish) entity).getBodyColor() != tropicalFish.getBodyColor());
break;
}
case PHANTOM_SIZE: {
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- || !(initalEntity instanceof Phantom)) break;
- Phantom phantom = (Phantom) initalEntity;
+ || !(initialEntity instanceof Phantom)) break;
+ Phantom phantom = (Phantom) initialEntity;
entityList.removeIf(entity -> ((Phantom) entity).getSize() != phantom.getSize());
break;
}
}
}
- if (initalEntity.hasMetadata("breedCooldown")) {
+ if (initialEntity.hasMetadata("breedCooldown")) {
entityList.removeIf(entity -> !entity.hasMetadata("breedCooldown"));
}
return entityList;
}
+ public boolean isEquipped(LivingEntity initialEntity) {
+ return initialEntity.getEquipment() != null
+ && (initialEntity.getEquipment().getItemInHand().getType() != Material.AIR
+ || (initialEntity.getEquipment().getHelmet() != null
+ && initialEntity.getEquipment().getHelmet().getType() != Material.AIR)
+ || (initialEntity.getEquipment().getChestplate() != null
+ && initialEntity.getEquipment().getChestplate().getType() != Material.AIR)
+ || (initialEntity.getEquipment().getLeggings() != null
+ && initialEntity.getEquipment().getLeggings().getType() != Material.AIR)
+ || (initialEntity.getEquipment().getBoots() != null
+ && initialEntity.getEquipment().getBoots().getType() != Material.AIR));
+ }
+
public void splitFromStack(LivingEntity entity) {
UltimateStacker instance = plugin;
EntityStack stack = instance.getEntityStackManager().getStack(entity);