Skip to content

Commit

Permalink
more advancements
Browse files Browse the repository at this point in the history
  • Loading branch information
TropheusJ committed Apr 2, 2024
1 parent 0acb77e commit 8ae43d6
Show file tree
Hide file tree
Showing 12 changed files with 177 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import io.github.tropheusj.its_as_shrimple_as_that.arrow.ShrimpArrowEntity;
import io.github.tropheusj.its_as_shrimple_as_that.command.KrillCommand;
import io.github.tropheusj.its_as_shrimple_as_that.criteria.KrillSelfTrigger;
import io.github.tropheusj.its_as_shrimple_as_that.criteria.ShrimpAccomplishDreamsTrigger;
import io.github.tropheusj.its_as_shrimple_as_that.entity.ShrimpEntity;
import io.github.tropheusj.its_as_shrimple_as_that.item.FriedRiceItem;
import net.fabricmc.api.ModInitializer;
Expand Down Expand Up @@ -60,6 +62,9 @@ public class ItsAsShrimpleAsThat implements ModInitializer {
-0.66, AttributeModifier.Operation.ADD_VALUE
);

public static final ShrimpAccomplishDreamsTrigger ACCOMPLISH_DREAMS_TRIGGER = new ShrimpAccomplishDreamsTrigger();
public static final KrillSelfTrigger KRILL_SELF = new KrillSelfTrigger();

