Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.6.4][SOLVED] My Custom Grass Textures
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 1
jkorn2324swagg

[1.6.4][SOLVED] My Custom Grass Textures

By jkorn2324swagg, January 15, 2015 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 15, 2015

Hi, I made a custom grass block and coded it, but when I tried to load minecraft, my textures for my custom grass block were unable to load into minecraft and I do not know what I did wrong.

Here is my code:

 

package mymod.blocks;

 

import java.util.Random;

 

import mymod.Main;

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.client.renderer.texture.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.util.Icon;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class FlamingGrass extends Block

{

    @SideOnly(Side.CLIENT)

    private Icon Dirt_1; //Top of Grass

    @SideOnly(Side.CLIENT)

    private Icon Dirt_3; //Bottom of Grass

    @SideOnly(Side.CLIENT)

    private Icon Dirt_2; //Side of Grass

 

    public FlamingGrass(int par1)

    {

        super(par1, Material.grass);

        this.setTickRandomly(true);

        this.setCreativeTab(CreativeTabs.tabBlock);

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata

    */

    public Icon getIcon(int par1, int par2)

    {

        return par1 == 1 ? this.Dirt_1 : par1 == 0 ? this.Dirt_3 : this.Dirt_2; // 1- Top    0- Bottom  else: Side );

    }

 

    /**

    * Ticks the block if it's been scheduled

    */

    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        if (!par1World.isRemote)

        {

            if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2)

            {

                par1World.setBlock(par2, par3, par4, Main.Dirt_3.blockID);

            }

            else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9)

            {

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

                {

                    int i1 = par2 + par5Random.nextInt(3) - 1;

                    int j1 = par3 + par5Random.nextInt(5) - 3;

                    int k1 = par4 + par5Random.nextInt(3) - 1;

                    int l1 = par1World.getBlockId(i1, j1 + 1, k1);

 

                    if (par1World.getBlockId(i1, j1, k1) == Main.Dirt_3.blockID && par1World.getBlockLightValue(i1, j1 + 1, k1) >= 4 && par1World.getBlockLightOpacity(i1, j1 + 1, k1) <= 2)

                    {

                        par1World.setBlock(i1, j1, k1, this.blockID);

                    }

                }

            }

        }

    }

 

    /**

    * Returns the ID of the items to drop on destruction.

    */

    public int idDropped(int par1, Random par2Random, int par3)

    {

        return Main.Dirt_3.idDropped(0, par2Random, par3);

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side

    */

    public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (par5 == 1)

        {

            return this.Dirt_1;

        }

        else if (par5 == 0)

        {

            return Main.Dirt_3.getBlockTextureFromSide(par5);

        }

        else

        {

            Material material = par1IBlockAccess.getBlockMaterial(par2, par3 + 1, par4);

            return material != Material.snow && material != Material.craftedSnow ? this.blockIcon : this.Dirt_2;

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

    public void registerIcons(IconRegister par1IconRegister)

    {

        this.Dirt_2 = par1IconRegister.registerIcon(this.getTextureName() + "Side of Grass (Dirt_2)");

        this.Dirt_1 = par1IconRegister.registerIcon(this.getTextureName() + "Top of Grass (Dirt_1)");

        this.Dirt_3 = par1IconRegister.registerIcon("Bottom of Grass (Dirt_3)");

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        super.randomDisplayTick(par1World, par2, par3, par4, par5Random);

 

        if (par5Random.nextInt(10) == 0)

        {

            par1World.spawnParticle("townaura", (double)((float)par2 + par5Random.nextFloat()), (double)((float)par3 + 1.1F), (double)((float)par4 + par5Random.nextFloat()), 0.0D, 0.0D, 0.0D);

        }

    }

}

 

 

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 16, 2015

I have removed the Side Only code, but it still will not load my textures.

  • Quote

Share this post


Link to post
Share on other sites

diesieben07    6692

diesieben07

diesieben07    6692

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6692
  • 45730 posts
Posted January 16, 2015

What is your intention with that registerIcons method? It will never be called.

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 16, 2015

So those Icons will never be called?

 

Btw, I am currently doing a modding course with this program, and they do not teach me this stuff so, I kind of do not know what my intention was  :(

  • Quote

Share this post


Link to post
Share on other sites

diesieben07    6692

diesieben07

diesieben07    6692

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6692
  • 45730 posts
Posted January 16, 2015

If that course at any point anywhere said something like:

 

"Now type

public void registerIcons

"

 

trash it immediately.

That is not how you learn modding. You need to understand what is going on and why you put that there. If you did that, then you'd know why your code will not work.

If you don't know basic java coding, you will get nowhere, sorry to say.

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 16, 2015

No that's not what they do in the course, they teach you and explain to you what is going on in the code. I am just asking because I want to just be able to finish my custom grass block, + that is also how I learn. :)

  • Quote

Share this post


Link to post
Share on other sites

TheGreyGhost    711

TheGreyGhost

TheGreyGhost    711

  • Reality Controller
  • TheGreyGhost
  • Members
  • 711
  • 2805 posts
Posted January 16, 2015

No that's not what they do in the course, they teach you and explain to you what is going on in the code. I am just asking because I want to just be able to finish my custom grass block, + that is also how I learn. :)

 

It might help understand why registerIcons won't work if you add @Override before it

 

@Override

public void registerIcons(IconRegister par1IconRegister)

 

Adding @Override for methods you expect to inherit from the base class is a really good way for the compiler to tell you "er, that isn't going to do what you think it will do" :)

 

I forget offhand what the method you're looking for is actually called, you will for sure find it if you have a look at BlockGrass.  Most of the time, I find that's the fastest way to see how to do something, i.e. think of a vanilla item or block or command that does something similar to what I want, and then look at that vanilla code for clues.

 

-TGG

 

 

 

 

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 16, 2015

Thank you, you are awesome :)

 

  • Quote

