Jump to content

Recommended Posts

Posted

I have fooling with this for hours and hours --I  cannot get my custom arrow/projectile to render. .. The particle effects display but not the projectile.  All my other entities render fine.  At one point, after moving things all around I got a white cube but I don't even recall how I did that.  Sorry my code is not formatted well, but if someone could point me in the right direction I will name my next child after you ... I am sure this is something so simple that I am doing wrong:

 

EntityBlasterBolt class:

package com.glistre.glistremod.projectiles.blaster;

import java.util.List;

import com.glistre.glistremod.GlistreMod;
import com.glistre.glistremod.init.ItemRegistry;

import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;

import com.glistre.glistremod.projectiles.blaster.*;
import com.glistre.glistremod.reference.Reference;

public class Blaster extends Item{

public final String textureName;

   public Blaster(int par1, String textureName) {
       super();
       this.textureName = textureName;
       this.setUnlocalizedName(textureName);
       this.setFull3D();
       
       
   }

   public void onPlayerStoppedUsing(ItemStack itemStack, World world, EntityPlayer player, int usesRemaining)
    {
        int j = this.getMaxItemUseDuration(itemStack) - usesRemaining;

        ArrowLooseEvent event = new ArrowLooseEvent(player, itemStack, j);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled())
        {
            return;
        }
        j = event.charge;

        boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, itemStack) > 0;

        if (flag || player.inventory.hasItem(ItemRegistry.glistre_dust))
        {
// change normal 20.0F to 1.0F to make instant charge 5.0F = 5 ticks or 1/4 second	        	
            float f = (float)j / 1.0F;
            f = (f * f + f * 2.0F) / 3.0F;

            if ((double)f < 0.1D)
            {
                return;
            }

            if (f > 1.0F)
            {
                f = 1.0F;
            }

            EntityBlasterBolt par1EntityBlasterBolt = new EntityBlasterBolt(world, player, f * 2.0F);

            if (f == 1.0F)
            {
                par1EntityBlasterBolt.setIsCritical(true);
            }

            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, itemStack);

            if (k > 0)
            {
                par1EntityBlasterBolt.setDamage(par1EntityBlasterBolt.getDamage() + (double)k * 0.5D + 0.5D);
            }

            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, itemStack);

            if (l > 0)
            {
                par1EntityBlasterBolt.setKnockbackStrength(l);
            }

            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, itemStack) > 0)
            {
                par1EntityBlasterBolt.setFire(100);
            }

            itemStack.damageItem(1, player);
            //this is the sound releasing from blaster but first line of same sound in EntityBlasterBolt will not sound without it, 
            //the first float is volume 1.0F is usual depends on sound file
            world.playSoundAtEntity(player, "glistremod:laser_blaster", 1.0F, 2.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

            if (flag)
            {
                par1EntityBlasterBolt.canBePickedUp = 2;
            }
            else
            {
                player.inventory.consumeInventoryItem(ItemRegistry.glistre_dust);
            }

            if (!world.isRemote)
            {
                world.spawnEntityInWorld(par1EntityBlasterBolt);
            }
//took out the if ...isRemote to get blasterBolt to render in 1.8 but neither way works in 1.8.9
            //   if (!world.isRemote)
          //  {
          //  	world.spawnEntityInWorld(par1EntityBlasterBolt);
         //   }
        }
    }

    public EnumAction getItemUseAction(ItemStack itemStack)
    {
        return EnumAction.BOW;
    }
   
    public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player)
    {
    	ArrowNockEvent event = new ArrowNockEvent(player, itemStack);
        MinecraftForge.EVENT_BUS.post(event);
        if (event.isCanceled())
        {
            return event.result;
        }

        if (player.capabilities.isCreativeMode || player.inventory.hasItem(ItemRegistry.glistre_dust))
        {
            player.setItemInUse(itemStack, this.getMaxItemUseDuration(itemStack));
        }
        
        //adds sound effect on ArrowKnock
        
        world.playSoundAtEntity(player, "glistremod:epm_flash", 1.0F, 2.0F);

        return itemStack;
        
    }

        
    public void onUsingItemTick(ItemStack stack, EntityPlayer player, int count)
    {
       this.setDamage(stack, 99999 - count);
    }	       

    public int getMaxItemUseDuration(ItemStack par1ItemStack)
    {
        return 72000;
    }

    //adds appearance of enchantment
    @SideOnly(Side.CLIENT)
    public boolean hasEffect(ItemStack par1ItemStack)
    {
	    return true;
    } 

} 

 

Render blaster bolt class:

package com.glistre.glistremod.projectiles.blaster;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.entity.Entity;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

import net.minecraftforge.fml.relauncher.SideOnly;

import com.glistre.glistremod.GlistreMod;
import com.glistre.glistremod.init.GlistreEntityRegistry;
import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;
import com.glistre.glistremod.reference.Reference;

@SideOnly(Side.CLIENT)
public class RendreBlast extends Render<EntityBlasterBolt>
{
    public RendreBlast(RenderManager renderManager) {

	super(renderManager);

}
private static final ResourceLocation blastTextures = new ResourceLocation(Reference.MOD_ID + ":" + "textures/entities/ender_bolt_1.png");


public void doRenderEntity(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, Float partialTicks)
    {
    	this.bindEntityTexture(par1EntityBlasterBolt);
	//this.bindTexture(blastTextures);
        GlStateManager.pushMatrix();
        GlStateManager.translate((float)x, (float)y, (float)z);
        GlStateManager.rotate(par1EntityBlasterBolt.prevRotationYaw + (par1EntityBlasterBolt.rotationYaw - par1EntityBlasterBolt.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F);
        GlStateManager.rotate(par1EntityBlasterBolt.prevRotationPitch + (par1EntityBlasterBolt.rotationPitch - par1EntityBlasterBolt.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F);
        Tessellator tessellator = Tessellator.getInstance();

        //1.8 update added WorldRenderer and change var10 to worldrenderer
        WorldRenderer worldrenderer = tessellator.getWorldRenderer();
        int i = 0;
        float var12 = 0.0F;
        float var13 = 0.5F;
        float var14 = (float)(0 + i * 10) / 32.0F;
        float var15 = (float)(5 + i * 10) / 32.0F;
        float var16 = 0.0F;
        float var17 = 0.15625F;
        float var18 = (float)(5 + i * 10) / 32.0F;
        float var19 = (float)(10 + i * 10) / 32.0F;
        float var20 = 0.05625F;
     // GL11.glEnable(GL12.GL_RESCALE_NORMAL); changed to below
        GlStateManager.enableRescaleNormal();

//        GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
//       GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
   

        float var21 = (float)par1EntityBlasterBolt.arrowShake - partialTicks;

        if (var21 > 0.0F)
        {
            float var22 = -MathHelper.sin(var21 * 3.0F) * var21;
       //     GL11.glRotatef(var22, 0.0F, 0.0F, 1.0F); //changed to below
          GlStateManager.rotate(var22, 0.0F, 0.0F, 1.0F);

        }

        GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);
        GlStateManager.scale(var20, var20, var20);
        GlStateManager.translate(-4.0F, 0.0F, 0.0F);
        GL11.glNormal3f(var20, 0.0F, 0.0F);
        worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
        worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var18);
        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var18);
        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19);
        worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var19);
        tessellator.draw();
        GL11.glNormal3f(-var20, 0.0F, 0.0F);
        worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
        worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var18);
        worldrenderer.pos(-7.0D, 2.0D, 2.0D).tex((double)var17, (double)var18);
        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19);
        worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var19);
        tessellator.draw();

        for (int var23 = 0; var23 < 4; ++var23)
        {
        	GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
            GL11.glNormal3f(0.0F, 0.0F, var20);
            worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
            worldrenderer.pos(-8.0D, -2.0D, 0.0D).tex((double)var12, (double)var14);
            worldrenderer.pos(8.0D, -2.0D, 0.0D).tex((double)var13, (double)var14);
            worldrenderer.pos(8.0D, 2.0D, 0.0D).tex((double)var13, (double)var15);
            worldrenderer.pos(-8.0D, 2.0D, 0.0D).tex((double)var12, (double)var15);
            tessellator.draw();
        }

        GlStateManager.disableRescaleNormal();
        GlStateManager.popMatrix();
        super.doRender(par1EntityBlasterBolt, x, y, z, entityYaw, partialTicks);


    }

    /**
     * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
     * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
     * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
     * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
     */
@Override
    public void doRender(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, float partialTicks)
    {
          this.doRenderEntity((EntityBlasterBolt)par1EntityBlasterBolt, x, x, z, entityYaw, partialTicks);
    }

/*   @Override
    protected boolean bindEntityTexture(Entity entity)
    {
        ResourceLocation resourcelocation = this.getEntityTexture(entity);

        if (resourcelocation == null)
        {
            return false;
        }
        else
        {
            this.bindTexture(resourcelocation);
            return true;
        }
    }
    @Override
    public void bindTexture(ResourceLocation location)
    {
        this.renderManager.renderEngine.bindTexture(location);
    }*/

@Override
public ResourceLocation getEntityTexture(EntityBlasterBolt entity) {

	return blastTextures;
}
}

 

Client Proxy:

package com.glistre.glistremod.proxies;

import java.awt.Color;

import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import net.minecraftforge.fml.client.registry.RenderingRegistry;

import com.glistre.glistremod.GlistreMod;
import com.glistre.glistremod.blocks.fluids.ModFluids;
import com.glistre.glistremod.effects.EntityPortalFreonFX;
import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile;
import com.glistre.glistremod.effects.potions.splash.RenderSplashPotion;
import com.glistre.glistremod.entities.*;
import com.glistre.glistremod.entities.blacktobie.BlackModelTobo;
import com.glistre.glistremod.entities.blacktobie.BlackRenderTobo;
import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo;
import com.glistre.glistremod.entities.guardian.EntityTobieSkel;
import com.glistre.glistremod.entities.guardian.TobieModelGuardian;
import com.glistre.glistremod.entities.guardian.TobieSkelRender;
import com.glistre.glistremod.entities.king.EntityTobieKing;
import com.glistre.glistremod.entities.king.TobieKingRender;
import com.glistre.glistremod.entities.king.TobieModelKing;
import com.glistre.glistremod.entities.queen.EntityTobieQueen;
import com.glistre.glistremod.entities.queen.TobieModelQueen;
import com.glistre.glistremod.entities.queen.TobieQueenRender;
import com.glistre.glistremod.entities.wolf.BlackModelWolf;
import com.glistre.glistremod.entities.wolf.BlackRenderWolf;
import com.glistre.glistremod.entities.wolf.EntityBlackWolf;
import com.glistre.glistremod.entities.wolf.EntityGlistreWolf;
import com.glistre.glistremod.entities.wolf.GlistreModelWolf;
import com.glistre.glistremod.entities.wolf.GlistreRenderWolf;
import com.glistre.glistremod.init.BlockRegistry;
import com.glistre.glistremod.init.GMTileEntityRegistry;
import com.glistre.glistremod.init.GlistreEntityRegistry;
import com.glistre.glistremod.init.ItemRegistry;
import com.glistre.glistremod.init.Recipes;
//import com.glistre.glistremod.items.bow.BusterBowRenderer;
import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;
import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball;
import com.glistre.glistremod.projectiles.blaster.EntitySceptreBolt;
import com.glistre.glistremod.projectiles.blaster.RendreBlast;
import com.glistre.glistremod.projectiles.blaster.RendreBlast2;
import com.glistre.glistremod.projectiles.blaster.RendreBlast3;
//import com.glistre.glistremod.projectiles.blaster.RendreGlistreFactory;
import com.glistre.glistremod.projectiles.tobyworstsword.MessageExtendedReachAttack;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyRenderProjectile;
import com.glistre.glistremod.reference.Reference;
import com.glistre.glistremod.render.GlistreChestGoldInventoryRenderer;
import com.glistre.glistremod.render.GlistreChestInventoryRenderer;
import com.glistre.glistremod.render.GlistreChestRenderer;
import com.glistre.glistremod.render.GlistreGoldChestRenderer;
import com.glistre.glistremod.tabs.TabRegistry;
import com.glistre.glistremod.tileentity.TileEntityGlistreChest;
import com.glistre.glistremod.tileentity.TileEntityGlistreChestGold;
import com.glistre.glistremod.util.GlistreModelManager;

import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import net.minecraftforge.fml.common.registry.EntityRegistry;
import net.minecraftforge.fml.relauncher.Side;



public class ClientProxy extends CommonProxy {

@Override
public void preInit() {

	registerSimpleNetworking();
	GlistreModelManager.INSTANCE.registerAllModels();
	ItemRegistry.registerRenders();
	BlockRegistry.registerRenders();
	TabRegistry.registerRenders();
	GlistreEntityRegistry.registerRenders();

//		RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, new IRenderFactory<EntityBlasterBolt>(){
		RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, RendreBlast::new);


/*		@Override
	public Render<? super EntityBlasterBolt> createRenderFor(RenderManager manager){

		 return new RendreBlast(manager, GlistreEntityRegistry.blaster_bolt_1, Minecraft.getMinecraft().getRenderItem());

	}});*/
		RenderingRegistry.registerEntityRenderingHandler(EntityEnderBoltFireball.class, new IRenderFactory<EntityEnderBoltFireball>(){
		@Override
		public Render<? super EntityEnderBoltFireball> createRenderFor(RenderManager manager){

			return new RendreBlast2(manager, GlistreEntityRegistry.ender_bolt_1, Minecraft.getMinecraft().getRenderItem());

		}});	            
		      
		RenderingRegistry.registerEntityRenderingHandler(EntitySceptreBolt.class, new IRenderFactory<EntitySceptreBolt>(){
		@Override
		public Render<? super EntitySceptreBolt> createRenderFor(RenderManager manager){
			return new RendreBlast3(manager, GlistreEntityRegistry.sceptre_bolt_1, Minecraft.getMinecraft().getRenderItem());

		}});
		RenderingRegistry.registerEntityRenderingHandler(EntitySplashProjectile.class, new IRenderFactory<EntitySplashProjectile>(){
		@Override
		public Render<? super EntitySplashProjectile> createRenderFor(RenderManager manager){

			return new RenderSplashPotion(manager, GlistreEntityRegistry.splash_poison_protection, Minecraft.getMinecraft().getRenderItem());

		}});

		RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, new IRenderFactory<TobyEntityProjectile>(){
		@Override
		public Render<? super TobyEntityProjectile> createRenderFor(RenderManager manager){

				return new TobyRenderProjectile(manager, GlistreEntityRegistry.tobie_worst_projectile_1, Minecraft.getMinecraft().getRenderItem());

      	}});
        
	    RenderingRegistry.registerEntityRenderingHandler(EntityGlistreWolf.class, new IRenderFactory<EntityGlistreWolf>(){
		@Override
		public Render<? super EntityGlistreWolf> createRenderFor(RenderManager manager){

					return new GlistreRenderWolf(manager, new GlistreModelWolf(), 0.3F);

	    }});		    	
	    RenderingRegistry.registerEntityRenderingHandler(EntityBlackWolf.class, new IRenderFactory<EntityBlackWolf>(){
			@Override
			public Render<? super EntityBlackWolf> createRenderFor(RenderManager manager){

						return new BlackRenderWolf(manager, new BlackModelWolf(), 0.3F);

		    }});
	    RenderingRegistry.registerEntityRenderingHandler(EntityBlackTobo.class, new IRenderFactory<EntityBlackTobo>(){
		@Override
		public Render<? super EntityBlackTobo> createRenderFor(RenderManager manager){

					return new BlackRenderTobo(manager, new BlackModelTobo(), 0.7F);

	    }});
	    RenderingRegistry.registerEntityRenderingHandler(EntityTobieSkel.class, new IRenderFactory<EntityTobieSkel>(){
		@Override
		public Render<? super EntityTobieSkel> createRenderFor(RenderManager manager){

					return new TobieSkelRender(manager, new TobieModelGuardian(), 0.5F);

	    }});
	    RenderingRegistry.registerEntityRenderingHandler(EntityTobieQueen.class, new IRenderFactory<EntityTobieQueen>(){
			@Override
			public Render<? super EntityTobieQueen> createRenderFor(RenderManager manager){

						return new TobieQueenRender(manager, new TobieModelQueen(), 0.5F);

		    }});
	    RenderingRegistry.registerEntityRenderingHandler(EntityTobieKing.class, new IRenderFactory<EntityTobieKing>(){
			@Override
			public Render<? super EntityTobieKing> createRenderFor(RenderManager manager){

						return new TobieKingRender(manager, new TobieModelKing(), 0.5F);

		    }});

}