@Override
public void onInitialize() {
Registry.register(BuiltInRegistries.ENTITY_TYPE, id("shrimp"), SHRIMP_TYPE);
Expand All @@ -68,6 +73,8 @@ public void onInitialize() {
Registry.register(BuiltInRegistries.ITEM, id("fried_rice"), FRIED_RICE);
Registry.register(BuiltInRegistries.ITEM, id("shrimp_spawn_egg"), SHRIMP_EGG);
Registry.register(BuiltInRegistries.MOB_EFFECT, id("krilled"), KRILLED);
Registry.register(BuiltInRegistries.TRIGGER_TYPES, id("accomplish_dreams"), ACCOMPLISH_DREAMS_TRIGGER);
Registry.register(BuiltInRegistries.TRIGGER_TYPES, id("krill_self"), KRILL_SELF);

CommandRegistrationCallback.EVENT.register(
(dispatcher, registryAccess, environment) -> dispatcher.register(KrillCommand.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,8 @@ protected void onHitEntity(EntityHitResult hit) {
super.onHitEntity(hit);
if (this.level().isClientSide)
return;
if (this.ownedBy(hit.getEntity())) {
// krilled self
}
if (hit.getEntity() instanceof LivingEntity living)
Krillification.transform(living);
Krillification.transform(living, this.getOwner());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static LiteralArgumentBuilder<CommandSourceStack> build() {
private static int krill(CommandSourceStack source, Collection<? extends Entity> collection) {
for (Entity entity : collection) {
if (entity instanceof LivingEntity living)
Krillification.transform(living);
Krillification.transform(living, source.getEntity());
}

Component feedback = getFeedback(collection);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package io.github.tropheusj.its_as_shrimple_as_that.criteria;

import java.util.Optional;

import com.mojang.serialization.Codec;

import io.github.tropheusj.its_as_shrimple_as_that.criteria.KrillSelfTrigger.TriggerInstance;

import org.jetbrains.annotations.NotNull;

import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.SimpleCriterionTrigger;
import net.minecraft.server.level.ServerPlayer;

public class KrillSelfTrigger extends SimpleCriterionTrigger<TriggerInstance> {
public void trigger(ServerPlayer player) {
this.trigger(player, instance -> true);
}

@Override
@NotNull
public Codec<TriggerInstance> codec() {
return TriggerInstance.CODEC;
}

public record TriggerInstance() implements SimpleInstance {
public static final Codec<TriggerInstance> CODEC = Codec.unit(new TriggerInstance());

@Override
@NotNull
public Optional<ContextAwarePredicate> player() {
return Optional.empty();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package io.github.tropheusj.its_as_shrimple_as_that.criteria;

import java.util.Optional;

import com.mojang.serialization.Codec;

import io.github.tropheusj.its_as_shrimple_as_that.criteria.ShrimpAccomplishDreamsTrigger.TriggerInstance;

import org.jetbrains.annotations.NotNull;

import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.SimpleCriterionTrigger;
import net.minecraft.server.level.ServerPlayer;

public class ShrimpAccomplishDreamsTrigger extends SimpleCriterionTrigger<TriggerInstance> {
public void trigger(ServerPlayer player) {
this.trigger(player, instance -> true);
}

@Override
@NotNull
public Codec<TriggerInstance> codec() {
return TriggerInstance.CODEC;
}

public record TriggerInstance() implements SimpleCriterionTrigger.SimpleInstance {
public static final Codec<TriggerInstance> CODEC = Codec.unit(new TriggerInstance());

@Override
@NotNull
public Optional<ContextAwarePredicate> player() {
return Optional.empty();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package io.github.tropheusj.its_as_shrimple_as_that.entity;

import io.github.tropheusj.its_as_shrimple_as_that.ItsAsShrimpleAsThat;

import org.jetbrains.annotations.Nullable;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.particles.ParticleTypes;
Expand All @@ -10,12 +13,13 @@
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;

public class Krillification {
public static void transform(LivingEntity entity) {
public static void transform(LivingEntity entity, @Nullable Entity kriller) {
if (!(entity.level() instanceof ServerLevel level))
throw new IllegalStateException();

Expand Down Expand Up @@ -45,7 +49,7 @@ public static void transform(LivingEntity entity) {
);

if (entity instanceof ServerPlayer player) {
transformPlayer(player);
transformPlayer(player, kriller);
return;
}

Expand All @@ -58,9 +62,13 @@ public static void transform(LivingEntity entity) {
}
}

private static void transformPlayer(ServerPlayer player) {
private static void transformPlayer(ServerPlayer player, Entity kriller) {
// apply status effect
Holder<MobEffect> holder = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(ItsAsShrimpleAsThat.KRILLED);
player.addEffect(new MobEffectInstance(holder, 30 * 20));
if (player == kriller) {
// krilled self
ItsAsShrimpleAsThat.KRILL_SELF.trigger(player);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.github.tropheusj.its_as_shrimple_as_that.entity;

import java.util.List;
import java.util.Optional;

import io.github.tropheusj.its_as_shrimple_as_that.ItsAsShrimpleAsThat;
import io.github.tropheusj.its_as_shrimple_as_that.entity.goal.FollowDreamsGoal;

import org.jetbrains.annotations.NotNull;
Expand All @@ -13,6 +15,7 @@
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.network.syncher.SynchedEntityData.Builder;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.tags.FluidTags;
import net.minecraft.util.RandomSource;
import net.minecraft.world.InteractionHand;
Expand All @@ -35,6 +38,7 @@
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.pathfinder.PathType;
import net.minecraft.world.phys.AABB;

public class ShrimpEntity extends PathfinderMob {
public static final EntityDataAccessor<Optional<BlockPos>> WORKSTATION = SynchedEntityData.defineId(ShrimpEntity.class, EntityDataSerializers.OPTIONAL_BLOCK_POS);
Expand Down Expand Up @@ -126,6 +130,8 @@ public Entity changeDimension(ServerLevel serverLevel, boolean bl) {

public void becomeChef(BlockPos workstation) {
this.entityData.set(WORKSTATION, Optional.of(workstation));
List<ServerPlayer> nearbyPlayers = level().getEntitiesOfClass(ServerPlayer.class, new AABB(this.blockPosition()).inflate(16));
nearbyPlayers.forEach(ItsAsShrimpleAsThat.ACCOMPLISH_DREAMS_TRIGGER::trigger);
}

public void crushDreams() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.github.tropheusj.its_as_shrimple_as_that.mixin;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.screens.advancements.AdvancementWidget;
import net.minecraft.network.chat.FormattedText;

@Mixin(AdvancementWidget.class)
public class AdvancementWidgetMixin {
@WrapOperation(
method = "<init>",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/gui/Font;substrByWidth(Lnet/minecraft/network/chat/FormattedText;I)Lnet/minecraft/network/chat/FormattedText;"
)
)
private FormattedText extend(Font instance, FormattedText text, int width, Operation<FormattedText> original) {
// don't shorten at all
return text;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"parent": "its_as_shrimple_as_that:one_in_a_krillion",
"display": {
"icon": {
"id": "its_as_shrimple_as_that:fried_rice"
},
"title": "You're telling me a shrimp fried this rice?",
"description": "It couldn't be more true.",
"background": "minecraft:dried_kelp_block",
"frame": "challenge",
"show_toast": true,
"announce_to_chat": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"parent": "its_as_shrimple_as_that:one_in_a_krillion",
"display": {
"icon": {
"id": "its_as_shrimple_as_that:shrimp_spawn_egg"
},
"title": "Krill Yourself",
"description": "You make not like it, but this is what peak performance looks like.",
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": true
},
"criteria": {
"krill_self": {
"trigger": "its_as_shrimple_as_that:krill_self"
}
},
"requirements": [
[
"krill_self"
]
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"display": {
"icon": {
"id": "its_as_shrimple_as_that:shrimp_spawn_egg",
"components": {
"enchantments": {
"efficiency": 1
}
}
},
"title": "One in a krillion",
"description": "Help a shrimp to accomplish its dreams.",
"background": "minecraft:textures/block/terredepomme.png",
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"accomplish_dreams": {
"trigger": "its_as_shrimple_as_that:accomplish_dreams"
}
},
"requirements": [
[
"accomplish_dreams"
]
]
}
1 change: 1 addition & 0 deletions src/main/resources/its_as_shrimple_as_that.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"SimpleCriterionTriggerAccessor"
],
"client": [
"AdvancementWidgetMixin"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit 8ae43d6

Please sign in to comment.