Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Glistre

Members
  • Joined

  • Last visited

Everything posted by Glistre

  1. I have fooling with this for hours and hours --I cannot get my custom arrow/projectile to render. .. The particle effects display but not the projectile. All my other entities render fine. At one point, after moving things all around I got a white cube but I don't even recall how I did that. Sorry my code is not formatted well, but if someone could point me in the right direction I will name my next child after you ... I am sure this is something so simple that I am doing wrong: EntityBlasterBolt class: package com.glistre.glistremod.projectiles.blaster; import java.util.List; import com.glistre.glistremod.GlistreMod; import com.glistre.glistremod.init.ItemRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Items; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.event.entity.player.ArrowNockEvent; import com.glistre.glistremod.projectiles.blaster.*; import com.glistre.glistremod.reference.Reference; public class Blaster extends Item{ public final String textureName; public Blaster(int par1, String textureName) { super(); this.textureName = textureName; this.setUnlocalizedName(textureName); this.setFull3D(); } public void onPlayerStoppedUsing(ItemStack itemStack, World world, EntityPlayer player, int usesRemaining) { int j = this.getMaxItemUseDuration(itemStack) - usesRemaining; ArrowLooseEvent event = new ArrowLooseEvent(player, itemStack, j); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) { return; } j = event.charge; boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, itemStack) > 0; if (flag || player.inventory.hasItem(ItemRegistry.glistre_dust)) { // change normal 20.0F to 1.0F to make instant charge 5.0F = 5 ticks or 1/4 second float f = (float)j / 1.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double)f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityBlasterBolt par1EntityBlasterBolt = new EntityBlasterBolt(world, player, f * 2.0F); if (f == 1.0F) { par1EntityBlasterBolt.setIsCritical(true); } int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, itemStack); if (k > 0) { par1EntityBlasterBolt.setDamage(par1EntityBlasterBolt.getDamage() + (double)k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, itemStack); if (l > 0) { par1EntityBlasterBolt.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, itemStack) > 0) { par1EntityBlasterBolt.setFire(100); } itemStack.damageItem(1, player); //this is the sound releasing from blaster but first line of same sound in EntityBlasterBolt will not sound without it, //the first float is volume 1.0F is usual depends on sound file world.playSoundAtEntity(player, "glistremod:laser_blaster", 1.0F, 2.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { par1EntityBlasterBolt.canBePickedUp = 2; } else { player.inventory.consumeInventoryItem(ItemRegistry.glistre_dust); } if (!world.isRemote) { world.spawnEntityInWorld(par1EntityBlasterBolt); } //took out the if ...isRemote to get blasterBolt to render in 1.8 but neither way works in 1.8.9 // if (!world.isRemote) // { // world.spawnEntityInWorld(par1EntityBlasterBolt); // } } } public EnumAction getItemUseAction(ItemStack itemStack) { return EnumAction.BOW; } public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { ArrowNockEvent event = new ArrowNockEvent(player, itemStack); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) { return event.result; } if (player.capabilities.isCreativeMode || player.inventory.hasItem(ItemRegistry.glistre_dust)) { player.setItemInUse(itemStack, this.getMaxItemUseDuration(itemStack)); } //adds sound effect on ArrowKnock world.playSoundAtEntity(player, "glistremod:epm_flash", 1.0F, 2.0F); return itemStack; } public void onUsingItemTick(ItemStack stack, EntityPlayer player, int count) { this.setDamage(stack, 99999 - count); } public int getMaxItemUseDuration(ItemStack par1ItemStack) { return 72000; } //adds appearance of enchantment @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack par1ItemStack) { return true; } } Render blaster bolt class: package com.glistre.glistremod.projectiles.blaster; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraftforge.fml.client.registry.IRenderFactory; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import net.minecraftforge.fml.relauncher.SideOnly; import com.glistre.glistremod.GlistreMod; import com.glistre.glistremod.init.GlistreEntityRegistry; import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt; import com.glistre.glistremod.reference.Reference; @SideOnly(Side.CLIENT) public class RendreBlast extends Render<EntityBlasterBolt> { public RendreBlast(RenderManager renderManager) { super(renderManager); } private static final ResourceLocation blastTextures = new ResourceLocation(Reference.MOD_ID + ":" + "textures/entities/ender_bolt_1.png"); public void doRenderEntity(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, Float partialTicks) { this.bindEntityTexture(par1EntityBlasterBolt); //this.bindTexture(blastTextures); GlStateManager.pushMatrix(); GlStateManager.translate((float)x, (float)y, (float)z); GlStateManager.rotate(par1EntityBlasterBolt.prevRotationYaw + (par1EntityBlasterBolt.rotationYaw - par1EntityBlasterBolt.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(par1EntityBlasterBolt.prevRotationPitch + (par1EntityBlasterBolt.rotationPitch - par1EntityBlasterBolt.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F); Tessellator tessellator = Tessellator.getInstance(); //1.8 update added WorldRenderer and change var10 to worldrenderer WorldRenderer worldrenderer = tessellator.getWorldRenderer(); int i = 0; float var12 = 0.0F; float var13 = 0.5F; float var14 = (float)(0 + i * 10) / 32.0F; float var15 = (float)(5 + i * 10) / 32.0F; float var16 = 0.0F; float var17 = 0.15625F; float var18 = (float)(5 + i * 10) / 32.0F; float var19 = (float)(10 + i * 10) / 32.0F; float var20 = 0.05625F; // GL11.glEnable(GL12.GL_RESCALE_NORMAL); changed to below GlStateManager.enableRescaleNormal(); // GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); // GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); float var21 = (float)par1EntityBlasterBolt.arrowShake - partialTicks; if (var21 > 0.0F) { float var22 = -MathHelper.sin(var21 * 3.0F) * var21; // GL11.glRotatef(var22, 0.0F, 0.0F, 1.0F); //changed to below GlStateManager.rotate(var22, 0.0F, 0.0F, 1.0F); } GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F); GlStateManager.scale(var20, var20, var20); GlStateManager.translate(-4.0F, 0.0F, 0.0F); GL11.glNormal3f(var20, 0.0F, 0.0F); worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var18); worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var18); worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19); worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var19); tessellator.draw(); GL11.glNormal3f(-var20, 0.0F, 0.0F); worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double)var16, (double)var18); worldrenderer.pos(-7.0D, 2.0D, 2.0D).tex((double)var17, (double)var18); worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double)var17, (double)var19); worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double)var16, (double)var19); tessellator.draw(); for (int var23 = 0; var23 < 4; ++var23) { GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); GL11.glNormal3f(0.0F, 0.0F, var20); worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); worldrenderer.pos(-8.0D, -2.0D, 0.0D).tex((double)var12, (double)var14); worldrenderer.pos(8.0D, -2.0D, 0.0D).tex((double)var13, (double)var14); worldrenderer.pos(8.0D, 2.0D, 0.0D).tex((double)var13, (double)var15); worldrenderer.pos(-8.0D, 2.0D, 0.0D).tex((double)var12, (double)var15); tessellator.draw(); } GlStateManager.disableRescaleNormal(); GlStateManager.popMatrix(); super.doRender(par1EntityBlasterBolt, x, y, z, entityYaw, partialTicks); } /** * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1, * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that. */ @Override public void doRender(EntityBlasterBolt par1EntityBlasterBolt, double x, double y, double z, float entityYaw, float partialTicks) { this.doRenderEntity((EntityBlasterBolt)par1EntityBlasterBolt, x, x, z, entityYaw, partialTicks); } /* @Override protected boolean bindEntityTexture(Entity entity) { ResourceLocation resourcelocation = this.getEntityTexture(entity); if (resourcelocation == null) { return false; } else { this.bindTexture(resourcelocation); return true; } } @Override public void bindTexture(ResourceLocation location) { this.renderManager.renderEngine.bindTexture(location); }*/ @Override public ResourceLocation getEntityTexture(EntityBlasterBolt entity) { return blastTextures; } } Client Proxy: package com.glistre.glistremod.proxies; import java.awt.Color; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.client.registry.IRenderFactory; import net.minecraftforge.fml.client.registry.RenderingRegistry; import com.glistre.glistremod.GlistreMod; import com.glistre.glistremod.blocks.fluids.ModFluids; import com.glistre.glistremod.effects.EntityPortalFreonFX; import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile; import com.glistre.glistremod.effects.potions.splash.RenderSplashPotion; import com.glistre.glistremod.entities.*; import com.glistre.glistremod.entities.blacktobie.BlackModelTobo; import com.glistre.glistremod.entities.blacktobie.BlackRenderTobo; import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo; import com.glistre.glistremod.entities.guardian.EntityTobieSkel; import com.glistre.glistremod.entities.guardian.TobieModelGuardian; import com.glistre.glistremod.entities.guardian.TobieSkelRender; import com.glistre.glistremod.entities.king.EntityTobieKing; import com.glistre.glistremod.entities.king.TobieKingRender; import com.glistre.glistremod.entities.king.TobieModelKing; import com.glistre.glistremod.entities.queen.EntityTobieQueen; import com.glistre.glistremod.entities.queen.TobieModelQueen; import com.glistre.glistremod.entities.queen.TobieQueenRender; import com.glistre.glistremod.entities.wolf.BlackModelWolf; import com.glistre.glistremod.entities.wolf.BlackRenderWolf; import com.glistre.glistremod.entities.wolf.EntityBlackWolf; import com.glistre.glistremod.entities.wolf.EntityGlistreWolf; import com.glistre.glistremod.entities.wolf.GlistreModelWolf; import com.glistre.glistremod.entities.wolf.GlistreRenderWolf; import com.glistre.glistremod.init.BlockRegistry; import com.glistre.glistremod.init.GMTileEntityRegistry; import com.glistre.glistremod.init.GlistreEntityRegistry; import com.glistre.glistremod.init.ItemRegistry; import com.glistre.glistremod.init.Recipes; //import com.glistre.glistremod.items.bow.BusterBowRenderer; import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt; import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball; import com.glistre.glistremod.projectiles.blaster.EntitySceptreBolt; import com.glistre.glistremod.projectiles.blaster.RendreBlast; import com.glistre.glistremod.projectiles.blaster.RendreBlast2; import com.glistre.glistremod.projectiles.blaster.RendreBlast3; //import com.glistre.glistremod.projectiles.blaster.RendreGlistreFactory; import com.glistre.glistremod.projectiles.tobyworstsword.MessageExtendedReachAttack; import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile; import com.glistre.glistremod.projectiles.tobyworstsword.TobyRenderProjectile; import com.glistre.glistremod.reference.Reference; import com.glistre.glistremod.render.GlistreChestGoldInventoryRenderer; import com.glistre.glistremod.render.GlistreChestInventoryRenderer; import com.glistre.glistremod.render.GlistreChestRenderer; import com.glistre.glistremod.render.GlistreGoldChestRenderer; import com.glistre.glistremod.tabs.TabRegistry; import com.glistre.glistremod.tileentity.TileEntityGlistreChest; import com.glistre.glistremod.tileentity.TileEntityGlistreChestGold; import com.glistre.glistremod.util.GlistreModelManager; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.relauncher.Side; public class ClientProxy extends CommonProxy { @Override public void preInit() { registerSimpleNetworking(); GlistreModelManager.INSTANCE.registerAllModels(); ItemRegistry.registerRenders(); BlockRegistry.registerRenders(); TabRegistry.registerRenders(); GlistreEntityRegistry.registerRenders(); // RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, new IRenderFactory<EntityBlasterBolt>(){ RenderingRegistry.registerEntityRenderingHandler(EntityBlasterBolt.class, RendreBlast::new); /* @Override public Render<? super EntityBlasterBolt> createRenderFor(RenderManager manager){ return new RendreBlast(manager, GlistreEntityRegistry.blaster_bolt_1, Minecraft.getMinecraft().getRenderItem()); }});*/ RenderingRegistry.registerEntityRenderingHandler(EntityEnderBoltFireball.class, new IRenderFactory<EntityEnderBoltFireball>(){ @Override public Render<? super EntityEnderBoltFireball> createRenderFor(RenderManager manager){ return new RendreBlast2(manager, GlistreEntityRegistry.ender_bolt_1, Minecraft.getMinecraft().getRenderItem()); }}); RenderingRegistry.registerEntityRenderingHandler(EntitySceptreBolt.class, new IRenderFactory<EntitySceptreBolt>(){ @Override public Render<? super EntitySceptreBolt> createRenderFor(RenderManager manager){ return new RendreBlast3(manager, GlistreEntityRegistry.sceptre_bolt_1, Minecraft.getMinecraft().getRenderItem()); }}); RenderingRegistry.registerEntityRenderingHandler(EntitySplashProjectile.class, new IRenderFactory<EntitySplashProjectile>(){ @Override public Render<? super EntitySplashProjectile> createRenderFor(RenderManager manager){ return new RenderSplashPotion(manager, GlistreEntityRegistry.splash_poison_protection, Minecraft.getMinecraft().getRenderItem()); }}); RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, new IRenderFactory<TobyEntityProjectile>(){ @Override public Render<? super TobyEntityProjectile> createRenderFor(RenderManager manager){ return new TobyRenderProjectile(manager, GlistreEntityRegistry.tobie_worst_projectile_1, Minecraft.getMinecraft().getRenderItem()); }}); RenderingRegistry.registerEntityRenderingHandler(EntityGlistreWolf.class, new IRenderFactory<EntityGlistreWolf>(){ @Override public Render<? super EntityGlistreWolf> createRenderFor(RenderManager manager){ return new GlistreRenderWolf(manager, new GlistreModelWolf(), 0.3F); }}); RenderingRegistry.registerEntityRenderingHandler(EntityBlackWolf.class, new IRenderFactory<EntityBlackWolf>(){ @Override public Render<? super EntityBlackWolf> createRenderFor(RenderManager manager){ return new BlackRenderWolf(manager, new BlackModelWolf(), 0.3F); }}); RenderingRegistry.registerEntityRenderingHandler(EntityBlackTobo.class, new IRenderFactory<EntityBlackTobo>(){ @Override public Render<? super EntityBlackTobo> createRenderFor(RenderManager manager){ return new BlackRenderTobo(manager, new BlackModelTobo(), 0.7F); }}); RenderingRegistry.registerEntityRenderingHandler(EntityTobieSkel.class, new IRenderFactory<EntityTobieSkel>(){ @Override public Render<? super EntityTobieSkel> createRenderFor(RenderManager manager){ return new TobieSkelRender(manager, new TobieModelGuardian(), 0.5F); }}); RenderingRegistry.registerEntityRenderingHandler(EntityTobieQueen.class, new IRenderFactory<EntityTobieQueen>(){ @Override public Render<? super EntityTobieQueen> createRenderFor(RenderManager manager){ return new TobieQueenRender(manager, new TobieModelQueen(), 0.5F); }}); RenderingRegistry.registerEntityRenderingHandler(EntityTobieKing.class, new IRenderFactory<EntityTobieKing>(){ @Override public Render<? super EntityTobieKing> createRenderFor(RenderManager manager){ return new TobieKingRender(manager, new TobieModelKing(), 0.5F); }}); } @Override public void init(){ this.registerRenders(); } /* * Thanks to jabelar copied from his tutorial */ /** * Registers the simple networking channel and messages for both sides */ protected void registerSimpleNetworking() { // DEBUG System.out.println("registering simple networking"); GlistreMod.network = NetworkRegistry.INSTANCE.newSimpleChannel(GlistreMod.NETWORK_CHANNEL_NAME); int packetId = 0; // register messages from client to server GlistreMod.network.registerMessage(MessageExtendedReachAttack.Handler.class, MessageExtendedReachAttack.class, packetId++, Side.SERVER); } @Override public EntityPlayer getPlayerEntityFromContext(MessageContext ctx) { return (ctx.side.isClient() ? Minecraft.getMinecraft().thePlayer : super.getPlayerEntityFromContext(ctx)); } @Override public void registerRenders(){ GlistreChestRenderer gcr = new GlistreChestRenderer(Minecraft.getMinecraft().getRenderManager()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGlistreChest.class, gcr); GlistreGoldChestRenderer gcrg = new GlistreGoldChestRenderer(Minecraft.getMinecraft().getRenderManager()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGlistreChestGold.class, gcrg); TileEntityItemStackRenderer.instance = new GlistreChestInventoryRenderer(); TileEntityItemStackRenderer.instance = new GlistreChestGoldInventoryRenderer(); } @Override public void addParticleEffect(EntityFX particle) { double motionX = particle.worldObj.rand.nextGaussian() * 0.02D; double motionY = particle.worldObj.rand.nextGaussian() * 0.02D; double motionZ = particle.worldObj.rand.nextGaussian() * 0.02D; EntityFX particleMysterious = new EntityPortalFreonFX( particle.worldObj, particle.posX + particle.worldObj.rand.nextFloat() * particle.width * 2.0F - particle.width, particle.posY + 0.5D + particle.worldObj.rand.nextFloat() * particle.height, particle.posZ + particle.worldObj.rand.nextFloat() * particle.width * 2.0F - particle.width, motionX, motionY, motionZ); Minecraft.getMinecraft().effectRenderer.addEffect(particle); } } Main: package com.glistre.glistremod; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import org.apache.logging.log4j.Logger; import com.glistre.glistremod.biome.WorldTypeFreon; import com.glistre.glistremod.biome.WorldTypeGlistre; import com.glistre.glistremod.blocks.fluids.ModFluids; import com.glistre.glistremod.effects.GlistreEventHandler; import com.glistre.glistremod.effects.GlistreModEventHooks; import com.glistre.glistremod.effects.GlistreModTerrainGenHooks; import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile; import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo; import com.glistre.glistremod.entities.guardian.EntityTobieSkel; import com.glistre.glistremod.entities.king.EntityTobieKing; import com.glistre.glistremod.entities.queen.EntityTobieQueen; import com.glistre.glistremod.entities.wolf.EntityBlackWolf; import com.glistre.glistremod.entities.wolf.EntityGlistreWolf; import com.glistre.glistremod.init.BiomeRegistry; import com.glistre.glistremod.init.BlockRegistry; import com.glistre.glistremod.init.DimensionRegistry; import com.glistre.glistremod.init.GMTileEntityRegistry; import com.glistre.glistremod.init.GlistreEntityRegistry; import com.glistre.glistremod.init.ItemRegistry; import com.glistre.glistremod.init.Recipes; import com.glistre.glistremod.items.bow.BusterBow; import com.glistre.glistremod.lib.ConfigurationGlistre; import com.glistre.glistremod.lib.GlistreGuiFactory; import com.glistre.glistremod.mapgen.GlistreVillageBuildings; import com.glistre.glistremod.mapgen.MapGenGlistreVillage; import com.glistre.glistremod.mapgen.MapGenGlistreVillage.GlistreStart; import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt; import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball; //import com.glistre.glistremod.projectiles.blaster.RendreGlistreFactory; import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile; import com.glistre.glistremod.lib.GlistreConfigGui; import com.glistre.glistremod.proxies.CommonProxy; import com.glistre.glistremod.reference.Reference; import com.glistre.glistremod.tabs.TabRegistry; import com.glistre.glistremod.util.GlistreModelManager; import com.glistre.glistremod.worldgen.WorldGen; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent; import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.network.FMLEventChannel; import net.minecraft.client.renderer.block.statemap.IStateMapper; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.common.registry.LanguageRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.potion.Potion; import net.minecraft.stats.Achievement; import net.minecraft.util.ResourceLocation; import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.WorldType; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraft.world.gen.structure.StructureVillagePieces; import net.minecraftforge.common.AchievementPage; import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; //import sun.rmi.runtime.Log; /* MOD INFO */ @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION, guiFactory = Reference.GUI_FACTORY, canBeDeactivated = true) //, dependencies = "required-after:Mystcraft" public class GlistreMod { /* PROXY INFO */ @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS) public static CommonProxy proxy; public static Configuration config; @Mod.Instance(Reference.MOD_ID) public static GlistreMod instance; public static Logger log = FMLLog.getLogger(); // use a named channel to identify packets related to this mod public static final String NETWORK_CHANNEL_NAME = "GlistreMod"; // put the name of your mod here //or create field public static String NETWORK_CHANNEL_NAME; public static FMLEventChannel channel; // networking public static SimpleNetworkWrapper network; public static int modEntityID = 0; /** * DECLARATION SECTION * *********************************************************** */ // DECLARE TOOL MATERIAL /**name, harvestLevel, maxUses, efficiency, damage, enchantability*/ public static ToolMaterial Silvers=EnumHelper.addToolMaterial("Silvers", 4, 1520, 1.0F, 6, 16); public static ToolMaterial Glistres=EnumHelper.addToolMaterial("Glistres", 4, 2020, 1.0F, 7, 16); public static ToolMaterial Sparks=EnumHelper.addToolMaterial("Sparks", 4, 3020, 1.0F, 8, 16); // DECLARE THE NEW ACHIEVEMENTS public static Achievement blockAchievement_1; public static Achievement mobKillAchievement_1; @EventHandler public void preInit(FMLPreInitializationEvent event) { config = new Configuration(event.getSuggestedConfigurationFile()); ConfigurationGlistre.syncConfig(); /** * LOAD SECTION * *********************************************************** */ BlockRegistry.init(); BlockRegistry.register(); ModFluids.registerFluids(); // GlistreModelManager.registerAllModels();//already in proxy.init (ClientProxy) so don't need it here? // ItemRegistry.GlistreMod(); ItemRegistry.init(); //Are these not needed since I have public void Init in the client proxy? ItemRegistry.register(); TabRegistry.initializeTab(); TabRegistry.registerTab(); GMTileEntityRegistry.GlistreMod(); GlistreEntityRegistry.initializeEntity(); GlistreEntityRegistry.register(); GlistreEntityRegistry.registerEntity(); proxy.preInit(); MinecraftForge.EVENT_BUS.register(new GlistreModEventHooks()); // STRUCTURES MapGenStructureIO.registerStructure(MapGenGlistreVillage.GlistreStart.class, "Glistre_Village"); GlistreVillageBuildings.registerVillagePieces(); //put your custom village in there // StructureVillagePieces.registerVillagePieces(); log.info("PreInitialization Complete!"); } @EventHandler public static void init(FMLInitializationEvent event ) { EntityRegistry.registerModEntity(EntityBlasterBolt.class, "blaster_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true); proxy.registerRenders(); //can be done in any init phase but must be done AFTER items are registered proxy.init(); // TabRegistry.GlistreMod(); Recipes.initShapedRecipes(); Recipes.initShapelessRecipes(); Recipes.initSmeltingRecipes(); BiomeRegistry.GlistreMod(); DimensionRegistry.GlistreMod(); WorldGen.initWorldGen(); // GlistreEntityRegistry.GlistreMod(); //the following is code reflection to make Potion effects work Potion[] potionTypes = null; for (Field f : Potion.class.getDeclaredFields()) { f.setAccessible(true); try { // if (f.getName().equals("potionTypes") || f.getName().equals("field_76425_a")) { if (f.getName().equals("potionTypes")) { Field modfield = Field.class.getDeclaredField("modifiers"); modfield.setAccessible(true); modfield.setInt(f, f.getModifiers() & ~Modifier.FINAL); potionTypes = (Potion[])f.get(null); final Potion[] newPotionTypes = new Potion[256]; System.arraycopy(potionTypes, 0, newPotionTypes, 0, potionTypes.length); f.set(null, newPotionTypes); } } catch (Exception e) { System.err.println("Severe error, please report this to the mod author:"); System.err.println(e); } } FMLCommonHandler.instance().bus().register(instance); GlistreEventHandler handler = new GlistreEventHandler(); // REGISTER ENTITY // EntityRegistry.addSpawn(EntityGlistreWolf.class, 20, 3, 7, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.jungle); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.jungleEdge); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.taiga); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.forest); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.roofedForest); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.savanna); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.coldTaiga); EntityRegistry.addSpawn(EntityGlistreWolf.class, 5, 1, 1, EnumCreatureType.CREATURE, BiomeGenBase.swampland); EntityRegistry.addSpawn(EntityTobieSkel.class, 20, 1, 2, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre); EntityRegistry.addSpawn(EntityBlackTobo.class, 14, 1, 2, EnumCreatureType.CREATURE, BiomeRegistry.biomeFreon); EntityRegistry.addSpawn(EntityBlackTobo.class, 12, 1, 1, EnumCreatureType.CREATURE, BiomeRegistry.biomeGlistre); EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.forest); EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.coldTaiga); EntityRegistry.addSpawn(EntityBlackTobo.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.extremeHills); EntityRegistry.addSpawn(EntityBlackWolf.class, 5, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.birchForest); EntityRegistry.addSpawn(EntityBlackWolf.class, 5, 1, 2, EnumCreatureType.CREATURE, BiomeGenBase.forest); // EntityRegistry.addSpawn(EntityBlackTobo.class, 20, 1, 3, EnumCreatureType.CREATURE, BiomeRegistry.biomeFreon); //1.8update changed by adding cast blockAchievement_1 = (Achievement) new Achievement("achievement.blockAchievement_1", "blockAchievement_1", -1, -3, BlockRegistry.silver_ore_1, (Achievement)null).registerStat(); mobKillAchievement_1 = (Achievement) new Achievement("achievement.mobKillAchievement_1", "mobKillAchievement_1", -1, -2, ItemRegistry.ancient_book, blockAchievement_1).setSpecial().registerStat(); AchievementPage.registerAchievementPage(new AchievementPage("GlistreMod Achievements", new Achievement[]{blockAchievement_1, mobKillAchievement_1})); FMLCommonHandler.instance().bus().register(handler);//don't really need 1.8.9 you register an instance but needed in 1.8 no idea MinecraftForge.EVENT_BUS.register(handler); MinecraftForge.TERRAIN_GEN_BUS.register(new GlistreModTerrainGenHooks()); log.info("Initialization Complete!"); } @SubscribeEvent public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event){ if(event.modID.equals(Reference.MOD_ID)){ ConfigurationGlistre.syncConfig(); //resync configs this is where restart would or not be required System.out.println("Config changed!"); log.info("Updating config..."); } } @EventHandler public static void postInit( FMLPostInitializationEvent event ) { proxy.postInit(); MinecraftForge.EVENT_BUS.register(new GlistreModEventHooks()); MinecraftForge.TERRAIN_GEN_BUS.register(new GlistreModTerrainGenHooks()); // MinecraftForge.EVENT_BUS.register(new GuiModInfo(Minecraft.getMinecraft())); WorldType BIOMEFREON = new WorldTypeFreon(8, "biomeFreon"); WorldType BIOMEGLISTRE = new WorldTypeGlistre(9, "biomeGlistre"); //if(MystAPI.instability != null) { //API usage //} log.info("Post Initialization Complete!"); } } my Entity Registry: package com.glistre.glistremod.init; import com.glistre.glistremod.GlistreMod; import com.glistre.glistremod.effects.potions.splash.EntitySplashProjectile; import com.glistre.glistremod.effects.potions.splash.ItemSplashPotion; import com.glistre.glistremod.effects.potions.splash.RenderSplashPotion; import com.glistre.glistremod.entities.blacktobie.EntityBlackTobo; import com.glistre.glistremod.entities.guardian.EntityTobieSkel; import com.glistre.glistremod.entities.king.EntityTobieKing; import com.glistre.glistremod.entities.queen.EntityTobieQueen; //import com.glistre.glistremod.entities.unused.EntityTobie; import com.glistre.glistremod.entities.wolf.EntityBlackWolf; import com.glistre.glistremod.entities.wolf.EntityGlistreWolf; import com.glistre.glistremod.projectiles.blaster.EntityBlasterBolt; import com.glistre.glistremod.projectiles.blaster.EntityEnderBoltFireball; import com.glistre.glistremod.projectiles.blaster.EntitySceptreBolt; import com.glistre.glistremod.projectiles.blaster.Projectile2; import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityProjectile; import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntityThrowable; import com.glistre.glistremod.projectiles.tobyworstsword.TobyEntitySword; import com.glistre.glistremod.projectiles.tobyworstsword.TobyRenderProjectile; import com.glistre.glistremod.reference.Reference; import com.glistre.glistremod.tabs.TabRegistry; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.EntityList; import net.minecraft.item.Item; import net.minecraft.item.ItemMonsterPlacer; import net.minecraft.potion.PotionEffect; public class GlistreEntityRegistry { public static void GlistreMod(){ initializeEntity(); // registerEntity(); register(); } // the ray or blast bolt like an arrow public static Item blaster_bolt_1; public static Item splash_poison_protection; // Tobie's Worst Enemy Sword public static Item tobie_worst_projectile_1; // public int blaster_bolt_1ID; public static Item ender_bolt_1; // public int ender_bolt_1ID; public static Item sceptre_bolt_1; // public static Item item_spawn_egg_2 = new ItemMonsterPlacer().setUnlocalizedName("black_wolf").setCreativeTab(TabRegistry.tab_builder).setMaxStackSize(12); // public int sceptre_bolt_1ID; public static int modEntityID = 0; public static void initializeEntity(){ blaster_bolt_1 = new Projectile2(blaster_bolt_1, "blaster_bolt_1").setUnlocalizedName("blaster_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion); splash_poison_protection = new ItemSplashPotion(17, "splash_poison_protection", new PotionEffect[]{new PotionEffect(31, 1200)}, 888888).setUnlocalizedName("splash_poison_protection"); //TOBIE'S WORST ENEMY Sword/Item tobie_worst_projectile_1 = new TobyEntitySword(Item.ToolMaterial.IRON).setUnlocalizedName("tobie_worst_projectile_1"); ender_bolt_1 = new Projectile2(ender_bolt_1, "ender_bolt_1").setUnlocalizedName("ender_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion); sceptre_bolt_1 = new Projectile2(sceptre_bolt_1, "sceptre_bolt_1").setUnlocalizedName("sceptre_bolt_1").setMaxStackSize(64).setCreativeTab(TabRegistry.tab_potion); } public static void registerEntity() { // 1.8 removed crash //SPLASH POTION // GameRegistry.registerItem(splash_poison_protection, "splash_poison_protection"); // BLASTERS EntityRegistry.registerModEntity(EntityBlasterBolt.class, "blaster_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true); EntityRegistry.registerModEntity(EntityEnderBoltFireball.class, "ender_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true); EntityRegistry.registerModEntity(EntitySceptreBolt.class, "sceptre_bolt_1", ++modEntityID, GlistreMod.instance, 64, 10, true); EntityRegistry.registerModEntity(EntitySplashProjectile.class, "splash_poison_protection", ++modEntityID, GlistreMod.instance, 64, 1, true); //1.8 removed crash // TOBIE'S WORST ENEMY // GameRegistry.registerItem(tobie_worst_projectile_1, "tobie_worst_projectile_1"); EntityRegistry.registerModEntity(TobyEntityProjectile.class, "tobie_worst_projectile_1", ++modEntityID, GlistreMod.instance, 64, 1, true); // MOBS // 80 is max distance from player, 3 is update frequencies must be 3 for mobs, projectiles must be more precise 1, //last parameter is send velocity information should be true unless entity never moves EntityRegistry.registerModEntity(EntityGlistreWolf.class, "glistre_wolf", ++modEntityID, GlistreMod.instance, 80, 3, true); EntityRegistry.registerEgg (EntityGlistreWolf.class, 0xFFFFFF, 0xFFFF5D); EntityRegistry.registerModEntity(EntityBlackWolf.class, "black_wolf", ++modEntityID, GlistreMod.instance, 80, 3, true); EntityRegistry.registerEgg (EntityBlackWolf.class, 0xFFD700, 0xc5b358); // EntityList.classToStringMapping.put(ItemRegistry.item_spawn_egg_2, "black_wolf"); EntityRegistry.registerModEntity(EntityBlackTobo.class, "corrupted_tobie", ++modEntityID, GlistreMod.instance, 80, 3, true); EntityRegistry.registerEgg (EntityBlackTobo.class, 0xc5b358, 0xFFD700); EntityRegistry.registerModEntity(EntityTobieSkel.class, "tobie_skelly_guardian", ++modEntityID, GlistreMod.instance, 80, 3, true); EntityRegistry.registerEgg (EntityTobieSkel.class, 0xCCAC00, 0xFF9900); EntityRegistry.registerModEntity(EntityTobieKing.class, "tobie_king", ++modEntityID, GlistreMod.instance, 80, 3, true); EntityRegistry.registerEgg (EntityTobieKing.class, 0x534600, 0xc5b358); EntityRegistry.registerModEntity(EntityTobieQueen.class, "tobie_queen_elizabeth", ++modEntityID, GlistreMod.instance, 80, 3, true); EntityRegistry.registerEgg (EntityTobieQueen.class, 0xFFD700, 0xCC0000); } public static void register(){ GameRegistry.registerItem(blaster_bolt_1, "blaster_bolt_1"); GameRegistry.registerItem(splash_poison_protection, "splash_poison_protection"); GameRegistry.registerItem(tobie_worst_projectile_1, "tobie_worst_projectile_1"); GameRegistry.registerItem(ender_bolt_1, "ender_bolt_1"); GameRegistry.registerItem(sceptre_bolt_1, "sceptre_bolt_1"); } public static void registerRenders(){ registerRender(blaster_bolt_1); registerRender(splash_poison_protection); registerRender(tobie_worst_projectile_1); registerRender(ender_bolt_1); registerRender(sceptre_bolt_1); // RenderingRegistry.registerEntityRenderingHandler(TobyEntityProjectile.class, new TobyRenderProjectile(Minecraft.getMinecraft().getRenderManager(), tobie_worst_projectile_1, Minecraft.getMinecraft().getRenderItem())); // RenderingRegistry.registerEntityRenderingHandler(EntitySplashProjectile.class, new RenderSplashPotion(Minecraft.getMinecraft().getRenderManager(), splash_poison_protection, Minecraft.getMinecraft().getRenderItem())); } public static void registerRender(Item item){ // RenderItem renderItem = Minecraft.getMinecraft().getRenderItem(); // renderItem.getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); // ModelLoader.setCustomModelResourceLocation(item, 0 , new ModelResourceLocation(item.getRegistryName(), "inventory")); ModelLoader.setCustomModelResourceLocation(item, 0 , new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } }
  2. 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
  3. 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
  4. 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 ..?
  5. 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!
  6. 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
  7. 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?
  8. 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?
  9. 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/
  10. Here's the code I hope you can fork it. please let me know if you would need anything else to try DELETED
  11. 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?
  12. 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
  13. 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?
  14. 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)); }
  15. I don't understand how to check for the actual spawning of the entity, so I thought I had to use an event
  16. 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.
  17. 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){
  18. 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)));
  19. 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)); }
  20. 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?
  21. 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; }
  22. 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
  23. 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; }
  24. 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; } }
  25. 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?

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.