Skip to content

Commit

Permalink
Add souls & soul collection
Browse files Browse the repository at this point in the history
  • Loading branch information
ACGaming committed Jun 5, 2024
1 parent 21b5794 commit c37e8fb
Show file tree
Hide file tree
Showing 4 changed files with 218 additions and 0 deletions.
82 changes: 82 additions & 0 deletions src/main/java/mod/emt/harkenscythe/entities/HSSoul.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package mod.emt.harkenscythe.entities;

import mod.emt.harkenscythe.init.HSItems;
import mod.emt.harkenscythe.items.HSEssenceKeeper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.SoundCategory;
import net.minecraft.world.World;

public class HSSoul extends Entity
{
public HSSoul(World worldIn)
{
super(worldIn);
this.setSize(0.8F, 2.0F);
}

@Override
protected void entityInit() {}

@Override
protected boolean canTriggerWalking()
{
return false;
}

@Override
public boolean canBeCollidedWith()
{
return true;
}

@Override
protected void readEntityFromNBT(NBTTagCompound compound) {}

@Override
protected void writeEntityToNBT(NBTTagCompound compound) {}

@Override
public boolean processInitialInteract(EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
Item item = stack.getItem();
if (item instanceof HSEssenceKeeper)
{
if (!player.capabilities.isCreativeMode)
{
if (item == HSItems.essence_keeper || item == HSItems.essence_vessel)
{
stack.shrink(1);
ItemStack newStack = item == HSItems.essence_keeper ? new ItemStack(HSItems.essence_keeper_soul) : new ItemStack(HSItems.essence_vessel_soul);
newStack.setItemDamage(newStack.getMaxDamage() - 1);
player.setHeldItem(hand, newStack);
}
else if (item == HSItems.essence_keeper_soul || item == HSItems.essence_vessel_soul)
{
if (stack.getItemDamage() == 0) return false;
if (stack.getItemDamage() > 0)
{
stack.setItemDamage(stack.getItemDamage() - 1);
}
if (stack.getItemDamage() <= 0)
{
stack.shrink(1);
ItemStack newStack = item == HSItems.essence_keeper_soul ? new ItemStack(HSItems.essence_keeper_soul) : new ItemStack(HSItems.essence_vessel_soul);
player.setHeldItem(hand, newStack);
}
}
}
this.world.playSound(null, player.getPosition(), SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.PLAYERS, 1.0F, 1.0F);
this.world.spawnParticle(EnumParticleTypes.CLOUD, this.posX, this.posY + 1.5D, this.posZ, 0.0D, 0.1D, 0.0D);
this.setDead();
}
return super.processInitialInteract(player, hand);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package mod.emt.harkenscythe.entities.render;

import mod.emt.harkenscythe.entities.HSSoul;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelEnderCrystal;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class HSSoulRender extends Render<HSSoul>
{
private static final ResourceLocation SOUL_TEXTURES = new ResourceLocation("textures/entity/endercrystal/endercrystal.png");
private final ModelBase modelSoul = new ModelEnderCrystal(0.0F, false);

public HSSoulRender(RenderManager renderManagerIn)
{
super(renderManagerIn);
this.shadowSize = 0.0F;
}

@Override
public void doRender(HSSoul entity, double x, double y, double z, float entityYaw, float partialTicks)
{
GlStateManager.pushMatrix();
GlStateManager.enableNormalize();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.color(0.1F, 0.9F, 1.0F, 0.5F);
GlStateManager.translate((float) x, (float) y, (float) z);
this.bindTexture(SOUL_TEXTURES);
if (this.renderOutlines)
{
GlStateManager.enableColorMaterial();
GlStateManager.enableOutlineMode(this.getTeamColor(entity));
}
float ticks = entity.ticksExisted + partialTicks;
float rotation = (ticks) * 2.0F;
GlStateManager.translate(x, y + Math.sin(ticks / 5.0F) * 0.1F + 0.2F, z);
GlStateManager.rotate(rotation, 0, 1, 0);
this.modelSoul.render(entity, 0.0F, 3.0F, 0.2F, 0.0F, 0.0F, 0.0625F);
if (this.renderOutlines)
{
GlStateManager.disableOutlineMode();
GlStateManager.disableColorMaterial();
}
GlStateManager.disableBlend();
GlStateManager.disableNormalize();
GlStateManager.popMatrix();
super.doRender(entity, x, y, z, entityYaw, partialTicks);
}

@Override
protected ResourceLocation getEntityTexture(HSSoul entity)
{
return SOUL_TEXTURES;
}

public static class Factory implements IRenderFactory<HSSoul>
{
@Override
public Render<? super HSSoul> createRenderFor(RenderManager manager)
{
return new HSSoulRender(manager);
}
}
}
32 changes: 32 additions & 0 deletions src/main/java/mod/emt/harkenscythe/events/HSLivingDeathEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package mod.emt.harkenscythe.events;

import mod.emt.harkenscythe.HarkenScythe;
import mod.emt.harkenscythe.entities.HSSoul;
import mod.emt.harkenscythe.items.HSScythe;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

@Mod.EventBusSubscriber(modid = HarkenScythe.MOD_ID)
public class HSLivingDeathEvent
{
@SubscribeEvent
public static void onEntityDeath(LivingDeathEvent event)
{
EntityLivingBase entity = event.getEntityLiving();
World world = entity.getEntityWorld();
if (!world.isRemote && event.getSource().getTrueSource() instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) event.getSource().getTrueSource();
if (player.getHeldItemMainhand().getItem() instanceof HSScythe)
{
HSSoul soul = new HSSoul(world);
soul.setPosition(entity.posX, entity.posY, entity.posZ);
world.spawnEntity(soul);
}
}
}
}
33 changes: 33 additions & 0 deletions src/main/java/mod/emt/harkenscythe/init/HSRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,23 @@
import com.google.common.base.Preconditions;
import javax.annotation.Nonnull;
import mod.emt.harkenscythe.HarkenScythe;
import mod.emt.harkenscythe.entities.HSSoul;
import mod.emt.harkenscythe.entities.render.HSSoulRender;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.EntityEntry;
import net.minecraftforge.fml.common.registry.EntityEntryBuilder;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.registries.IForgeRegistryEntry;

@Mod.EventBusSubscriber(modid = HarkenScythe.MOD_ID)
public class HSRegistry
{
@Nonnull
Expand All @@ -27,4 +39,25 @@ public static <T extends IForgeRegistryEntry> T setup(@Nonnull final T entry, @N
if (entry instanceof Item) ((Item) entry).setTranslationKey(registryName.getNamespace() + "." + registryName.getPath());
return entry;
}

@SubscribeEvent
public static void registerEntities(RegistryEvent.Register<EntityEntry> event)
{
int id = 1;
event.getRegistry().registerAll(
EntityEntryBuilder.create()
.entity(HSSoul.class)
.id(new ResourceLocation(HarkenScythe.MOD_ID, "soul"), id++)
.name("soul")
.tracker(64, 1, true)
.build()
);
}

@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void registerEntityRenderers(ModelRegistryEvent event)
{
RenderingRegistry.registerEntityRenderingHandler(HSSoul.class, new HSSoulRender.Factory());
}
}

0 comments on commit c37e8fb

Please sign in to comment.