@Override
public void init(){
	this.registerRenders();
}

    /*
 * Thanks to jabelar copied from his tutorial
 */
/**
 * Registers the simple networking channel and messages for both sides
 */
protected void registerSimpleNetworking() 
{
	// DEBUG
	System.out.println("registering simple networking");
	GlistreMod.network = NetworkRegistry.INSTANCE.newSimpleChannel(GlistreMod.NETWORK_CHANNEL_NAME);
	int packetId = 0;
	// register messages from client to server
        GlistreMod.network.registerMessage(MessageExtendedReachAttack.Handler.class, MessageExtendedReachAttack.class, packetId++, Side.SERVER);
}

    @Override
    public EntityPlayer getPlayerEntityFromContext(MessageContext ctx) 
    {

       return (ctx.side.isClient() ? Minecraft.getMinecraft().thePlayer : super.getPlayerEntityFromContext(ctx));
    }
   	
@Override
public void registerRenders(){

    GlistreChestRenderer gcr = new GlistreChestRenderer(Minecraft.getMinecraft().getRenderManager());
    ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGlistreChest.class, gcr);	    
    GlistreGoldChestRenderer gcrg = new GlistreGoldChestRenderer(Minecraft.getMinecraft().getRenderManager());
    ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGlistreChestGold.class, gcrg);	
    TileEntityItemStackRenderer.instance = new GlistreChestInventoryRenderer();
    TileEntityItemStackRenderer.instance = new GlistreChestGoldInventoryRenderer();


}


@Override
public void addParticleEffect(EntityFX particle) {
	 double motionX = particle.worldObj.rand.nextGaussian() * 0.02D;
	    double motionY = particle.worldObj.rand.nextGaussian() * 0.02D;
	    double motionZ = particle.worldObj.rand.nextGaussian() * 0.02D;
	    EntityFX particleMysterious = new EntityPortalFreonFX(
	          particle.worldObj, 
	          particle.posX + particle.worldObj.rand.nextFloat() * particle.width 
	                * 2.0F - particle.width, 
	          particle.posY + 0.5D + particle.worldObj.rand.nextFloat() 
	                * particle.height, 
	          particle.posZ + particle.worldObj.rand.nextFloat() * particle.width 
	                * 2.0F - particle.width, 
	          motionX, 
	          motionY, 
	          motionZ);
	Minecraft.getMinecraft().effectRenderer.addEffect(particle);
}
}

 

Main:

package com.glistre.glistremod;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import org.apache.logging.log4j.Logger;

import com.glistre.glistremod.biome.WorldTypeFreon;
import com.glistre.glistremod.biome.WorldTypeGlistre;
import com.glistre.glistremod.blocks.fluids.ModFluids;
import com.glistre.glistremod.effects.GlistreEventHandler;
import com.glistre.glistremod.effects.GlistreModEventHooks;
import com.glistre.glistremod.effects.GlistreModTerrainGenHooks;
import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile;
import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo;
import com.glistre.glistremod.entities.guardian.EntityTobieSkel;
import com.glistre.glistremod.entities.king.EntityTobieKing;
import com.glistre.glistremod.entities.queen.EntityTobieQueen;
import com.glistre.glistremod.entities.wolf.EntityBlackWolf;
import com.glistre.glistremod.entities.wolf.EntityGlistreWolf;
import com.glistre.glistremod.init.BiomeRegistry;
import com.glistre.glistremod.init.BlockRegistry;
import com.glistre.glistremod.init.DimensionRegistry;
import com.glistre.glistremod.init.GMTileEntityRegistry;
import com.glistre.glistremod.init.GlistreEntityRegistry;
import com.glistre.glistremod.init.ItemRegistry;
import com.glistre.glistremod.init.Recipes;
import com.glistre.glistremod.items.bow.BusterBow;
import com.glistre.glistremod.lib.ConfigurationGlistre;
import com.glistre.glistremod.lib.GlistreGuiFactory;
import com.glistre.glistremod.mapgen.GlistreVillageBuildings;
import com.glistre.glistremod.mapgen.MapGenGlistreVillage;
import com.glistre.glistremod.mapgen.MapGenGlistreVillage.GlistreStart;
import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;
import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball;
//import com.glistre.glistremod.projectiles.blaster.RendreGlistreFactory;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile;
import com.glistre.glistremod.lib.GlistreConfigGui;
import com.glistre.glistremod.proxies.CommonProxy;
import com.glistre.glistremod.reference.Reference;
import com.glistre.glistremod.tabs.TabRegistry;
import com.glistre.glistremod.util.GlistreModelManager;
import com.glistre.glistremod.worldgen.WorldGen;

import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.network.FMLEventChannel;
import net.minecraft.client.renderer.block.statemap.IStateMapper;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraftforge.fml.common.registry.EntityRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.common.registry.LanguageRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.potion.Potion;
import net.minecraft.stats.Achievement;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.WorldType;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraft.world.gen.structure.StructureVillagePieces;
import net.minecraftforge.common.AchievementPage;
import net.minecraftforge.common.ChestGenHooks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
//import sun.rmi.runtime.Log;


/* 	MOD INFO */
@Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION, guiFactory = Reference.GUI_FACTORY, canBeDeactivated = true)
//, dependencies = "required-after:Mystcraft"

public class GlistreMod {

/*	PROXY INFO */
@SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
public static CommonProxy proxy;

public static Configuration config;

@Mod.Instance(Reference.MOD_ID)	
public static GlistreMod instance;

public static Logger log = FMLLog.getLogger();
// use a named channel to identify packets related to this mod
public static final String NETWORK_CHANNEL_NAME = "GlistreMod"; // put the name of your mod here  
//or create field 	public static String NETWORK_CHANNEL_NAME;

public static FMLEventChannel channel;
// networking
public static SimpleNetworkWrapper network;
public static int modEntityID = 0;


/**	
* DECLARATION SECTION 
* *********************************************************** */

// DECLARE TOOL MATERIAL
			/**name, harvestLevel, maxUses, efficiency, damage, enchantability*/
public static ToolMaterial Silvers=EnumHelper.addToolMaterial("Silvers", 4, 1520, 1.0F, 6, 16);
public static ToolMaterial Glistres=EnumHelper.addToolMaterial("Glistres", 4, 2020, 1.0F, 7, 16);
public static ToolMaterial Sparks=EnumHelper.addToolMaterial("Sparks", 4, 3020, 1.0F, 8, 16);
              

//	DECLARE THE NEW ACHIEVEMENTS	
       public static Achievement blockAchievement_1;
       public static Achievement mobKillAchievement_1;


@EventHandler	
public void preInit(FMLPreInitializationEvent event) {

config = new Configuration(event.getSuggestedConfigurationFile());

ConfigurationGlistre.syncConfig();


/**	
* LOAD SECTION 
* *********************************************************** */ 

 BlockRegistry.init();
 BlockRegistry.register();
 ModFluids.registerFluids();
//	 GlistreModelManager.registerAllModels();//already in proxy.init (ClientProxy) so don't need it here?
//	 ItemRegistry.GlistreMod();
 ItemRegistry.init();  //Are these not needed since I have public void Init in the client proxy?
 ItemRegistry.register();
 TabRegistry.initializeTab();
 TabRegistry.registerTab();
 GMTileEntityRegistry.GlistreMod();


     GlistreEntityRegistry.initializeEntity();

 GlistreEntityRegistry.register();

 GlistreEntityRegistry.registerEntity();

 proxy.preInit();


 MinecraftForge.EVENT_BUS.register(new GlistreModEventHooks());





// STRUCTURES
 MapGenStructureIO.registerStructure(MapGenGlistreVillage.GlistreStart.class, "Glistre_Village");
 GlistreVillageBuildings.registerVillagePieces(); //put your custom village in there
	// StructureVillagePieces.registerVillagePieces();
        log.info("PreInitialization Complete!");
}


@EventHandler
public static void init(FMLInitializationEvent event ) 
{
    EntityRegistry.registerModEntity(EntityBlasterBolt.class, "blaster_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);

 proxy.registerRenders(); //can be done in any init phase but must be done AFTER items are registered


proxy.init();

//	 TabRegistry.GlistreMod();
	Recipes.initShapedRecipes();
	Recipes.initShapelessRecipes();
	Recipes.initSmeltingRecipes();


	BiomeRegistry.GlistreMod();
	DimensionRegistry.GlistreMod();
	WorldGen.initWorldGen();

//		GlistreEntityRegistry.GlistreMod();
	//the following is code reflection to make Potion effects work 
	Potion[] potionTypes = null;
	for (Field f : Potion.class.getDeclaredFields()) {
	f.setAccessible(true);
	try {
//		if (f.getName().equals("potionTypes") || f.getName().equals("field_76425_a")) {

	if (f.getName().equals("potionTypes")) {
	Field modfield = Field.class.getDeclaredField("modifiers");
	modfield.setAccessible(true);
	modfield.setInt(f, f.getModifiers() & ~Modifier.FINAL);
	potionTypes = (Potion[])f.get(null);
	final Potion[] newPotionTypes = new Potion[256];
	System.arraycopy(potionTypes, 0, newPotionTypes, 0, potionTypes.length);
	f.set(null, newPotionTypes);
	}
	}
	catch (Exception e) {
	System.err.println("Severe error, please report this to the mod author:");
	System.err.println(e);
	}
	}

   	FMLCommonHandler.instance().bus().register(instance);
   	GlistreEventHandler handler = new GlistreEventHandler();


    //  REGISTER ENTITY

  //      	EntityRegistry.addSpawn(EntityGlistreWolf.class, 20, 3, 7, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.jungle);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.jungleEdge);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.taiga);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.forest);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.roofedForest);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.savanna);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.coldTaiga);
       		EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 1, EnumCreatureType.CREATURE, BiomeGenBase.swampland);		

            EntityRegistry.addSpawn(EntityTobieSkel.class, 20, 1, 2, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre);
            EntityRegistry.addSpawn(EntityBlackTobo.class, 14, 1, 2, EnumCreatureType.CREATURE, BiomeRegistry.biomeFreon);
       		EntityRegistry.addSpawn(EntityBlackTobo.class, 12, 1, 1, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre);
        
       		EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.forest);
       		EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.coldTaiga);
       		EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.extremeHills);
           
            EntityRegistry.addSpawn(EntityBlackWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.birchForest);
       		EntityRegistry.addSpawn(EntityBlackWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.forest);
  //      	EntityRegistry.addSpawn(EntityBlackTobo.class, 20, 1, 3, EnumCreatureType.CREATURE, BiomeRegistry.biomeFreon);	


         	//1.8update changed by adding cast
        	blockAchievement_1 = (Achievement) new Achievement("achievement.blockAchievement_1", "blockAchievement_1", -1, -3, BlockRegistry.silver_ore_1, (Achievement)null).registerStat();
        	mobKillAchievement_1 = (Achievement) new Achievement("achievement.mobKillAchievement_1", "mobKillAchievement_1", -1, -2, ItemRegistry.ancient_book, blockAchievement_1).setSpecial().registerStat();
            AchievementPage.registerAchievementPage(new AchievementPage("GlistreMod Achievements", new Achievement[]{blockAchievement_1, mobKillAchievement_1}));

  		    FMLCommonHandler.instance().bus().register(handler);//don't really need 1.8.9 you register an instance but needed in 1.8 no idea
        	MinecraftForge.EVENT_BUS.register(handler);
        	MinecraftForge.TERRAIN_GEN_BUS.register(new GlistreModTerrainGenHooks());

     	
   		log.info("Initialization Complete!");	  		
   		
}
@SubscribeEvent
public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event){
if(event.modID.equals(Reference.MOD_ID)){
	ConfigurationGlistre.syncConfig();
	//resync configs this is where restart would or not be required	
	System.out.println("Config changed!");
	log.info("Updating config...");
}

}
@EventHandler
public static void postInit( FMLPostInitializationEvent event ) 
{

proxy.postInit();
MinecraftForge.EVENT_BUS.register(new GlistreModEventHooks());
   	MinecraftForge.TERRAIN_GEN_BUS.register(new GlistreModTerrainGenHooks());


//	MinecraftForge.EVENT_BUS.register(new GuiModInfo(Minecraft.getMinecraft()));
WorldType BIOMEFREON = new WorldTypeFreon(8, "biomeFreon");
WorldType BIOMEGLISTRE = new WorldTypeGlistre(9, "biomeGlistre");

//if(MystAPI.instability != null) {
	//API usage
//}

	log.info("Post Initialization Complete!");

}

}	

 

my Entity Registry:

package com.glistre.glistremod.init;

import com.glistre.glistremod.GlistreMod;
import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile;
import com.glistre.glistremod.effects.potions.splash.ItemSplashPotion;
import com.glistre.glistremod.effects.potions.splash.RenderSplashPotion;
import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo;
import com.glistre.glistremod.entities.guardian.EntityTobieSkel;

import com.glistre.glistremod.entities.king.EntityTobieKing;
import com.glistre.glistremod.entities.queen.EntityTobieQueen;
//import com.glistre.glistremod.entities.unused.EntityTobie;
import com.glistre.glistremod.entities.wolf.EntityBlackWolf;
import com.glistre.glistremod.entities.wolf.EntityGlistreWolf;
import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;
import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball;
import com.glistre.glistremod.projectiles.blaster.EntitySceptreBolt;
import com.glistre.glistremod.projectiles.blaster.Projectile2;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityThrowable;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntitySword;
import com.glistre.glistremod.projectiles.tobyworstsword.TobyRenderProjectile;
import com.glistre.glistremod.reference.Reference;
import com.glistre.glistremod.tabs.TabRegistry;

import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.registry.EntityRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.EntityList;
import net.minecraft.item.Item;
import net.minecraft.item.ItemMonsterPlacer;
import net.minecraft.potion.PotionEffect;

