Added some baseline work for Sentient Specters, which are basically summons of the Sentient Weaponry.
This commit is contained in:
parent
7b53111b30
commit
c201beb87f
|
@ -0,0 +1,173 @@
|
|||
package WayofTime.bloodmagic.client.render.entity;
|
||||
|
||||
import net.minecraft.client.model.ModelBiped;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.entity.RenderBiped;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.client.renderer.entity.layers.LayerArrow;
|
||||
import net.minecraft.client.renderer.entity.layers.LayerBipedArmor;
|
||||
import net.minecraft.client.renderer.entity.layers.LayerCustomHead;
|
||||
import net.minecraft.client.renderer.entity.layers.LayerHeldItem;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumHandSide;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderSentientSpecter extends RenderBiped<EntitySentientSpecter>
|
||||
{
|
||||
public static final ResourceLocation texture = new ResourceLocation("bloodmagic", "textures/entities/specter.png");
|
||||
|
||||
public RenderSentientSpecter(RenderManager renderManager)
|
||||
{
|
||||
super(renderManager, new ModelBiped(0.0F), 0.5F);
|
||||
this.addLayer(new LayerBipedArmor(this));
|
||||
this.addLayer(new LayerHeldItem(this));
|
||||
this.addLayer(new LayerArrow(this));
|
||||
this.addLayer(new LayerCustomHead(this.getMainModel().bipedHead));
|
||||
}
|
||||
|
||||
public ModelBiped getMainModel()
|
||||
{
|
||||
return (ModelBiped) super.getMainModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the desired {@code T} type Entity.
|
||||
*/
|
||||
public void doRender(EntitySentientSpecter entity, double x, double y, double z, float entityYaw, float partialTicks)
|
||||
{
|
||||
// if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderPlayerEvent.Pre(entity, this, partialTicks, x, y, z)))
|
||||
// return;
|
||||
// if (!entity.isUser() || this.renderManager.renderViewEntity == entity)
|
||||
{
|
||||
double d0 = y;
|
||||
|
||||
this.setModelVisibilities(entity);
|
||||
// GlStateManager.enableBlendProfile(GlStateManager.Profile.PLAYER_SKIN);
|
||||
super.doRender(entity, x, d0, z, entityYaw, partialTicks);
|
||||
// GlStateManager.disableBlendProfile(GlStateManager.Profile.PLAYER_SKIN);
|
||||
}
|
||||
// net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderPlayerEvent.Post(entity, this, partialTicks, x, y, z));
|
||||
}
|
||||
|
||||
private void setModelVisibilities(EntitySentientSpecter clientPlayer)
|
||||
{
|
||||
ModelBiped modelplayer = this.getMainModel();
|
||||
|
||||
ItemStack itemstack = clientPlayer.getHeldItemMainhand();
|
||||
ItemStack itemstack1 = clientPlayer.getHeldItemOffhand();
|
||||
modelplayer.setInvisible(true);
|
||||
|
||||
modelplayer.isSneak = clientPlayer.isSneaking();
|
||||
ModelBiped.ArmPose modelbiped$armpose = ModelBiped.ArmPose.EMPTY;
|
||||
ModelBiped.ArmPose modelbiped$armpose1 = ModelBiped.ArmPose.EMPTY;
|
||||
|
||||
if (itemstack != null)
|
||||
{
|
||||
modelbiped$armpose = ModelBiped.ArmPose.ITEM;
|
||||
|
||||
if (clientPlayer.getItemInUseCount() > 0)
|
||||
{
|
||||
EnumAction enumaction = itemstack.getItemUseAction();
|
||||
|
||||
if (enumaction == EnumAction.BLOCK)
|
||||
{
|
||||
modelbiped$armpose = ModelBiped.ArmPose.BLOCK;
|
||||
} else if (enumaction == EnumAction.BOW)
|
||||
{
|
||||
modelbiped$armpose = ModelBiped.ArmPose.BOW_AND_ARROW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (itemstack1 != null)
|
||||
{
|
||||
modelbiped$armpose1 = ModelBiped.ArmPose.ITEM;
|
||||
|
||||
if (clientPlayer.getItemInUseCount() > 0)
|
||||
{
|
||||
EnumAction enumaction1 = itemstack1.getItemUseAction();
|
||||
|
||||
if (enumaction1 == EnumAction.BLOCK)
|
||||
{
|
||||
modelbiped$armpose1 = ModelBiped.ArmPose.BLOCK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (clientPlayer.getPrimaryHand() == EnumHandSide.RIGHT)
|
||||
{
|
||||
modelplayer.rightArmPose = modelbiped$armpose;
|
||||
modelplayer.leftArmPose = modelbiped$armpose1;
|
||||
} else
|
||||
{
|
||||
modelplayer.rightArmPose = modelbiped$armpose1;
|
||||
modelplayer.leftArmPose = modelbiped$armpose;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the location of an entity's texture. Doesn't seem to be called
|
||||
* unless you call Render.bindEntityTexture.
|
||||
*/
|
||||
protected ResourceLocation getEntityTexture(EntitySentientSpecter entity)
|
||||
{
|
||||
return texture;
|
||||
}
|
||||
|
||||
public void transformHeldFull3DItemLayer()
|
||||
{
|
||||
GlStateManager.translate(0.0F, 0.1875F, 0.0F);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows the render to do state modifications necessary before the model is
|
||||
* rendered.
|
||||
*/
|
||||
protected void preRenderCallback(EntitySentientSpecter entitylivingbaseIn, float partialTickTime)
|
||||
{
|
||||
float f = 0.9375F;
|
||||
GlStateManager.scale(0.9375F, 0.9375F, 0.9375F);
|
||||
}
|
||||
|
||||
// public void renderRightArm(EntitySentientSpecter clientPlayer)
|
||||
// {
|
||||
// float f = 1.0F;
|
||||
// GlStateManager.color(1.0F, 1.0F, 1.0F);
|
||||
// float f1 = 0.0625F;
|
||||
// ModelBiped modelplayer = this.getMainModel();
|
||||
// this.setModelVisibilities(clientPlayer);
|
||||
// GlStateManager.enableBlend();
|
||||
// modelplayer.swingProgress = 0.0F;
|
||||
// modelplayer.isSneak = false;
|
||||
// modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer);
|
||||
// modelplayer.bipedRightArm.rotateAngleX = 0.0F;
|
||||
// modelplayer.bipedRightArm.render(0.0625F);
|
||||
// modelplayer.bipedRightArmwear.rotateAngleX = 0.0F;
|
||||
// modelplayer.bipedRightArmwear.render(0.0625F);
|
||||
// GlStateManager.disableBlend();
|
||||
// }
|
||||
//
|
||||
// public void renderLeftArm(EntitySentientSpecter clientPlayer)
|
||||
// {
|
||||
// float f = 1.0F;
|
||||
// GlStateManager.color(1.0F, 1.0F, 1.0F);
|
||||
// float f1 = 0.0625F;
|
||||
// ModelBiped modelplayer = this.getMainModel();
|
||||
// this.setModelVisibilities(clientPlayer);
|
||||
// GlStateManager.enableBlend();
|
||||
// modelplayer.isSneak = false;
|
||||
// modelplayer.swingProgress = 0.0F;
|
||||
// modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer);
|
||||
// modelplayer.bipedLeftArm.rotateAngleX = 0.0F;
|
||||
// modelplayer.bipedLeftArm.render(0.0625F);
|
||||
// modelplayer.bipedLeftArmwear.rotateAngleX = 0.0F;
|
||||
// modelplayer.bipedLeftArmwear.render(0.0625F);
|
||||
// GlStateManager.disableBlend();
|
||||
// }
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package WayofTime.bloodmagic.client.render.entity;
|
||||
|
||||
import net.minecraft.client.renderer.entity.Render;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraftforge.fml.client.registry.IRenderFactory;
|
||||
import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter;
|
||||
|
||||
public class SentientSpecterRenderFactory implements IRenderFactory<EntitySentientSpecter>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntitySentientSpecter> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderSentientSpecter(manager);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
package WayofTime.bloodmagic.entity.mob;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.ai.EntityAIAttackMelee;
|
||||
import net.minecraft.entity.ai.EntityAIHurtByTarget;
|
||||
import net.minecraft.entity.ai.EntityAILookIdle;
|
||||
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
|
||||
import net.minecraft.entity.ai.EntityAISwimming;
|
||||
import net.minecraft.entity.ai.EntityAIWander;
|
||||
import net.minecraft.entity.ai.EntityAIWatchClosest;
|
||||
import net.minecraft.entity.item.EntityBoat;
|
||||
import net.minecraft.entity.monster.EntityMob;
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import net.minecraft.entity.passive.EntityVillager;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.SoundEvents;
|
||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.pathfinding.PathNavigateGround;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntitySentientSpecter extends EntityMob
|
||||
{
|
||||
public EntitySentientSpecter(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.6F, 1.95F);
|
||||
// ((PathNavigateGround) getNavigator()).setCanSwim(false);
|
||||
this.tasks.addTask(0, new EntityAISwimming(this));
|
||||
this.tasks.addTask(2, new EntityAIAttackMelee(this, 1, false));
|
||||
// this.tasks.addTask(2, new AIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
|
||||
// this.tasks.addTask(3, new AIAttackOnCollide(this, EntityVillager.class, 1.0D, true));
|
||||
this.tasks.addTask(5, new EntityAIWander(this, 1.0D));
|
||||
this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
|
||||
this.tasks.addTask(7, new EntityAILookIdle(this));
|
||||
// this.tasks.addTask(8, new AIAttackOnCollide(this, EntityAnimal.class, 1.0D, false));
|
||||
this.targetTasks.addTask(0, new EntityAIHurtByTarget(this, true, new Class[0]));
|
||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true));
|
||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, false));
|
||||
this.targetTasks.addTask(8, new EntityAINearestAttackableTarget(this, EntityAnimal.class, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyEntityAttributes()
|
||||
{
|
||||
super.applyEntityAttributes();
|
||||
getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(40.0D);
|
||||
getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
|
||||
getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.27D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound tag)
|
||||
{
|
||||
super.writeEntityToNBT(tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntityFromNBT(NBTTagCompound tag)
|
||||
{
|
||||
super.readEntityFromNBT(tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return SoundEvents.ENTITY_COW_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound()
|
||||
{
|
||||
return SoundEvents.ENTITY_COW_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return SoundEvents.ENTITY_COW_DEATH;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void playStepSound(BlockPos pos, Block block)
|
||||
{
|
||||
this.playSound(SoundEvents.ENTITY_COW_STEP, 0.15F, 1.0F);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the volume for the sounds this mob makes.
|
||||
*/
|
||||
@Override
|
||||
protected float getSoundVolume()
|
||||
{
|
||||
return 0.4F;
|
||||
}
|
||||
}
|
|
@ -39,6 +39,7 @@ import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler;
|
|||
import WayofTime.bloodmagic.api.util.helper.NBTHelper;
|
||||
import WayofTime.bloodmagic.client.IMeshProvider;
|
||||
import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionMultiWill;
|
||||
import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter;
|
||||
import WayofTime.bloodmagic.registry.ModItems;
|
||||
import WayofTime.bloodmagic.util.helper.TextHelper;
|
||||
|
||||
|
@ -69,6 +70,8 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM
|
|||
|
||||
public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4 };
|
||||
|
||||
public static final boolean spawnSpecterOnClick = false;
|
||||
|
||||
public ItemSentientSword()
|
||||
{
|
||||
super(ModItems.soulToolMaterial);
|
||||
|
@ -160,7 +163,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM
|
|||
}
|
||||
}
|
||||
|
||||
public void applyEffectToEntity(EnumDemonWillType type, int willBracket, EntityLivingBase target, EntityPlayer attacker)
|
||||
public void applyEffectToEntity(EnumDemonWillType type, int willBracket, EntityLivingBase target, EntityLivingBase attacker)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
|
@ -244,6 +247,14 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM
|
|||
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand)
|
||||
{
|
||||
recalculatePowers(stack, world, player);
|
||||
if (!world.isRemote && spawnSpecterOnClick)
|
||||
{
|
||||
EntitySentientSpecter specterEntity = new EntitySentientSpecter(world);
|
||||
specterEntity.setPosition(player.posX, player.posY, player.posZ);
|
||||
world.spawnEntityInWorld(specterEntity);
|
||||
System.out.println("Spawning Specter...");
|
||||
specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(ModItems.sentientSword));
|
||||
}
|
||||
|
||||
return super.onItemRightClick(stack, world, player, hand);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package WayofTime.bloodmagic.proxy;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -11,7 +10,6 @@ import net.minecraft.client.renderer.entity.RenderManager;
|
|||
import net.minecraft.client.renderer.entity.RenderPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.potion.PotionUtils;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.ModelLoader;
|
||||
|
@ -38,7 +36,9 @@ import WayofTime.bloodmagic.client.render.RenderItemRoutingNode;
|
|||
import WayofTime.bloodmagic.client.render.entity.BloodLightRenderFactory;
|
||||
import WayofTime.bloodmagic.client.render.entity.MeteorRenderFactory;
|
||||
import WayofTime.bloodmagic.client.render.entity.SentientArrowRenderFactory;
|
||||
import WayofTime.bloodmagic.client.render.entity.SentientSpecterRenderFactory;
|
||||
import WayofTime.bloodmagic.client.render.entity.SoulSnareRenderFactory;
|
||||
import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter;
|
||||
import WayofTime.bloodmagic.entity.projectile.EntityBloodLight;
|
||||
import WayofTime.bloodmagic.entity.projectile.EntityMeteor;
|
||||
import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow;
|
||||
|
@ -97,6 +97,7 @@ public class ClientProxy extends CommonProxy
|
|||
RenderingRegistry.registerEntityRenderingHandler(EntitySentientArrow.class, new SentientArrowRenderFactory());
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityBloodLight.class, new BloodLightRenderFactory());
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, new MeteorRenderFactory());
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntitySentientSpecter.class, new SentientSpecterRenderFactory());
|
||||
|
||||
ShaderHelper.init();
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package WayofTime.bloodmagic.registry;
|
|||
|
||||
import net.minecraftforge.fml.common.registry.EntityRegistry;
|
||||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter;
|
||||
import WayofTime.bloodmagic.entity.projectile.EntityBloodLight;
|
||||
import WayofTime.bloodmagic.entity.projectile.EntityMeteor;
|
||||
import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow;
|
||||
|
@ -17,5 +18,6 @@ public class ModEntities
|
|||
EntityRegistry.registerModEntity(EntitySoulSnare.class, "SoulSnare", id++, BloodMagic.instance, 64, 1, true);
|
||||
EntityRegistry.registerModEntity(EntitySentientArrow.class, "SoulArrow", id++, BloodMagic.instance, 64, 1, true);
|
||||
EntityRegistry.registerModEntity(EntityMeteor.class, "Meteor", id++, BloodMagic.instance, 64, 1, true);
|
||||
EntityRegistry.registerModEntity(EntitySentientSpecter.class, "SentientSpecter", id++, BloodMagic.instance, 64, 1, true);
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 213 B |
Loading…
Reference in a new issue