From 0ef986d4064205662ad26cdf671ecc87c4cce324 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 4 Mar 2019 00:33:40 +0200 Subject: [PATCH] Hanging cuccoons are now more dangerous to non-changelings --- .../minelittlepony/unicopia/Predicates.java | 5 +++ .../unicopia/block/BlockGrowingCuccoon.java | 42 +++++++++++++++++++ .../resources/assets/unicopia/lang/en_US.lang | 1 + 3 files changed, 48 insertions(+) diff --git a/src/main/java/com/minelittlepony/unicopia/Predicates.java b/src/main/java/com/minelittlepony/unicopia/Predicates.java index bc4bf4f1..724f1576 100644 --- a/src/main/java/com/minelittlepony/unicopia/Predicates.java +++ b/src/main/java/com/minelittlepony/unicopia/Predicates.java @@ -31,6 +31,11 @@ public final class Predicates { ); }; + public static final Predicate BUGGY = entity -> { + return entity instanceof EntityPlayer + && PlayerSpeciesList.instance().getPlayer((EntityPlayer)entity).getPlayerSpecies() == Race.CHANGELING; + }; + public static EntityPlayer getPlayerFromEntity(Entity entity) { if (entity instanceof EntityPlayer) { return (EntityPlayer) entity; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java b/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java index 77cca93d..73488fcf 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java @@ -5,6 +5,7 @@ import java.util.Random; import javax.annotation.Nullable; +import com.minelittlepony.unicopia.Predicates; import com.minelittlepony.unicopia.init.UBlocks; import com.minelittlepony.unicopia.init.UMaterials; import com.minelittlepony.unicopia.init.USounds; @@ -19,9 +20,14 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.IStringSerializable; @@ -34,6 +40,8 @@ import net.minecraft.world.World; public class BlockGrowingCuccoon extends Block { + public static final DamageSource DAMAGE_SOURCE = new DamageSource("acid"); + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7); public static final PropertyEnum SHAPE = PropertyEnum.create("shape", Shape.class); @@ -207,6 +215,40 @@ public class BlockGrowingCuccoon extends Block { world.scheduleUpdate(pos, this, 10); } + @Override + public void onEntityCollision(World world, BlockPos pos, IBlockState state, Entity entity) { + if (entity instanceof EntityLivingBase && !entity.isDead) { + EntityLivingBase living = (EntityLivingBase)entity; + + if (!Predicates.BUGGY.test(living) && living.getHealth() > 0) { + living.attackEntityFrom(DAMAGE_SOURCE, 1); + living.setInWeb(); + + if (!world.isRemote) { + if (living.getHealth() <= 0) { + living.dropItem(Items.BONE, 3); + + if (living instanceof EntityPlayer) { + ItemStack skull = new ItemStack(Items.SKULL, 1); + + if (world.rand.nextInt(13000) == 0) { + EntityPlayer player = (EntityPlayer)living; + + skull.setTagCompound(new NBTTagCompound()); + skull.getTagCompound().setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), player.getGameProfile())); + skull.setItemDamage(3); + } else { + living.dropItem(Items.SKULL, 1); + } + + living.entityDropItem(skull, 0); + } + } + } + } + } + } + public boolean checkSupport(IBlockAccess world, BlockPos pos) { if (PosHelper.some(pos, p -> !world.isAirBlock(p), EnumFacing.HORIZONTALS)) { diff --git a/src/main/resources/assets/unicopia/lang/en_US.lang b/src/main/resources/assets/unicopia/lang/en_US.lang index 2e2ae829..59584c89 100644 --- a/src/main/resources/assets/unicopia/lang/en_US.lang +++ b/src/main/resources/assets/unicopia/lang/en_US.lang @@ -263,6 +263,7 @@ death.attack.fire.player=%1$s was burnt to a crisp by %2$s death.attack.fire.own=%1$s was burnt to a crisp by their own spell death.attack.zap=%1$s ate a Zap Apple death.attack.paradox=%1$s imploded +death.attack.acid=%1$s drowned in acid death.attack.food_poisoning=%1$s died of food poisoning death.attack.food_poisoning.player=%1$s poisoned %1$s' to death