public class GlistreEntityRegistry {

public static void GlistreMod(){
	initializeEntity();
//	registerEntity();		
	register();
}

// the ray or blast bolt like an arrow
    public static Item blaster_bolt_1;
    
public static Item splash_poison_protection;
//	Tobie's Worst Enemy Sword
    public static Item tobie_worst_projectile_1;
    

//    public int blaster_bolt_1ID;
    public static Item ender_bolt_1;
//   public int ender_bolt_1ID;
    public static Item sceptre_bolt_1;
    
//    public static Item item_spawn_egg_2 = new ItemMonsterPlacer().setUnlocalizedName("black_wolf").setCreativeTab(TabRegistry.tab_builder).setMaxStackSize(12);

//    public int sceptre_bolt_1ID;

public static int modEntityID = 0;

public static void initializeEntity(){
        blaster_bolt_1 = new Projectile2(blaster_bolt_1, "blaster_bolt_1").setUnlocalizedName("blaster_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion);

	splash_poison_protection = new ItemSplashPotion(17, "splash_poison_protection", new PotionEffect[]{new PotionEffect(31, 1200)}, 888888).setUnlocalizedName("splash_poison_protection");
	//TOBIE'S WORST ENEMY Sword/Item   
        tobie_worst_projectile_1 = new TobyEntitySword(Item.ToolMaterial.IRON).setUnlocalizedName("tobie_worst_projectile_1");
        ender_bolt_1 = new Projectile2(ender_bolt_1, "ender_bolt_1").setUnlocalizedName("ender_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion);
        sceptre_bolt_1 = new Projectile2(sceptre_bolt_1, "sceptre_bolt_1").setUnlocalizedName("sceptre_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion);

}

public static void registerEntity() {
	// 1.8 removed crash  
        //SPLASH POTION
//	    GameRegistry.registerItem(splash_poison_protection, "splash_poison_protection");
        // BLASTERS		

    EntityRegistry.registerModEntity(EntityBlasterBolt.class, "blaster_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);
        EntityRegistry.registerModEntity(EntityEnderBoltFireball.class, "ender_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);
        EntityRegistry.registerModEntity(EntitySceptreBolt.class, "sceptre_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);

        EntityRegistry.registerModEntity(EntitySplashProjectile.class, "splash_poison_protection", ++modEntityID, GlistreMod.instance, 64, 1, true);
        //1.8 removed crash
        // TOBIE'S WORST ENEMY	
//  	    GameRegistry.registerItem(tobie_worst_projectile_1, "tobie_worst_projectile_1");  
        EntityRegistry.registerModEntity(TobyEntityProjectile.class, "tobie_worst_projectile_1", ++modEntityID, GlistreMod.instance, 64, 1, true);



        // MOBS		
        // 80 is max distance from player, 3 is update frequencies must be 3 for mobs, projectiles must be more precise 1, 
        //last parameter is send velocity information should be true unless entity never moves
    EntityRegistry.registerModEntity(EntityGlistreWolf.class, "glistre_wolf", ++modEntityID, GlistreMod.instance, 80, 3, true);
    EntityRegistry.registerEgg (EntityGlistreWolf.class, 0xFFFFFF, 0xFFFF5D);
    EntityRegistry.registerModEntity(EntityBlackWolf.class, "black_wolf", ++modEntityID, GlistreMod.instance, 80, 3, true);
    EntityRegistry.registerEgg (EntityBlackWolf.class, 0xFFD700, 0xc5b358);
//	    EntityList.classToStringMapping.put(ItemRegistry.item_spawn_egg_2, "black_wolf");	    
    EntityRegistry.registerModEntity(EntityBlackTobo.class, "corrupted_tobie", ++modEntityID, GlistreMod.instance, 80, 3, true);	
    EntityRegistry.registerEgg (EntityBlackTobo.class, 0xc5b358, 0xFFD700);
    EntityRegistry.registerModEntity(EntityTobieSkel.class, "tobie_skelly_guardian", ++modEntityID, GlistreMod.instance, 80, 3, true);
    EntityRegistry.registerEgg (EntityTobieSkel.class, 0xCCAC00, 0xFF9900);
    EntityRegistry.registerModEntity(EntityTobieKing.class, "tobie_king", ++modEntityID, GlistreMod.instance, 80, 3, true);
    EntityRegistry.registerEgg (EntityTobieKing.class, 0x534600, 0xc5b358);
    EntityRegistry.registerModEntity(EntityTobieQueen.class, "tobie_queen_elizabeth", ++modEntityID, GlistreMod.instance, 80, 3, true);
    EntityRegistry.registerEgg (EntityTobieQueen.class, 0xFFD700, 0xCC0000);

}

public static void register(){
   	    GameRegistry.registerItem(blaster_bolt_1, "blaster_bolt_1");  
	GameRegistry.registerItem(splash_poison_protection, "splash_poison_protection");
   	    GameRegistry.registerItem(tobie_worst_projectile_1, "tobie_worst_projectile_1");  
   	    GameRegistry.registerItem(ender_bolt_1, "ender_bolt_1");
   	    GameRegistry.registerItem(sceptre_bolt_1, "sceptre_bolt_1");
}

public static void registerRenders(){
	registerRender(blaster_bolt_1);
	registerRender(splash_poison_protection);	
	registerRender(tobie_worst_projectile_1);
	registerRender(ender_bolt_1);
	registerRender(sceptre_bolt_1);



//		RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, new TobyRenderProjectile(Minecraft.getMinecraft().getRenderManager(), tobie_worst_projectile_1, Minecraft.getMinecraft().getRenderItem()));
//		RenderingRegistry.registerEntityRenderingHandler(EntitySplashProjectile.class, new RenderSplashPotion(Minecraft.getMinecraft().getRenderManager(), splash_poison_protection, Minecraft.getMinecraft().getRenderItem()));

}

public static void registerRender(Item item){
//		RenderItem renderItem = Minecraft.getMinecraft().getRenderItem();
//	 	renderItem.getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
//	 	ModelLoader.setCustomModelResourceLocation(item, 0 , new ModelResourceLocation(item.getRegistryName(), "inventory"));
 	ModelLoader.setCustomModelResourceLocation(item, 0 , new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));

}

}

 

 

 

 

 

 

  • 2 weeks later...
Posted

bump

 

would it help if I put everything on GitHub instead of posting the code?

 

this is the last thing I could find not working on my 1.8.9 mod and need to move on to 1.10

Posted

1. Move to 1.11.2 if you are going to update

2. extend RenderArrow instead of Render, like this:

@SideOnly(Side.CLIENT)
public class RenderModArrow extends RenderArrow<ENTITY> {
public static final ResourceLocation ARROW_TEXTURES = new ResourceLocation(TEXTURE LOCATION);

public RenderCheeseArrow(RenderManager manager) {
	super(manager);
}

protected ResourceLocation getEntityTexture(ENTITY entity) {
	return ARROW_TEXTURES;
}
}

3. You gave us your item instead of entity

Classes: 94

Lines of code: 12173

Other files: 206

Github repo: https://github.com/KokkieBeer/DeGeweldigeMod

Posted

I'm having this exact same problem. It might help both of us if you'd upload your code to GitHub. I've had some odd errors with my code, like 'NoSuchMethodError: MathHelper.atan2' and 'NoSuchFieldError: POSITION_TEX'. I had mine sorta working at one point, but I've lost the source code for it. They used to render as dark red messed up arrow models, but now they won't render at all.

 

I eventually ended up just removing the game-crashing bits, but I really want to get my gem staves working.

Posted

Yes, but you're using 1.11.2, correct? I'm using 1.8.9. There are probably similarities though. I'll have a look.

 

EDIT: Just realized what I'm trying to do is slightly different. I want a projectile that has a range that isn't controlled by how long you hold down the use button. I just want a set range, and the projectile texture is simply a circle rendered in multiple planes to look like a sphere. My GitHub link will be in my signature shortly.

Posted

Might want to look at my github, my arrow works...

 

I get "remove type arguments" over RenderArrow

 

"public class RendreBlast extends RenderArrow<EntityBlasterBolt>

{

 

public RendreBlast(RenderManager renderManagerIn) {

super(renderManagerIn);

 

}

 

But then if I change RenderArrow to RenderArrow and add #doRender I get invisible arrow

 

If I remove EntityBlasterBolt from <> I render the vanilla arrow

Posted

1. Move to 1.11.2 if you are going to update

2. extend RenderArrow instead of Render, like this:

@SideOnly(Side.CLIENT)
public class RenderModArrow extends RenderArrow<ENTITY> {
public static final ResourceLocation ARROW_TEXTURES = new ResourceLocation(TEXTURE LOCATION);

public RenderCheeseArrow(RenderManager manager) {
	super(manager);
}

protected ResourceLocation getEntityTexture(ENTITY entity) {
	return ARROW_TEXTURES;
}
}

3. You gave us your item instead of entity

 

My present version still renders invisible:

This is what I have currently for EntityBlaster Bolt class:

package com.glistre.glistremod.projectiles.blaster;

import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;

import java.util.List;

import com.glistre.glistremod.GlistreMod;
import com.glistre.glistremod.init.GlistreEntityRegistry;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IProjectile;
import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.play.server.S2BPacketChangeGameState;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class EntityBlasterBolt extends Entity
{
    private int xTile = -1;
    private int yTile = -1;
    private int zTile = -1;
    private Block inTile;
    private int inData;
    private boolean inGround;
    /** 1 if the player can pick up the arrow */
    public int canBePickedUp;
    /** Seems to be some sort of timer for animating an arrow. */
    public int arrowShake;
    /** The owner of this arrow. */
    public Entity shootingEntity;
    private int ticksInGround;
    private int ticksInAir;
//    private double damage = 2.0D; //original value
// sets damage to entity from blasterbolt hit
    private double damage = 6.0D;
    /** The amount of knockback an arrow applies when it hits a mob. */
    private int knockbackStrength;
//   private float explosionRadius;
//sets the explosion radius 1.0F is not too crazy   
    private float explosionRadius= 0.5F;


    public EntityBlasterBolt(World worldIn) 
    
    {
        super(worldIn);
        this.renderDistanceWeight = 10.0D;
        this.setSize(0.5F, 0.5F);
    }

    public EntityBlasterBolt(World worldIn, double x, double y, double z)
    {
        super(worldIn);
        this.renderDistanceWeight = 10.0D;
        this.setSize(0.5F, 0.5F);
        this.setPosition(x, y, z);
//        this.getYOffset();
    }

    public EntityBlasterBolt(World worldIn, EntityLivingBase shooter, EntityLivingBase target, float float0, float float1)
    {
        super(worldIn);
        this.renderDistanceWeight = 10.0D;
        this.shootingEntity = shooter;

        if (shooter instanceof EntityPlayer)
        {
            this.canBePickedUp = 1;
        }

        this.posY = shooter.posY + (double)shooter.getEyeHeight() - 0.10000000149011612D;
        double d0 = target.posX - shooter.posX;
        double d1 = target.getEntityBoundingBox().minY + (double)(target.height / 3.0F) - this.posY;
        double d2 = target.posZ - shooter.posZ;
        double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);

        if (d3 >= 1.0E-7D)
        {
            float f = (float)(MathHelper.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;
            float f1 = (float)(-(MathHelper.atan2(d1, d3) * 180.0D / Math.PI));
            double d4 = d0 / d3;
            double d5 = d2 / d3;
            this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f, f1);
            float f2 = (float)(d3 * 0.20000000298023224D);
            this.setThrowableHeading(d0, d1 + (double)f2, d2, float0, float1);
  
    //1.8 update next line was yoffset = 0.0F now 0.0D method in Entity       
//           this.getYOffset();
////           this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f2, f3);

////            float f4 = (float)d3 * 0.2F;
////            this.setThrowableHeading(d0, d1 + (double)f4, d2, float0, float1);
        }
    }

//velocity == shadow?
    public EntityBlasterBolt(World worldIn, EntityLivingBase shooter, float velocity)
    {
        super(worldIn);
        this.renderDistanceWeight = 10.0D;
        this.shootingEntity = shooter;

        if (shooter instanceof EntityPlayer)
        {
            this.canBePickedUp = 1;
        }

        this.setSize(0.5F, 0.5F);
        this.setLocationAndAngles(shooter.posX, shooter.posY + (double)shooter.getEyeHeight(), shooter.posZ, shooter.rotationYaw, shooter.rotationPitch);
        this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
        this.posY -= 0.10000000149011612D;
        this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
        this.setPosition(this.posX, this.posY, this.posZ);
//        this.getYOffset();
        this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
        this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
        this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));
        this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, velocity * 1.5F, 1.0F);
    }

    protected void entityInit()
    {
        this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
    }

    /**
     * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.
     */
    public void setThrowableHeading(double x, double y, double z, float velocity, float inaccuracy)
    {
        float f = MathHelper.sqrt_double(x * x + y * y + z * z);
        x = x / (double)f;
        y = y / (double)f;
        z = z / (double)f;
        x = x + this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;
        y = y + this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;
        z = z + this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;
        x = x * (double)velocity;
        y = y * (double)velocity;
        z = z * (double)velocity;
        this.motionX = x;
        this.motionY = y;
        this.motionZ = z;
        float f1 = MathHelper.sqrt_double(x * x + z * z);
        this.prevRotationYaw = this.rotationYaw = (float)(MathHelper.atan2(x, z) * 180.0D / Math.PI);
        this.prevRotationPitch = this.rotationPitch = (float)(MathHelper.atan2(y, (double)f1) * 180.0D / Math.PI);
        this.ticksInGround = 0;
    }

    /**
     * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX,
     * posY, posZ, yaw, pitch
     */

//   func_180426_a replaced  #setPositionAndRotation2 in 1.8 update then back to setPositionAndRotation2 again
    @Override
    @SideOnly(Side.CLIENT)
    public void setPositionAndRotation2(double x, double y, double z, float floatYaw, float floatPitch, int pofRotationIncrements, boolean isTeleport)
    {
        this.setPosition(x, y, z);
        this.setRotation(floatYaw, floatPitch);
    }

    /**
     * Sets the velocity to the args. Args: x, y, z
     */
    @SideOnly(Side.CLIENT)
    public void setVelocity(double x, double y, double z)
    {
        this.motionX = x;
        this.motionY = y;
        this.motionZ = z;

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
        {
            float f = MathHelper.sqrt_double(x * x + z * z);
            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(x, z) * 180.0D / Math.PI);
            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(y, (double)f) * 180.0D / Math.PI);
            this.prevRotationPitch = this.rotationPitch;
            this.prevRotationYaw = this.rotationYaw;
            this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
            this.ticksInGround = 0;
        }
        
    }

    /**
     * Called to update the entity's position/logic.
     */
    public void onUpdate()
    {
        super.onUpdate();

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
        {
            float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI);
        }

        BlockPos blockpos = new BlockPos(this.xTile, this.yTile, this.zTile);
        IBlockState iblockstate = this.worldObj.getBlockState(blockpos);
        Block block = iblockstate.getBlock();

        if (block.getMaterial() != Material.air)
        {
            block.setBlockBoundsBasedOnState(this.worldObj, blockpos);
            AxisAlignedBB axisalignedbb = block.getCollisionBoundingBox(this.worldObj, blockpos, iblockstate);

            if (axisalignedbb != null && axisalignedbb.isVecInside(new Vec3(this.posX, this.posY, this.posZ)))
            {
                this.inGround = true;
            }
        }

        if (this.arrowShake > 0)
        {
            --this.arrowShake;
        }

