From 77f0915d82b4d7b17a3e1e8daad7f58a50ed4959 Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 23 Sep 2020 17:41:24 +0200 Subject: [PATCH] Players of the opposite faction will keep you from sleeping nearby --- .../unicopia/entity/player/Pony.java | 17 +++++++++++------ .../unicopia/mixin/MixinPlayerEntity.java | 6 ++++-- .../resources/assets/unicopia/lang/en_us.json | 13 +------------ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index f54b40b3..fa0d4edd 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -1,5 +1,7 @@ package com.minelittlepony.unicopia.entity.player; +import java.util.Optional; + import javax.annotation.Nullable; import com.minelittlepony.unicopia.Affinity; @@ -24,8 +26,6 @@ import com.minelittlepony.unicopia.util.Copieable; import com.minelittlepony.common.util.animation.LinearInterpolator; import com.minelittlepony.common.util.animation.Interpolator; import com.mojang.authlib.GameProfile; -import com.mojang.datafixers.util.Either; - import net.minecraft.entity.Entity; import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.damage.DamageSource; @@ -33,13 +33,13 @@ import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerEntity.SleepFailureReason; import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.packet.s2c.play.EntityPassengersSetS2CPacket; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Unit; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -269,8 +269,13 @@ public class Pony implements Caster, Equine, Transmi return false; } - public Either trySleep(BlockPos pos) { - return Either.right(Unit.INSTANCE); + public Optional trySleep(BlockPos pos) { + + if (findAllSpellsInRange(10).filter(p -> p instanceof Pony).map(Pony.class::cast).map(Pony::getSpecies).anyMatch(r -> r.isEnemy(getSpecies()))) { + return Optional.of(new TranslatableText("block.unicopia.bed.not_safe")); + } + + return Optional.empty(); } public void onEat(ItemStack stack) { diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java index f90aa406..9319226b 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java @@ -59,9 +59,11 @@ abstract class MixinPlayerEntity extends LivingEntity implements PonyContainer

> info) { if (!world.isClient) { - Either result = get().trySleep(pos); + get().trySleep(pos).ifPresent(reason -> { + ((PlayerEntity)(Object)this).sendMessage(reason, true); - result.ifLeft(reason -> info.setReturnValue(result)); + info.setReturnValue(Either.right(Unit.INSTANCE)); + }); } } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 02af8a14..d0e0937b 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -1,6 +1,6 @@ { - "block.unicopia.bed.youAreAMonster": "You may not rest here, you are the monster", + "block.unicopia.bed.not_safe": "You may not rest here, there are enemies nearby", "item.unicopia.green_apple": "Granny Smith Apple", "item.unicopia.sweet_apple": "Sweet Apple Acres Apple", @@ -79,15 +79,6 @@ "curse.siphon": "Siphoning", "curse.siphon.tagline": "Energy III", - "entity.unicopia.racing_cloud": "Bucking Bronco", - "entity.unicopia.construction_cloud": "Construction Cloud", - "entity.unicopia.cloud": "Cloud", - "entity.unicopia.spell": "Magic", - "entity.unicopia.spellbook": "Spellbook", - "entity.unicopia.butterfly": "Butterfly", - "entity.unicopia.spear": "Spear", - "entity.unicopia.cucoon": "Cucoon", - "toxicity.safe.name": "Safe", "toxicity.mild.name": "Mildly Toxic", "toxicity.fair.name": "Fairly Toxic", @@ -190,8 +181,6 @@ "unicopia.power.feed": "Primary Changeling ability", "unicopia.power.disguise": "Secondary Changeling ability", - "unicopia.gui.title.bagofholding": "Bag of Holding", - "death.attack.alicorn_amulet": "%1$s was driven insane", "death.attack.darkness": "%1$s went missing", "death.attack.feed": "%1$s was drained of all life",