Share this post


Link to post
Share on other sites

The_SlayerMC    7

The_SlayerMC

The_SlayerMC    7

  • Creeper Killer
  • The_SlayerMC
  • Members
  • 7
  • 201 posts
Posted January 16, 2015

Side note, why do your textures/code have a terrible syntax?!

this.Dirt_2 = par1IconRegister.registerIcon(this.getTextureName() + "Side of Grass (Dirt_2)");

 

Does the course you're doing also teach how to make your textures/code looks nice? If so, they're doing it wrong.

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 16, 2015

They do teach you how to make your textures look nice, but they do not teach you how to do this type of code.

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

Ok, so I changed a couple things up on the code, but it still will not work. Here it is currently:

 

 

package mymod.blocks;

 

import java.util.Random;

 

import mymod.Main;

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.client.renderer.texture.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.util.Icon;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class FlamingGrass extends Block

{

    @SideOnly(Side.CLIENT)

    private Icon Dirt_1; //Top of Grass

    @SideOnly(Side.CLIENT)

    private Icon Dirt_3; //Bottom of Grass

    @SideOnly(Side.CLIENT)

    private Icon Dirt_2; //Side of Grass

 

    public FlamingGrass(int par1)

    {

        super(par1, Material.grass);

        this.setTickRandomly(true);

        this.setCreativeTab(CreativeTabs.tabBlock);

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata

    */

    public Icon getIcon(int par1, int par2)

    {

        return par1 == 1 ? this.Dirt_1 : (par1 == 0 ? Main.Dirt_3.getBlockTextureFromSide(par1) : this.blockIcon); // 1- Top    0- Bottom  else: Side );

    }

 

    /**

    * Ticks the block if it's been scheduled

    */

    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        if (!par1World.isRemote)

        {

            if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2)

            {

                par1World.setBlock(par2, par3, par4, Main.Dirt_3.blockID);

            }

            else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9)

            {

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

                {

                    int i1 = par2 + par5Random.nextInt(3) - 1;

                    int j1 = par3 + par5Random.nextInt(5) - 3;

                    int k1 = par4 + par5Random.nextInt(3) - 1;

                    int l1 = par1World.getBlockId(i1, j1 + 1, k1);

 

                    if (par1World.getBlockId(i1, j1, k1) == Main.Dirt_3.blockID && par1World.getBlockLightValue(i1, j1 + 1, k1) >= 4 && par1World.getBlockLightOpacity(i1, j1 + 1, k1) <= 2)

                    {

                        par1World.setBlock(i1, j1, k1, Main.FlamingGrass.blockID);

                    }

                }

            }

        }

    }

 

    /**

    * Returns the ID of the items to drop on destruction.

    */

    public int idDropped(int par1, Random par2Random, int par3)

    {

        return Main.Dirt_3.idDropped(0, par2Random, par3);

    }

 

  @SideOnly(Side.CLIENT)

 

    /**

    * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side

    */

    public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (par5 == 1)

        {

            return this.Dirt_1;

        }

        else if (par5 == 0)

        {

            return Main.Dirt_3.getBlockTextureFromSide(par5);

        }

        else

        {

          return this.Dirt_2;

        }

    }

 

  @SideOnly(Side.CLIENT)

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

  @Override public void registerIcons(IconRegister par1IconRegister)

    {

        this.blockIcon = par1IconRegister.registerIcon(this.getTextureName() + "_side");

        this.Dirt_2 = par1IconRegister.registerIcon(this.getTextureName() + "Side of Grass (Dirt_2)");

        this.Dirt_1 = par1IconRegister.registerIcon(this.getTextureName() + "Top of Grass (Dirt_1)");

        this.Dirt_3 = par1IconRegister.registerIcon("Bottom of Grass (Dirt_3)");

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        super.randomDisplayTick(par1World, par2, par3, par4, par5Random);

 

        if (par5Random.nextInt(10) == 0)

        {

            par1World.spawnParticle("townaura", (double)((float)par2 + par5Random.nextFloat()), (double)((float)par3 + 1.1F), (double)((float)par4 + par5Random.nextFloat()), 0.0D, 0.0D, 0.0D);

        }

    }

}

 

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