        if (this.inGround)
        {
            int j = block.getMetaFromState(iblockstate);

            if (block == this.inTile && j == this.inData)
            {
                ++this.ticksInGround;
              //changed 1200 to 10 in next line to try to remove arrow
                if (this.ticksInGround >= 10)
                {
                    this.setDead();
                }
            }
            else
            {
                this.inGround = false;
                this.motionX *= (double)(this.rand.nextFloat() * 0.2F);
                this.motionY *= (double)(this.rand.nextFloat() * 0.2F);
                this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);
                this.ticksInGround = 0;
                this.ticksInAir = 0;
            }
        }
        else
        {
            ++this.ticksInAir;
            Vec3 vec31 = new Vec3(this.posX, this.posY, this.posZ);
            Vec3 vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
            MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec31, vec3, false, true, false);
            vec31 = new Vec3(this.posX, this.posY, this.posZ);
            vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);

            if (movingobjectposition != null)
            {
                vec3 = new Vec3(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);
            }

            Entity entity = null;
            List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
            double d0 = 0.0D;
            int i;
            float f1;

            for (i = 0; i < list.size(); ++i)
            {
                Entity entity1 = (Entity)list.get(i);

                if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5))
                {
                    f1 = 0.3F;
                    AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().expand((double)f1, (double)f1, (double)f1);
                    MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);

                    if (movingobjectposition1 != null)
                    {
                        double d1 = vec31.distanceTo(movingobjectposition1.hitVec);

                        if (d1 < d0 || d0 == 0.0D)
                        {
                            entity = entity1;
                            d0 = d1;
                        }
                    }
                }
            }

            if (entity != null)
            {
                movingobjectposition = new MovingObjectPosition(entity);
            }

            if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer)
            {
                EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit;

                if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))
                {
                    movingobjectposition = null;
                }
            }

            float f2;
            float f3;
            float f4;

            if (movingobjectposition != null)
            {
                if (movingobjectposition.entityHit != null)
                {
                    f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                    int k = MathHelper.ceiling_double_int((double)f2 * this.damage);

                    if (this.getIsCritical())
                    {
                        k += this.rand.nextInt(k / 2 + 2);
                    }

                    DamageSource damagesource;

                    if (this.shootingEntity == null)
                    {
                        damagesource = DamageSource.causeThrownDamage(this, this);
                    }
                    else
                    {
                        damagesource = DamageSource.causeThrownDamage(this, this.shootingEntity);
                    }

                    if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman))
                    {
                        movingobjectposition.entityHit.setFire(5);
                    }

                    if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k))
                    {
                        if (movingobjectposition.entityHit instanceof EntityLivingBase)
                        {
                            EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit;

                            if (!this.worldObj.isRemote)
                            {
                                entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1);
                            }

                            if (this.knockbackStrength > 0)
                            {
                                f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

                                if (f4 > 0.0F)
                                {
                                    movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4);
                                }
                            }

                            if (this.shootingEntity instanceof EntityLivingBase)
                            {
                            	//1.8.9 .func_151384_a changed to apply Thorn Enchants
                                EnchantmentHelper.applyThornEnchantments(entitylivingbase, this.shootingEntity);
                                EnchantmentHelper.applyArthropodEnchantments((EntityLivingBase)this.shootingEntity, entitylivingbase);
                            }

                            if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP)
                            {
                                ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));
                            }
                        }

                        this.playSound("glistremod:ender_blaster", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                        
//creates explosion on entity hit
                        
                        this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius, true);
//next line possibly lower sound volume /raise pitch of explosion?
//                       this.playSound("random.explosion1", 2.1F, 4.2F);
                        this.setDead();

                        //sets fire to entity hit                       
                       movingobjectposition.entityHit.setFire(10);

                        if (!(movingobjectposition.entityHit instanceof EntityEnderman))
                        {
                            this.setDead();
                        }
                    }
                    else
                    {
                        this.motionX *= -0.10000000149011612D;
                        this.motionY *= -0.10000000149011612D;
                        this.motionZ *= -0.10000000149011612D;
                        this.rotationYaw += 180.0F;
                        this.prevRotationYaw += 180.0F;
                        this.ticksInAir = 0;
                    }
                }
                else
                {
                    BlockPos blockpos1 = movingobjectposition.getBlockPos();
                    this.xTile = blockpos1.getX();
                    this.yTile = blockpos1.getY();
                    this.zTile = blockpos1.getZ();
                    iblockstate = this.worldObj.getBlockState(blockpos1);
                    this.inTile = iblockstate.getBlock();
                    this.inData = this.inTile.getMetaFromState(iblockstate);
                    this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX));
                    this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY));
                    this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ));
                    f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                    this.posX -= this.motionX / (double)f3 * 0.05000000074505806D;
                    this.posY -= this.motionY / (double)f3 * 0.05000000074505806D;
                    this.posZ -= this.motionZ / (double)f3 * 0.05000000074505806D;
                    //this is the sound when it hits a target
                    this.playSound("glistremod:ender_blaster", 1.0F, 2.0F / (this.rand.nextFloat() * 0.2F + 0.9F));                    this.inGround = true;
                    this.arrowShake = 7;
                    this.setIsCritical(false);

                    if (this.inTile.getMaterial() != Material.air)
                    {
                        this.inTile.onEntityCollidedWithBlock(this.worldObj, blockpos1, iblockstate, this);
                    }
                }
            }

            if (this.getIsCritical())
            {
                for (i = 0; i < 4; ++i)
                {
                   	//change from "crit" (arrow smoke) to ""  to remove particle effect or magicCrit (blue), witchMagic (heavy purple)  or smoke or bubble or fireworksSpark (white X's)
           //         this.worldObj.spawnParticle(EnumParticleTypes.SPELL_WITCH, this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ, new int[0]);
          
//               	this.worldObj.spawnParticle(EnumParticleTypes.CRIT, this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ, new int[0]);

                }
            }

            this.posX += this.motionX;
            this.posY += this.motionY;
            this.posZ += this.motionZ;
            f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
            this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);

            for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)
            {
                ;
            }

            while (this.rotationPitch - this.prevRotationPitch >= 180.0F)
            {
                this.prevRotationPitch += 360.0F;
            }

            while (this.rotationYaw - this.prevRotationYaw < -180.0F)
            {
                this.prevRotationYaw -= 360.0F;
            }

            while (this.rotationYaw - this.prevRotationYaw >= 180.0F)
            {
                this.prevRotationYaw += 360.0F;
            }

            this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
            this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
            f3 = 0.99F;
            f1 = 0.05F;

            if (this.isInWater())
            {
                for (int l = 0; l < 4; ++l)
                {
                    f4 = 0.25F;
                    this.worldObj.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ, new int[0]);
                }

                f3 = 0.6F;
            }

            if (this.isWet())
            {
                this.extinguish();
            }

            this.motionX *= (double)f3;
            this.motionY *= (double)f3;
            this.motionZ *= (double)f3;
            this.motionY -= (double)f1;
            this.setPosition(this.posX, this.posY, this.posZ);
            this.doBlockCollisions();
        }
    }


    /**
     * (abstract) Protected helper method to write subclass entity data to NBT.
     */
    public void writeEntityToNBT(NBTTagCompound p_70014_1_)
    {
        p_70014_1_.setShort("xTile", (short)this.xTile);
        p_70014_1_.setShort("yTile", (short)this.yTile);
        p_70014_1_.setShort("zTile", (short)this.zTile);
        p_70014_1_.setShort("life", (short)this.ticksInGround);
        p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.inTile));
        p_70014_1_.setByte("inData", (byte)this.inData);
        p_70014_1_.setByte("shake", (byte)this.arrowShake);
        p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0));
        p_70014_1_.setByte("pickup", (byte)this.canBePickedUp);
        p_70014_1_.setDouble("damage", this.damage);
    }

    /**
     * (abstract) Protected helper method to read subclass entity data from NBT.
     */
    public void readEntityFromNBT(NBTTagCompound p_70037_1_)
    {
        this.xTile = p_70037_1_.getShort("xTile");
        this.yTile = p_70037_1_.getShort("yTile");
        this.zTile = p_70037_1_.getShort("zTile");
        this.ticksInGround = p_70037_1_.getShort("life");
        this.inTile = Block.getBlockById(p_70037_1_.getByte("inTile") & 255);
        this.inData = p_70037_1_.getByte("inData") & 255;
        this.arrowShake = p_70037_1_.getByte("shake") & 255;
        this.inGround = p_70037_1_.getByte("inGround") == 1;

        if (p_70037_1_.hasKey("damage", 99))
        {
            this.damage = p_70037_1_.getDouble("damage");
        }

        if (p_70037_1_.hasKey("pickup", 99))
        {
            this.canBePickedUp = p_70037_1_.getByte("pickup");
        }
        else if (p_70037_1_.hasKey("player", 99))
        {
            this.canBePickedUp = p_70037_1_.getBoolean("player") ? 1 : 0;
        }
    }

    /**
     * Called by a player entity when they collide with an entity
     */
    public void onCollideWithPlayer(EntityPlayer p_70100_1_)
    {
    	// removed !this.worldObj.isRemote &&
        if ( this.inGround && this.arrowShake <= 0)
        {
            boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;

            if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(GlistreEntityRegistry.blaster_bolt_1, 1)))
            {
                flag = false;
            }

            if (flag)
            {
                this.playSound("glistremod:ender_blaster", 1.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                p_70100_1_.onItemPickup(this, 1);
                this.setDead();
            }
        }
    }

    /**
     * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
     * prevent them from trampling crops
     */
    protected boolean canTriggerWalking()
    {
        return false;
    }

    @SideOnly(Side.CLIENT)
    public float getShadowSize()
    {
        return 0.0F;
    }

    public void setDamage(double p_70239_1_)
    {
        this.damage = p_70239_1_;
    }

    public double getDamage()
    {
        return this.damage;
    }

    /**
     * Sets the amount of knockback the arrow applies when it hits a mob.
     */
    public void setKnockbackStrength(int p_70240_1_)
    {
        this.knockbackStrength = p_70240_1_;
    }

    /**
     * If returns false, the item will not inflict any damage against entities.
     */
    public boolean canAttackWithItem()
    {
        return false;
    }
    
    /**
     * Whether the arrow has a stream of critical hit particles flying behind it.
     */
    public void setIsCritical(boolean p_70243_1_)
    {
        byte b0 = this.dataWatcher.getWatchableObjectByte(16);

        if (p_70243_1_)
        {
            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));
        }
        else
        {
            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));
        }
    }


    /**
     * Whether the arrow has a stream of critical hit particles flying behind it.
     */
    public boolean getIsCritical()
    {
        byte b0 = this.dataWatcher.getWatchableObjectByte(16);
        return (b0 & 1) != 0;
    }
  
    //next is 1.11
/*	@Override
public ItemStack getArrowStack() {
	return new ItemStack(GlistreEntityRegistry.blaster_bolt_1);
}*/
//    @Override
    /**
     * Called by the server when constructing the spawn packet.
     * Data should be added to the provided stream.
     *
     * @param buffer The packet data stream
     */
/*    public void writeSpawnData(ByteBuf buffer) {
    	
    	buffer.writeInt(shootingEntity  != null ? shootingEntity.getEntityId() : -1);
    	
    }

    @Override
    public void readSpawnData (ByteBuf buffer) {
    	//Replicate EntityArrow's special spawn packet handling from NetHandlerPlayClient#handleSpawnObject:
    	Entity shooter = worldObj.getEntityByID(buffer.readInt());
    		if (shooter instanceof EntityLivingBase)
    		{
    			shootingEntity = (EntityLivingBase)
    					shooter;
    		}
    }*/

}

 

RendreBlast (my renderer):

package com.glistre.glistremod.projectiles.blaster;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderArrow;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.entity.Entity;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

import net.minecraftforge.fml.relauncher.SideOnly;

import com.glistre.glistremod.GlistreMod;
import com.glistre.glistremod.init.GlistreEntityRegistry;
import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;
import com.glistre.glistremod.reference.Reference;

/*//, Item item, RenderItem renderItem)
    public RendreBlast(RenderManager renderManager) {
	//super(Minecraft.getMinecraft().getRenderManager());
	super(renderManager);*/
@SideOnly(Side.CLIENT)
public class RendreBlast extends Render<EntityBlasterBolt>
{

	public RendreBlast(RenderManager renderManagerIn) {
	super(renderManagerIn);

}

	public static final ResourceLocation blastTextures = new ResourceLocation(Reference.MOD_ID + ":" + "textures/entities/blaster_bolt_1.png");


//		}

	protected ResourceLocation getEntityTexture(EntityBlasterBolt entity) {
		return blastTextures;
	}

//	private static final ResourceLocation blastTextures = new ResourceLocation(Reference.MOD_ID + ":" + "textures/entities/ender_bolt_1.png");


public void doRender(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, Float partialTicks)
    {
//        this.loadTexture("/GlistreMod/blast.png");
    	this.bindEntityTexture(par1EntityBlasterBolt);
	this.renderManager.renderEngine.bindTexture(blastTextures);
        GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);//added from arrow might make it white
        GlStateManager.pushMatrix();
        GlStateManager.translate((float)x, (float)y, (float)z);
        GlStateManager.rotate(par1EntityBlasterBolt.prevRotationYaw + (par1EntityBlasterBolt.rotationYaw - par1EntityBlasterBolt.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F);
        GlStateManager.rotate(par1EntityBlasterBolt.prevRotationPitch + (par1EntityBlasterBolt.rotationPitch - par1EntityBlasterBolt.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F);
        Tessellator tessellator = Tessellator.getInstance();
//        Minecraft.getMinecraft().getRenderItem().renderItem(GlistreEntityRegistry.blaster_bolt_1), ItemCameraTransforms.TransformType.GROUND);

        //1.8 update added WorldRenderer and change var10 to worldrenderer
        WorldRenderer worldrenderer = tessellator.getWorldRenderer();
        int i = 0;
        float var12 = 0.0F;
        float var13 = 0.5F;
        float var14 = (float)(0 + i * 10) / 32.0F;
        float var15 = (float)(5 + i * 10) / 32.0F;
        float var16 = 0.0F;
        float var17 = 0.15625F;
        float var18 = (float)(5 + i * 10) / 32.0F;
        float var19 = (float)(10 + i * 10) / 32.0F;
        float var20 = 0.05625F;
     // GL11.glEnable(GL12.GL_RESCALE_NORMAL); changed to below
        GlStateManager.enableRescaleNormal();

//        GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
//       GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
   

        float var21 = (float)par1EntityBlasterBolt.arrowShake - partialTicks;

        if (var21 > 0.0F)
        {
            float var22 = -MathHelper.sin(var21 * 3.0F) * var21;
       //     GL11.glRotatef(var22, 0.0F, 0.0F, 1.0F); //changed to below
          GlStateManager.rotate(var22, 0.0F, 0.0F, 1.0F);

        }

        GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);
        GlStateManager.scale(var20, var20, var20);
        GlStateManager.translate(-4.0F, 0.0F, 0.0F);
        GL11.glNormal3f(var20, 0.0F, 0.0F);
        worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
        worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var18);
        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var18);
        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19);
        worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var19);
        tessellator.draw();
        GL11.glNormal3f(-var20, 0.0F, 0.0F);
        worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
        worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var18);
        worldrenderer.pos(-7.0D, 2.0D, 2.0D).tex((double)var17, (double)var18);
        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19);
        worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var19);
        tessellator.draw();

        for (int var23 = 0; var23 < 4; ++var23)
        {
        	GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
            GL11.glNormal3f(0.0F, 0.0F, var20);
            worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
            worldrenderer.pos(-8.0D, -2.0D, 0.0D).tex((double)var12, (double)var14);
            worldrenderer.pos(8.0D, -2.0D, 0.0D).tex((double)var13, (double)var14);
            worldrenderer.pos(8.0D, 2.0D, 0.0D).tex((double)var13, (double)var15);
            worldrenderer.pos(-8.0D, 2.0D, 0.0D).tex((double)var12, (double)var15);
            tessellator.draw();
        }

        GlStateManager.disableRescaleNormal();
        GlStateManager.popMatrix();
        super.doRender(par1EntityBlasterBolt, x, y, z, entityYaw, partialTicks);


    }
}

    /**
     * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
     * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
     * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
     * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
     */
