Players of the opposite faction will keep you from sleeping nearby

This commit is contained in:
Sollace 2020-09-23 17:41:24 +02:00
parent efc50c5cbd
commit 77f0915d82
3 changed files with 16 additions and 20 deletions

View file

@ -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<PlayerEntity>, Equine<PlayerEntity>, Transmi
return false;
}
public Either<SleepFailureReason, Unit> trySleep(BlockPos pos) {
return Either.right(Unit.INSTANCE);
public Optional<Text> 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) {

View file

@ -59,9 +59,11 @@ abstract class MixinPlayerEntity extends LivingEntity implements PonyContainer<P
cancellable = true)
private void onTrySleep(BlockPos pos, CallbackInfoReturnable<Either<PlayerEntity.SleepFailureReason, Unit>> info) {
if (!world.isClient) {
Either<PlayerEntity.SleepFailureReason, Unit> 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));
});
}
}

View file

@ -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",