Jump to content

gendeathrow

Members
  • Posts

    19
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

gendeathrow's Achievements

Tree Puncher

Tree Puncher (2/8)

3

Reputation

  1. I had wondered why that was done that way. your method works to at least fix the torch issue for translucent render layer. but translucent render layer doesn't like particles inside the block as they get hidden. So I may go with the idea I didn't really want to do and create custom textures and use the cutout mipped version. but thank you cause your method did work the way I needed it.
  2. Hi so after doing some research I finally figured out the new change for render layer type The issue I am having now is rendering a torch inside of a block. Now I'm not sure if I am doing it right or maybe something with this rendering code. The block Items render correctly but the touches inside the block do not. I Ideally I would appreciate to get the translucent rendering type to work. I just want the item blocks and the blocks to look the same. I can do a work around with recreating all the textures and using cutout mipped version, but would rather not do this if its not needed. All Textures are Vanilla textures from Stained Glass Here is an example with the render type set to translucent (Item blocks render Correct, Blocks in world do not) I was also trying to use cutout mipped (Below)(Item blocks don't render correctly, Blocks in world do) You will notice red does not render the alpha same as other colors Setting Render layer: private void doClientStuff(final FMLClientSetupEvent event) { RenderType solid = RenderType.func_228639_c_(); RenderType cutout_mipped = RenderType.func_228641_d_(); RenderType cutout = RenderType.func_228643_e_(); RenderType translucent = RenderType.func_228645_f_(); RenderType translucent_no_crumbling = RenderType.func_228647_g_(); RenderTypeLookup.setRenderLayer(TechBlocks.lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.black_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.blue_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.brown_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.cyan_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.gray_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.green_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.lightblue_lamp.get(),cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.lime_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.magenta_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.orange_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.pink_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.purple_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.red_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.white_lamp.get(), cutout_mipped); RenderTypeLookup.setRenderLayer(TechBlocks.yellow_lamp.get(), cutout_mipped); } Lamp model Json: { "parent": "block/cube_all", "ambientocclusion": false, "elements": [ { "from": [ 7, 0, 7 ], "to": [ 9, 10, 9 ], "shade": false, "faces": { "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" } } }, { "from": [ 7, 0, 0 ], "to": [ 9, 16, 16 ], "shade": false, "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } } }, { "from": [ 0, 0, 7 ], "to": [ 16, 16, 9 ], "shade": false, "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } } }, { "from": [0, 0, 0], "to": [16, 16, 16], "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#t1" }, "up": { "uv": [0, 0, 16, 16], "texture": "#t1" }, "north": { "uv": [0, 0, 16, 16], "texture": "#t1" }, "south": { "uv": [0, 0, 16, 16], "texture": "#t1" }, "west": { "uv": [0, 0, 16, 16], "texture": "#t1" }, "east": { "uv": [0, 0, 16, 16], "texture": "#t1" } } } ], "textures": { "particle": "block/glass", "t1": "block/glass", "torch": "block/torch" } } Colored Lamp Json: { "parent": "tp:block/lamp", "textures": { "particle": "block/blue_stained_glass", "t1": "block/blue_stained_glass" } } Item Json: { "parent": "tp:block/lamp_blue" } BlockState Json: { "variants": { "": { "model": "tp:block/lamp_blue" } } } Lamp Block: public class Lamp extends AbstractGlassBlock { public Lamp(Properties prop) { super(prop.hardnessAndResistance(.5F, 1F).lightValue(15).sound(SoundType.GLASS).noDrops().func_226896_b_()); } @Override public BlockRenderType getRenderType(BlockState state) { return BlockRenderType.MODEL; } @OnlyIn(Dist.CLIENT) public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) { double d0 = (double)pos.getX() + 0.5D; double d1 = (double)pos.getY() + 0.7D; double d2 = (double)pos.getZ() + 0.5D; worldIn.addParticle(ParticleTypes.SMOKE, d0, d1, d2, 0.0D, 0.0D, 0.0D); worldIn.addParticle(ParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D); } } I'm hopping I'm just missing something. or there is a simple fix to this. If anyone has some insights I would greatly appreciate it. Thanks
  3. Alright after some searching thru all the function back finally realized that what I had thought was font color was something different. oh well I got the fix here. Hopefully this will help anyone else out with this. If I can remember I update this when the mappings get updated I will. EntityRendererManager rendermanager = Minecraft.getInstance().getRenderManager(); rendermanager.func_229084_a_(newentity, 0, 0, 0, 0f, 0F,e.getMatrixStack(), Impl, rendermanager.func_229085_a_(newentity, e.getPartialRenderTick()));
  4. So I'm trying to override the Players/an Entity model and render a new mob in its place. Everything work except the light mapping for the model. This same thing was used in 1.12, and I have messed with a lot of GL states to try and fix it. But so far no fix. I know a lot has changed in 1.15 with rendering from what I have read. And wonder if there is anything I can actually fix or I just have to wait. Image below. Code below that. Skeleton on the left is my player with the new model rendered over it. private static IRenderTypeBuffer Impl = IRenderTypeBuffer.func_228455_a_(new BufferBuilder(256));; @SubscribeEvent public static void renderFakeEntity(RenderLivingEvent.Pre e) { if(e.getEntity() instanceof PlayerEntity) { e.setCanceled(true); //This is just for testing atm. Later will be handled differently SkeletonEntity newentity = new SkeletonEntity(EntityType.SKELETON, e.getEntity().getEntityWorld()); int x = e.getEntity().getPosition().getX(); int y = e.getEntity().getPosition().getY(); int z = e.getEntity().getPosition().getZ(); newentity.setPosition(x, y, z); newentity.rotationYawHead = e.getEntity().rotationYawHead; newentity.rotationYaw = e.getEntity().rotationYaw; newentity.rotationPitch = e.getEntity().rotationPitch; newentity.prevRotationPitch = e.getEntity().prevRotationPitch; newentity.prevRotationYaw = e.getEntity().prevRotationYaw; newentity.prevRotationYawHead = e.getEntity().prevRotationYawHead; newentity.prevRenderYawOffset = e.getEntity().prevRenderYawOffset; newentity.swingProgress = e.getEntity().swingProgress; newentity.limbSwing = e.getEntity().limbSwing; newentity.swingProgressInt = e.getEntity().swingProgressInt; newentity.limbSwingAmount = e.getEntity().limbSwingAmount; newentity.prevLimbSwingAmount = e.getEntity().prevLimbSwingAmount; newentity.setMotion(e.getEntity().getMotion()); newentity.ticksExisted = e.getEntity().ticksExisted; newentity.prevPosX = e.getEntity().prevPosX; newentity.prevPosY = e.getEntity().prevPosY; newentity.prevPosZ = e.getEntity().prevPosZ; newentity.setHeldItem(Hand.MAIN_HAND, e.getEntity().getHeldItemMainhand()); newentity.setCustomNameVisible(true); // Minecraft.getInstance().getRenderManager().func_229085_a_(e.getEntity(), e.getPartialRenderTick()); Minecraft.getInstance().getRenderManager().func_229084_a_(newentity, 0, 0, 0, 0f, 0F,e.getMatrixStack(), Impl, 200); } } The last Integer that is suppose to change the font color (from what I can tell), but seems to change the brightness of the whole model as well, 0 the skeleton is dark, 200-256 is bright. The world light level seems to affect it slightly, but block light levels do not seem to as much. The picture shown above is set with the 200 value. Minecraft.getInstance().getRenderManager().func_229084_a_(newentity, 0, 0, 0, 0f, 0F,e.getMatrixStack(), Impl, 200);
  5. You can make your own IRecipeSerializer and the type field in your recipe JSON can select that serializer. I don't have any examples atm but you can seach for what others have done. For a water bottle you will have to set it up to read the Itemstacks NBT.
  6. Ahh, I had left it in there when I was debugging. I will re-edit my post and take it out so its not in there. But appreciate ya bringing that up.
  7. Just to give an updated on this. I did finally get the block to replace other blocks. This is more of a demo than what I'm actually doing. Replacing water with a new type of water does not have the intended effects that I would like. As I think it breaks some of the game mechanics now. I will still play around with it. But the code for anyone else that would like to try this for their projects. This doesn't feel like the most cleanest way of doing it. Seems a bit heavy scanning each block in a chunk again. But it works. public class FluidGenReplace extends Feature<NoFeatureConfig> { public FluidGenReplace(Function<Dynamic<?>, ? extends NoFeatureConfig> configFactoryIn) { super(configFactoryIn); } public static Block fromBlock = Blocks.WATER; // change this to suit your need public static Block toBlock = Blocks.SLIME_BLOCK; // change this to suit your need @Override public boolean place(IWorld worldIn, ChunkGenerator<? extends GenerationSettings> generator, Random rand, BlockPos pos, NoFeatureConfig config) { IChunk currentChunk = worldIn.getChunk(pos); // get Chunk int startX = currentChunk.getPos().getXStart(); // get starting X of chunk int startZ = currentChunk.getPos().getZStart(); // get starting Z of chunk int endX = currentChunk.getPos().getXEnd(); // get ending X of chunk int endZ = currentChunk.getPos().getZEnd(); // get ending Z of chunk int startY = 0; // get starting X of chunk (In this case 0) int endY = worldIn.getSeaLevel(); // get ending X of chunk (only replacing up to sea level to reduce amount of scaninng. ) for (int x = startX; x <= endX; ++x) { for (int z = startZ; z <= endZ; ++z) { for (int y = startY; y <= endY; ++y) { BlockState state = worldIn.getBlockState(new BlockPos(x, y, z)); Block block = state.getBlock(); if (block == fromBlock) { worldIn.setBlockState(new BlockPos(x, y, z), toBlock.getDefaultState(), 2); } } } } return false; } }
  8. Hey appreciate you getting back. I had sort of looked at the features, but was not be entirely sure if a feature was even meant to replace all blocks of a certain type in a chunk. Last thing I want to do is cause unnecessary lag during world gen; Seeing that when messing with world gen, its an easy possibility to do. I think this helped me understand a bit more though. I will post back up here after I play around with a few things.
  9. I'm attempting to replace water with a custom block based on its biome. But seem to be having an issue figuring out the proper way to handle this in 1.14. I believe earlier versions had an event for population. But am unclear of a way in 1.14 I never messed with world gen in the earlier versions, but looks like its changed in 1.14 from what I can tell. Any help to some reading material or examples would be great.
  10. Glad that helps.. I like that function layout too. I had always planed to do that. but been too lazy.
  11. Animefan8888 is right about creating a scrolling image by changing the start,height. I wrote most of my guis like that, But if you were wanting to have a bunch of images and text and dont want to write all the logic for that. Than I have used GL Scissor to do what your asking. I've used it to draw scroll-able guis inside other guis. Anything outside the borders will get cut off. It really depends on what you trying to do. As this can be a bit much for a simple scrolling window. You will still have to handle all the key inputs & mouse inputs. This only handles the rendering. Also This was written for mc1.12.2.
  12. To give you an idea what I am talking about.. Here is a screen shot. For some reason it doesn't remember where the player is so rendering side doesn't know where to draw the fishing line to and from. ad yes I realize I don't have a texture for the fishing pole.
  13. I am creating my own fishing pole, and fishing hook. I finally got everything working. problem is when it comes to rendering. Everything will render except the line between the player and the fishing hook. In the Fishing Rendering code the entity.angler becomes null.. which stores the player that casts the fishing pole. I had to do the custom code, because the orginal fishinghook didn't allow me to customize for what I need it to do. FishingRendererCode package com.gendeathrow.skills.client.render; import com.gendeathrow.skills.entity.SK_FishHook; 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.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.EntityFishHook; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; public class renderFishing extends Render { private static final ResourceLocation field_110792_a = new ResourceLocation("textures/particle/particles.png"); private static final String __OBFID = "CL_00000996"; public renderFishing(RenderManager p_i46175_1_) { super(p_i46175_1_); } public void func_180558_a(SK_FishHook entity, double p_180558_2_, double p_180558_4_, double p_180558_6_, float p_180558_8_, float p_180558_9_) { GlStateManager.pushMatrix(); GlStateManager.translate((float)p_180558_2_, (float)p_180558_4_, (float)p_180558_6_); GlStateManager.enableRescaleNormal(); GlStateManager.scale(0.5F, 0.5F, 0.5F); this.bindEntityTexture(entity); Tessellator tessellator = Tessellator.getInstance(); WorldRenderer worldrenderer = tessellator.getWorldRenderer(); byte b0 = 1; byte b1 = 2; float f2 = (float)(b0 * 8 + 0) / 128.0F; float f3 = (float)(b0 * 8 + / 128.0F; float f4 = (float)(b1 * 8 + 0) / 128.0F; float f5 = (float)(b1 * 8 + / 128.0F; float f6 = 1.0F; float f7 = 0.5F; float f8 = 0.5F; GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); worldrenderer.startDrawingQuads(); worldrenderer.setNormal(0.0F, 1.0F, 0.0F); worldrenderer.addVertexWithUV((double)(0.0F - f7), (double)(0.0F - f8), 0.0D, (double)f2, (double)f5); worldrenderer.addVertexWithUV((double)(f6 - f7), (double)(0.0F - f8), 0.0D, (double)f3, (double)f5); worldrenderer.addVertexWithUV((double)(f6 - f7), (double)(1.0F - f8), 0.0D, (double)f3, (double)f4); worldrenderer.addVertexWithUV((double)(0.0F - f7), (double)(1.0F - f8), 0.0D, (double)f2, (double)f4); tessellator.draw(); GlStateManager.disableRescaleNormal(); GlStateManager.popMatrix(); if (entity.angler != null) { System.out.println("draw entity not null"); float f9 = entity.angler.getSwingProgress(p_180558_9_); float f10 = MathHelper.sin(MathHelper.sqrt_float(f9) * (float)Math.PI); Vec3 vec3 = new Vec3(-0.36D, 0.03D, 0.35D); vec3 = vec3.rotatePitch(-(entity.angler.prevRotationPitch + (entity.angler.rotationPitch - entity.angler.prevRotationPitch) * p_180558_9_) * (float)Math.PI / 180.0F); vec3 = vec3.rotateYaw(-(entity.angler.prevRotationYaw + (entity.angler.rotationYaw - entity.angler.prevRotationYaw) * p_180558_9_) * (float)Math.PI / 180.0F); vec3 = vec3.rotateYaw(f10 * 0.5F); vec3 = vec3.rotatePitch(-f10 * 0.7F); double d3 = entity.angler.prevPosX + (entity.angler.posX - entity.angler.prevPosX) * (double)p_180558_9_ + vec3.xCoord; double d4 = entity.angler.prevPosY + (entity.angler.posY - entity.angler.prevPosY) * (double)p_180558_9_ + vec3.yCoord; double d5 = entity.angler.prevPosZ + (entity.angler.posZ - entity.angler.prevPosZ) * (double)p_180558_9_ + vec3.zCoord; double d6 = (double)entity.angler.getEyeHeight(); if (this.renderManager.options != null && this.renderManager.options.thirdPersonView > 0 || entity.angler != Minecraft.getMinecraft().thePlayer) { float f11 = (entity.angler.prevRenderYawOffset + (entity.angler.renderYawOffset - entity.angler.prevRenderYawOffset) * p_180558_9_) * (float)Math.PI / 180.0F; double d7 = (double)MathHelper.sin(f11); double d9 = (double)MathHelper.cos(f11); double d11 = 0.35D; double d13 = 0.8D; d3 = entity.angler.prevPosX + (entity.angler.posX - entity.angler.prevPosX) * (double)p_180558_9_ - d9 * 0.35D - d7 * 0.8D; d4 = entity.angler.prevPosY + d6 + (entity.angler.posY - entity.angler.prevPosY) * (double)p_180558_9_ - 0.45D; d5 = entity.angler.prevPosZ + (entity.angler.posZ - entity.angler.prevPosZ) * (double)p_180558_9_ - d7 * 0.35D + d9 * 0.8D; d6 = entity.angler.isSneaking() ? -0.1875D : 0.0D; } double d16 = entity.prevPosX + (entity.posX - entity.prevPosX) * (double)p_180558_9_; double d8 = entity.prevPosY + (entity.posY - entity.prevPosY) * (double)p_180558_9_ + 0.25D; double d10 = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)p_180558_9_; double d12 = (double)((float)(d3 - d16)); double d14 = (double)((float)(d4 - d8)) + d6; double d15 = (double)((float)(d5 - d10)); GlStateManager.disableTexture2D(); GlStateManager.disableLighting(); worldrenderer.startDrawing(3); worldrenderer.setColorOpaque_I(0); byte b2 = 16; for (int i = 0; i <= b2; ++i) { float f12 = (float)i / (float)b2; worldrenderer.addVertex(p_180558_2_ + d12 * (double)f12, p_180558_4_ + d14 * (double)(f12 * f12 + f12) * 0.5D + 0.25D, p_180558_6_ + d15 * (double)f12); } tessellator.draw(); GlStateManager.enableLighting(); GlStateManager.enableTexture2D(); super.doRender(entity, p_180558_2_, p_180558_4_, p_180558_6_, p_180558_8_, p_180558_9_); }//else System.out.println("NULL"); } /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. */ protected ResourceLocation getEntityTexture(SK_FishHook entity) { return field_110792_a; } /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. */ protected ResourceLocation getEntityTexture(Entity entity) { return this.getEntityTexture((SK_FishHook)entity); } /** * 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 func_76986_a(T entity, double d, double d1, * double d2, float f, float f1). But JAD is pre 1.5 so doe */ public void doRender(Entity entity, double x, double y, double z, float p_76986_8_, float partialTicks) { this.func_180558_a((SK_FishHook)entity, x, y, z, p_76986_8_, partialTicks); } } Custom FishHookEntity package com.gendeathrow.skills.entity; import java.util.Arrays; import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemFishFood; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.stats.StatList; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; import net.minecraft.util.WeightedRandom; import net.minecraft.util.WeightedRandomFishable; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.gendeathrow.skills.common.SkillTrackerData; import com.gendeathrow.skills.common.Skill_TrackerManager; import com.gendeathrow.skills.handlers.ObjectHandler; public class SK_FishHook extends Entity { public static final List JUNK = Arrays.asList(new WeightedRandomFishable[] {(new WeightedRandomFishable(new ItemStack(Items.leather_boots), 10)).setMaxDamagePercent(0.9F), new WeightedRandomFishable(new ItemStack(Items.leather), 10), new WeightedRandomFishable(new ItemStack(Items.bone), 10), new WeightedRandomFishable(new ItemStack(Items.potionitem), 10), new WeightedRandomFishable(new ItemStack(Items.string), 5), (new WeightedRandomFishable(new ItemStack(Items.fishing_rod), 2)).setMaxDamagePercent(0.9F), new WeightedRandomFishable(new ItemStack(Items.bowl), 10), new WeightedRandomFishable(new ItemStack(Items.stick), 5), new WeightedRandomFishable(new ItemStack(Items.dye, 10, EnumDyeColor.BLACK.getDyeDamage()), 1), new WeightedRandomFishable(new ItemStack(Blocks.tripwire_hook), 10), new WeightedRandomFishable(new ItemStack(Items.rotten_flesh), 10)}); public static final List TREASURE = Arrays.asList(new WeightedRandomFishable[] {new WeightedRandomFishable(new ItemStack(Blocks.waterlily), 1), new WeightedRandomFishable(new ItemStack(Items.name_tag), 1), new WeightedRandomFishable(new ItemStack(Items.saddle), 1), (new WeightedRandomFishable(new ItemStack(Items.bow), 1)).setMaxDamagePercent(0.25F).setEnchantable(), (new WeightedRandomFishable(new ItemStack(Items.fishing_rod), 1)).setMaxDamagePercent(0.25F).setEnchantable(), (new WeightedRandomFishable(new ItemStack(Items.book), 1)).setEnchantable()}); public static final List FISH = Arrays.asList(new WeightedRandomFishable[] {new WeightedRandomFishable(new ItemStack(Items.fish, 1, ItemFishFood.FishType.COD.getMetadata()), 60), new WeightedRandomFishable(new ItemStack(Items.fish, 1, ItemFishFood.FishType.SALMON.getMetadata()), 25), new WeightedRandomFishable(new ItemStack(Items.fish, 1, ItemFishFood.FishType.CLOWNFISH.getMetadata()), 2), new WeightedRandomFishable(new ItemStack(Items.fish, 1, ItemFishFood.FishType.PUFFERFISH.getMetadata()), 13)}); private int xTile; private int yTile; private int zTile; private Block inTile; private boolean inGround; public int shake; public EntityPlayer angler; public SkillTrackerData tracker; private int ticksInGround; private int ticksInAir; private int ticksCatchable; private int ticksCaughtDelay; private int ticksCatchableDelay; private float fishApproachAngle; public Entity caughtEntity; private int fishPosRotationIncrements; private double fishX; private double fishY; private double fishZ; private double fishYaw; private double fishPitch; @SideOnly(Side.CLIENT) private double clientMotionX; @SideOnly(Side.CLIENT) private double clientMotionY; @SideOnly(Side.CLIENT) private double clientMotionZ; private static final String __OBFID = "CL_00001663"; public static List func_174855_j() { return FISH; } public SK_FishHook(World worldIn) { super(worldIn); this.xTile = -1; this.yTile = -1; this.zTile = -1; this.setSize(0.25F, 0.25F); this.ignoreFrustumCheck = true; } @SideOnly(Side.CLIENT) public SK_FishHook(World worldIn, double p_i1765_2_, double p_i1765_4_, double p_i1765_6_, EntityPlayer p_i1765_8_) { this(worldIn); this.setPosition(p_i1765_2_, p_i1765_4_, p_i1765_6_); this.ignoreFrustumCheck = true; this.angler = p_i1765_8_; this.tracker = Skill_TrackerManager.lookupTracker(p_i1765_8_); this.tracker.fishingEntity = this; } public SK_FishHook(World worldIn, EntityPlayer fishingPlayer) { super(worldIn); this.xTile = -1; this.yTile = -1; this.zTile = -1; this.ignoreFrustumCheck = true; this.angler = fishingPlayer; this.tracker = Skill_TrackerManager.lookupTracker(fishingPlayer); this.tracker.fishingEntity = this; this.setSize(0.25F, 0.25F); this.setLocationAndAngles(fishingPlayer.posX, fishingPlayer.posY + (double)fishingPlayer.getEyeHeight(), fishingPlayer.posZ, fishingPlayer.rotationYaw, fishingPlayer.rotationPitch); this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); this.posY -= 0.10000000149011612D; this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); this.setPosition(this.posX, this.posY, this.posZ); float f = 0.4F; this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * f); this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * f); this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * f); this.handleHookCasting(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); } protected void entityInit() {} /** * Checks if the entity is in range to render by using the past in distance and comparing it to its average edge * length * 64 * renderDistanceWeight Args: distance */ @SideOnly(Side.CLIENT) public boolean isInRangeToRenderDist(double distance) { double d1 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; d1 *= 64.0D; return distance < d1 * d1; } public void handleHookCasting(double p_146035_1_, double p_146035_3_, double p_146035_5_, float p_146035_7_, float p_146035_8_) { float f2 = MathHelper.sqrt_double(p_146035_1_ * p_146035_1_ + p_146035_3_ * p_146035_3_ + p_146035_5_ * p_146035_5_); p_146035_1_ /= (double)f2; p_146035_3_ /= (double)f2; p_146035_5_ /= (double)f2; p_146035_1_ += this.rand.nextGaussian() * 0.007499999832361937D * (double)p_146035_8_; p_146035_3_ += this.rand.nextGaussian() * 0.007499999832361937D * (double)p_146035_8_; p_146035_5_ += this.rand.nextGaussian() * 0.007499999832361937D * (double)p_146035_8_; p_146035_1_ *= (double)p_146035_7_; p_146035_3_ *= (double)p_146035_7_; p_146035_5_ *= (double)p_146035_7_; this.motionX = p_146035_1_; this.motionY = p_146035_3_; this.motionZ = p_146035_5_; float f3 = MathHelper.sqrt_double(p_146035_1_ * p_146035_1_ + p_146035_5_ * p_146035_5_); this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_146035_1_, p_146035_5_) * 180.0D / Math.PI); this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_146035_3_, (double)f3) * 180.0D / Math.PI); this.ticksInGround = 0; } @SideOnly(Side.CLIENT) public void func_180426_a(double p_180426_1_, double p_180426_3_, double p_180426_5_, float p_180426_7_, float p_180426_8_, int p_180426_9_, boolean p_180426_10_) { this.fishX = p_180426_1_; this.fishY = p_180426_3_; this.fishZ = p_180426_5_; this.fishYaw = (double)p_180426_7_; this.fishPitch = (double)p_180426_8_; this.fishPosRotationIncrements = p_180426_9_; this.motionX = this.clientMotionX; this.motionY = this.clientMotionY; this.motionZ = this.clientMotionZ; } /** * Sets the velocity to the args. Args: x, y, z */ @SideOnly(Side.CLIENT) public void setVelocity(double x, double y, double z) { this.clientMotionX = this.motionX = x; this.clientMotionY = this.motionY = y; this.clientMotionZ = this.motionZ = z; } /** * Called to update the entity's position/logic. */ public void onUpdate() { super.onUpdate(); if (this.fishPosRotationIncrements > 0) { double d7 = this.posX + (this.fishX - this.posX) / (double)this.fishPosRotationIncrements; double d8 = this.posY + (this.fishY - this.posY) / (double)this.fishPosRotationIncrements; double d9 = this.posZ + (this.fishZ - this.posZ) / (double)this.fishPosRotationIncrements; double d1 = MathHelper.wrapAngleTo180_double(this.fishYaw - (double)this.rotationYaw); this.rotationYaw = (float)((double)this.rotationYaw + d1 / (double)this.fishPosRotationIncrements); this.rotationPitch = (float)((double)this.rotationPitch + (this.fishPitch - (double)this.rotationPitch) / (double)this.fishPosRotationIncrements); --this.fishPosRotationIncrements; this.setPosition(d7, d8, d9); this.setRotation(this.rotationYaw, this.rotationPitch); } else { if (!this.worldObj.isRemote) { ItemStack itemstack = this.angler.getCurrentEquippedItem(); if (this.angler.isDead || !this.angler.isEntityAlive() || itemstack == null || itemstack.getItem() != ObjectHandler.fishingRod || this.getDistanceSqToEntity(this.angler) > 1024.0D) { System.out.println("REMOVED"); this.setDead(); //this.angler.fishEntity = null; this.tracker.fishingEntity = null; return; } if (this.caughtEntity != null) { if (!this.caughtEntity.isDead) { this.posX = this.caughtEntity.posX; double d12 = (double)this.caughtEntity.height; this.posY = this.caughtEntity.getEntityBoundingBox().minY + d12 * 0.8D; this.posZ = this.caughtEntity.posZ; return; } this.caughtEntity = null; } } if (this.shake > 0) { --this.shake; } if (this.inGround) { if (this.worldObj.getBlockState(new BlockPos(this.xTile, this.yTile, this.zTile)).getBlock() == this.inTile) { ++this.ticksInGround; if (this.ticksInGround == 1200) { this.setDead(); } return; } this.inGround = false; this.motionX *= (double)(this.rand.nextFloat() * 0.2F); this.motionY *= (double)(this.rand.nextFloat() * 0.2F); this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); this.ticksInGround = 0; this.ticksInAir = 0; } else { ++this.ticksInAir; } Vec3 vec31 = new Vec3(this.posX, this.posY, this.posZ); Vec3 vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec31, vec3); vec31 = new Vec3(this.posX, this.posY, this.posZ); vec3 = new Vec3(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); if (movingobjectposition != null) { vec3 = new Vec3(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord); } Entity entity = null; List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); double d0 = 0.0D; double d2; for (int i = 0; i < list.size(); ++i) { Entity entity1 = (Entity)list.get(i); if (entity1.canBeCollidedWith() && (entity1 != this.angler || this.ticksInAir >= 5)) { float f = 0.3F; AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().expand((double)f, (double)f, (double)f); MovingObjectPosition movingobjectposition1 = axisalignedbb.calculateIntercept(vec31, vec3); if (movingobjectposition1 != null) { d2 = vec31.distanceTo(movingobjectposition1.hitVec); if (d2 < d0 || d0 == 0.0D) { entity = entity1; d0 = d2; } } } } if (entity != null) { movingobjectposition = new MovingObjectPosition(entity); } if (movingobjectposition != null) { if (movingobjectposition.entityHit != null) { if (movingobjectposition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.angler), 0.0F)) { this.caughtEntity = movingobjectposition.entityHit; } } else { this.inGround = true; } } if (!this.inGround) { this.moveEntity(this.motionX, this.motionY, this.motionZ); float f5 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f5) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) { ; } while (this.rotationPitch - this.prevRotationPitch >= 180.0F) { this.prevRotationPitch += 360.0F; } while (this.rotationYaw - this.prevRotationYaw < -180.0F) { this.prevRotationYaw -= 360.0F; } while (this.rotationYaw - this.prevRotationYaw >= 180.0F) { this.prevRotationYaw += 360.0F; } this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; float f6 = 0.92F; if (this.onGround || this.isCollidedHorizontally) { f6 = 0.5F; } byte b0 = 5; double d10 = 0.0D; double d5; for (int j = 0; j < b0; ++j) { AxisAlignedBB axisalignedbb1 = this.getEntityBoundingBox(); double d3 = axisalignedbb1.maxY - axisalignedbb1.minY; double d4 = axisalignedbb1.minY + d3 * (double)j / (double)b0; d5 = axisalignedbb1.minY + d3 * (double)(j + 1) / (double)b0; AxisAlignedBB axisalignedbb2 = new AxisAlignedBB(axisalignedbb1.minX, d4, axisalignedbb1.minZ, axisalignedbb1.maxX, d5, axisalignedbb1.maxZ); if (this.worldObj.isAABBInMaterial(axisalignedbb2, Material.water)) { d10 += 1.0D / (double)b0; } } if (!this.worldObj.isRemote && d10 > 0.0D) { WorldServer worldserver = (WorldServer)this.worldObj; int k = 1; BlockPos blockpos = (new BlockPos(this)).up(); if (this.rand.nextFloat() < 0.25F && this.worldObj.canLightningStrike(blockpos)) { k = 2; } if (this.rand.nextFloat() < 0.5F && !this.worldObj.canSeeSky(blockpos)) { --k; } if (this.ticksCatchable > 0) { --this.ticksCatchable; if (this.ticksCatchable <= 0) { this.ticksCaughtDelay = 0; this.ticksCatchableDelay = 0; } } else { float f1; float f2; double d6; float f7; double d11; if (this.ticksCatchableDelay > 0) { this.ticksCatchableDelay -= k; if (this.ticksCatchableDelay <= 0) { this.motionY -= 0.20000000298023224D; this.playSound("random.splash", 0.25F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); f1 = (float)MathHelper.floor_double(this.getEntityBoundingBox().minY); worldserver.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX, (double)(f1 + 1.0F), this.posZ, (int)(1.0F + this.width * 20.0F), (double)this.width, 0.0D, (double)this.width, 0.20000000298023224D, new int[0]); worldserver.spawnParticle(EnumParticleTypes.WATER_WAKE, this.posX, (double)(f1 + 1.0F), this.posZ, (int)(1.0F + this.width * 20.0F), (double)this.width, 0.0D, (double)this.width, 0.20000000298023224D, new int[0]); this.ticksCatchable = MathHelper.getRandomIntegerInRange(this.rand, 10, 30); } else { this.fishApproachAngle = (float)((double)this.fishApproachAngle + this.rand.nextGaussian() * 4.0D); f1 = this.fishApproachAngle * 0.017453292F; f7 = MathHelper.sin(f1); f2 = MathHelper.cos(f1); d5 = this.posX + (double)(f7 * (float)this.ticksCatchableDelay * 0.1F); d11 = (double)((float)MathHelper.floor_double(this.getEntityBoundingBox().minY) + 1.0F); d6 = this.posZ + (double)(f2 * (float)this.ticksCatchableDelay * 0.1F); if (this.rand.nextFloat() < 0.15F) { worldserver.spawnParticle(EnumParticleTypes.WATER_BUBBLE, d5, d11 - 0.10000000149011612D, d6, 1, (double)f7, 0.1D, (double)f2, 0.0D, new int[0]); } float f3 = f7 * 0.04F; float f4 = f2 * 0.04F; worldserver.spawnParticle(EnumParticleTypes.WATER_WAKE, d5, d11, d6, 0, (double)f4, 0.01D, (double)(-f3), 1.0D, new int[0]); worldserver.spawnParticle(EnumParticleTypes.WATER_WAKE, d5, d11, d6, 0, (double)(-f4), 0.01D, (double)f3, 1.0D, new int[0]); } } else if (this.ticksCaughtDelay > 0) { this.ticksCaughtDelay -= k; f1 = 0.15F; if (this.ticksCaughtDelay < 20) { f1 = (float)((double)f1 + (double)(20 - this.ticksCaughtDelay) * 0.05D); } else if (this.ticksCaughtDelay < 40) { f1 = (float)((double)f1 + (double)(40 - this.ticksCaughtDelay) * 0.02D); } else if (this.ticksCaughtDelay < 60) { f1 = (float)((double)f1 + (double)(60 - this.ticksCaughtDelay) * 0.01D); } if (this.rand.nextFloat() < f1) { f7 = MathHelper.randomFloatClamp(this.rand, 0.0F, 360.0F) * 0.017453292F; f2 = MathHelper.randomFloatClamp(this.rand, 25.0F, 60.0F); d5 = this.posX + (double)(MathHelper.sin(f7) * f2 * 0.1F); d11 = (double)((float)MathHelper.floor_double(this.getEntityBoundingBox().minY) + 1.0F); d6 = this.posZ + (double)(MathHelper.cos(f7) * f2 * 0.1F); worldserver.spawnParticle(EnumParticleTypes.WATER_SPLASH, d5, d11, d6, 2 + this.rand.nextInt(2), 0.10000000149011612D, 0.0D, 0.10000000149011612D, 0.0D, new int[0]); } if (this.ticksCaughtDelay <= 0) { this.fishApproachAngle = MathHelper.randomFloatClamp(this.rand, 0.0F, 360.0F); this.ticksCatchableDelay = MathHelper.getRandomIntegerInRange(this.rand, 20, 80); } } else { this.ticksCaughtDelay = MathHelper.getRandomIntegerInRange(this.rand, 100, 900); this.ticksCaughtDelay -= EnchantmentHelper.getLureModifier(this.angler) * 20 * 5; } } if (this.ticksCatchable > 0) { this.motionY -= (double)(this.rand.nextFloat() * this.rand.nextFloat() * this.rand.nextFloat()) * 0.2D; } } d2 = d10 * 2.0D - 1.0D; this.motionY += 0.03999999910593033D * d2; if (d10 > 0.0D) { f6 = (float)((double)f6 * 0.9D); this.motionY *= 0.8D; } this.motionX *= (double)f6; this.motionY *= (double)f6; this.motionZ *= (double)f6; this.setPosition(this.posX, this.posY, this.posZ); } } } /** * (abstract) Protected helper method to write subclass entity data to NBT. */ public void writeEntityToNBT(NBTTagCompound tagCompound) { tagCompound.setShort("xTile", (short)this.xTile); tagCompound.setShort("yTile", (short)this.yTile); tagCompound.setShort("zTile", (short)this.zTile); ResourceLocation resourcelocation = (ResourceLocation)Block.blockRegistry.getNameForObject(this.inTile); tagCompound.setString("inTile", resourcelocation == null ? "" : resourcelocation.toString()); tagCompound.setByte("shake", (byte)this.shake); tagCompound.setByte("inGround", (byte)(this.inGround ? 1 : 0)); } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readEntityFromNBT(NBTTagCompound tagCompund) { this.xTile = tagCompund.getShort("xTile"); this.yTile = tagCompund.getShort("yTile"); this.zTile = tagCompund.getShort("zTile"); if (tagCompund.hasKey("inTile", ) { this.inTile = Block.getBlockFromName(tagCompund.getString("inTile")); } else { this.inTile = Block.getBlockById(tagCompund.getByte("inTile") & 255); } this.shake = tagCompund.getByte("shake") & 255; this.inGround = tagCompund.getByte("inGround") == 1; } public int handleHookRetraction() { if (this.worldObj.isRemote) { return 0; } else { byte b0 = 0; if (this.caughtEntity != null) { double d0 = this.angler.posX - this.posX; double d2 = this.angler.posY - this.posY; double d4 = this.angler.posZ - this.posZ; double d6 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2 + d4 * d4); double d8 = 0.1D; this.caughtEntity.motionX += d0 * d8; this.caughtEntity.motionY += d2 * d8 + (double)MathHelper.sqrt_double(d6) * 0.08D; this.caughtEntity.motionZ += d4 * d8; b0 = 3; } else if (this.ticksCatchable > 0) { System.out.println("HHOOOKKK!"); EntityItem entityitem = new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, this.getFishingResult()); double d1 = this.angler.posX - this.posX; double d3 = this.angler.posY - this.posY; double d5 = this.angler.posZ - this.posZ; double d7 = (double)MathHelper.sqrt_double(d1 * d1 + d3 * d3 + d5 * d5); double d9 = 0.1D; entityitem.motionX = d1 * d9; entityitem.motionY = d3 * d9 + (double)MathHelper.sqrt_double(d7) * 0.08D; entityitem.motionZ = d5 * d9; this.worldObj.spawnEntityInWorld(entityitem); this.angler.worldObj.spawnEntityInWorld(new EntityXPOrb(this.angler.worldObj, this.angler.posX, this.angler.posY + 0.5D, this.angler.posZ + 0.5D, this.rand.nextInt(6) + 1)); b0 = 1; } if (this.inGround) { b0 = 2; } this.setDead(); //this.angler.fishEntity = null; this.tracker.fishingEntity = null; return b0; } } @SuppressWarnings("unused") private ItemStack getFishingResult() { float f = this.worldObj.rand.nextFloat(); int i = EnchantmentHelper.getLuckOfSeaModifier(this.angler); int j = EnchantmentHelper.getLureModifier(this.angler); if (true) { this.angler.addStat(net.minecraftforge.common.FishingHooks.getFishableCategory(f, i, j).stat, 1); return net.minecraftforge.common.FishingHooks.getRandomFishable(this.rand, f, i, j); } float f1 = 0.1F - (float)i * 0.025F - (float)j * 0.01F; float f2 = 0.05F + (float)i * 0.01F - (float)j * 0.01F; f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); f2 = MathHelper.clamp_float(f2, 0.0F, 1.0F); if (f < f1) { this.angler.triggerAchievement(StatList.junkFishedStat); return ((WeightedRandomFishable)WeightedRandom.getRandomItem(this.rand, JUNK)).getItemStack(this.rand); } else { f -= f1; if (f < f2) { this.angler.triggerAchievement(StatList.treasureFishedStat); return ((WeightedRandomFishable)WeightedRandom.getRandomItem(this.rand, TREASURE)).getItemStack(this.rand); } else { float f3 = f - f2; this.angler.triggerAchievement(StatList.fishCaughtStat); return ((WeightedRandomFishable)WeightedRandom.getRandomItem(this.rand, FISH)).getItemStack(this.rand); } } } /** * Will get destroyed next tick. */ public void setDead() { super.setDead(); if (this.angler != null) { System.out.println("REMOVE"); //this.angler.fishEntity = null; this.tracker.fishingEntity = null; } } } custom fishing pole package com.gendeathrow.skills.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.gendeathrow.skills.common.SkillTrackerData; import com.gendeathrow.skills.common.Skill_TrackerManager; import com.gendeathrow.skills.entity.SK_FishHook; public class SK_FishingRod extends Item { private static final String __OBFID = "CL_00000034"; public SK_FishingRod() { this.setMaxDamage(64); this.setMaxStackSize(1); this.setCreativeTab(CreativeTabs.tabTools); } /** * Returns True is the item is renderer in full 3D when hold. */ @SideOnly(Side.CLIENT) public boolean isFull3D() { return true; } /** * Returns true if this item should be rotated by 180 degrees around the Y axis when being held in an entities * hands. */ @SideOnly(Side.CLIENT) public boolean shouldRotateAroundWhenRendering() { return true; } /** * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) { SkillTrackerData tracker = Skill_TrackerManager.lookupTracker(playerIn); if(tracker == null) return itemStackIn; if (tracker.fishingEntity != null) { int i = tracker.fishingEntity.handleHookRetraction(); itemStackIn.damageItem(i, playerIn); playerIn.swingItem(); } else { worldIn.playSoundAtEntity(playerIn, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(new SK_FishHook(worldIn, (EntityPlayer) playerIn)); } playerIn.swingItem(); playerIn.triggerAchievement(StatList.objectUseStats[item.getIdFromItem(this)]); } return itemStackIn; } /** * Checks isDamagable and if it cannot be stacked */ public boolean isItemTool(ItemStack stack) { return super.isItemTool(stack); } /** * Return the enchantability factor of the item, most of the time is based on material. */ public int getItemEnchantability() { return 1; } } Register entitys public static void registerEntities() { EntityRegistry.registerModEntity(SK_FishHook.class, "skfishinghook", 10, Skillz.instance, 64, 1, true); } public static void initItems() { fishingRod = (SK_FishingRod) new SK_FishingRod().setUnlocalizedName("skfisingrod"); } public static void registerItems() { GameRegistry.registerItem(fishingRod, "skFishingRod"); } ClientProxy @Override public void init(FMLInitializationEvent event) { super.init(event); RenderingRegistry.registerEntityRenderingHandler(SK_FishHook.class, new renderFishing(Minecraft.getMinecraft().getRenderManager())); //RenderingRegistry.registerEntityRenderingHandler(SK_FishHook.class, new RenderFish(Minecraft.getMinecraft().getRenderManager())); }
  14. I got it figured out. now I need to figure out how to get the icon image from a dynamic image. Minecraft.getMinecraft().renderEngine.loadTexture(resourcelocation, dynamicTexture); I used the above function to create my own custom resourcelocation and link it to the dynamic texture.. than vanilla minecraft reads it normally. I appreciate the help to make me think harder about it.. sometimes you have to just bounce ideas off ppl.
  15. I believe I figured out what to do.. Thanks for sending me on a search after your last post about the ResourceLocation. It still didn't do what I wanted it to do, but I think I can custom load the texture with texture manager and move it to the correct location... When I try this, I will post what I had done and if it worked or not.
×
×
  • Create New...

Important Information

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