/*	@Override
    public void doRender(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, float partialTicks)
    {
//	entity.getRender(renderManager).doRender(entity.otherEntity, x, y, z, entityYaw, partialTicks); 
//       super.doRender(par1EntityBlasterBolt, x, y, z, entityYaw, partialTicks);

//       this.doRender((EntityBlasterBolt)par1Entity, par2, par4, par6, par8, par9);
          this.doRender((EntityBlasterBolt)par1EntityBlasterBolt, x, x, z, entityYaw, partialTicks);
    }*/

/*   @Override
    protected boolean bindEntityTexture(Entity entity)
    {
        ResourceLocation resourcelocation = this.getEntityTexture(entity);

        if (resourcelocation == null)
        {
            return false;
        }
        else
        {
            this.bindTexture(resourcelocation);
            return true;
        }
    }
    @Override
    public void bindTexture(ResourceLocation location)
    {
        this.renderManager.renderEngine.bindTexture(location);
    }*/

/*	@Override
public ResourceLocation getEntityTexture(EntityBlasterBolt entity) {

	return blastTextures;
}


}*/

Posted

public void doRender(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, Float partialTicks)

Why do you have this method here? It is never called. Why not? Because it does not actually override anything from it's superclass.

Please, for the love of all things holy, use @Override if you intend to override. If it produces an error, fix the error, do not just remove @Override, otherwise you are just putting your hands over your eyes and singing that the monster isn't there.

 

Yes that was wrong.  I replaced "Float" with "float." 

 

Still same problem ...arrow is invisible

Posted

Here is my render class for "Fire Orb" it may help, from 1.11 though:

 

package guru.tbe.entity.render;

import guru.tbe.entity.EntityFireOrb;
import guru.tbe.entity.model.ModelFireOrb;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class RenderOrbFire extends Render
{
    protected ModelFireOrb model;
    public RenderOrbFire(RenderManager renderManager)
    {
        super(renderManager);
        this.model = new ModelFireOrb();
    }
    public void doRender(EntityFireOrb entity, double x, double y, double z, float f, float partialTicks)
    {
        GlStateManager.pushMatrix();
        this.bindEntityTexture(entity);
        GlStateManager.translate(x, y - 0.4734, z);
        GlStateManager.rotate(entity.rotationYaw, 1, 80, 1);
        if(model.shouldBeTransparent())
        {
            GlStateManager.enableNormalize();
            GlStateManager.enableBlend();
            GlStateManager.blendFunc(770, 771);
            model.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
            GlStateManager.disableBlend();
            GlStateManager.disableNormalize();
        }
        else
            model.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
        GlStateManager.popMatrix();
        super.doRender(entity, x, y, z, f, partialTicks);
    }
    protected ResourceLocation getTexture(EntityFireOrb entity)
    {
        return model.getTexture();
    }
    protected ResourceLocation getEntityTexture(Entity entity)
    {
        return this.getTexture((EntityFireOrb)entity);
    }
    public void doRender(Entity entity, double x, double y, double z, float f, float partialTicks)
    {
        this.doRender((EntityFireOrb)entity, x, y, z, f, partialTicks);
    }
}

Posted

Thank you  . . .I am not really sure what #doRender method is doing and you are not overriding it?  I will keep trying. . .maybe I am not registering renders properly

 

Posted

So you have @Override on your doRender method now and it does not produce an error? In any case, please post updated code.

Yes

 

Edited:  This is the state of my code currently ... I keep moving things around.  When I have the rendering in the Init event either in Client Proxy or the main mod file, I get a white cube.  But when I put rendering where it should be, that is, as I understand from reading some other posts,  #registerEntityRenderingHandler should be in preInit event . . .and it is invisible

 

 

package com.glistre.glistremod.projectiles.blaster;

 

import net.minecraft.client.Minecraft;

import net.minecraft.client.renderer.GlStateManager;

import net.minecraft.client.renderer.Tessellator;

import net.minecraft.client.renderer.WorldRenderer;

import net.minecraft.client.renderer.block.model.ItemCameraTransforms;

import net.minecraft.client.renderer.entity.Render;

import net.minecraft.client.renderer.entity.RenderArrow;

import net.minecraft.client.renderer.entity.RenderItem;

import net.minecraft.client.renderer.entity.RenderManager;

import net.minecraftforge.fml.client.registry.IRenderFactory;

import net.minecraft.client.renderer.vertex.DefaultVertexFormats;

import net.minecraft.entity.Entity;

import net.minecraft.entity.projectile.EntityArrow;

import net.minecraft.init.Items;

import net.minecraft.item.Item;

import net.minecraft.item.ItemStack;

import net.minecraft.util.MathHelper;

import net.minecraft.util.ResourceLocation;

import net.minecraftforge.fml.relauncher.Side;

 

import org.lwjgl.opengl.GL11;

import org.lwjgl.opengl.GL12;

 

import net.minecraftforge.fml.relauncher.SideOnly;

 

import com.glistre.glistremod.GlistreMod;

import com.glistre.glistremod.init.GlistreEntityRegistry;

import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;

import com.glistre.glistremod.reference.Reference;

 

/*//, Item item, RenderItem renderItem)

    public RendreBlast(RenderManager renderManager) {

//super(Minecraft.getMinecraft().getRenderManager());

super(renderManager);*/

@SideOnly(Side.CLIENT)

public class RendreBlast extends Render<EntityBlasterBolt>

{

 

public RendreBlast(RenderManager renderManagerIn) {

super(renderManagerIn);

 

}

 

public static final ResourceLocation blastTextures = new ResourceLocation("glistremod:textures/entities/blaster_bolt_1.png");

 

 

// }

protected ResourceLocation getTexture(EntityBlasterBolt entity) {

return blastTextures;

}

 

protected ResourceLocation getEntityTexture(EntityBlasterBolt entity) {

return blastTextures;

}

 

 

@Override

public void doRender(EntityBlasterBolt entitybolt, double x, double y, double z, float entityYaw, float partialTicks)

    {

 

    this.bindEntityTexture(entitybolt);

this.bindTexture(blastTextures);

        GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);//added from arrow might make it white?

        GlStateManager.pushMatrix();

        GlStateManager.translate((float)x, (float)y, (float)z);

        GlStateManager.rotate(entitybolt.prevRotationYaw + (entitybolt.rotationYaw - entitybolt.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F);

        GlStateManager.rotate(entitybolt.prevRotationPitch + (entitybolt.rotationPitch - entitybolt.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F);

       

        Tessellator tessellator = Tessellator.getInstance();

        //        Minecraft.getMinecraft().getRenderItem().renderItem(GlistreEntityRegistry.blaster_bolt_1), ItemCameraTransforms.TransformType.GROUND);

 

        //1.8 update added WorldRenderer and change var10 to worldrenderer

        WorldRenderer worldrenderer = tessellator.getWorldRenderer();

        int i = 0;

        float var12 = 0.0F;

        float var13 = 0.5F;

        float var14 = (float)(0 + i * 10) / 32.0F;

        float var15 = (float)(5 + i * 10) / 32.0F;

        float var16 = 0.0F;

        float var17 = 0.15625F;

        float var18 = (float)(5 + i * 10) / 32.0F;

        float var19 = (float)(10 + i * 10) / 32.0F;

        float var20 = 0.05625F;

    // GL11.glEnable(GL12.GL_RESCALE_NORMAL); changed to below

        GlStateManager.enableRescaleNormal();

 

//        GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);

//      GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);

 

 

        float var21 = (float)entitybolt.arrowShake - partialTicks;

 

        if (var21 > 0.0F)

        {

            float var22 = -MathHelper.sin(var21 * 3.0F) * var21;

      //    GL11.glRotatef(var22, 0.0F, 0.0F, 1.0F); //changed to below

          GlStateManager.rotate(var22, 0.0F, 0.0F, 1.0F);

 

        }

 

        GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);

        GlStateManager.scale(var20, var20, var20);

        GlStateManager.translate(-4.0F, 0.0F, 0.0F);

        GL11.glNormal3f(var20, 0.0F, 0.0F);

        worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);

        worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var18);

        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var18);

        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19);

        worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var19);

        tessellator.draw();

        GL11.glNormal3f(-var20, 0.0F, 0.0F);

        worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);

        worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var18);

        worldrenderer.pos(-7.0D, 2.0D, 2.0D).tex((double)var17, (double)var18);

        worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19);

        worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var19);

        tessellator.draw();

 

        for (int var23 = 0; var23 < 4; ++var23)

        {

        GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);

            GL11.glNormal3f(0.0F, 0.0F, var20);

            worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);

            worldrenderer.pos(-8.0D, -2.0D, 0.0D).tex((double)var12, (double)var14);

            worldrenderer.pos(8.0D, -2.0D, 0.0D).tex((double)var13, (double)var14);

            worldrenderer.pos(8.0D, 2.0D, 0.0D).tex((double)var13, (double)var15);

            worldrenderer.pos(-8.0D, 2.0D, 0.0D).tex((double)var12, (double)var15);

            tessellator.draw();

        }

 

        GlStateManager.disableRescaleNormal();

        GlStateManager.popMatrix();

        super.doRender(entitybolt, x, y, z, entityYaw, partialTicks);

     

 

    }

 

//was in 1.8 removed in 1.8.9

    /**

    * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then

    * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic

    * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,

    * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.

    */

/* @Override

    public void doRender(Entity par1EntityBlasterBolt, double x, double y, double z, float entityYaw, float partialTicks)

    {

// entity.getRender(renderManager).doRender(entity.otherEntity, x, y, z, entityYaw, partialTicks);

//      super.doRender(par1EntityBlasterBolt, x, y, z, entityYaw, partialTicks);

 

//      this.doRender((EntityBlasterBolt)par1Entity, par2, par4, par6, par8, par9);

          this.doRender((EntityBlasterBolt)par1EntityBlasterBolt, x, x, z, entityYaw, partialTicks);

    }*/

 

}

 

 

 

Client Proxy:

 

package com.glistre.glistremod.proxies;

 

import java.awt.Color;

 

import net.minecraft.block.Block;

import net.minecraft.block.state.IBlockState;

import net.minecraft.client.Minecraft;

import net.minecraft.client.particle.EntityFX;

import net.minecraft.client.renderer.block.statemap.StateMapperBase;

import net.minecraft.client.renderer.entity.Render;

import net.minecraft.client.renderer.entity.RenderManager;

import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer;

import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;

import net.minecraft.client.resources.model.ModelBakery;

import net.minecraft.client.resources.model.ModelResourceLocation;

import net.minecraft.entity.Entity;

import net.minecraft.entity.EntityList;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.item.Item;

import net.minecraftforge.client.MinecraftForgeClient;

import net.minecraftforge.client.model.ModelLoader;

import net.minecraftforge.common.util.Constants;

import net.minecraftforge.fluids.IFluidBlock;

import net.minecraftforge.fml.client.registry.ClientRegistry;

import net.minecraftforge.fml.client.registry.IRenderFactory;

import net.minecraftforge.fml.client.registry.RenderingRegistry;

 

import com.glistre.glistremod.GlistreMod;

import com.glistre.glistremod.blocks.fluids.ModFluids;

import com.glistre.glistremod.effects.EntityPortalFreonFX;

import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile;

import com.glistre.glistremod.effects.potions.splash.RenderSplashPotion;

import com.glistre.glistremod.entities.*;

import com.glistre.glistremod.entities.blacktobie.BlackModelTobo;

import com.glistre.glistremod.entities.blacktobie.BlackRenderTobo;

import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo;

import com.glistre.glistremod.entities.guardian.EntityTobieSkel;

import com.glistre.glistremod.entities.guardian.TobieModelGuardian;

import com.glistre.glistremod.entities.guardian.TobieSkelRender;

import com.glistre.glistremod.entities.king.EntityTobieKing;

import com.glistre.glistremod.entities.king.TobieKingRender;

import com.glistre.glistremod.entities.king.TobieModelKing;

import com.glistre.glistremod.entities.queen.EntityTobieQueen;

import com.glistre.glistremod.entities.queen.TobieModelQueen;

import com.glistre.glistremod.entities.queen.TobieQueenRender;

import com.glistre.glistremod.entities.wolf.BlackModelWolf;

import com.glistre.glistremod.entities.wolf.BlackRenderWolf;

import com.glistre.glistremod.entities.wolf.EntityBlackWolf;

import com.glistre.glistremod.entities.wolf.EntityGlistreWolf;

import com.glistre.glistremod.entities.wolf.GlistreModelWolf;

import com.glistre.glistremod.entities.wolf.GlistreRenderWolf;

import com.glistre.glistremod.init.BlockRegistry;

import com.glistre.glistremod.init.GMTileEntityRegistry;

import com.glistre.glistremod.init.GlistreEntityRegistry;

import com.glistre.glistremod.init.ItemRegistry;

import com.glistre.glistremod.init.Recipes;

//import com.glistre.glistremod.items.bow.BusterBowRenderer;

import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;

import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball;

import com.glistre.glistremod.projectiles.blaster.EntitySceptreBolt;

import com.glistre.glistremod.projectiles.blaster.RendreBlast;

import com.glistre.glistremod.projectiles.blaster.RendreBlast2;

import com.glistre.glistremod.projectiles.blaster.RendreBlast3;

//import com.glistre.glistremod.projectiles.blaster.RendreGlistreFactory;

import com.glistre.glistremod.projectiles.tobyworstsword.MessageExtendedReachAttack;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyRenderProjectile;

import com.glistre.glistremod.reference.Reference;

import com.glistre.glistremod.render.GlistreChestGoldInventoryRenderer;

import com.glistre.glistremod.render.GlistreChestInventoryRenderer;

import com.glistre.glistremod.render.GlistreChestRenderer;

import com.glistre.glistremod.render.GlistreGoldChestRenderer;

import com.glistre.glistremod.tabs.TabRegistry;

import com.glistre.glistremod.tileentity.TileEntityGlistreChest;

import com.glistre.glistremod.tileentity.TileEntityGlistreChestGold;

import com.glistre.glistremod.util.GlistreModelManager;

 

import net.minecraftforge.fml.common.SidedProxy;

import net.minecraftforge.fml.common.network.NetworkRegistry;

import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;

import net.minecraftforge.fml.common.registry.EntityRegistry;

import net.minecraftforge.fml.relauncher.Side;

 

 

 

