Everything posted by Glistre
-
[Solved][1.8.9] Blaster bolt is invisible
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")); } }
-
[Solved][1.8.9]lag loading chunks custom dimension
Not sure what could cause this but when I enter my custom dimension, the game seems to stall ...takes seemingly forever to enter the dimension (actually a full minute) . . .and the chunks seem to load so slowly that you cannot hit entities. Not even sure where to look ...I created a provider class that uses WorldChunkProviderHell but no idea if that is even the place I should be looking I tried removing snow, entities, and ice from my biome and that did nothing Edit: well no sooner than I posted for help here I rewrote #decorate in the biome and created a custom generator and the lag is gone
-
[1.8.9] Entity creates lag in game and walks into blocks
gameRenderer == 53% display_update == 34% Edit: Found one problem in Renderer where I did not override @Override // 1.8 changed func_82422_c() transformHeldFull3DItemLayer() Now it seems to just stalls loading chunks 68% display_update, 28% gameRenderer
-
[1.8.9] Entity creates lag in game and walks into blocks
That seems to have helped a bit I am still very laggy in the custom biome / dimension ...for ex, I hit the entity after the fifth time the game literally freezes .... Is there a way to run a report on my mod to find out what is causing this ...ie,: how much is chunk generation, how much is entity , how much is errors from rendering or something like that ..?
-
[1.8.9] Entity creates lag in game and walks into blocks
As stated in subject line: my custom entity walks right into blocks. I have tried a few methods such as #getCollisionBox, #getEntityBoundingBox, and #getCollisionBoundingBox from AxisAlignedBB When my custom mob walks through any block the game lags, nearly stalls. Please let me know and I can post any code EntityBlackTobo class: I hope 1.8.9 still supported here , I really need to fix several bugs in my mod before updating to 1.10!
-
mod will not build/compile
Thanks Choonster! that fixed THAT problem ...I have another one now so I will work on it next ..'execution failed for task ':retroMapSources " Edit: success ! ready to move on to 1.10 Thanks to everyone that has helped me with the updating
-
mod will not build/compile
I am trying to build my mod for release (1.8 version) and then update it to 1.10.02 but when I run gradlew build I keep getting an error: It says: "bootstrap classpath not set in conjunction with -source 1.6" and "use -source 8 or higher to enable lambda expressions" The thing is when I check my java compile settings in eclipse, they say that I am using java 1.8 as compiler Why is it trying to compile in 1.6?
-
[1.8] Chest not updating textures until logging out
That works great now thank you so much! And I learned some new things about git and renaming methods I have one more odd thing -- my chest does not show in inventory ... it shows in my hot bar but not under the tab . . . Would you happen to know why? Edited: forgot to add chest to my list in TabRegistry fixed with adding : list.add(new ItemStack(BlockRegistry.glistre_chest)); Working great now! Aside: were you at Minecon in September on the modding forum panel with LexManos?
-
[1.8] Chest not updating textures until logging out
thanks I will learn how to use it better then get back Edit: I have much to learn about git and code sharing. Meanwhile, I uploaded a zip file of all source and resources if that would be possible to access https://github.com/Glistre/GlistreMod3.0/upload/master Edit: I pushed the project to github now hope that is better https://github.com/Glistre/GlistreMod3.1/
-
[1.8] Chest not updating textures until logging out
Here's the code I hope you can fork it. please let me know if you would need anything else to try DELETED
-
[1.8] Chest not updating textures until logging out
When I place the second chest it renders the Large chest directly on top of the Small chest. When I log out and then back in everything is fixed and looks perfect bumping because I cannot figure out anyone?
-
[1.8] Chest not updating textures until logging out
It sure looks like its just rendering both the small and large textures until I log out and log back in. I added that line after modelchest.renderAll(); the console prints size : small over and over again
-
[1.8] Chest not updating textures until logging out
My custom large chest is not rendering correctly. If I place a small chest, then place a second chest adjacent, the original small chest texture z-fights with the large chest texture. If I exit the game and log back in, the effect is gone and everything is fine -- I see just the large chest texture. This is my render class for the chests. Does anyone know why this texture would not update until I log out and log back in?
-
[Solved]ChatMessage not always displaying
I got a bit confused trying to do that . . .but I added #ticksExisted%400 and seems to give me the desired effect of only showing in chat & console every 20 seconds or so. I also added this to only when the player has an item in hand and that helps, so I think it would be best to make a custom compass and only display when the Player has the item in inventory ....even though I never completed the nbt part and the tick method I am going to mark this solved. Thanks for the help Here's what I came up with for my EntityTobieKing class if anyone else is curious: @Override public void onUpdate(){ super.onUpdate(); if (!(worldObj.isRemote && this.ticksExisted < 400)){ /* NBTTagCompound nbt = new NBTTagCompound(); nbt.setBoolean("spawned", true); if (nbt.getBoolean("spawned") == true && nbt.hasKey("spawned") ){*/ //gets list of players within 55 blocks - -very large radius // int r = 35; //radius List<EntityPlayer> playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.getEntityBoundingBox().expand(155.0D, 75.0D, 155.0D)); Iterator<EntityPlayer> i1 = playerList.iterator(); EntityPlayer entityplayer; while (i1.hasNext()) { entityplayer = (EntityPlayer)i1.next(); double inRange = this.getDistanceSqToEntity(entityplayer); // && !nbt.getTagCompound().getBoolean(KEY)) if ( inRange < 1600.0D & inRange > 1580.0D) if(entityplayer.getHeldItem() !=null && entityplayer.getHeldItem().getItem() == ItemRegistry.mighty_sword){ entityplayer.addChatComponentMessage( new ChatComponentText(EnumChatFormatting.DARK_GREEN + "Toby King in Range, Tower location" + EnumChatFormatting.DARK_RED + " X: " + (int)Math.round(this.posX) + EnumChatFormatting.GOLD + " | Y: " + (int)Math.round(this.posY) + EnumChatFormatting.DARK_AQUA +" | Z: " + (int)Math.round(this.posZ))); } } } //DEBUG this below just tells me if its generating or not //get and print location of Toby king when it spawns in world // System.out.println("Toby King spawned in Tower in Freon Biome location X: " + (int)Math.round(this.posX) + " | Y: " + (int)Math.round(this.posY) + " | Z: " + (int)Math.round(this.posZ)); }
-
[Solved]ChatMessage not always displaying
I don't understand how to check for the actual spawning of the entity, so I thought I had to use an event
-
[Solved]ChatMessage not always displaying
Could you possibly help me out a bit with the nbt saving? I sometimes have trouble with that Here's what I have: (moved this to an event): @SubscribeEvent public void onEntitySpawnsTobieKing(LivingSpawnEvent event) { if (event.entity instanceof EntityTobieKing) { List<EntityPlayer> playerList = event.entity.worldObj.getEntitiesWithinAABB(EntityPlayer.class, event.entity.getEntityBoundingBox().expand(155.0D, 75.0D, 155.0D)); Iterator<EntityPlayer> i1 = playerList.iterator(); EntityPlayer player; while (i1.hasNext()) { player = (EntityPlayer)i1.next(); NBTTagCompound nbt = event.entity.getEntityData(); // NBTTagCompound nbt = new NBTTagCompound(); nbt.setBoolean("spawned", true); if(nbt.hasKey("spawned")){ player.addChatComponentMessage( new ChatComponentText(EnumChatFormatting.DARK_GREEN + "Toby King in Range, location" + EnumChatFormatting.DARK_RED + " X: " + (int)Math.round(event.entity.posX) + EnumChatFormatting.GOLD + " | Y: " + (int)Math.round(event.entity.posY) + EnumChatFormatting.DARK_AQUA +" | Z: " + (int)Math.round(event.entity.posZ))); } } } } So the spamming the console slowed down a bit but it still continues to cycle over and over every couple of seconds . What I trying to do is 1) get the entity that spawns when it spawns; 2) check for players close to the entity; 3) add a chat message one time to the player.
-
[Solved]ChatMessage not always displaying
I already have a playerList that I iterate through ... is there a way to just change what I have so it won't send the message if it already sent? I added a range which at least stops the spamming in chat and console of the message, but seems to add lag to the game double inRange = this.getDistanceSqToEntity(entityplayer); if ( inRange < 1000.0D & inRange > 900.0D){
-
[Solved]ChatMessage not always displaying
Not exactly sure where to start ...would that be player.capabilities. some code? Also, I thought that adding a check for a player held item might work to turn off the message so I added this but nothing happened: if(!(worldObj.isRemote && entityplayer.getCurrentEquippedItem() !=null && entityplayer.getHeldItem().getItem() == (ItemRegistry.compass)));
-
[Solved]ChatMessage not always displaying
I am able to get it to work reliably by overriding #updateEntity in my tileentitychest class but I still have two questions: 1) the chat message spams the console and the chat instead of just playing just one time; and 2) how would I just detect my custom mob ... outside of worldgen that is, so I don't have the probably of only showing when the world is generated? Edit: I tried a different way of doing this I used #onUpdate in my custom mob class. That works, but again spams the chat and console. Should I try to limit the chatmessage to display only once in chat or should I try using a different message? Maybe I should just create a custom item like a compass and call #getCurrentEquippedItem? This is what I tried: @Override public void onUpdate(){ super.onUpdate(); //gets list of players within 55 euclidian distance blocks - -very large radius List<EntityPlayer> playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.getEntityBoundingBox().expand(55.0D, 25.0D, 55.0D)); Iterator<EntityPlayer> i1 = playerList.iterator(); EntityPlayer entityplayer; while (i1.hasNext()) { entityplayer = (EntityPlayer)i1.next(); // if(!(world.isRemote && entityplayer.getCurrentEquippedItem() !=null && entityplayer.getCurrentEquippedItem().isItemEqual))) if(!(worldObj.isRemote && entityplayer !=null)) entityplayer.addChatComponentMessage( new ChatComponentText(EnumChatFormatting.DARK_GREEN + "Toby King in Tower location" + EnumChatFormatting.DARK_RED + " X: " + (int)Math.round(this.posX) + EnumChatFormatting.GOLD + " | Y: " + (int)Math.round(this.posY) + EnumChatFormatting.DARK_AQUA +" | Z: " + (int)Math.round(this.posZ))); } //DEBUG this below just tells me if its generating or not //get and print location of Toby king when it spawns in world // System.out.println("Toby King spawned in Tower in Freon Biome location X: " + (int)Math.round(this.posX) + " | Y: " + (int)Math.round(this.posY) + " | Z: " + (int)Math.round(this.posZ)); }
-
[Solved]ChatMessage not always displaying
Do you know how the distance from the entity to the player would be measured? I wonder if my y component could be a problem as well? I have it x = 155, y = 95, z = 155 ...would that be 47 1/2 blocks above the player, and 155 blocks in any direction when generated?
-
[Solved]ChatMessage not always displaying
public boolean generate4(World world, Random rand, int i, int j, int k) { if (!(world.isRemote)){ //spawn Tobie King on tower EntityTobieKing entity = new EntityTobieKing(world); entity.setPosition(i + 20, j + 34, k + 11); entity.setLocationAndAngles(i + 20, j + 34, k + 11, 0.0F , 0.0F); world.spawnEntityInWorld(entity); entity.onUpdate(); //gets list of players within 155 blocks - -very large radius // int r = 35; //radius List<EntityPlayer> playerList = world.getEntitiesWithinAABB(EntityPlayer.class, entity.boundingBox.expand(155.0D, 95.0D,155.0D)); Iterator<EntityPlayer> i1 = playerList.iterator(); EntityPlayer entityplayer; while (i1.hasNext()) { entityplayer = (EntityPlayer)i1.next(); if(!(world.isRemote)) entityplayer.addChatComponentMessage( new ChatComponentText(EnumChatFormatting.DARK_GREEN + "Toby King in Tower location" + EnumChatFormatting.DARK_RED + " X: " + (int)Math.round(entity.posX) + EnumChatFormatting.GOLD + " | Y: " + (int)Math.round(entity.posY) + EnumChatFormatting.DARK_AQUA +" | Z: " + (int)Math.round(entity.posZ))); } //DEBUG this below just tells me if its generating or not System.out.println("Toby King spawned in Tower in Freon Biome location X: " + (int)Math.round(entity.posX) + " | Y: " + (int)Math.round(entity.posY) + " | Z: " + (int)Math.round(entity.posZ)); } return true; }
-
[Solved]ChatMessage not always displaying
Want the chat message to display to any players within X # of blocks from a custom mob ... trouble is, it only seems to display when you quit the game and re-enter the game Any ideas? I've seen this happens a few other times on events but never was sure what caused the problem
-
[1.8] [Solved] methods #onEntityWalking #onEntityCollideWithBlock
Not exactly sure how to use that method, I added the following to my RudBlock code and nothing changed. @Override public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid){ //return hitIfLiquid && ((Integer)state.getValue(LEVEL)).intValue() == 1; // return false; return this.isCollidable(); } @Override @SideOnly(Side.CLIENT) public boolean isCollidable() { return true; }
-
[1.8] [Solved] methods #onEntityWalking #onEntityCollideWithBlock
bump Help please ...just a couple more problems to fix with my 1.8 mod update then I can move on to a newer version ..what is wrong with my coding? neither #onEntityCollideWithBlock with IBlockState parameter or without is working I have no errors in Eclipse, and no crash. The method is simply not being called. My Block class extends BlockFluidClassic. package com.glistre.glistremod.blocks; import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo; import com.glistre.glistremod.entities.king.EntityTobieKing; import com.glistre.glistremod.entities.queen.EntityTobieQueen; import com.glistre.glistremod.init.ItemRegistry; import com.glistre.glistremod.reference.Reference; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidClassic; import net.minecraftforge.fluids.Fluid; public class RudBlock extends BlockFluidClassic { public RudBlock(Fluid fluid, Material material) { super(fluid, material); setCreativeTab(CreativeTabs.tabMisc); } @Override public boolean canDisplace(IBlockAccess world, BlockPos pos) { if (world.getBlockState(pos).getBlock().getMaterial().isLiquid()) return false; return super.canDisplace(world, pos); } @Override public boolean displaceIfPossible(World world, BlockPos pos) { if (world.getBlockState(pos).getBlock().getMaterial().isLiquid()) return false; return super.displaceIfPossible(world, pos); } @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { return true; } /* @Override //duration, level , badeffect or not public void onEntityWalk(World worldIn, BlockPos pos, Entity entity){ // ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(ItemRegistry.poisonProtectPotion.id, 300, 0, false)); //adds damage effect from Rud if ((!worldIn.isRemote && entity instanceof EntityPlayer )) ((EntityPlayer)entity).attackEntityFrom(DamageSource.wither, 100); } */ public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { float f = .01F; return new AxisAlignedBB((double)((float)pos.getX() + f), (double)pos.getY(), (double)((float)pos.getZ() + f), (double)((float)(pos.getX() + 1) - f), (double)((float)(pos.getY() + 1) - f), (double)((float)(pos.getZ() + 1) - f)); } //adds 0.01F to the block bounding box AKA makes box smaller?larger? @Override @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBox(World worldIn, BlockPos pos) { float f = 0.01F; return new AxisAlignedBB((double)((float)pos.getX() + f), (double)pos.getY(), (double)((float)pos.getZ() + f), (double)((float)(pos.getX() + 1) - f), (double)(pos.getY() + 1), (double)((float)(pos.getZ() + 1) - f)); } @Override public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos){ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F); } @Override//no IBlockState aka stateless matches old onEntityWalking exactly like with slimes public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, Entity entityIn) { // super.onEntityCollidedWithBlock(worldIn, pos, entityIn); //adds damage effect from Rud if ((!worldIn.isRemote && entityIn instanceof EntityPlayer )) ((EntityPlayer)entityIn).attackEntityFrom(DamageSource.wither, 100); } //use IBlockState needed for 1.8 there are two overloads //duration, level , badeffect , no swirls? @Override public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) { // super.onEntityCollidedWithBlock(worldIn, pos, state, entityIn); if (!worldIn.isRemote && entityIn instanceof EntityPlayer ){ ((EntityPlayer)entityIn).attackEntityFrom(DamageSource.wither, 1.0F); ((EntityPlayer)entityIn).addPotionEffect(new PotionEffect(Potion.confusion.id, 300, 0, false, false)); //adds potion effect to player/target--nausea=confusion System.out.print("Called confusion"); return; } else if (entityIn instanceof EntityLiving ) { ((EntityLiving)entityIn).addPotionEffect(new PotionEffect(Potion.damageBoost.id, 2000, 2, false, false)); //adds potion effect to mobs/ target --strength=damageboost System.out.println("Called damageboost"); return; } else if ((entityIn instanceof EntityBlackTobo || entityIn instanceof EntityTobieKing || entityIn instanceof EntityTobieQueen)){ ((EntityBlackTobo) entityIn).addPotionEffect(new PotionEffect(Potion.heal.id, 2000, 7, false, true)); ((EntityTobieKing) entityIn).addPotionEffect(new PotionEffect(Potion.heal.id, 2000, 7, false, true)); ((EntityTobieQueen) entityIn).addPotionEffect(new PotionEffect(Potion.heal.id, 2000, 7, false, true)); System.out.println("Called mob healing"); } return; } @Override public boolean isOpaqueCube(){ return true; } @Override public boolean isFullCube(){ return false; } }
-
[1.8] [Solved] methods #onEntityWalking #onEntityCollideWithBlock
Edited: #onEntityWalk not coming up for me as a method...perhaps that's a 1.8.9 or later version not 1.8? The other method Block#public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)is not working for me either maybe something wrong with my coding?
IPS spam blocked by CleanTalk.