From a5d58e85e679c7b97074667afc73d49d86f4bd2d Mon Sep 17 00:00:00 2001 From: songoda Date: Sun, 22 Sep 2019 08:25:39 -0400 Subject: [PATCH 1/8] Don't edit drops for armor stands. --- .../com/songoda/ultimatestacker/listeners/DeathListeners.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java index 9164044..624b51e 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java @@ -10,6 +10,7 @@ import com.songoda.ultimatestacker.utils.DropUtils; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.ChestedHorse; +import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -38,7 +39,8 @@ public class DeathListeners implements Listener { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onEntityDeath(EntityDeathEvent event) { - if (event.getEntity() instanceof Player) return; + if (event.getEntityType() == EntityType.PLAYER + || event.getEntityType() == EntityType.ARMOR_STAND) return; boolean custom = Settings.CUSTOM_DROPS.getBoolean(); List drops = custom ? instance.getLootablesManager().getDrops(event.getEntity()) : new ArrayList<>(); From a5214fd7a144aae549da18f9a84bdd74c9e47029 Mon Sep 17 00:00:00 2001 From: Brianna Date: Sun, 22 Sep 2019 16:17:19 -0400 Subject: [PATCH 2/8] Added support for derped snowmen. --- .../songoda/ultimatestacker/entity/Check.java | 3 ++- .../songoda/ultimatestacker/entity/Split.java | 2 +- .../listeners/ShearListeners.java | 8 ++++++-- .../ultimatestacker/settings/Settings.java | 16 +++++++++++++-- .../ultimatestacker/utils/EntityUtils.java | 20 +++++++++++++++++-- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/songoda/ultimatestacker/entity/Check.java b/src/main/java/com/songoda/ultimatestacker/entity/Check.java index 437742f..fa6e454 100644 --- a/src/main/java/com/songoda/ultimatestacker/entity/Check.java +++ b/src/main/java/com/songoda/ultimatestacker/entity/Check.java @@ -12,8 +12,9 @@ public enum Check { ZOMBIE_BABY(true), SLIME_SIZE(true), PIG_SADDLE(true), - SHEEP_SHEERED(true), + SHEEP_SHEARED(true), SHEEP_COLOR(true), + SNOWMAN_DERPED(true), WOLF_COLLAR_COLOR(true), OCELOT_TYPE(true), HORSE_COLOR(true), diff --git a/src/main/java/com/songoda/ultimatestacker/entity/Split.java b/src/main/java/com/songoda/ultimatestacker/entity/Split.java index 5839ae0..a8080d4 100644 --- a/src/main/java/com/songoda/ultimatestacker/entity/Split.java +++ b/src/main/java/com/songoda/ultimatestacker/entity/Split.java @@ -2,6 +2,6 @@ package com.songoda.ultimatestacker.entity; public enum Split { - NAME_TAG, MUSHROOM_SHEAR, SHEEP_SHEAR, SHEEP_DYE, ENTITY_BREED + NAME_TAG, MUSHROOM_SHEAR, SHEEP_SHEAR, SNOWMAN_DERP, SHEEP_DYE, ENTITY_BREED } diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java index 9fb7c09..ff12e60 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java @@ -24,14 +24,18 @@ public class ShearListeners implements Listener { public void onShear(PlayerShearEntityEvent event) { Entity entity = event.getEntity(); - if (entity.getType() != EntityType.SHEEP && entity.getType() != EntityType.MUSHROOM_COW) return; + if (entity.getType() != EntityType.SHEEP + && entity.getType() != EntityType.MUSHROOM_COW + && entity.getType() != EntityType.SNOWMAN) return; EntityStackManager stackManager = plugin.getEntityStackManager(); if (!stackManager.isStacked(entity)) return; if (event.getEntity().getType() == EntityType.SHEEP && Settings.SPLIT_CHECKS.getStringList().stream().noneMatch(line -> Split.valueOf(line) == Split.SHEEP_SHEAR) || event.getEntity().getType() == EntityType.MUSHROOM_COW - && Settings.SPLIT_CHECKS.getStringList().stream().noneMatch(line -> Split.valueOf(line) == Split.MUSHROOM_SHEAR)) + && Settings.SPLIT_CHECKS.getStringList().stream().noneMatch(line -> Split.valueOf(line) == Split.MUSHROOM_SHEAR) + || event.getEntity().getType() == EntityType.SNOWMAN + && Settings.SPLIT_CHECKS.getStringList().stream().noneMatch(line -> Split.valueOf(line) == Split.SNOWMAN_DERP)) return; plugin.getEntityUtils().splitFromStack((LivingEntity)entity); diff --git a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java b/src/main/java/com/songoda/ultimatestacker/settings/Settings.java index 4af202c..5ca0c0a 100644 --- a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java +++ b/src/main/java/com/songoda/ultimatestacker/settings/Settings.java @@ -7,6 +7,7 @@ import com.songoda.ultimatestacker.entity.Check; import com.songoda.ultimatestacker.entity.Split; import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; public class Settings { @@ -92,8 +93,8 @@ public class Settings { "The acceptable check options are:", "SPAWN_REASON, NERFED, AGE, TICK_AGE, PHANTOM_SIZE", "IS_TAMED, ANIMAL_OWNER, SKELETON_TYPE", - "ZOMBIE_BABY, SLIME_SIZE, PIG_SADDLE, SHEEP_SHEERED", - "SHEEP_COLOR, WOLF_COLLAR_COLOR, OCELOT_TYPE, HORSE_COLOR", + "ZOMBIE_BABY, SLIME_SIZE, PIG_SADDLE, SHEEP_SHEARED", + "SNOWMAN_DERPED", "SHEEP_COLOR, WOLF_COLLAR_COLOR, OCELOT_TYPE, HORSE_COLOR", "HORSE_STYLE, HORSE_CARRYING_CHEST, HORSE_HAS_ARMOR", "HORSE_HAS_SADDLE, HORSE_JUMP, RABBIT_TYPE, VILLAGER_PROFESSION", "LLAMA_COLOR, LLAMA_STRENGTH, PARROT_TYPE, PUFFERFISH_STATE", @@ -242,6 +243,17 @@ public class Settings { config.load(); config.setAutoremove(true).setAutosave(true); + if (config.getStringList("Entities.Stack Checks").contains("SHEEP_SHEERED")) { + List stackChecks = config.getStringList("Entities.Stack Checks"); + stackChecks.remove("SHEEP_SHEERED"); + stackChecks.addAll(Arrays.asList("SHEEP_SHEARED", "SNOWMAN_DERPED")); + config.set("Entities.Stack Checks", stackChecks); + + List splitChecks = config.getStringList("Entities.Split Checks"); + splitChecks.add("SNOWMAN_DERP"); + config.set("Entities.Split Checks", splitChecks); + } + config.saveChanges(); } } diff --git a/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java b/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java index 66c35a1..335e577 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java +++ b/src/main/java/com/songoda/ultimatestacker/utils/EntityUtils.java @@ -119,11 +119,16 @@ public class EntityUtils { ((Sheep) newEntity).setColor(((Sheep) toClone).getColor()); break; } - case SHEEP_SHEERED: { + case SHEEP_SHEARED: { if (!(toClone instanceof Sheep)) break; ((Sheep) newEntity).setSheared(((Sheep) toClone).isSheared()); break; } + case SNOWMAN_DERPED: { + if (!(toClone instanceof Snowman)) break; + ((Snowman) newEntity).setDerp(((Snowman) toClone).isDerp()); + break; + } case LLAMA_COLOR: { if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11) || !(toClone instanceof Llama)) break; @@ -298,7 +303,7 @@ public class EntityUtils { entityList.removeIf(entity -> ((Sheep) entity).getColor() != sheep.getColor()); break; } - case SHEEP_SHEERED: { + case SHEEP_SHEARED: { if (!(initalEntity instanceof Sheep)) break; Sheep sheep = ((Sheep) initalEntity); @@ -309,6 +314,17 @@ public class EntityUtils { } break; } + case SNOWMAN_DERPED: { + if (!(initalEntity instanceof Snowman)) break; + + Snowman snowman = ((Snowman) initalEntity); + if (snowman.isDerp()) { + entityList.removeIf(entity -> !((Snowman) entity).isDerp()); + } else { + entityList.removeIf(entity -> ((Snowman) entity).isDerp()); + } + break; + } case LLAMA_COLOR: { if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11) || !(initalEntity instanceof Llama)) break; From f51fb571c08777ac797f3a7bd03f77600f6af9b2 Mon Sep 17 00:00:00 2001 From: Brianna Date: Sun, 22 Sep 2019 16:45:21 -0400 Subject: [PATCH 3/8] Improved comments. --- .../ultimatestacker/settings/Settings.java | 54 +++++++++++-------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java b/src/main/java/com/songoda/ultimatestacker/settings/Settings.java index 5ca0c0a..559a076 100644 --- a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java +++ b/src/main/java/com/songoda/ultimatestacker/settings/Settings.java @@ -5,6 +5,9 @@ import com.songoda.core.configuration.ConfigSetting; import com.songoda.ultimatestacker.UltimateStacker; import com.songoda.ultimatestacker.entity.Check; import com.songoda.ultimatestacker.entity.Split; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityDamageEvent; + import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -75,13 +78,14 @@ public class Settings { "Events that will trigger an entire stack to be killed.", "It should be noted that this is useless if the above setting is true.", "Any of the following can be added to the list:", - "CONTACT, ENTITY_ATTACK, ENTITY_SWEEP_ATTACK, PROJECTILE", - "SUFFOCATION, FALL, FIRE, FIRE_TICK", - "MELTING, LAVA, DROWNING, BLOCK_EXPLOSION", - "ENTITY_EXPLOSION, VOID, LIGHTNING, SUICIDE", - "STARVATION, POISON, MAGIC, WITHER", - "FALLING_BLOCK, THORNS, DRAGON_BREATH, CUSTOM", - "FLY_INTO_WALL, HOT_FLOOR, CRAMMING, DRYOUT"); + "\"CONTACT\", \"ENTITY_ATTACK\", \"ENTITY_SWEEP_ATTACK\", \"PROJECTILE\",", + "\"SUFFOCATION\", \"FALL\", \"FIRE\", \"FIRE_TICK\",", + "\"MELTING\", \"LAVA\", \"DROWNING\", \"BLOCK_EXPLOSION\",", + "\"ENTITY_EXPLOSION\", \"VOID\", \"LIGHTNING\", \"SUICIDE\",", + "\"STARVATION\", \"POISON\", \"MAGIC\", \"WITHER\",", + "\"FALLING_BLOCK\", \"THORNS\", \"DRAGON_BREATH\", \"CUSTOM\",", + "\"FLY_INTO_WALL\", \"HOT_FLOOR\", \"CRAMMING\", \"DRYOUT\"."); + public static final ConfigSetting NO_EXP_INSTANT_KILL = new ConfigSetting(config, "Entities.No Exp For Instant Kills", false, "Should no experience be dropped when an instant kill is performed?"); @@ -91,19 +95,23 @@ public class Settings { "These are checks that are processed before an entity is stacked.", "You can add and remove from the list at will.", "The acceptable check options are:", - "SPAWN_REASON, NERFED, AGE, TICK_AGE, PHANTOM_SIZE", - "IS_TAMED, ANIMAL_OWNER, SKELETON_TYPE", - "ZOMBIE_BABY, SLIME_SIZE, PIG_SADDLE, SHEEP_SHEARED", - "SNOWMAN_DERPED", "SHEEP_COLOR, WOLF_COLLAR_COLOR, OCELOT_TYPE, HORSE_COLOR", - "HORSE_STYLE, HORSE_CARRYING_CHEST, HORSE_HAS_ARMOR", - "HORSE_HAS_SADDLE, HORSE_JUMP, RABBIT_TYPE, VILLAGER_PROFESSION", - "LLAMA_COLOR, LLAMA_STRENGTH, PARROT_TYPE, PUFFERFISH_STATE", - "TROPICALFISH_PATTERN, TROPICALFISH_BODY_COLOR, TROPICALFISH_PATTERN_COLOR"); + "\"SPAWN_REASON\", \"NERFED\", \"AGE\", \"TICK_AGE\",", + "\"IS_TAMED\", \"ANIMAL_OWNER\", \"SKELETON_TYPE\", \"ZOMBIE_BABY\",", + "\"SLIME_SIZE\", \"PIG_SADDLE\", \"SHEEP_SHEARED\", \"SHEEP_COLOR\",", + "\"SNOWMAN_DERPED\", \"WOLF_COLLAR_COLOR\", \"OCELOT_TYPE\", \"HORSE_COLOR\",", + "\"HORSE_STYLE\", \"HORSE_CARRYING_CHEST\", \"HORSE_HAS_ARMOR\", \"HORSE_HAS_SADDLE\",", + "\"HORSE_JUMP\", \"RABBIT_TYPE\", \"VILLAGER_PROFESSION\", \"LLAMA_COLOR\",", + "\"LLAMA_STRENGTH\", \"PARROT_TYPE\", \"PUFFERFISH_STATE\", \"TROPICALFISH_PATTERN\",", + "\"TROPICALFISH_BODY_COLOR\", \"TROPICALFISH_PATTERN_COLOR\", \"PHANTOM_SIZE\", \"CAT_TYPE\"."); public static final ConfigSetting SPLIT_CHECKS = new ConfigSetting(config, "Entities.Split Checks", Arrays.asList(Split.values()).stream() .map(Split::name).collect(Collectors.toList()), "These are checks that when achieved will break separate a single entity", - "from a stack."); + "from a stack.", + "The following reasons can be added to the list:", + "\"NAME_TAG\", \"MUSHROOM_SHEAR\", \"SHEEP_SHEAR\", \"SNOWMAN_DERP\",", + "\"SHEEP_DYE\", \"ENTITY_BREED\"."); + public static final ConfigSetting KEEP_FIRE = new ConfigSetting(config, "Entities.Keep Fire", true, "Should fire ticks persist to the next entity when an entity dies?"); @@ -126,12 +134,14 @@ public class Settings { "This will limit mob stacking to mobs who spawned via the listed reasons.", "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, ", - "BUILD_IRONGOLEM, BUILD_WITHER, VILLAGE_DEFENSE, VILLAGE_INVASION, BREEDING,", - "SLIME_SPLIT, REINFORCEMENTS, NETHER_PORTAL, DISPENSE_EGG, INFECTION,", - "CURED, OCELOT_BABY, SILVERFISH_BLOCK, MOUNT, TRAP, ENDER_PEARL, ", - "SHOULDER_ENTITY, DROWNED, SHEARED, EXPLOSION" - ); + "\"NATURAL\", \"JOCKEY\", \"CHUNK_GEN\", \"SPAWNER\",", + "\"EGG\", \"SPAWNER_EGG\", \"LIGHTNING\", \"BUILD_SNOWMAN\",", + "\"BUILD_IRONGOLEM\", \"BUILD_WITHER\", \"VILLAGE_DEFENSE\", \"VILLAGE_INVASION\",", + "\"BREEDING\", \"SLIME_SPLIT\", \"REINFORCEMENTS\", \"NETHER_PORTAL\",", + "\"DISPENSE_EGG\", \"INFECTION\", \"CURED\", \"OCELOT_BABY\",", + "\"SILVERFISH_BLOCK\", \"MOUNT\", \"TRAP\", \"ENDER_PEARL\",", + "\"SHOULDER_ENTITY\", \"DROWNED\", \"SHEARED\", \"EXPLOSION\",", + "\"CUSTOM\", \"DEFAULT\"."); public static final ConfigSetting CARRY_OVER_METADATA_ON_DEATH = new ConfigSetting(config, "Entities.Carry Over Metadata On Death", true, "With this enabled any metadata assigned from supported plugins such", From 23607db9ce9f912fec0a270c0976ffd9754fc5a2 Mon Sep 17 00:00:00 2001 From: Brianna Date: Sun, 22 Sep 2019 16:46:20 -0400 Subject: [PATCH 4/8] 1.10.10 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a02661..ee5699e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "UltimateStacker" path: "/builds/$CI_PROJECT_PATH" - version: "1.10.9" + version: "1.10.10" build: stage: build From c23fcba39293db1ef0204066f1ba3983af489a5e Mon Sep 17 00:00:00 2001 From: Brianna Date: Mon, 23 Sep 2019 12:56:23 -0400 Subject: [PATCH 5/8] version 1.10.11 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ee5699e..c090703 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "UltimateStacker" path: "/builds/$CI_PROJECT_PATH" - version: "1.10.10" + version: "1.10.11" build: stage: build From a8c479b4238e4921e294329094ffa518ae81d1b0 Mon Sep 17 00:00:00 2001 From: Brianna Date: Tue, 24 Sep 2019 12:13:13 -0400 Subject: [PATCH 6/8] Fixed not removing the correct amount of egg on spawner convert. --- .../com/songoda/ultimatestacker/listeners/SpawnerListeners.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java index ffc52d2..ac3f246 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java @@ -118,7 +118,7 @@ public class SpawnerListeners implements Listener { plugin.updateHologram(spawner); if (player.getGameMode() != GameMode.CREATIVE) { - Methods.takeItem(player, stackSize - 1); + Methods.takeItem(player, stackSize); } } } From 09e1da755b528d4cfc25affe903ce2511fd69f2b Mon Sep 17 00:00:00 2001 From: Brianna Date: Tue, 24 Sep 2019 12:46:06 -0400 Subject: [PATCH 7/8] Looting for wither skeleton heads defaults to off now. --- .../lootables/LootablesManager.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java b/src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java index 393f1d8..5178ae9 100644 --- a/src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java +++ b/src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java @@ -210,14 +210,14 @@ public class LootablesManager { Loot fish1 = new LootBuilder() - .addChildLoot(new LootBuilder() - .setMaterial(CompatibleMaterial.COD.getMaterial()) - .setBurnedMaterial(CompatibleMaterial.COOKED_COD.getMaterial()) - .setChance(50).build(), - new LootBuilder() - .setMaterial(Material.PRISMARINE_CRYSTALS) - .setChance(33).build()) - .build(); + .addChildLoot(new LootBuilder() + .setMaterial(CompatibleMaterial.COD.getMaterial()) + .setBurnedMaterial(CompatibleMaterial.COOKED_COD.getMaterial()) + .setChance(50).build(), + new LootBuilder() + .setMaterial(Material.PRISMARINE_CRYSTALS) + .setChance(33).build()) + .build(); Loot fish2 = new LootBuilder() .setChance(2.5) @@ -307,10 +307,11 @@ public class LootablesManager { .setMax(2).build())); Loot witherSkull = new LootBuilder() - .setMaterial(CompatibleMaterial.WITHER_SKELETON_SKULL.getMaterial()) - .setData(CompatibleMaterial.WITHER_SKELETON_SKULL.getData()) - .setChance(2.5) - .addOnlyDropFors(EntityType.PLAYER).build(); + .setMaterial(CompatibleMaterial.WITHER_SKELETON_SKULL.getMaterial()) + .setData(CompatibleMaterial.WITHER_SKELETON_SKULL.getData()) + .setChance(2.5) + .setAllowLootingEnchant(false) + .addOnlyDropFors(EntityType.PLAYER).build(); // Add Wither Skeleton. lootManager.addLootable(new Lootable("WITHER_SKELETON", From b7ec1ea2b9f3a774200bef873f51b000a88cda25 Mon Sep 17 00:00:00 2001 From: Brianna Date: Tue, 24 Sep 2019 12:51:21 -0400 Subject: [PATCH 8/8] version 1.10.12 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c090703..92164a0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "UltimateStacker" path: "/builds/$CI_PROJECT_PATH" - version: "1.10.11" + version: "1.10.12" build: stage: build