public class ClientProxy extends CommonProxy {

 

@Override

public void preInit() {

 

registerSimpleNetworking();

GlistreModelManager.INSTANCE.registerAllModels();

ItemRegistry.registerRenders();

BlockRegistry.registerRenders();

TabRegistry.registerRenders();

GlistreEntityRegistry.register();//this should be here in preInit for items to render

GlistreEntityRegistry.registerRenders();//this should be here in preInit for items to render

 

 

// RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, new IRenderFactory<EntityBlasterBolt>(){

//      can use Render...::new if there is a single argument of RenderManager in Render constructor

//      RenderingRegistry.registerEntityRenderingHandler must be called in preInit.

 

 

RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, RendreBlast::new);

 

/*@Override

public Render<? super EntityBlasterBolt> createRenderFor(RenderManager manager){

 

return new RendreBlast(manager, GlistreEntityRegistry.blaster_bolt_1, Minecraft.getMinecraft().getRenderItem());

 

}});*/

 

RenderingRegistry.registerEntityRenderingHandler(EntityEnderBoltFireball.class, new IRenderFactory<EntityEnderBoltFireball>(){

@Override

public Render<? super EntityEnderBoltFireball> createRenderFor(RenderManager manager){

 

return new RendreBlast2(manager, GlistreEntityRegistry.ender_bolt_1, Minecraft.getMinecraft().getRenderItem());

 

}});   

     

RenderingRegistry.registerEntityRenderingHandler(EntitySceptreBolt.class, new IRenderFactory<EntitySceptreBolt>(){

@Override

public Render<? super EntitySceptreBolt> createRenderFor(RenderManager manager){

return new RendreBlast3(manager, GlistreEntityRegistry.sceptre_bolt_1, Minecraft.getMinecraft().getRenderItem());

 

}});

RenderingRegistry.registerEntityRenderingHandler(EntitySplashProjectile.class, new IRenderFactory<EntitySplashProjectile>(){

@Override

public Render<? super EntitySplashProjectile> createRenderFor(RenderManager manager){

 

return new RenderSplashPotion(manager, GlistreEntityRegistry.splash_poison_protection, Minecraft.getMinecraft().getRenderItem());

 

}});

 

RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, new IRenderFactory<TobyEntityProjectile>(){

@Override

public Render<? super TobyEntityProjectile> createRenderFor(RenderManager manager){

 

return new TobyRenderProjectile(manager, GlistreEntityRegistry.tobie_worst_projectile_1, Minecraft.getMinecraft().getRenderItem());

 

      }});

       

    RenderingRegistry.registerEntityRenderingHandler(EntityGlistreWolf.class, new IRenderFactory<EntityGlistreWolf>(){

@Override

public Render<? super EntityGlistreWolf> createRenderFor(RenderManager manager){

 

return new GlistreRenderWolf(manager, new GlistreModelWolf(), 0.3F);

 

    }});    

    RenderingRegistry.registerEntityRenderingHandler(EntityBlackWolf.class, new IRenderFactory<EntityBlackWolf>(){

@Override

public Render<? super EntityBlackWolf> createRenderFor(RenderManager manager){

 

return new BlackRenderWolf(manager, new BlackModelWolf(), 0.3F);

 

    }});

    RenderingRegistry.registerEntityRenderingHandler(EntityBlackTobo.class, new IRenderFactory<EntityBlackTobo>(){

@Override

public Render<? super EntityBlackTobo> createRenderFor(RenderManager manager){

 

return new BlackRenderTobo(manager, new BlackModelTobo(), 0.7F);

 

    }});

    RenderingRegistry.registerEntityRenderingHandler(EntityTobieSkel.class, new IRenderFactory<EntityTobieSkel>(){

@Override

public Render<? super EntityTobieSkel> createRenderFor(RenderManager manager){

 

return new TobieSkelRender(manager, new TobieModelGuardian(), 0.5F);

 

    }});

    RenderingRegistry.registerEntityRenderingHandler(EntityTobieQueen.class, new IRenderFactory<EntityTobieQueen>(){

@Override

public Render<? super EntityTobieQueen> createRenderFor(RenderManager manager){

 

return new TobieQueenRender(manager, new TobieModelQueen(), 0.5F);

 

    }});

    RenderingRegistry.registerEntityRenderingHandler(EntityTobieKing.class, new IRenderFactory<EntityTobieKing>(){

@Override

public Render<? super EntityTobieKing> createRenderFor(RenderManager manager){

 

return new TobieKingRender(manager, new TobieModelKing(), 0.5F);

 

    }});

 

    RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, RendreBlast::new);

 

}

 

@Override

public void init(){

// this.registerRenders();

//RenderingRegistry.registerEntityRenderingHandler must be called in preInit.

 

/* RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, new IRenderFactory<EntityBlasterBolt>(){

    @Override

public Render<? super EntityBlasterBolt>createRenderFor(RenderManager manager) {

return new RendreBlast(manager);

}});*/

}

 

    /*

* Thanks to jabelar copied from his tutorial

*/

/**

* Registers the simple networking channel and messages for both sides

*/

protected void registerSimpleNetworking()

{

// DEBUG

System.out.println("registering simple networking");

GlistreMod.network = NetworkRegistry.INSTANCE.newSimpleChannel(GlistreMod.NETWORK_CHANNEL_NAME);

 

int packetId = 0;

// register messages from client to server

        GlistreMod.network.registerMessage(MessageExtendedReachAttack.Handler.class, MessageExtendedReachAttack.class, packetId++, Side.SERVER);

}

 

    @Override

    public EntityPlayer getPlayerEntityFromContext(MessageContext ctx)

    {

        // Note that if you simply return 'Minecraft.getMinecraft().thePlayer',

        // your packets will not work because you will be getting a client

        // player even when you are on the server! Sounds absurd, but it's true.

 

        // Solution is to double-check side before returning the player:

  //  return (ctx.side.isClient() ? Minecraft.getMinecraft().thePlayer : ctx.getServerHandler().playerEntity);

 

      return (ctx.side.isClient() ? Minecraft.getMinecraft().thePlayer : super.getPlayerEntityFromContext(ctx));

    }

 

 

@Override

public void registerRenders(){

 

//    RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, RendreGlistreFactory.FACTORY);

   

    GlistreChestRenderer gcr = new GlistreChestRenderer(Minecraft.getMinecraft().getRenderManager());

    ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGlistreChest.class, gcr);    

    GlistreGoldChestRenderer gcrg = new GlistreGoldChestRenderer(Minecraft.getMinecraft().getRenderManager());

    ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGlistreChestGold.class, gcrg);

    TileEntityItemStackRenderer.instance = new GlistreChestInventoryRenderer();

    TileEntityItemStackRenderer.instance = new GlistreChestGoldInventoryRenderer();

 

}

 

 

@Override

public void addParticleEffect(EntityFX particle) {

double motionX = particle.worldObj.rand.nextGaussian() * 0.02D;

    double motionY = particle.worldObj.rand.nextGaussian() * 0.02D;

    double motionZ = particle.worldObj.rand.nextGaussian() * 0.02D;

    EntityFX particleMysterious = new EntityPortalFreonFX(

          particle.worldObj,

          particle.posX + particle.worldObj.rand.nextFloat() * particle.width

                * 2.0F - particle.width,

          particle.posY + 0.5D + particle.worldObj.rand.nextFloat()

                * particle.height,

          particle.posZ + particle.worldObj.rand.nextFloat() * particle.width

                * 2.0F - particle.width,

          motionX,

          motionY,

          motionZ);

Minecraft.getMinecraft().effectRenderer.addEffect(particle);

}

 

}

 

 

Main class:

 

package com.glistre.glistremod;

 

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

 

import org.apache.logging.log4j.Logger;

 

import com.glistre.glistremod.biome.WorldTypeFreon;

import com.glistre.glistremod.biome.WorldTypeGlistre;

import com.glistre.glistremod.blocks.fluids.ModFluids;

import com.glistre.glistremod.effects.GlistreEventHandler;

import com.glistre.glistremod.effects.GlistreModEventHooks;

import com.glistre.glistremod.effects.GlistreModTerrainGenHooks;

import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile;

import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo;

import com.glistre.glistremod.entities.guardian.EntityTobieSkel;

import com.glistre.glistremod.entities.king.EntityTobieKing;

import com.glistre.glistremod.entities.queen.EntityTobieQueen;

import com.glistre.glistremod.entities.wolf.EntityBlackWolf;

import com.glistre.glistremod.entities.wolf.EntityGlistreWolf;

import com.glistre.glistremod.init.BiomeRegistry;

import com.glistre.glistremod.init.BlockRegistry;

import com.glistre.glistremod.init.DimensionRegistry;

import com.glistre.glistremod.init.GMTileEntityRegistry;

import com.glistre.glistremod.init.GlistreEntityRegistry;

import com.glistre.glistremod.init.ItemRegistry;

import com.glistre.glistremod.init.Recipes;

import com.glistre.glistremod.items.bow.BusterBow;

import com.glistre.glistremod.lib.ConfigurationGlistre;

import com.glistre.glistremod.lib.GlistreGuiFactory;

import com.glistre.glistremod.mapgen.GlistreVillageBuildings;

import com.glistre.glistremod.mapgen.MapGenGlistreVillage;

import com.glistre.glistremod.mapgen.MapGenGlistreVillage.GlistreStart;

import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;

import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball;

import com.glistre.glistremod.projectiles.blaster.RendreBlast;

import com.glistre.glistremod.projectiles.blaster.RendreBlast2;

//import com.glistre.glistremod.projectiles.blaster.RendreGlistreFactory;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile;

import com.glistre.glistremod.lib.GlistreConfigGui;

import com.glistre.glistremod.proxies.CommonProxy;

import com.glistre.glistremod.reference.Reference;

import com.glistre.glistremod.tabs.TabRegistry;

import com.glistre.glistremod.util.GlistreModelManager;

import com.glistre.glistremod.worldgen.WorldGen;

 

import net.minecraftforge.fml.client.event.ConfigChangedEvent;

import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent;

import net.minecraftforge.fml.client.registry.IRenderFactory;

import net.minecraftforge.fml.client.registry.RenderingRegistry;

import net.minecraftforge.fml.common.FMLCommonHandler;

import net.minecraftforge.fml.common.FMLLog;

import net.minecraftforge.fml.common.Mod;

import net.minecraftforge.fml.common.Mod.EventHandler;

import net.minecraftforge.fml.common.SidedProxy;

import net.minecraftforge.fml.common.event.FMLInitializationEvent;

import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;

import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

import net.minecraftforge.fml.common.network.FMLEventChannel;

import net.minecraft.client.renderer.block.statemap.IStateMapper;

import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;

import net.minecraftforge.fml.common.registry.EntityRegistry;

import net.minecraftforge.fml.common.registry.GameRegistry;

import net.minecraftforge.fml.common.registry.LanguageRegistry;

import net.minecraftforge.fml.relauncher.Side;

import net.minecraft.client.Minecraft;

import net.minecraft.client.renderer.ItemMeshDefinition;

import net.minecraft.client.renderer.entity.Render;

import net.minecraft.client.renderer.entity.RenderItem;

import net.minecraft.client.renderer.entity.RenderManager;

import net.minecraft.client.resources.model.ModelResourceLocation;

import net.minecraft.entity.EnumCreatureType;

import net.minecraft.init.Items;

import net.minecraft.item.Item;

import net.minecraft.item.Item.ToolMaterial;

import net.minecraft.item.ItemStack;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.nbt.NBTTagList;

import net.minecraft.nbt.NBTTagString;

import net.minecraft.potion.Potion;

import net.minecraft.stats.Achievement;

import net.minecraft.util.ResourceLocation;

import net.minecraft.util.WeightedRandomChestContent;

import net.minecraft.world.WorldType;

import net.minecraft.world.biome.BiomeGenBase;

import net.minecraft.world.gen.structure.MapGenStructureIO;

import net.minecraft.world.gen.structure.StructureVillagePieces;

import net.minecraftforge.common.AchievementPage;

import net.minecraftforge.common.ChestGenHooks;

import net.minecraftforge.common.MinecraftForge;

import net.minecraftforge.common.config.Configuration;

import net.minecraftforge.common.util.EnumHelper;

import net.minecraftforge.fluids.Fluid;

import net.minecraftforge.fluids.FluidRegistry;

//import sun.rmi.runtime.Log;

 

 

/* MOD INFO */

@Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION, guiFactory = Reference.GUI_FACTORY, canBeDeactivated = true)

//, dependencies = "required-after:Mystcraft"

 

public class GlistreMod {

 

/* PROXY INFO */

@SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)

public static CommonProxy proxy;

 

public static Configuration config;

 

@Mod.Instance(Reference.MOD_ID)

public static GlistreMod instance;

 

public static Logger log = FMLLog.getLogger();

// use a named channel to identify packets related to this mod

public static final String NETWORK_CHANNEL_NAME = "GlistreMod"; // put the name of your mod here 

//or create field public static String NETWORK_CHANNEL_NAME;

 

public static FMLEventChannel channel;

// networking

public static SimpleNetworkWrapper network;

public static int modEntityID = 0;

 

 

/**

* DECLARATION SECTION

* *********************************************************** */

 

// DECLARE TOOL MATERIAL

/**name, harvestLevel, maxUses, efficiency, damage, enchantability*/

public static ToolMaterial Silvers=EnumHelper.addToolMaterial("Silvers", 4, 1520, 1.0F, 6, 16);

public static ToolMaterial Glistres=EnumHelper.addToolMaterial("Glistres", 4, 2020, 1.0F, 7, 16);

public static ToolMaterial Sparks=EnumHelper.addToolMaterial("Sparks", 4, 3020, 1.0F, 8, 16);

             

 

// DECLARE THE NEW ACHIEVEMENTS

      public static Achievement blockAchievement_1;

      public static Achievement mobKillAchievement_1;

 

 

@EventHandler

public void preInit(FMLPreInitializationEvent event) {

 

config = new Configuration(event.getSuggestedConfigurationFile());

 

ConfigurationGlistre.syncConfig();

 

 

/**

* LOAD SECTION

* *********************************************************** */

//Blocks, Items and other IForgeRegistryEntry implementations

//should be registered in preInit. The same goes for entities.

BlockRegistry.init();

BlockRegistry.register();

ModFluids.registerFluids();

// GlistreModelManager.registerAllModels();//already in proxy.init (ClientProxy) so don't need it here?

// ItemRegistry.GlistreMod();

//Item models should be registered in preInit from your client proxy

//(not your @Mod class, you'll crash the dedicated server) with

ItemRegistry.init();  //Are these not needed since I have public void Init in the client proxy?

ItemRegistry.register();

TabRegistry.initializeTab();

TabRegistry.registerTab();

GMTileEntityRegistry.GlistreMod();

    GlistreEntityRegistry.init();

// GlistreEntityRegistry.register();

GlistreEntityRegistry.registerEntity();

 

proxy.preInit();

proxy.registerRenders(); //can be done in any init phase but must be done AFTER items are registered

 

 

MinecraftForge.EVENT_BUS.register(new GlistreModEventHooks());

 

 

// STRUCTURES

MapGenStructureIO.registerStructure(MapGenGlistreVillage.GlistreStart.class, "Glistre_Village");

GlistreVillageBuildings.registerVillagePieces(); //put your custom village in there

// StructureVillagePieces.registerVillagePieces();

        log.info("PreInitialization Complete!");

}

 

 

@EventHandler

public static void init(FMLInitializationEvent event )

