Merge branch 'development' of gitlab.com:Songoda/ultimatestacker into development

This commit is contained in:
jascotty2 2019-09-29 05:26:05 -05:00
commit d3e702fccb
9 changed files with 89 additions and 43 deletions

View File

@ -4,7 +4,7 @@ stages:
variables:
name: "UltimateStacker"
path: "/builds/$CI_PROJECT_PATH"
version: "1.10.9"
version: "1.10.12"
build:
stage: build

View File

@ -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),

View File

@ -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
}

View File

@ -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<Drop> drops = custom ? instance.getLootablesManager().getDrops(event.getEntity()) : new ArrayList<>();

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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",

View File

@ -5,8 +5,12 @@ 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;
import java.util.stream.Collectors;
public class Settings {
@ -74,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?");
@ -90,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_SHEERED",
"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?");
@ -125,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",
@ -242,6 +253,17 @@ public class Settings {
config.load();
config.setAutoremove(true).setAutosave(true);
if (config.getStringList("Entities.Stack Checks").contains("SHEEP_SHEERED")) {
List<String> 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<String> splitChecks = config.getStringList("Entities.Split Checks");
splitChecks.add("SNOWMAN_DERP");
config.set("Entities.Split Checks", splitChecks);
}
config.saveChanges();
}
}

View File

@ -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;