Oh and this was all a copy from the Minecraft Source Code btw, I just made a few changes to mine

  • Quote

Share this post


Link to post
Share on other sites

TheGreyGhost    711

TheGreyGhost

TheGreyGhost    711

  • Reality Controller
  • TheGreyGhost
  • Members
  • 711
  • 2805 posts
Posted January 17, 2015

Hi

 

what are the symptoms?

 

eg compiler error messages, what do you see vs what you expect to see, any related error messages in the console?

 

-TGG

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

I want to see my grass block textures on the grass block, but I get this:

 

2015-01-16 18:26:26 [sEVERE] [Minecraft-Client] Using missing texture, unable to load: minecraft:textures/blocks/MISSING_ICON_TILE_253_nullFlaming Grass Top.png

2015-01-16 18:26:26 [sEVERE] [Minecraft-Client] Using missing texture, unable to load: minecraft:textures/blocks/MISSING_ICON_TILE_253_nullFlaming Grass Bottom.png

2015-01-16 18:26:26 [sEVERE] [Minecraft-Client] Using missing texture, unable to load: minecraft:textures/blocks/MISSING_ICON_TILE_253_nullFlaming Grass Side.png

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

I also changed my code again:

 

package mymod.blocks;

 

import java.util.Random;

 

import mymod.Main;

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.client.renderer.texture.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.util.Icon;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class FlamingGrass extends Block

{

//    @SideOnly(Side.CLIENT)

    private Icon Dirt_1; //Top of Grass

//    @SideOnly(Side.CLIENT)

    private Icon Dirt_3; //Bottom of Grass

 

    public FlamingGrass(int par1)

    {

        super(par1, Material.grass);

        this.setTickRandomly(true);

        this.setCreativeTab(CreativeTabs.tabBlock);

    }

 

//  @SideOnly(Side.CLIENT)

 

    /**

    * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata

    */

    public Icon getIcon(int par1, int par2)

    {

        return par1 == 1 ? this.Dirt_1 : par1 == 0 ? this.Dirt_3 : this.blockIcon; // 1- Top    0- Bottom  else: Side );

    }

 

    /**

    * Ticks the block if it's been scheduled

    */

    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        if (!par1World.isRemote)

        {

            if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2)

            {

                par1World.setBlock(par2, par3, par4, Main.Dirt_3.blockID);

            }

            else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9)

            {

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

                {

                    int i1 = par2 + par5Random.nextInt(3) - 1;

                    int j1 = par3 + par5Random.nextInt(5) - 3;

                    int k1 = par4 + par5Random.nextInt(3) - 1;

                    int l1 = par1World.getBlockId(i1, j1 + 1, k1);

 

                    if (par1World.getBlockId(i1, j1, k1) == Main.Dirt_3.blockID && par1World.getBlockLightValue(i1, j1 + 1, k1) >= 4 && par1World.getBlockLightOpacity(i1, j1 + 1, k1) <= 2)

                    {

                        par1World.setBlock(i1, j1, k1, Main.FlamingGrass.blockID);

                    }

                }

            }

        }

    }

 

    /**

    * Returns the ID of the items to drop on destruction.

    */

    public int idDropped(int par1, Random par2Random, int par3)

    {

        return Main.Dirt_3.idDropped(0, par2Random, par3);

    }

 

//  @SideOnly(Side.CLIENT)

 

    /**

    * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side

    */

    public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (par5 == 1)

        {

            return this.Dirt_1;

        }

        else if (par5 == 0)

        {

            return this.Dirt_3;

        }

        else

        {

        return blockIcon;

        }

    }

 

//  @SideOnly(Side.CLIENT)

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

  @Override public void registerIcons(IconRegister par1IconRegister)

    {

        this.blockIcon = par1IconRegister.registerIcon(this.getTextureName() + "Flaming Grass Side");   

        this.Dirt_1 = par1IconRegister.registerIcon(this.getTextureName() + "Flaming Grass Top");

        this.Dirt_3 = par1IconRegister.registerIcon(this.getTextureName() + "Flaming Grass Bottom");

    }

 