{

 

proxy.init();

 

// TabRegistry.GlistreMod();

Recipes.initShapedRecipes();

Recipes.initShapelessRecipes();

Recipes.initSmeltingRecipes();

 

 

BiomeRegistry.GlistreMod();

DimensionRegistry.GlistreMod();

WorldGen.initWorldGen();

 

// GlistreEntityRegistry.GlistreMod();

//the following is code reflection to make Potion effects work

Potion[] potionTypes = null;

for (Field f : Potion.class.getDeclaredFields()) {

f.setAccessible(true);

try {

// if (f.getName().equals("potionTypes") || f.getName().equals("field_76425_a")) {

 

if (f.getName().equals("potionTypes")) {

Field modfield = Field.class.getDeclaredField("modifiers");

modfield.setAccessible(true);

modfield.setInt(f, f.getModifiers() & ~Modifier.FINAL);

potionTypes = (Potion[])f.get(null);

final Potion[] newPotionTypes = new Potion[256];

System.arraycopy(potionTypes, 0, newPotionTypes, 0, potionTypes.length);

f.set(null, newPotionTypes);

}

}

catch (Exception e) {

System.err.println("Severe error, please report this to the mod author:");

System.err.println(e);

}

}

 

  FMLCommonHandler.instance().bus().register(instance);

  GlistreEventHandler handler = new GlistreEventHandler();

 

 

    //  REGISTER ENTITY

 

  //      EntityRegistry.addSpawn(EntityGlistreWolf.class, 20, 3, 7, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.jungle);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.jungleEdge);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.taiga);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.forest);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.roofedForest);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.savanna);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.coldTaiga);

      EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 1, EnumCreatureType.CREATURE, BiomeGenBase.swampland);

 

            EntityRegistry.addSpawn(EntityTobieSkel.class, 20, 1, 2, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre);

            EntityRegistry.addSpawn(EntityBlackTobo.class, 14, 1, 2, EnumCreatureType.CREATURE, BiomeRegistry.biomeFreon);

      EntityRegistry.addSpawn(EntityBlackTobo.class, 12, 1, 1, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre);

       

      EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.forest);

      EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.coldTaiga);

      EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.extremeHills);

         

            EntityRegistry.addSpawn(EntityBlackWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.birchForest);

      EntityRegistry.addSpawn(EntityBlackWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.forest);

  //      EntityRegistry.addSpawn(EntityBlackTobo.class, 20, 1, 3, EnumCreatureType.CREATURE, BiomeRegistry.biomeFreon);

 

 

        //1.8update changed by adding cast

        blockAchievement_1 = (Achievement) new Achievement("achievement.blockAchievement_1", "blockAchievement_1", -1, -3, BlockRegistry.silver_ore_1, (Achievement)null).registerStat();

        mobKillAchievement_1 = (Achievement) new Achievement("achievement.mobKillAchievement_1", "mobKillAchievement_1", -1, -2, ItemRegistry.ancient_book, blockAchievement_1).setSpecial().registerStat();

            AchievementPage.registerAchievementPage(new AchievementPage("GlistreMod Achievements", new Achievement[]{blockAchievement_1, mobKillAchievement_1}));

 

      FMLCommonHandler.instance().bus().register(handler);//don't really need 1.8.9 you register an instance but needed in 1.8 no idea

        MinecraftForge.EVENT_BUS.register(handler);

        MinecraftForge.TERRAIN_GEN_BUS.register(new GlistreModTerrainGenHooks());

 

   

  log.info("Initialization Complete!");  

 

}

@SubscribeEvent

public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event){

if(event.modID.equals(Reference.MOD_ID)){

ConfigurationGlistre.syncConfig();

//resync configs this is where restart would or not be required

System.out.println("Config changed!");

log.info("Updating config...");

}

 

}

@EventHandler

public static void postInit( FMLPostInitializationEvent event )

{

 

proxy.postInit();

MinecraftForge.EVENT_BUS.register(new GlistreModEventHooks());

  MinecraftForge.TERRAIN_GEN_BUS.register(new GlistreModTerrainGenHooks());

 

 

// MinecraftForge.EVENT_BUS.register(new GuiModInfo(Minecraft.getMinecraft()));

WorldType BIOMEFREON = new WorldTypeFreon(8, "biomeFreon");

WorldType BIOMEGLISTRE = new WorldTypeGlistre(9, "biomeGlistre");

 

//if(MystAPI.instability != null) {

//API usage

//}

 

log.info("Post Initialization Complete!");

 

}

 

}

 

 

 

GlistreEntityRegistry:

 

package com.glistre.glistremod.init;

 

import com.glistre.glistremod.GlistreMod;

import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile;

import com.glistre.glistremod.effects.potions.splash.ItemSplashPotion;

import com.glistre.glistremod.effects.potions.splash.RenderSplashPotion;

import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo;

import com.glistre.glistremod.entities.guardian.EntityTobieSkel;

 

import com.glistre.glistremod.entities.king.EntityTobieKing;

import com.glistre.glistremod.entities.queen.EntityTobieQueen;

//import com.glistre.glistremod.entities.unused.EntityTobie;

import com.glistre.glistremod.entities.wolf.EntityBlackWolf;

import com.glistre.glistremod.entities.wolf.EntityGlistreWolf;

import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt;

import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball;

import com.glistre.glistremod.projectiles.blaster.EntitySceptreBolt;

import com.glistre.glistremod.projectiles.blaster.Projectile2;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityThrowable;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntitySword;

import com.glistre.glistremod.projectiles.tobyworstsword.TobyRenderProjectile;

import com.glistre.glistremod.reference.Reference;

import com.glistre.glistremod.tabs.TabRegistry;

 

import net.minecraftforge.client.model.ModelLoader;

import net.minecraftforge.fml.client.registry.RenderingRegistry;

import net.minecraftforge.fml.common.registry.EntityRegistry;

import net.minecraftforge.fml.common.registry.GameRegistry;

import net.minecraft.block.material.Material;

import net.minecraft.client.Minecraft;

import net.minecraft.client.renderer.entity.RenderItem;

import net.minecraft.client.resources.model.ModelBakery;

import net.minecraft.client.resources.model.ModelResourceLocation;

import net.minecraft.entity.EntityList;

import net.minecraft.item.Item;

import net.minecraft.item.ItemMonsterPlacer;

import net.minecraft.potion.PotionEffect;

 

public class GlistreEntityRegistry {

 

public static void GlistreMod(){

init();

// registerEntity();

register();

}

 

// the ray or blast bolt like an arrow

    public static Item blaster_bolt_1;

   

public static Item splash_poison_protection;

// Tobie's Worst Enemy Sword

    public static Item tobie_worst_projectile_1;

   

 

//    public int blaster_bolt_1ID;

    public static Item ender_bolt_1;

//  public int ender_bolt_1ID;

    public static Item sceptre_bolt_1;

   

//    public static Item item_spawn_egg_2 = new ItemMonsterPlacer().setUnlocalizedName("black_wolf").setCreativeTab(TabRegistry.tab_builder).setMaxStackSize(12);

 

//    public int sceptre_bolt_1ID;

 

public static int modEntityID = 0;

 

public static void init(){

        blaster_bolt_1 = new Projectile2(blaster_bolt_1, "blaster_bolt_1").setUnlocalizedName("blaster_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion);

 

splash_poison_protection = new ItemSplashPotion(17, "splash_poison_protection", new PotionEffect[]{new PotionEffect(31, 1200)}, 888888).setUnlocalizedName("splash_poison_protection");

//TOBIE'S WORST ENEMY Sword/Item 

        tobie_worst_projectile_1 = new TobyEntitySword(Item.ToolMaterial.IRON).setUnlocalizedName("tobie_worst_projectile_1");

        ender_bolt_1 = new Projectile2(ender_bolt_1, "ender_bolt_1").setUnlocalizedName("ender_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion);

        sceptre_bolt_1 = new Projectile2(sceptre_bolt_1, "sceptre_bolt_1").setUnlocalizedName("sceptre_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion);

 

}

 

public static void registerEntity() {

 

 

        // BLASTERS

 

    EntityRegistry.registerModEntity(EntityBlasterBolt.class, "blaster_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);

        EntityRegistry.registerModEntity(EntityEnderBoltFireball.class, "ender_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);

        EntityRegistry.registerModEntity(EntitySceptreBolt.class, "sceptre_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true);

 

        EntityRegistry.registerModEntity(EntitySplashProjectile.class, "splash_poison_protection", ++modEntityID, GlistreMod.instance, 64, 1, true);

        // TOBIE'S WORST ENEMY

//      GameRegistry.registerItem(tobie_worst_projectile_1, "tobie_worst_projectile_1"); 

        EntityRegistry.registerModEntity(TobyEntityProjectile.class, "tobie_worst_projectile_1", ++modEntityID, GlistreMod.instance, 64, 1, true);

 

        // MOBS

        // 80 is max distance from player, 3 is update frequencies must be 3 for mobs, projectiles must be more precise 1,

        //last parameter is send velocity information should be true unless entity never moves

    EntityRegistry.registerModEntity(EntityGlistreWolf.class, "glistre_wolf", ++modEntityID, GlistreMod.instance, 80, 3, true);

    EntityRegistry.registerEgg (EntityGlistreWolf.class, 0xFFFFFF, 0xFFFF5D);

    EntityRegistry.registerModEntity(EntityBlackWolf.class, "black_wolf", ++modEntityID, GlistreMod.instance, 80, 3, true);

    EntityRegistry.registerEgg (EntityBlackWolf.class, 0xFFD700, 0xc5b358);

//     EntityList.classToStringMapping.put(ItemRegistry.item_spawn_egg_2, "black_wolf");    

    EntityRegistry.registerModEntity(EntityBlackTobo.class, "corrupted_tobie", ++modEntityID, GlistreMod.instance, 80, 3, true);

    EntityRegistry.registerEgg (EntityBlackTobo.class, 0xc5b358, 0xFFD700);

    EntityRegistry.registerModEntity(EntityTobieSkel.class, "tobie_skelly_guardian", ++modEntityID, GlistreMod.instance, 80, 3, true);

    EntityRegistry.registerEgg (EntityTobieSkel.class, 0xCCAC00, 0xFF9900);

    EntityRegistry.registerModEntity(EntityTobieKing.class, "tobie_king", ++modEntityID, GlistreMod.instance, 80, 3, true);

    EntityRegistry.registerEgg (EntityTobieKing.class, 0x534600, 0xc5b358);

    EntityRegistry.registerModEntity(EntityTobieQueen.class, "tobie_queen_elizabeth", ++modEntityID, GlistreMod.instance, 80, 3, true);

    EntityRegistry.registerEgg (EntityTobieQueen.class, 0xFFD700, 0xCC0000);

 

}

 

public static void register(){

      GameRegistry.registerItem(blaster_bolt_1, "blaster_bolt_1"); 

GameRegistry.registerItem(splash_poison_protection, "splash_poison_protection");

      GameRegistry.registerItem(tobie_worst_projectile_1, "tobie_worst_projectile_1"); 

      GameRegistry.registerItem(ender_bolt_1, "ender_bolt_1");

      GameRegistry.registerItem(sceptre_bolt_1, "sceptre_bolt_1");

}

 

public static void registerRenders(){

registerRender(blaster_bolt_1);

registerRender(splash_poison_protection);

registerRender(tobie_worst_projectile_1);

registerRender(ender_bolt_1);

registerRender(sceptre_bolt_1);

 

 

 

// RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, new TobyRenderProjectile(Minecraft.getMinecraft().getRenderManager(), tobie_worst_projectile_1, Minecraft.getMinecraft().getRenderItem()));

// RenderingRegistry.registerEntityRenderingHandler(EntitySplashProjectile.class, new RenderSplashPotion(Minecraft.getMinecraft().getRenderManager(), splash_poison_protection, Minecraft.getMinecraft().getRenderItem()));

 

}

//Item models should be registered in preInit from your client proxy

//(not your @Mod class, you'll crash the dedicated server) with ModelLoader.setCustomModelResourceLocation/setCustomMeshDefinition

//rather than in init with ItemModelMesher#register.

public static void registerRender(Item item){

// RenderItem renderItem = Minecraft.getMinecraft().getRenderItem();

// renderItem.getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));

// ModelLoader.setCustomModelResourceLocation(item, 0 , new ModelResourceLocation(item.getRegistryName(), "inventory"));

 

ModelLoader.setCustomModelResourceLocation(item, 0 , new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));

 

}

}

 

 

 

EntityBlasterBolt:

 

package com.glistre.glistremod.projectiles.blaster;

 

import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;

import net.minecraftforge.fml.relauncher.Side;

import net.minecraftforge.fml.relauncher.SideOnly;

import io.netty.buffer.ByteBuf;

 

import java.util.List;

 

import com.glistre.glistremod.GlistreMod;

import com.glistre.glistremod.init.GlistreEntityRegistry;

 

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.block.state.IBlockState;

import net.minecraft.enchantment.EnchantmentHelper;

import net.minecraft.entity.Entity;

import net.minecraft.entity.EntityLivingBase;

import net.minecraft.entity.IProjectile;

import net.minecraft.entity.monster.EntityEnderman;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.entity.player.EntityPlayerMP;

import net.minecraft.entity.projectile.EntityArrow;

import net.minecraft.init.Items;

import net.minecraft.item.ItemStack;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.network.play.server.S2BPacketChangeGameState;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.BlockPos;

import net.minecraft.util.DamageSource;

import net.minecraft.util.EnumParticleTypes;

import net.minecraft.util.MathHelper;

import net.minecraft.util.MovingObjectPosition;

import net.minecraft.util.Vec3;

import net.minecraft.world.World;

 

public class EntityBlasterBolt extends Entity

{

    private int xTile = -1;

    private int yTile = -1;

    private int zTile = -1;

    private Block inTile;

    private int inData;

    private boolean inGround;

    /** 1 if the player can pick up the arrow */

    public int canBePickedUp;

    /** Seems to be some sort of timer for animating an arrow. */

    public int arrowShake;

    /** The owner of this arrow. */

    public Entity shootingEntity;

    private int ticksInGround;

    private int ticksInAir;

//    private double damage = 2.0D; //original value

// sets damage to entity from blasterbolt hit

    private double damage = 6.0D;

    /** The amount of knockback an arrow applies when it hits a mob. */

    private int knockbackStrength;

//  private float explosionRadius;

//sets the explosion radius 1.0F is not too crazy 

    private float explosionRadius= 0.5F;

 

 

    public EntityBlasterBolt(World worldIn)

   

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.setSize(0.5F, 0.5F);

    }

 

    public EntityBlasterBolt(World worldIn, double x, double y, double z)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.setSize(0.5F, 0.5F);

        this.setPosition(x, y, z);

//        this.getYOffset();

    }

 

    public EntityBlasterBolt(World worldIn, EntityLivingBase shooter, EntityLivingBase target, float float0, float float1)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.shootingEntity = shooter;

 

        if (shooter instanceof EntityPlayer)

        {

            this.canBePickedUp = 1;

        }

 

        this.posY = shooter.posY + (double)shooter.getEyeHeight() - 0.10000000149011612D;

        double d0 = target.posX - shooter.posX;

        double d1 = target.getEntityBoundingBox().minY + (double)(target.height / 3.0F) - this.posY;

        double d2 = target.posZ - shooter.posZ;

        double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);

 

        if (d3 >= 1.0E-7D)

        {

            float f = (float)(MathHelper.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;

            float f1 = (float)(-(MathHelper.atan2(d1, d3) * 180.0D / Math.PI));

            double d4 = d0 / d3;

            double d5 = d2 / d3;

            this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f, f1);

            float f2 = (float)(d3 * 0.20000000298023224D);

            this.setThrowableHeading(d0, d1 + (double)f2, d2, float0, float1);

 

    //1.8 update next line was yoffset = 0.0F now 0.0D method in Entity     

//          this.getYOffset();

////          this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f2, f3);

 

////            float f4 = (float)d3 * 0.2F;

////            this.setThrowableHeading(d0, d1 + (double)f4, d2, float0, float1);

        }

    }

 

//velocity == shadow?

    public EntityBlasterBolt(World worldIn, EntityLivingBase shooter, float velocity)

    {

        super(worldIn);

        this.renderDistanceWeight = 10.0D;

        this.shootingEntity = shooter;

 

        if (shooter instanceof EntityPlayer)

        {

            this.canBePickedUp = 1;

        }

 

        this.setSize(0.5F, 0.5F);

        this.setLocationAndAngles(shooter.posX, shooter.posY + (double)shooter.getEyeHeight(), shooter.posZ, shooter.rotationYaw, shooter.rotationPitch);

        this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);

        this.posY -= 0.10000000149011612D;

        this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);

