Add some more advancements and rearrange existing ones to be less vertical

This commit is contained in:
Sollace 2023-09-01 21:38:59 +01:00
parent 76a7ecc3bb
commit 8ba76cf2c0
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
27 changed files with 392 additions and 29 deletions

View file

@ -9,8 +9,10 @@ import com.minelittlepony.unicopia.ability.magic.CasterView;
import com.minelittlepony.unicopia.ability.magic.spell.Situation;
import com.minelittlepony.unicopia.ability.magic.spell.trait.SpellTraits;
import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait;
import com.minelittlepony.unicopia.advancement.UCriteria;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.particle.UParticles;
import com.minelittlepony.unicopia.projectile.MagicProjectileEntity;
import com.minelittlepony.unicopia.util.NbtSerialisable;
import com.minelittlepony.unicopia.util.shape.*;
@ -83,6 +85,7 @@ public class HydrophobicSpell extends AbstractSpell {
if (!source.subtractEnergyCost(storedFluidPositions.isEmpty() ? 0.001F : 0.02F)) {
setDead();
}
source.spawnParticles(new Sphere(true, getRange(source)), 10, pos -> {
BlockPos bp = BlockPos.ofFloored(pos);
if (source.asWorld().getFluidState(bp.up()).isIn(affectedFluid)) {
@ -93,6 +96,10 @@ public class HydrophobicSpell extends AbstractSpell {
if (source.asEntity().age % 200 == 0) {
source.playSound(USounds.SPELL_AMBIENT, 0.5F);
}
if (storedFluidPositions.size() >= 100) {
UCriteria.SPLIT_SEA.trigger(source.asEntity());
}
}
return !isDead();
@ -124,8 +131,8 @@ public class HydrophobicSpell extends AbstractSpell {
public double getRange(Caster<?> source) {
float multiplier = 1;
float min = (source instanceof Pony ? 4 : 6) + getTraits().get(Trait.POWER);
double range = (min + (source.getLevel().getScaled(source instanceof Pony ? 4 : 40) * (source instanceof Pony ? 2 : 10))) / multiplier;
boolean isLimitedRange = source instanceof Pony || source instanceof MagicProjectileEntity;
double range = (min + (source.getLevel().getScaled(isLimitedRange ? 4 : 40) * (isLimitedRange ? 2 : 10))) / multiplier;
return range;
}

View file

@ -44,7 +44,7 @@ public class RaceChangeCriterion extends AbstractCriterion<RaceChangeCriterion.C
}
public boolean test(ServerPlayerEntity player) {
return Pony.of(player).getSpecies() == race;
return Pony.of(player).getCompositeRace().includes(race);
}
@Override

View file

@ -24,6 +24,10 @@ public interface UCriteria {
CustomEventCriterion.Trigger USE_SOULMATE = CUSTOM_EVENT.createTrigger("use_soulmate");
CustomEventCriterion.Trigger SECOND_WIND = CUSTOM_EVENT.createTrigger("second_wind");
CustomEventCriterion.Trigger DEFEAT_SOMBRA = CUSTOM_EVENT.createTrigger("defeat_sombra");
CustomEventCriterion.Trigger LIGHT_ALTAR = CUSTOM_EVENT.createTrigger("light_altar");
CustomEventCriterion.Trigger POWER_UP_HEART = CUSTOM_EVENT.createTrigger("power_up_heart");
CustomEventCriterion.Trigger SPLIT_SEA = CUSTOM_EVENT.createTrigger("split_sea");
CustomEventCriterion.Trigger RIDE_BALLOON = CUSTOM_EVENT.createTrigger("ride_balloon");
static void bootstrap() { }
}

View file

@ -6,6 +6,7 @@ import java.util.function.Supplier;
import com.google.common.base.Suppliers;
import com.minelittlepony.unicopia.*;
import com.minelittlepony.unicopia.advancement.UCriteria;
import com.minelittlepony.unicopia.entity.*;
import com.minelittlepony.unicopia.entity.FloatingArtefactEntity.State;
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
@ -81,9 +82,12 @@ public class CrystalHeartItem extends Item implements FloatingArtefactEntity.Art
}
entity.setStack(context.getStack().split(1));
serverWorld.spawnEntityAndPassengers(entity);
serverWorld.spawnEntity(entity);
if (findStructure(entity)) {
entity.playSound(USounds.ENTITY_CRYSTAL_HEART_ACTIVATE, 0.75F, 0.8F);
UCriteria.POWER_UP_HEART.trigger(context.getPlayer());
}
} else {
context.getStack().decrement(1);
}

View file

@ -2,12 +2,14 @@ package com.minelittlepony.unicopia.item;
import org.jetbrains.annotations.Nullable;
import com.minelittlepony.unicopia.advancement.UCriteria;
import com.minelittlepony.unicopia.entity.SpellbookEntity;
import com.minelittlepony.unicopia.entity.UEntities;
import com.minelittlepony.unicopia.server.world.Altar;
import com.minelittlepony.unicopia.util.Dispensable;
import net.minecraft.block.DispenserBlock;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BookItem;
import net.minecraft.item.ItemStack;
@ -32,7 +34,7 @@ public class SpellbookItem extends BookItem implements Dispensable {
BlockPos pos = source.getPos().offset(facing);
float yaw = facing.getOpposite().asRotation();
placeBook(stack, source.getWorld(), pos.getX(), pos.getY(), pos.getZ(), yaw);
placeBook(stack, source.getWorld(), pos.getX(), pos.getY(), pos.getZ(), yaw, null);
stack.decrement(1);
return new TypedActionResult<>(ActionResult.SUCCESS, stack);
@ -47,7 +49,7 @@ public class SpellbookItem extends BookItem implements Dispensable {
if (!context.getWorld().isClient) {
BlockPos pos = context.getBlockPos().offset(context.getSide());
placeBook(context.getStack(), context.getWorld(), pos.getX(), pos.getY(), pos.getZ(), context.getPlayerYaw() + 180);
placeBook(context.getStack(), context.getWorld(), pos.getX(), pos.getY(), pos.getZ(), context.getPlayerYaw() + 180, player);
if (!player.getAbilities().creativeMode) {
player.getStackInHand(context.getHand()).decrement(1);
@ -58,7 +60,7 @@ public class SpellbookItem extends BookItem implements Dispensable {
return ActionResult.PASS;
}
private static void placeBook(ItemStack stack, World world, int x, int y, int z, float yaw) {
private static void placeBook(ItemStack stack, World world, int x, int y, int z, float yaw, @Nullable Entity placer) {
SpellbookEntity book = UEntities.SPELLBOOK.create(world);
book.refreshPositionAndAngles(x + 0.5, y, z + 0.5, 0, 0);
@ -76,6 +78,7 @@ public class SpellbookItem extends BookItem implements Dispensable {
Altar.locateAltar(world, book.getBlockPos()).ifPresent(altar -> {
book.setAltar(altar);
altar.generateDecorations(world);
UCriteria.LIGHT_ALTAR.trigger(placer);
});
}
}

View file

@ -842,8 +842,8 @@
"advancements.unicopia.eat_trick_apple.description": "Bite into a zap apple",
"advancements.unicopia.eat_pinecone.title": "Desperation",
"advancements.unicopia.eat_pinecone.description": "Eat a pinecone",
"advancements.unicopia.imported_oats.title": "As Delicious As They Are Expensive",
"advancements.unicopia.imported_oats.description": "Send of receive fancy imported oats",
"advancements.unicopia.imported_oats.title": "Delicious As They Are Expensive",
"advancements.unicopia.imported_oats.description": "Send or receive fancy imported oats",
"advancements.unicopia.experimental.title": "You Can't Take It With You",
"advancements.unicopia.experimental.description": "Enchant a tool with Consumption",
@ -865,6 +865,8 @@
"advancements.unicopia.sweet_apple_acres.description": "Obtain one of every apple",
"advancements.unicopia.brew_cider.title": "Applejack's Finest",
"advancements.unicopia.brew_cider.description": "Brew some cider",
"advancements.unicopia.travelling_in_style.title": "Travelling in Style",
"advancements.unicopia.travelling_in_style.description": "Ride a hot air balloon",
"advancements.unicopia.night_route.title": "Children of The Night",
"advancements.unicopia.night_route.description": "Walk the path of the night",
@ -872,6 +874,8 @@
"advancements.unicopia.screech_twenty_mobs.description": "Rain down terror on at least 20 mobs at once",
"advancements.unicopia.screech_self.title": "Jeepers!",
"advancements.unicopia.screech_self.description": "Be so terrifying that you even scared your self a little",
"advancements.unicopia.extra_spooky.title": "Extra Spooky",
"advancements.unicopia.extra_spooky.description": "Spook a mob so hard it drops a brick",
"advancements.unicopia.earth_route.title": "Path of the Pony",
"advancements.unicopia.earth_route.description": "Join the Apple Clan",
@ -895,14 +899,30 @@
"advancements.unicopia.deter_phantom.title": "What Flies Around",
"advancements.unicopia.deter_phantom.description": "Get up there and give those phantoms a taste of their own medicine",
"advancements.unicopia.love_is_power.title": "Love is Power",
"advancements.unicopia.love_is_power.description": "Banish King Sombra with a Crystal Heart",
"advancements.unicopia.magical_route.title": "Horn of the Unicorn",
"advancements.unicopia.magical_route.description": "Dealve into the world of glitter and rainbows",
"advancements.unicopia.books.title": "Books!",
"advancements.unicopia.books.description": "This is MY spellbook and I'm going to READ it!",
"advancements.unicopia.tempted.title": "Tempting...",
"advancements.unicopia.tempted.description": "Put on the alicorn amulet",
"advancements.unicopia.hello_darkness_my_old_friend.title": "Hello Darkness...",
"advancements.unicopia.hello_darkness_my_old_friend.description": "Dealve further into the powers of the dark side",
"advancements.unicopia.split_the_sea.title": "Who are you? Moses?",
"advancements.unicopia.split_the_sea.description": "Use magic to displace over 100 blocks of water in one go",
"advancements.unicopia.save_the_day.title": "Save the Day",
"advancements.unicopia.save_the_day.description": "Defeat King Sombra once and for all",
"advancements.unicopia.ascension.title": "Ascension",
"advancements.unicopia.ascension.description": "Ascension",
"advancements.unicopia.doctor_sombrero.title": "Complete Sombra's Work",
"advancements.unicopia.ascension.description": "Complete Sombra's Work",
"advancements.unicopia.doctor_sombrero.title": "Doctor Sombrero",
"advancements.unicopia.doctor_sombrero.description": "That's not mare-iachi!",
"advancements.unicopia.crystaline.title": "Crystaline",
"advancements.unicopia.crystaline.description": "Collect some crystal shards",
"advancements.unicopia.power_up_heart.title": "Power of Love",
"advancements.unicopia.power_up_heart.description": "power up a Crystal Heart",
"advancements.unicopia.love_is_power.title": "Love is Power",
"advancements.unicopia.love_is_power.description": "Banish King Sombra with a crystal heart",
"unicopia.toast.discoveries.title": "New Discoveries!",
"unicopia.toast.discoveries.description": "Check your spellbook"

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/earth/earth_route",
"display": {
"icon": {
"item": "unicopia:green_apple"

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/earth/earth_route",
"display": {
"icon": {
"item": "unicopia:muffin"

View file

@ -1,8 +1,8 @@
{
"parent": "unicopia:unicopia/bat/night_route",
"parent": "unicopia:unicopia/bat/screech_twenty_mobs",
"display": {
"icon": {
"item": "unicopia:sunglasses"
"item": "minecraft:brick"
},
"title": {
"translate": "advancements.unicopia.extra_spooky.title"
@ -10,7 +10,7 @@
"description": {
"translate": "advancements.unicopia.extra_spooky.description"
},
"frame": "challenge",
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": true

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/earth/earth_route",
"display": {
"icon": {
"item": "unicopia:imported_oats"

View file

@ -0,0 +1,29 @@
{
"parent": "unicopia:unicopia/earth/earth_route",
"display": {
"icon": {
"item": "unicopia:imported_oats"
},
"title": {
"translate": "advancements.unicopia.travelling_in_style.title"
},
"description": {
"translate": "advancements.unicopia.travelling_in_style.description"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"ride_balloon": {
"trigger": "unicopia:custom",
"conditions": {
"event": "ride_balloon"
}
}
},
"requirements": [
[ "ride_balloon" ]
]
}

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/root/earth/earth_route",
"display": {
"icon": {
"item": "unicopia:pinecone"

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/pegasus/sky_route",
"display": {
"icon": {
"item": "unicopia:empty_jar"

View file

@ -19,6 +19,78 @@
"experience": 90
},
"criteria": {
"lightning_struck_player_1": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 1
}
},
"lightning_struck_player_2": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 2
}
},
"lightning_struck_player_3": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 3
}
},
"lightning_struck_player_4": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 4
}
},
"lightning_struck_player_5": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 5
}
},
"lightning_struck_player_6": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 6
}
},
"lightning_struck_player_7": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 7
}
},
"lightning_struck_player_8": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 8
}
},
"lightning_struck_player_9": {
"trigger": "unicopia:custom",
"conditions": {
"event": "lightning_struck_player",
"race": ["bat"],
"repeats": 9
}
},
"lightning_struck_player_10": {
"trigger": "unicopia:custom",
"conditions": {
@ -29,6 +101,15 @@
}
},
"requirements": [
[ "lightning_struck_player_1" ],
[ "lightning_struck_player_2" ],
[ "lightning_struck_player_3" ],
[ "lightning_struck_player_4" ],
[ "lightning_struck_player_5" ],
[ "lightning_struck_player_6" ],
[ "lightning_struck_player_7" ],
[ "lightning_struck_player_8" ],
[ "lightning_struck_player_9" ],
[ "lightning_struck_player_10" ]
]
}

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/pegasus/sky_route",
"display": {
"icon": {
"item": "unicopia:pegasus_feather"

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/pegasus/molting_season_1",
"parent": "unicopia:unicopia/pegasus/molting_season_2",
"display": {
"icon": {
"item": "unicopia:pegasus_feather"

View file

@ -10,7 +10,7 @@
"description": {
"translate": "advancements.unicopia.sky_route.description"
},
"frame": "challenge",
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false

View file

@ -1,8 +1,8 @@
{
"parent": "unicopia:unicopia/save_the_day",
"parent": "unicopia:unicopia/unicorn/save_the_day",
"display": {
"icon": {
"item": "unicopia:alicorn_amulet"
"item": "unicopia:unicorn_amulet"
},
"title": {
"translate": "advancements.unicopia.ascension.title"

View file

@ -0,0 +1,31 @@
{
"parent": "unicopia:unicopia/unicorn/magical_route",
"display": {
"icon": {
"item": "unicopia:spellbook"
},
"title": {
"translate": "advancements.unicopia.books.title"
},
"description": {
"translate": "advancements.unicopia.books.description"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"has_book": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{ "items": [ "unicopia:spellbook" ] }
]
}
}
},
"requirements": [
[ "has_book" ]
]
}

View file

@ -0,0 +1,31 @@
{
"parent": "unicopia:unicopia/unicorn/books",
"display": {
"icon": {
"item": "unicopia:crystal_shard"
},
"title": {
"translate": "advancements.unicopia.crystaline.title"
},
"description": {
"translate": "advancements.unicopia.crystaline.description"
},
"frame": "task",
"show_toast": false,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"has_shard": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{ "items": [ "unicopia:crystal_shard" ] }
]
}
}
},
"requirements": [
[ "has_shard" ]
]
}

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/save_the_day",
"parent": "unicopia:unicopia/unicorn/save_the_day",
"display": {
"icon": {
"item": "unicopia:broken_alicorn_amulet"

View file

@ -0,0 +1,29 @@
{
"parent": "unicopia:unicopia/unicorn/tempted",
"display": {
"icon": {
"item": "unicopia:alicorn_amulet"
},
"title": {
"translate": "advancements.unicopia.hello_darkness_my_old_friend.title"
},
"description": {
"translate": "advancements.unicopia.hello_darkness_my_old_friend.description"
},
"frame": "challenge",
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"light_altar": {
"trigger": "unicopia:custom",
"conditions": {
"event": "light_altar"
}
}
},
"requirements": [
[ "light_altar" ]
]
}

View file

@ -0,0 +1,35 @@
{
"parent": "unicopia:unicopia/root",
"display": {
"icon": {
"item": "unicopia:unicorn_badge"
},
"title": {
"translate": "advancements.unicopia.magical_route.title"
},
"description": {
"translate": "advancements.unicopia.magical_route.description"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"be_horned": {
"trigger": "unicopia:player_change_race",
"conditions": {
"race": "unicorn"
}
},
"be_alihorned": {
"trigger": "unicopia:player_change_race",
"conditions": {
"race": "alicorn"
}
}
},
"requirements": [
[ "be_horned", "be_alihorned" ]
]
}

View file

@ -0,0 +1,29 @@
{
"parent": "unicopia:unicopia/unicorn/crystaline",
"display": {
"icon": {
"item": "unicopia:crystal_heart"
},
"title": {
"translate": "advancements.unicopia.power_up_heart.title"
},
"description": {
"translate": "advancements.unicopia.power_up_heart.description"
},
"frame": "task",
"show_toast": false,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"power_up_heart": {
"trigger": "unicopia:custom",
"conditions": {
"event": "power_up_heart"
}
}
},
"requirements": [
[ "power_up_heart" ]
]
}

View file

@ -1,5 +1,5 @@
{
"parent": "unicopia:unicopia/root",
"parent": "unicopia:unicopia/unicorn/hello_darkness_my_old_friend",
"display": {
"icon": {
"item": "unicopia:broken_alicorn_amulet"

View file

@ -0,0 +1,29 @@
{
"parent": "unicopia:unicopia/unicorn/books",
"display": {
"icon": {
"item": "minecraft:water_bucket"
},
"title": {
"translate": "advancements.unicopia.split_the_sea.title"
},
"description": {
"translate": "advancements.unicopia.split_the_sea.description"
},
"frame": "challenge",
"show_toast": true,
"announce_to_chat": true,
"hidden": true
},
"criteria": {
"split_sea": {
"trigger": "unicopia:custom",
"conditions": {
"event": "split_sea"
}
}
},
"requirements": [
[ "split_sea" ]
]
}

View file

@ -0,0 +1,31 @@
{
"parent": "unicopia:unicopia/unicorn/books",
"display": {
"icon": {
"item": "unicopia:alicorn_amulet"
},
"title": {
"translate": "advancements.unicopia.tempted.title"
},
"description": {
"translate": "advancements.unicopia.tempted.description"
},
"frame": "challenge",
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"has_amulet": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{ "items": [ "unicopia:alicorn_amulet" ] }
]
}
}
},
"requirements": [
[ "has_amulet" ]
]
}