From 37ef2c01993d40b1036c6403a36fa47df9680bc0 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 18 Feb 2019 21:13:39 +0200 Subject: [PATCH] Monsers can't sleep in beds --- .../minelittlepony/unicopia/player/Hooks.java | 8 +++++++ .../unicopia/player/IPlayer.java | 11 ++++++++++ .../unicopia/player/PlayerCapabilities.java | 22 +++++++++++++++++++ .../resources/assets/unicopia/lang/en_US.lang | 2 ++ 4 files changed, 43 insertions(+) diff --git a/src/main/java/com/minelittlepony/unicopia/player/Hooks.java b/src/main/java/com/minelittlepony/unicopia/player/Hooks.java index bb643bb1..67c88adf 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/Hooks.java +++ b/src/main/java/com/minelittlepony/unicopia/player/Hooks.java @@ -11,6 +11,7 @@ import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import net.minecraftforge.event.entity.player.PlayerDropsEvent; import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; +import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -44,6 +45,13 @@ class Hooks { .forEach(item -> item.setPlayerSpecies(race)); } + @SubscribeEvent + public static void onPlayerTrySleep(PlayerSleepInBedEvent event) { + if (event.getResultStatus() == null) { + event.setResult(PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).trySleep(event.getPos())); + } + } + @SubscribeEvent public static void onPlayerFall(PlayerFlyableFallEvent event) { PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).onFall(event.getDistance(), event.getMultiplier()); diff --git a/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java b/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java index 791d08c8..8deeaf76 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java +++ b/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java @@ -13,9 +13,11 @@ import com.mojang.authlib.GameProfile; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayer.SleepResult; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; /** @@ -127,6 +129,15 @@ public interface IPlayer extends ICaster, IRaceContainer c instanceof IPlayer && ((IPlayer)c).getInventory().isWearing(UItems.alicorn_amulet))) { + return SleepResult.NOT_SAFE; + } + + return null; + } + @Override public IFood getFood() { return food; diff --git a/src/main/resources/assets/unicopia/lang/en_US.lang b/src/main/resources/assets/unicopia/lang/en_US.lang index ef3c13ff..e7303c64 100644 --- a/src/main/resources/assets/unicopia/lang/en_US.lang +++ b/src/main/resources/assets/unicopia/lang/en_US.lang @@ -32,6 +32,8 @@ item.staff_meadow_brook.tagline=It's a big stick item.alicorn_amulet.name=The Alicorn Amulet item.alicorn_amulet.tagline=Time Worn: %s +tile.bed.youAreAMonster=You may not rest here, you are the monster + item.gem.name=Gem item.gem.enchanted.name=Gem of %s item.corrupted_gem.name=Fractured Gem