        this.setPosition(this.posX, this.posY, this.posZ);

//        this.getYOffset();

        this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));

        this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));

        this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));

        this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, velocity * 1.5F, 1.0F);

    }

 

    protected void entityInit()

    {

        this.dataWatcher.addObject(16, Byte.valueOf((byte)0));

    }

 

    /**

    * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.

    */

    public void setThrowableHeading(double x, double y, double z, float velocity, float inaccuracy)

    {

        float f = MathHelper.sqrt_double(x * x + y * y + z * z);

        x = x / (double)f;

        y = y / (double)f;

        z = z / (double)f;

        x = x + this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;

        y = y + this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;

        z = z + this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)inaccuracy;

        x = x * (double)velocity;

        y = y * (double)velocity;

        z = z * (double)velocity;

        this.motionX = x;

        this.motionY = y;

        this.motionZ = z;

        float f1 = MathHelper.sqrt_double(x * x + z * z);

        this.prevRotationYaw = this.rotationYaw = (float)(MathHelper.atan2(x, z) * 180.0D / Math.PI);

        this.prevRotationPitch = this.rotationPitch = (float)(MathHelper.atan2(y, (double)f1) * 180.0D / Math.PI);

        this.ticksInGround = 0;

    }

 

    /**

    * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX,

    * posY, posZ, yaw, pitch

    */

 

//  func_180426_a replaced  #setPositionAndRotation2 in 1.8 update then back to setPositionAndRotation2 again

    @Override

    @SideOnly(Side.CLIENT)

    public void setPositionAndRotation2(double x, double y, double z, float floatYaw, float floatPitch, int posRotationIncrements, boolean isTeleport)

    {

        this.setPosition(x, y, z);

        this.setRotation(floatYaw, floatPitch);

    }

 

    /**

    * Sets the velocity to the args. Args: x, y, z

    */

    @SideOnly(Side.CLIENT)

    public void setVelocity(double x, double y, double z)

    {

        this.motionX = x;

        this.motionY = y;

        this.motionZ = z;

 

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)

        {

            float f = MathHelper.sqrt_double(x * x + z * z);

            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(x, z) * 180.0D / Math.PI);

            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(y, (double)f) * 180.0D / Math.PI);

            this.prevRotationPitch = this.rotationPitch;

            this.prevRotationYaw = this.rotationYaw;

            this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);

            this.ticksInGround = 0;

        }

       

    }

 

    /**

    * Called to update the entity's position/logic.

    */

    public void onUpdate()

    {

        super.onUpdate();

 

        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)

        {

            float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);

            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI);

        }

 

        BlockPos blockpos = new BlockPos(this.xTile, this.yTile, this.zTile);

        IBlockState iblockstate = this.worldObj.getBlockState(blockpos);

        Block block = iblockstate.getBlock();

 

        if (block.getMaterial() != Material.air)

        {

            block.setBlockBoundsBasedOnState(this.worldObj, blockpos);

            AxisAlignedBB axisalignedbb = block.getCollisionBoundingBox(this.worldObj, blockpos, iblockstate);

 

            if (axisalignedbb != null && axisalignedbb.isVecInside(new Vec3(this.posX, this.posY, this.posZ)))

            {

                this.inGround = true;

            }

        }

 

        if (this.arrowShake > 0)

        {

            --this.arrowShake;

        }

 

        if (this.inGround)

        {

            int j = block.getMetaFromState(iblockstate);

 

            if (block == this.inTile && j == this.inData)

            {

                ++this.ticksInGround;

              //changed 1200 to 10 in next line to try to remove arrow

                if (this.ticksInGround >= 10)

                {

                    this.setDead();

                }

            }

            else

            {

                this.inGround = false;

                this.motionX *= (double)(this.rand.nextFloat() * 0.2F);

                this.motionY *= (double)(this.rand.nextFloat() * 0.2F);

                this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);

                this.ticksInGround = 0;

                this.ticksInAir = 0;

            }

        }

        else

        {

            ++this.ticksInAir;

            Vec3 vec31 = new Vec3(this.posX, this.posY, this.posZ);

            Vec3 vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);

            MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec31, vec3, false, true, false);

            vec31 = new Vec3(this.posX, this.posY, this.posZ);

            vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);

 

            if (movingobjectposition != null)

            {

                vec3 = new Vec3(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);

            }

 

            Entity entity = null;

            List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));

            double d0 = 0.0D;

            int i;

            float f1;

 

            for (i = 0; i < list.size(); ++i)

            {

                Entity entity1 = (Entity)list.get(i);

 

                if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5))

                {

                    f1 = 0.3F;

                    AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().expand((double)f1, (double)f1, (double)f1);

                    MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);

 

                    if (movingobjectposition1 != null)

                    {

                        double d1 = vec31.distanceTo(movingobjectposition1.hitVec);

 

                        if (d1 < d0 || d0 == 0.0D)

                        {

                            entity = entity1;

                            d0 = d1;

                        }

                    }

                }

            }

 

            if (entity != null)

            {

                movingobjectposition = new MovingObjectPosition(entity);

            }

 

            if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer)

            {

                EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit;

 

                if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))

                {

                    movingobjectposition = null;

                }

            }

 

            float f2;

            float f3;

            float f4;

 

            if (movingobjectposition != null)

            {

                if (movingobjectposition.entityHit != null)

                {

                    f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);

                    int k = MathHelper.ceiling_double_int((double)f2 * this.damage);

 

                    if (this.getIsCritical())

                    {

                        k += this.rand.nextInt(k / 2 + 2);

                    }

 

                    DamageSource damagesource;

 

                    if (this.shootingEntity == null)

                    {

                        damagesource = DamageSource.causeThrownDamage(this, this);

                    }

                    else

                    {

                        damagesource = DamageSource.causeThrownDamage(this, this.shootingEntity);

                    }

 

                    if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman))

                    {

                        movingobjectposition.entityHit.setFire(5);

                    }

 

                    if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k))

                    {

                        if (movingobjectposition.entityHit instanceof EntityLivingBase)

                        {

                            EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit;

 

                            if (!this.worldObj.isRemote)

                            {

                                entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1);

                            }

 

                            if (this.knockbackStrength > 0)

                            {

                                f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

 

                                if (f4 > 0.0F)

                                {

                                    movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4);

                                }

                            }

 

                            if (this.shootingEntity instanceof EntityLivingBase)

                            {

                            //1.8.9 .func_151384_a changed to apply Thorn Enchants

                                EnchantmentHelper.applyThornEnchantments(entitylivingbase, this.shootingEntity);

                                EnchantmentHelper.applyArthropodEnchantments((EntityLivingBase)this.shootingEntity, entitylivingbase);

                            }

 

                            if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP)

                            {

                                ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));

                            }

                        }

 

                        this.playSound("glistremod:ender_blaster", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));

                       

//creates explosion on entity hit

                       

                        this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius, true);

//next line possibly lower sound volume /raise pitch of explosion?

//                      this.playSound("random.explosion1", 2.1F, 4.2F);

                        this.setDead();

 

                        //sets fire to entity hit                     

                      movingobjectposition.entityHit.setFire(10);

 

                        if (!(movingobjectposition.entityHit instanceof EntityEnderman))

                        {

                            this.setDead();

                        }

                    }

                    else

                    {

                        this.motionX *= -0.10000000149011612D;

                        this.motionY *= -0.10000000149011612D;

                        this.motionZ *= -0.10000000149011612D;

                        this.rotationYaw += 180.0F;

                        this.prevRotationYaw += 180.0F;

                        this.ticksInAir = 0;

                    }

                }

                else

                {

                    BlockPos blockpos1 = movingobjectposition.getBlockPos();

                    this.xTile = blockpos1.getX();

                    this.yTile = blockpos1.getY();

                    this.zTile = blockpos1.getZ();

                    iblockstate = this.worldObj.getBlockState(blockpos1);

                    this.inTile = iblockstate.getBlock();

                    this.inData = this.inTile.getMetaFromState(iblockstate);

                    this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX));

                    this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY));

                    this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ));

                    f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);

                    this.posX -= this.motionX / (double)f3 * 0.05000000074505806D;

                    this.posY -= this.motionY / (double)f3 * 0.05000000074505806D;

                    this.posZ -= this.motionZ / (double)f3 * 0.05000000074505806D;

                    //this is the sound when it hits a target

                    this.playSound("glistremod:ender_blaster", 1.0F, 2.0F / (this.rand.nextFloat() * 0.2F + 0.9F));                    this.inGround = true;

                    this.arrowShake = 7;

                    this.setIsCritical(false);

 

                    if (this.inTile.getMaterial() != Material.air)

                    {

                        this.inTile.onEntityCollidedWithBlock(this.worldObj, blockpos1, iblockstate, this);

                    }

                }

            }

 

            if (this.getIsCritical())

            {

                for (i = 0; i < 4; ++i)

                {

                  //change from "crit" (arrow smoke) to ""  to remove particle effect or magicCrit (blue), witchMagic (heavy purple)  or smoke or bubble or fireworksSpark (white X's)

          //        this.worldObj.spawnParticle(EnumParticleTypes.SPELL_WITCH, this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ, new int[0]);

         

//              this.worldObj.spawnParticle(EnumParticleTypes.CRIT, this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ, new int[0]);

 

                }

            }

 

            this.posX += this.motionX;

            this.posY += this.motionY;

            this.posZ += this.motionZ;

            f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);

            this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);

 

            for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)

            {

                ;

            }

 

            while (this.rotationPitch - this.prevRotationPitch >= 180.0F)

            {

                this.prevRotationPitch += 360.0F;

            }

 

            while (this.rotationYaw - this.prevRotationYaw < -180.0F)

            {

                this.prevRotationYaw -= 360.0F;

            }

 

            while (this.rotationYaw - this.prevRotationYaw >= 180.0F)

            {

                this.prevRotationYaw += 360.0F;

            }

 

            this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;

            this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;

            f3 = 0.99F;

            f1 = 0.05F;

 

            if (this.isInWater())

            {

                for (int l = 0; l < 4; ++l)

                {

                    f4 = 0.25F;

                    this.worldObj.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ, new int[0]);

                }

 

                f3 = 0.6F;

            }

 

            if (this.isWet())

            {

                this.extinguish();

            }

 

            this.motionX *= (double)f3;

            this.motionY *= (double)f3;

            this.motionZ *= (double)f3;

            this.motionY -= (double)f1;

            this.setPosition(this.posX, this.posY, this.posZ);

            this.doBlockCollisions();

        }

    }

 

 

    /**

    * (abstract) Protected helper method to write subclass entity data to NBT.

    */

    public void writeEntityToNBT(NBTTagCompound p_70014_1_)

    {

        p_70014_1_.setShort("xTile", (short)this.xTile);

        p_70014_1_.setShort("yTile", (short)this.yTile);

        p_70014_1_.setShort("zTile", (short)this.zTile);

        p_70014_1_.setShort("life", (short)this.ticksInGround);

        p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.inTile));

        p_70014_1_.setByte("inData", (byte)this.inData);

        p_70014_1_.setByte("shake", (byte)this.arrowShake);

        p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0));

        p_70014_1_.setByte("pickup", (byte)this.canBePickedUp);

        p_70014_1_.setDouble("damage", this.damage);

    }

 

    /**

    * (abstract) Protected helper method to read subclass entity data from NBT.

    */

    public void readEntityFromNBT(NBTTagCompound p_70037_1_)

    {

        this.xTile = p_70037_1_.getShort("xTile");

        this.yTile = p_70037_1_.getShort("yTile");

        this.zTile = p_70037_1_.getShort("zTile");

        this.ticksInGround = p_70037_1_.getShort("life");

        this.inTile = Block.getBlockById(p_70037_1_.getByte("inTile") & 255);

        this.inData = p_70037_1_.getByte("inData") & 255;

        this.arrowShake = p_70037_1_.getByte("shake") & 255;

        this.inGround = p_70037_1_.getByte("inGround") == 1;

 

        if (p_70037_1_.hasKey("damage", 99))

        {

            this.damage = p_70037_1_.getDouble("damage");

        }

 

        if (p_70037_1_.hasKey("pickup", 99))

        {

            this.canBePickedUp = p_70037_1_.getByte("pickup");

        }

        else if (p_70037_1_.hasKey("player", 99))

        {

            this.canBePickedUp = p_70037_1_.getBoolean("player") ? 1 : 0;

        }

    }

 

    /**

    * Called by a player entity when they collide with an entity

    */

    public void onCollideWithPlayer(EntityPlayer p_70100_1_)

    {

   

        if ( !this.worldObj.isRemote && this.inGround && this.arrowShake <= 0)

        {

            boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;

 

            if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(GlistreEntityRegistry.blaster_bolt_1, 1)))

            {

                flag = false;

            }

 

            if (flag)

            {

                this.playSound("glistremod:ender_blaster", 1.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);

                p_70100_1_.onItemPickup(this, 1);

                this.setDead();

            }

        }

    }

 

    /**

    * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to

    * prevent them from trampling crops

    */

    protected boolean canTriggerWalking()

    {

        return false;

    }

 

    @SideOnly(Side.CLIENT)

    public float getShadowSize()

    {

        return 0.0F;

    }

 

    public void setDamage(double p_70239_1_)

    {

        this.damage = p_70239_1_;

    }

 

    public double getDamage()

    {

        return this.damage;

    }

 

    /**

    * Sets the amount of knockback the arrow applies when it hits a mob.

    */

    public void setKnockbackStrength(int p_70240_1_)

    {

        this.knockbackStrength = p_70240_1_;

    }

 

    /**

    * If returns false, the item will not inflict any damage against entities.

    */

    public boolean canAttackWithItem()

    {

        return false;

    }

   

    /**

    * Whether the arrow has a stream of critical hit particles flying behind it.

    */

    public void setIsCritical(boolean p_70243_1_)

    {

        byte b0 = this.dataWatcher.getWatchableObjectByte(16);

 

        if (p_70243_1_)

        {

            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));

        }

        else

        {

            this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));

        }

    }

 

 

    /**

    * Whether the arrow has a stream of critical hit particles flying behind it.

    */

    public boolean getIsCritical()

    {

        byte b0 = this.dataWatcher.getWatchableObjectByte(16);

        return (b0 & 1) != 0;

    }

 

    //next is 1.11

/* @Override

public ItemStack getArrowStack() {

return new ItemStack(GlistreEntityRegistry.blaster_bolt_1);

}*/

//    @Override

    /**

    * Called by the server when constructing the spawn packet.

    * Data should be added to the provided stream.

    *

    * @param buffer The packet data stream

    */

/*    public void writeSpawnData(ByteBuf buffer) {

   

    buffer.writeInt(shootingEntity  != null ? shootingEntity.getEntityId() : -1);

   

    }

 

    @Override

    public void readSpawnData (ByteBuf buffer) {

    //Replicate EntityArrow's special spawn packet handling from NetHandlerPlayClient#handleSpawnObject:

    Entity shooter = worldObj.getEntityByID(buffer.readInt());

    if (shooter instanceof EntityLivingBase)

    {

    shootingEntity = (EntityLivingBase)

    shooter;

    }

    }*/

 

}

 

 

 

Edited: SOLVED!: Problem was the variables values that I had used in

worldrenderer

 

Posted

Might want to look at my github, my arrow works...

 

I tried extending RenderArrow<EntityBlasterBolt> such as you did, but I don't think that works in 1.8.9 ...I get red underlined "remove type arguments"

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.