//    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        super.randomDisplayTick(par1World, par2, par3, par4, par5Random);

 

        if (par5Random.nextInt(10) == 0)

        {

            par1World.spawnParticle("townaura", (double)((float)par2 + par5Random.nextFloat()), (double)((float)par3 + 1.1F), (double)((float)par4 + par5Random.nextFloat()), 0.0D, 0.0D, 0.0D);

        }

    }

}

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2097

Draco18s

Draco18s    2097

  • Reality Controller
  • Draco18s
  • Members
  • 2097
  • 14031 posts
Posted January 17, 2015

this.getTextureName()

 

And is that value ever set anywhere?

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

No, I don't think so.

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2097

Draco18s

Draco18s    2097

  • Reality Controller
  • Draco18s
  • Members
  • 2097
  • 14031 posts
Posted January 17, 2015

No, I don't think so.

 

Garbage in, garbage out.

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

Ummm, what does that mean

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2097

Draco18s

Draco18s    2097

  • Reality Controller
  • Draco18s
  • Members
  • 2097
  • 14031 posts
Posted January 17, 2015

Ummm, what does that mean

 

Exactly what it says on the tin.

 

You didn't put anything into the variable and you're getting nothing out of it.  What did you expect to happen?

 

http://en.wikipedia.org/wiki/Garbage_in,_garbage_out

  • Quote

Share this post


Link to post
Share on other sites

jkorn2324swagg    1

jkorn2324swagg

jkorn2324swagg    1

  • Tree Puncher
  • jkorn2324swagg
  • Members
  • 1
  • 38 posts
Posted January 17, 2015

Oh thanks, I just solved it

  • Quote

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 1
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Oliviafrostpaw
      [1.14.4] Injecting into Existing Loot Tables, Blocks

      By Oliviafrostpaw · Posted 20 minutes ago

      After some poking, the function is not firing whatsoever
    • RaphGamingz
      [1.14.4] Dimensions

      By RaphGamingz · Posted 1 hour ago

      Anyone?
    • RaphGamingz
      [1.14.4] Injecting into Existing Loot Tables, Blocks

      By RaphGamingz · Posted 1 hour ago

      Are you sure this is correct, shouldn’t it be  new ResourceLocation(“minecraft”,”grass”) And is the function firing?
    • mervinrasquinha
      Introducing Stonecage

      By mervinrasquinha · Posted 3 hours ago

      If you’re interested in a modpack with a little bit of tech, a little bit of magic, and a lot of adventure, I would love for you to try out my modpack Stonecage. Stonecage takes mods you might have seen before (and many you might not have), and adds a twist to them to make them fresh again. The main gimmick of the pack is that it makes stone unmineable, meaning you’ll have to explore caves and dungeons the way they were intended, and find solutions to problems you never knew existed. It aims to be a hardcore pack that’s more fair than most, and leaves you to seek combat and adventure on your own terms. While you may start out weak, you’ll find magical artifacts known as curios in your adventures that can be crafted into powerful baubles that will help you in combat and elsewhere. You’ll also find pieces of ancient machines that with research can be deciphered and put back together, bringing industry back to a world that has long been without it. The pack is heavily centered around researching these lost machines, and the research table will guide you through the modpack while giving you more freedom than a quest book would. With a small, curated list of mods, most computers will likely be able to run it, and the many, many lines of scripting keep these mods integrated into what feels like a cohesive whole. If this sounds like fun to you, I encourage you to check it out. If you do, I hope you have as much fun playing it as I did creating it.
    • Darth_Cobalt
      Forge 1.14.4 crashes.

      By Darth_Cobalt · Posted 4 hours ago

      Hi I just downloaded forge and every time i try to load it, it crashes. I have tried 1.14.4 - 28.1.0 and 1.14.4 - 28.1.106. It crashes with both versions. I couldn't figure out how to upload the crash files, could somebody explain how I can do that?
  • Topics

    • Oliviafrostpaw
      7
      [1.14.4] Injecting into Existing Loot Tables, Blocks

      By Oliviafrostpaw
      Started December 8

    • RaphGamingz
      1
      [1.14.4] Dimensions

      By RaphGamingz
      Started Yesterday at 07:45 AM

    • mervinrasquinha
      0
      Introducing Stonecage

      By mervinrasquinha
      Started 3 hours ago

    • Darth_Cobalt
      0
      Forge 1.14.4 crashes.

      By Darth_Cobalt
      Started 4 hours ago

    • leonardsores
      0
      Fun mod interactions

      By leonardsores
      Started 4 hours ago

  • Who's Online (See full list)

    • TrogloGeek
    • Redstoneguy129
    • Oliviafrostpaw
    • ricoc90
    • xerca
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.6.4][SOLVED] My Custom Grass Textures
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community