mirror of
https://github.com/songoda/UltimateStacker.git
synced 2025-02-06 06:21:22 +01:00
Merge branch 'development' of gitlab.com:Songoda/ultimatestacker into development
This commit is contained in:
commit
d3e702fccb
@ -4,7 +4,7 @@ stages:
|
||||
variables:
|
||||
name: "UltimateStacker"
|
||||
path: "/builds/$CI_PROJECT_PATH"
|
||||
version: "1.10.9"
|
||||
version: "1.10.12"
|
||||
|
||||
build:
|
||||
stage: build
|
||||
|
@ -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),
|
||||
|
@ -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
|
||||
|
||||
}
|
||||
|
@ -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<>();
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user