diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/RemovalBlocksListener.java b/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/RemovalBlocksListener.java index 523ba6e6..6a6482a1 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/RemovalBlocksListener.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/RemovalBlocksListener.java @@ -15,22 +15,30 @@ public class RemovalBlocksListener implements Listener { @EventHandler public void onRemovableBlockBreak(BlockBreakEvent event) { - event.setCancelled(processBlockRemoval(event.getBlock())); + if (processBlockRemoval(event.getBlock())) { + event.setCancelled(true); + } } @EventHandler public void onBucketUse(PlayerBucketFillEvent event) { - event.setCancelled(processBlockRemoval(event.getBlock())); + if (processBlockRemoval(event.getBlock())) { + event.setCancelled(true); + } } @EventHandler public void onBlockForm(BlockFormEvent event) { - event.setCancelled(processBlockRemoval(event.getBlock())); + if (processBlockRemoval(event.getBlock())) { + event.setCancelled(true); + } } @EventHandler public void onBlockExplode(BlockExplodeEvent event) { - event.setCancelled(processBlockRemoval(event.getBlock())); + if (processBlockRemoval(event.getBlock())) { + event.setCancelled(true); + } } private boolean processBlockRemoval(Block block) { diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/SpellEffectListener.java b/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/SpellEffectListener.java index b435864e..d27b2057 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/SpellEffectListener.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/listeners/SpellEffectListener.java @@ -4,6 +4,8 @@ import io.github.sefiraat.crystamaehistoria.magic.CastInformation; import io.github.sefiraat.crystamaehistoria.magic.spells.core.MagicProjectile; import io.github.sefiraat.crystamaehistoria.utils.Keys; +import io.github.sefiraat.crystamaehistoria.utils.datatypes.DataTypeMethods; +import io.github.sefiraat.crystamaehistoria.utils.datatypes.PersistentUUIDDataType; import io.github.thebusybiscuit.slimefun4.libraries.dough.data.persistent.PersistentDataAPI; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -18,9 +20,11 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.event.weather.LightningStrikeEvent; import org.bukkit.inventory.ItemStack; @@ -66,6 +70,13 @@ public void onProjectileHit(ProjectileHitEvent event) { magicProjectile.kill(); } + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onEggThrow(PlayerEggThrowEvent event) { + if (CrystamaeHistoria.getProjectileMap().containsKey(event.getEgg().getUniqueId())) { + event.setHatching(false); + } + } + private boolean entityHitAllowed(CastInformation castInformation, Entity hitEntity) { final Player player = Bukkit.getPlayer(castInformation.getCaster()); return hitEntity instanceof LivingEntity @@ -132,13 +143,17 @@ public void onWitherWeatherDeath(EntityDeathEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onMagicSummonDeath(EntityDeathEvent event) { NamespacedKey key = Keys.PDC_IS_SPAWN_OWNER; - if (PersistentDataAPI.hasBoolean(event.getEntity(), key)) { + if (DataTypeMethods.hasCustom(event.getEntity(), key, PersistentUUIDDataType.TYPE)) { event.setCancelled(true); event.getEntity().remove(); } } - - - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onMagicSummonChangeBlock(EntityChangeBlockEvent event) { + NamespacedKey key = Keys.PDC_IS_SPAWN_OWNER; + if (DataTypeMethods.hasCustom(event.getEntity(), key, PersistentUUIDDataType.TYPE)) { + event.setCancelled(true); + } + } } diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/SpellType.java b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/SpellType.java index bc2c3b25..cbedc840 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/SpellType.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/SpellType.java @@ -25,6 +25,7 @@ import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.HolyCow; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.KnowledgeShare; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.LavaLake; +import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.LeechBomb; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.LovePotion; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.Oviparous; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.PoisonNova; @@ -38,6 +39,7 @@ import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.SpawnFiends; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.Squall; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.StarFall; +import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.SummonGolem; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.Teleport; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.Tempest; import io.github.sefiraat.crystamaehistoria.magic.spells.tier1.TimeCompression; @@ -78,6 +80,7 @@ public enum SpellType { GYROSCOPIC(new Gyroscopic()), KNOWLEDGE_SHARE(new KnowledgeShare()), LAVA_LAKE(new LavaLake()), + LEECH_BOMB(new LeechBomb()), LOVE_POTION(new LovePotion()), OVIPAROUS(new Oviparous()), POISON_NOVA(new PoisonNova()), @@ -91,6 +94,7 @@ public enum SpellType { SPAWN_FIENDS(new SpawnFiends()), SQUALL(new Squall()), STAR_FALL(new StarFall()), + SUMMON_GOLEM(new SummonGolem()), TELEPORT(new Teleport()), TEMPEST(new Tempest()), TIME_COMPRESSION(new TimeCompression()), diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicProjectile.java b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicProjectile.java index c2c9e801..f41a6f02 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicProjectile.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicProjectile.java @@ -5,7 +5,6 @@ import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Fireball; import org.bukkit.entity.Projectile; import org.bukkit.util.Vector; diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicSummon.java b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicSummon.java index 66c58ec6..f66d38ea 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicSummon.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/core/MagicSummon.java @@ -5,6 +5,7 @@ import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.entity.Mob; +import org.bukkit.entity.Player; import javax.annotation.Nullable; import java.util.UUID; @@ -15,11 +16,14 @@ public class MagicSummon { @Getter public final UUID mobUUID; @Getter + public final UUID ownerUUID; + @Getter @Setter public Consumer tickConsumer; - public MagicSummon(Mob mob) { - this.mobUUID = mob.getUniqueId(); + public MagicSummon(UUID mobUUID, UUID ownerUUID) { + this.mobUUID = mobUUID; + this.ownerUUID = ownerUUID; } @Nullable @@ -27,6 +31,11 @@ public Mob getMob() { return (Mob) Bukkit.getEntity(mobUUID); } + @Nullable + public Player getPlayer() { + return (Player) Bukkit.getEntity(ownerUUID); + } + public void kill() { CrystamaeHistoria.getSummonedEntityMap().remove(this); Mob mob = (Mob) Bukkit.getEntity(mobUUID); diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/LeechBomb.java b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/LeechBomb.java new file mode 100644 index 00000000..be14606a --- /dev/null +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/LeechBomb.java @@ -0,0 +1,110 @@ +package io.github.sefiraat.crystamaehistoria.magic.spells.tier1; + +import io.github.sefiraat.crystamaehistoria.magic.CastInformation; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.MagicProjectile; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.MagicSummon; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.Spell; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.SpellCoreBuilder; +import io.github.sefiraat.crystamaehistoria.slimefun.machines.liquefactionbasin.SpellRecipe; +import io.github.sefiraat.crystamaehistoria.stories.definition.StoryType; +import io.github.sefiraat.crystamaehistoria.utils.SpellUtils; +import io.github.sefiraat.crystamaehistoria.utils.mobgoals.FiendGoal; +import io.github.sefiraat.crystamaehistoria.utils.mobgoals.LeechGoal; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Mob; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class LeechBomb extends Spell { + + public LeechBomb() { + SpellCoreBuilder spellCoreBuilder = new SpellCoreBuilder(5, true, 0, false, 50, true) + .makeProjectileSpell(this::fireProjectile, 0, false, 0, false) + .makeProjectileVsEntitySpell(this::eggHit) + .makeProjectileVsBlockSpell(this::eggHit); + setSpellCore(spellCoreBuilder.build()); + } + + @ParametersAreNonnullByDefault + public void fireProjectile(CastInformation castInformation) { + Location location = castInformation.getCastLocation(); + Location aimLocation = location.clone().add(0, 1.5, 0).add(location.getDirection().multiply(1)); + MagicProjectile magicProjectile = SpellUtils.summonMagicProjectile(castInformation, EntityType.EGG, aimLocation); + magicProjectile.setVelocity(location.getDirection(), 1.5); + } + + @ParametersAreNonnullByDefault + public void eggHit(CastInformation castInformation) { + final UUID caster = castInformation.getCaster(); + final Location location = castInformation.getProjectileLocation(); + for (int i = 0; i < castInformation.getStaveLevel() * 2; i++) { + final Location spawnLocation = location.clone().add( + ThreadLocalRandom.current().nextDouble(-1, 1), + 0, + ThreadLocalRandom.current().nextDouble(-1, 1) + ); + SpellUtils.summonTemporaryMob( + EntityType.SILVERFISH, + caster, + spawnLocation, + new LeechGoal(caster), + (60 * castInformation.getStaveLevel()), + this::onTick + ); + } + } + + public void onTick(MagicSummon magicSummon) { + Mob mob = magicSummon.getMob(); + Player player = magicSummon.getPlayer(); + Block block = player.getLocation().subtract(0, 0.5, 0).getBlock(); + if (!player.getWorld().equals(mob.getWorld()) + || (mob.getLocation().distance(player.getLocation()) > 50 && block.getType().isSolid()) + ) { + mob.teleport(player.getLocation()); + } + displayParticleEffect(magicSummon.getMob(), Particle.SPORE_BLOSSOM_AIR, 1, 1); + } + + @Nonnull + @Override + public String getId() { + return "LEECH_BOMB"; + } + + @Nonnull + @Override + public String[] getLore() { + return new String[]{ + "Throws an egg filled with viscous", + "leeches that will attack your enemies." + }; + } + + @Nonnull + @Override + public Material getMaterial() { + return Material.CARVED_PUMPKIN; + } + + @NotNull + @Override + public SpellRecipe getRecipe() { + return new SpellRecipe( + 1, + StoryType.MECHANICAL, + StoryType.HUMAN, + StoryType.ANIMAL + ); + } + +} diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SpawnFiends.java b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SpawnFiends.java index c4905750..fce3ff72 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SpawnFiends.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SpawnFiends.java @@ -6,7 +6,6 @@ import io.github.sefiraat.crystamaehistoria.slimefun.machines.liquefactionbasin.SpellRecipe; import io.github.sefiraat.crystamaehistoria.stories.definition.StoryType; import io.github.sefiraat.crystamaehistoria.utils.SpellUtils; -import io.github.sefiraat.crystamaehistoria.utils.mobgoals.BoringGoal; import io.github.sefiraat.crystamaehistoria.utils.mobgoals.FiendGoal; import org.bukkit.Location; import org.bukkit.Material; @@ -17,7 +16,6 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.UUID; -import java.util.concurrent.Phaser; import java.util.concurrent.ThreadLocalRandom; public class SpawnFiends extends Spell { diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SummonGolem.java b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SummonGolem.java new file mode 100644 index 00000000..075f60a2 --- /dev/null +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/magic/spells/tier1/SummonGolem.java @@ -0,0 +1,97 @@ +package io.github.sefiraat.crystamaehistoria.magic.spells.tier1; + +import io.github.sefiraat.crystamaehistoria.magic.CastInformation; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.MagicSummon; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.Spell; +import io.github.sefiraat.crystamaehistoria.magic.spells.core.SpellCoreBuilder; +import io.github.sefiraat.crystamaehistoria.slimefun.machines.liquefactionbasin.SpellRecipe; +import io.github.sefiraat.crystamaehistoria.stories.definition.StoryType; +import io.github.sefiraat.crystamaehistoria.utils.SpellUtils; +import io.github.sefiraat.crystamaehistoria.utils.mobgoals.GolemGoal; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Mob; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class SummonGolem extends Spell { + + public SummonGolem() { + SpellCoreBuilder spellCoreBuilder = new SpellCoreBuilder(5, true, 0, false, 50, true) + .makeInstantSpell(this::cast); + setSpellCore(spellCoreBuilder.build()); + } + + @ParametersAreNonnullByDefault + public void cast(CastInformation castInformation) { + final UUID caster = castInformation.getCaster(); + final Location location = castInformation.getCastLocation(); + final Location spawnLocation = location.clone().add( + ThreadLocalRandom.current().nextDouble(-3, 3), + 0, + ThreadLocalRandom.current().nextDouble(-3, 3) + ); + SpellUtils.summonTemporaryMob( + EntityType.IRON_GOLEM, + caster, + spawnLocation, + new GolemGoal(caster), + 200 + (100 * castInformation.getStaveLevel()), + this::onTick + ); + } + + public void onTick(MagicSummon magicSummon) { + Mob mob = magicSummon.getMob(); + Player player = magicSummon.getPlayer(); + Block block = player.getLocation().subtract(0, 0.5, 0).getBlock(); + if (!player.getWorld().equals(mob.getWorld()) + || (mob.getLocation().distance(player.getLocation()) > 50 && block.getType().isSolid()) + ) { + mob.teleport(player.getLocation()); + } + displayParticleEffect(magicSummon.getMob(), Particle.SLIME, 1, 3); + } + + @Nonnull + @Override + public String getId() { + return "SUMMON_GOLEM"; + } + + @Nonnull + @Override + public String[] getLore() { + return new String[]{ + "Summons a golem that will follow you", + "and protect you.", + "Golems will follow you nearly anywhere." + }; + } + + @Nonnull + @Override + public Material getMaterial() { + return Material.CARVED_PUMPKIN; + } + + @NotNull + @Override + public SpellRecipe getRecipe() { + return new SpellRecipe( + 1, + StoryType.MECHANICAL, + StoryType.HUMAN, + StoryType.ANIMAL + ); + } + +} diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/slimefun/Tools.java b/src/main/java/io/github/sefiraat/crystamaehistoria/slimefun/Tools.java index 5e1bea64..6e6ca8b6 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/slimefun/Tools.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/slimefun/Tools.java @@ -22,6 +22,7 @@ public Tools(CrystamaeHistoria p) { } public void setup() { + final ItemStack elementalCrystal = CrystamaeHistoria.getStructure().getMaterials().getCrystalMap().get(StoryRarity.UNIQUE).get(StoryType.ELEMENTAL).getItem(); final ItemStack ingot = CrystamaeHistoria.getStructure().getMaterials().amalgamateIngot.getItem(); Stave basic = new Stave( @@ -36,7 +37,7 @@ public void setup() { ), RecipeType.MAGIC_WORKBENCH, new ItemStack[]{ - null, null, CrystamaeHistoria.getStructure().getMaterials().getCrystalMap().get(StoryRarity.UNIQUE).get(StoryType.ELEMENTAL).getItem(), + null, null, elementalCrystal, null, new ItemStack(Material.STICK), null, new ItemStack(Material.STICK), null, null }, diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/utils/SpellUtils.java b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/SpellUtils.java index 2c20ebb6..e8bf9d6b 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/utils/SpellUtils.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/SpellUtils.java @@ -45,7 +45,7 @@ public static MagicSummon summonTemporaryMob(EntityType entityTy private static MagicSummon summonTemporaryMob(EntityType entityType, UUID caster, Location location, AbstractGoal goal, long duration, @Nullable Consumer tickConsumer) { final T mob = (T) location.getWorld().spawnEntity(location, entityType); - final MagicSummon magicSummon = new MagicSummon(mob); + final MagicSummon magicSummon = new MagicSummon(mob.getUniqueId(), caster); final MobGoals mobGoals = Bukkit.getMobGoals(); if (tickConsumer != null) { diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/AbstractGoal.java b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/AbstractGoal.java index 6f3adf26..7da55008 100644 --- a/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/AbstractGoal.java +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/AbstractGoal.java @@ -3,6 +3,7 @@ import com.destroystokyo.paper.entity.ai.Goal; import com.destroystokyo.paper.entity.ai.GoalKey; import com.destroystokyo.paper.entity.ai.GoalType; +import io.github.sefiraat.crystamaehistoria.slimefun.tools.stave.Stave; import io.github.sefiraat.crystamaehistoria.utils.Keys; import io.github.sefiraat.crystamaehistoria.utils.datatypes.DataTypeMethods; import io.github.sefiraat.crystamaehistoria.utils.datatypes.PersistentUUIDDataType; @@ -10,6 +11,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Mob; import org.bukkit.entity.Monster; @@ -71,7 +73,7 @@ public void tick() { if (getTargetsEnemies()) { final List entities = new ArrayList<>( player.getWorld().getNearbyEntitiesByType( - Monster.class, + getTargetClass(), player.getLocation(), 15, 15, @@ -147,4 +149,9 @@ public boolean getTargetsEnemies() { public boolean getFollowsPlayer() { return true; } + + public Class getTargetClass() { + return Monster.class; + } + } diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/GolemGoal.java b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/GolemGoal.java new file mode 100644 index 00000000..cb1c522f --- /dev/null +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/GolemGoal.java @@ -0,0 +1,18 @@ +package io.github.sefiraat.crystamaehistoria.utils.mobgoals; + +import org.bukkit.entity.Mob; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class GolemGoal extends AbstractGoal { + + public GolemGoal(UUID owningPlayer) { + super(owningPlayer); + } + + @Override + public double getStayNearDistance() { + return 3D; + } +} diff --git a/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/LeechGoal.java b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/LeechGoal.java new file mode 100644 index 00000000..2c7616e7 --- /dev/null +++ b/src/main/java/io/github/sefiraat/crystamaehistoria/utils/mobgoals/LeechGoal.java @@ -0,0 +1,23 @@ +package io.github.sefiraat.crystamaehistoria.utils.mobgoals; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Mob; + +import java.util.UUID; + +public class LeechGoal extends AbstractGoal { + + public LeechGoal(UUID owningPlayer) { + super(owningPlayer); + } + + @Override + public boolean getFollowsPlayer() { + return false; + } + + @Override + public Class getTargetClass() { + return Mob.class; + } +} diff --git a/src/main/resources/blocks.yml b/src/main/resources/blocks.yml index 85a8b422..eddd410e 100644 --- a/src/main/resources/blocks.yml +++ b/src/main/resources/blocks.yml @@ -369,7 +369,7 @@ blocks: - Even though most organisms hate - being locked up, the axolotl - loves it - shards: + shards: [ 1,0,0,0,1,1,0,0,0 ] author: Seggan - material: AZALEA @@ -468,7 +468,6 @@ blocks: elements: - ALCHEMICAL - HUMAN - # the wither sourcing - VOID story: name: Bringing home the b(e)acon @@ -477,7 +476,7 @@ blocks: - The light in the distance... - The smell of your base... - The warmth of Regeration II... - shards: + shards: [ 0,2,0,0,1,0,0,1,0 ] author: Seggan - material: BEDROCK @@ -493,7 +492,7 @@ blocks: - long, it has turned hard as - stone. Wait... that's not - right... - shards: + shards: [ 2,0,0,0,0,0,0,2,0 ] author: Seggan - material: BEEF @@ -792,7 +791,7 @@ blocks: type: ELEMENTAL lore: - Black stone, what else can it be? - shards: + shards: [ 1,1,0,0,0,0,0,1,0 ] author: Seggan - material: BLACKSTONE_SLAB @@ -6018,11 +6017,10 @@ blocks: name: Mistaken identity type: PHILOSOPHICAL lore: - # referencing the infinity panel - Some mistake this for an - overpowered power generation - device - shards: + shards: [ 0,0,0,0,1,0,0,0,2 ] author: Seggan - material: LIGHT_BLUE_STAINED_GLASS @@ -11150,13 +11148,13 @@ blocks: tier: 1 elements: - HUMAN - - ELEMENTAL + - PHILOSOPHICAL story: name: What a Mouthful! type: HUMAN lore: - Can you say this in one breath!? - shards: + shards: [ 0,1,0,0,1,0,0,0,2 ] author: Seggan - material: WEATHERED_COPPER