Jump to content

Glistre

Members
  • Posts

    209
  • Joined

  • Last visited

Everything posted by Glistre

  1. Sorry I left that brace out!!!! uggh. Still I get the error "Attempt to add duplicate ....to pool : glistremod:ancient_book" error. I will look at your mod and its .gitignore file for your example and post my Git repository soon as I can. I have lots of errors in this mod and just beginning to debug but I really, really appreciate your help I have tried so many ways of doing this
  2. I really appreciate your patience with me on this and all the help. I am trying to simplify this, 1) the glistremod:glistre_chest_gold is just a custom chest --it does not extend LootTableEntry. So, I just eliminated that part of the if statement completely, as I can try to add loot to it later, and that leaves just LootTableList.CHEST_SPAWN_BONUS_CHEST. 2) I eliminated both LootTableRegistry and GlistreLootTables class where I had mistakenly tried to write the class to register "custom_chest_loot" twice. So, instead I just call LootTableList.register(new ResourceLocation(Reference.MODID, "custom_chest_loot")); in the preInit. And here is my simplified version of the event, which seems like it would work but gives the error "Attempted to add a duplicate entry to pool: glistremod:ancient_book" I am sorry I did not post the full error my folder was moved to a subdrive I could not locate the full crash log. In any event, I am just beginning troubleshooting and have 1018 json model errors This is what I have now: and I have LootTableList.register(new ResourceLocation(Reference.MODID, "custom_chest_loot")) in preInit in my main mod / @Mod class
  3. Let me try to fix that I am registering nothing since I am calling LootRegistry.register in preInit? This is really an ignorant noobish question that will bring me hate but how would I correctly add the loot table names in preInit?
  4. I am not sure I even have those files? I thought the entry gets added to "main" or "p1" This is what I have -- which incidently I copied /edited from your github examples GlistreLootTables: And the loot table load event in GlistreModEventHooks: and LootTableRegistry which I call in preInit by LootTableRegistry.init(); LootTableRegistry.register() ...could this be a problem --am I registering twice?? :
  5. Okay not really needed in both pools. So if I delete everything from LootPool and leave "evt.getTable().getPool("main").addEntry(entry1);" I get the error still "Attempt to add duplicate item to pool" But if I delete "evt.getTable().getPool("main").addEntry(entry1);" and change the LootPool part to this: LootPool p1 = new LootPool(new LootEntry[]{entry1}, new LootCondition[0], new RandomValueRange(1), new RandomValueRange(0,1), "glistremod/loot_tables:custom_chest_loot"); evt.getTable().addPool(p1); Then I get the error "Attempt to add duplicate pool to loot table: glistremod/loot_tables:custom_chest_loot I am not understanding this yet
  6. So should I change "main" to "p1" for the second "main"? When I do I get an NPE on that line of code : [18:50:55] [Server thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.LootTableLoadEvent@2cb84442: java.lang.NullPointerException at com.glistre.glistremod.events.GlistreModEventHooks.lootLoad(GlistreModEventHooks.java:82) ~[GlistreModEventHooks.class:?]
  7. GlistreModEventHooks class: ItemRegistry class: ItemAncientBook class: Cannot find what's wrong -- same error "Attempt to add a duplicate entry to pool: glistremod:ancient_book" Aside: Also, my GUI screen does not display when I right click
  8. Before posting that, looking at my ItemRegistry it does not look like I have correctly registered the ancient book item. I will attempt to fix that first and then see what happens then post result
  9. I have this json named custom_chest_loot located in src/main/resources/assets/glistremod/loot_tables ; my json for ancient_book is located in src/main/resources/assets/glistremod/item
  10. Any thoughts on how to troubleshoot this thing?
  11. Deleted ! Same error plus additional error: com.google.gson.JsonSyntaxException: Expected name to be an item, was unknown string 'glistremod:ancient_book'
  12. That's what i have I rewrote again it still give errors on "glistremod:custom_chest_loot" ="Attempt to add duplicate to pool...: glistremod:custom_chest_loot Loot table: Json:
  13. If the name is the same, you will get that message The same as what? I have tried putting all sorts of different entries for the String "Additional Entry" and "Additional Pool" I have put the name of the item, random names, the name of the json file for the pool, nothing works. I get the same error "Attempted to add duplicate pool" plus the name of whatever I put for that string. I don't get it. seems like no one else has had this issue
  14. I appreciate the help, however, I do not understand your usage. Could you possibly help me understand my error as well then your help would make a lot more sense to me? : 1)What should the string values be for "Additive Entry" or "Additive Pool" -- would that be the name of your json file for your pool? 2) Or would the "Additive Entry" String be the json for your item you are adding? 3) Why do I get a message "Attempted to add duplicate pool" anyway ? 4) I still need to register this but is that even related?
  15. Not sure if I can still request for support for 1.10.2 in this forum, but if not, any advice on 1.12.2 would surely help: I don't really understand what is a Loot Pool or a Loot Entry. I am getting a crash on startup on the line #addPool which I have placed into my EventHandler: "Attempted to add a Duplicate Pool to loot table" This could be a simple error or related to all the steps I have missed such as registering my custom chest?? I am simply trying to add loot items to both custom chest I have created and existing Vanilla chests. What should I do? I could use some help solving the error, understanding how the Loot system works, and steps I need to accomplish adding my custom loot items and Vanilla items to both the custom chests and Vanilla chests?
  16. That might work in 1.10.2 using Biome.BiomeProperties I will try it. In 1.12 I think I can access Biome::temperature using reflection.
  17. Sorry in advance a little behind on versions. I have a mod that makes it snow when an event is triggered. I used to make it snow with this in 1.8.9: Biome b = BiomeRegistry.biomeGlistre; WorldServer worldServer = FMLCommonHandler.instance().getMinecraftServerInstance().getServer().worldServerForDimension(Defaults.DIM_ID.FREON); WorldInfo worldinfo = worldServer.getWorldInfo(); //first parameter is temp .2F and rain looks like snow, second parameter is rainfall 0F none .5F is normal) b.setTemperatureRainfall(0.0F, 1.0F);//// No longer works in 1.12.2! Is there a replacement method for #setTemperatureRainfall or is there another way to do this? I still need to backport to 1.10.2 but anyone knowing how to do this for 1.10 -1.12 would help --- should I make a custom WeatherRenderer?
  18. Which class or methods are used to make the Boss health status bar?
  19. 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"
  20. 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 Client Proxy: Main class: GlistreEntityRegistry: EntityBlasterBolt: Edited: SOLVED!: Problem was the variables values that I had used in worldrenderer
  21. 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
  22. 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
  23. 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; } }*/
  24. 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
  25. 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
×
×
  • Create New...

Important Information

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