Jump to content

Recommended Posts

Posted

Hi there.

I have made a new torch class in my mod and would like to add a fire animation to a torch.

 

I don't know where to start. I have tried to find the torch class but can't..

Any tips?

Zen

 

Posted

Hi

 

Depends what you mean by animation.  Torch in your hand, or in the world (as a block)?

 

BlockTorch is the vanilla torch.  But BlockFire might be more interesting.

 

Best way for block animation is by animated textures.  You can do that with mcmeta textures, for example see fire_layer_0.png and fire_layer_0.png.mcmeta.  A google on animated textures will also bring up a relevant tutorial or two.

 

-TGG

Posted

Hi

 

Depends what you mean by animation.  Torch in your hand, or in the world (as a block)?

 

BlockTorch is the vanilla torch.  But BlockFire might be more interesting.

 

Best way for block animation is by animated textures.  You can do that with mcmeta textures, for example see fire_layer_0.png and fire_layer_0.png.mcmeta.  A google on animated textures will also bring up a relevant tutorial or two.

 

-TGG

Thanks so much for your reply it got me on the right track.

I cant believe I could not find the BlockTorch it was so simple.. to tired I am guessing.

 

 

For those how are trying to do the same thing here the code in my class that i made.

I didn't use the smoke in the end so just deleted those lines.

 

 

@Override

public void randomDisplayTick(World worldIn, BlockPos pos, IBlockState state, Random rand)

    {

        EnumFacing enumfacing = (EnumFacing)state.getValue(FACING);

        double d0 = (double)pos.getX() + 0.5D;

        double d1 = (double)pos.getY() + 0.55D;

        double d2 = (double)pos.getZ() + 0.5D;

        double d3 = 0.18D;

        double d4 = 0.20D;

        double d5 = (double)pos.getX() + 0.5D;

        double d6 = (double)pos.getY() + 0.6D;

        double d7 = (double)pos.getZ() + 0.5D;

 

        if (enumfacing.getAxis().isHorizontal())

        {

            EnumFacing enumfacing1 = enumfacing.getOpposite();

            worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4 * (double)enumfacing1.getFrontOffsetX(), d1 + d3, d2 + d4 * (double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D, new int[0]);

        }

        else

        {

          worldIn.spawnParticle(EnumParticleTypes.FLAME, d5, d6, d7, 0.0D, 0.0D, 0.0D, new int[0]);

        }

    }

 

 

The full class.

 

 

public class CustomLight extends BlockTorch

{

private Item dropsOnHarvest;

private int dropamountmax = 1;

private int maxharvestEXP = 0;

 

public CustomLight(Material material, String name, float hardness, float resistance, CreativeTabs zentab, HarvestToolEnum harvesttool, HarvestLevelEnum harvestlevel)

{

super();

 

this.setUnlocalizedName(name);

this.setHardness(hardness);

this.setResistance(resistance);

this.setStepSound(soundTypePiston);

this.setCreativeTab(Main.zentab);

this.setLightLevel(1.0f);

this.setLightOpacity(0);

this.setHarvestLevel(harvesttool, harvestlevel);

this.useNeighborBrightness = true;

 

GameRegistry.registerBlock(this, name);

 

this.dropsOnHarvest = Item.getItemFromBlock(this);

}

@Override

    public boolean isOpaqueCube() {

    return false;

    }

@SideOnly(Side.CLIENT)

    public EnumWorldBlockLayer getBlockLayer()

    {

        return EnumWorldBlockLayer.CUTOUT;

    }

@Override

public void randomDisplayTick(World worldIn, BlockPos pos, IBlockState state, Random rand)

    {

        EnumFacing enumfacing = (EnumFacing)state.getValue(FACING);

        double d0 = (double)pos.getX() + 0.5D;

        double d1 = (double)pos.getY() + 0.55D;

        double d2 = (double)pos.getZ() + 0.5D;

        double d3 = 0.18D;

        double d4 = 0.20D;

        double d5 = (double)pos.getX() + 0.5D;

        double d6 = (double)pos.getY() + 0.6D;

        double d7 = (double)pos.getZ() + 0.5D;

 

        if (enumfacing.getAxis().isHorizontal())

        {

            EnumFacing enumfacing1 = enumfacing.getOpposite();

            worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4 * (double)enumfacing1.getFrontOffsetX(), d1 + d3, d2 + d4 * (double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D, new int[0]);

        }

        else

        {

          worldIn.spawnParticle(EnumParticleTypes.FLAME, d5, d6, d7, 0.0D, 0.0D, 0.0D, new int[0]);

        }

    }

 

public void RegisterRenderer(String modelName)

{

System.out.println("REGISTERING BLOCK RENDERER: " + modelName);

 

Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(this), 0, new ModelResourceLocation(Main.MODID+":"+modelName, "inventory"));

}

 

public void setHarvestLevel(HarvestToolEnum harvesttool, HarvestLevelEnum harvestlevel)

    {

int level;

String tool;

 

switch(harvesttool)

{

case PICKAXE:

tool = "pickaxe";

break;

case SHOVEL:

tool = "shovel";

break;

case AXE:

tool = "axe";

break;

default:

tool = "pickaxe";

}

switch(harvestlevel)

{

case WOOD:

level = 0;

break;

case STONE:

level = 1;

break;

case IRON:

level = 2;

break;

case DIAMOND:

level = 3;

break;

case GOLD:

level = 0;

break;

default:

level = 0;

}

super.setHarvestLevel(tool, level);

    }

 

public static enum HarvestToolEnum

{

PICKAXE,

SHOVEL,

AXE;

}

public static enum HarvestLevelEnum

{

WOOD,

STONE,

IRON,

DIAMOND,

GOLD;

}

 

 

public void setMaxHarvestEXP(int expAmount)

{

maxharvestEXP = expAmount;

}

 

public void setDrops(Item drops)

{

this.dropsOnHarvest = drops;

}

public void setDrops(Block drops)

{

this.dropsOnHarvest = Item.getItemFromBlock(drops);

}

 

public void setDropMaxAmount(int dropamount)

{

this.dropamountmax = dropamount;

}

 

public Item getItemDropped(IBlockState state, Random rand, int fortune)

    {

return this.dropsOnHarvest;

    }

 

public int quantityDropped(Random random)

    {

int amount = random.nextInt(this.dropamountmax)+1;

        return amount;

    }

 

public int getExpDrop(IBlockAccess world, BlockPos pos, int fortune)

    {

        IBlockState state = world.getBlockState(pos);

        Random rand = world instanceof World ? ((World)world).rand : new Random();

        if (this.getItemDropped(state, rand, fortune) != Item.getItemFromBlock(this))

        {

        return MathHelper.getRandomIntegerInRange(rand, 0, maxharvestEXP);

        }

        return 0;

    }

}

 

 

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • logs too big for one pastebin https://pastebin.com/ZjUGHu3u  https://pastebin.com/RqCUZf3X  https://pastebin.com/6ZPS99nD
    • You probably used jd-gui to open it, didn't you? Nothing wrong with that, I also made that mistake, except that Notch was a smart guy and he obfuscated the code. That's why you only see files called "a", "b", "c" and then a file that combines them all. As I said, use RetroMCP to deobfuscate the code so that you will 100% understand it and be able to navigate it.
    • Decompiling minecraft indev, infdev, alpha, beta or whichever legacy version is really easy. I'm not a plug, I just also got interested in modding legacy versions (Infdev to be specific). Use https://github.com/MCPHackers/RetroMCP-Java Once you install their client and the Zulu Architecture that they say they recommend (or use your own Java). I encountered some problems, so I run it with: "java -jar RetroMCP-Java-CLI.jar". You should run it in a seperate folder (not in downloads), otherwise the files and folders will go all over the place. How to use RetroMCP: Type setup (every time you want change version), copy-paste the version number from their list (they support indev), write "decompile" and done! The code will now be deobfuscated and filenames will be normal, instead of "a", "b" and "c"! Hope I helped you, but I don't expect you to reply, as this discussion is 9 years old! What a piece of history!  
    • I know that this may be a basic question, but I am very new to modding. I am trying to have it so that I can create modified Vanilla loot tables that use a custom enchantment as a condition (i.e. enchantment present = item). However, I am having trouble trying to implement this; the LootItemRandomChanceWithEnchantedBonusCondition constructor needs a Holder<Enchantment> and I am unable to use the getOrThrow() method on the custom enchantment declared in my mod's enchantments class. Here is what I have so far in the GLM:   protected void start(HolderLookup.Provider registries) { HolderLookup.RegistryLookup<Enchantment> registrylookup = registries.lookupOrThrow(Registries.ENCHANTMENT); LootItemRandomChanceWithEnchantedBonusCondition lootItemRandomChanceWithEnchantedBonusCondition = new LootItemRandomChanceWithEnchantedBonusCondition(0.0f, LevelBasedValue.perLevel(0.07f), registrylookup.getOrThrow(*enchantment here*)); this.add("nebu_from_deepslate", new AddItemModifier(new LootItemCondition[]{ LootItemBlockStatePropertyCondition.hasBlockStateProperties(Blocks.DEEPSLATE).build(), LootItemRandomChanceCondition.randomChance(0.25f).build(), lootItemRandomChanceWithEnchantedBonusCondition }, OrichalcumItems.NEBU.get())); }   Inserting Enchantments.[vanilla enchantment here] actually works but trying to declare an enchantment from my custom enchantments class as [mod enchantment class].[custom enchantment] does not work even though they are both a ResourceKey and are registered in Registries.ENCHANTMENT. Basically, how would I go about making it so that a custom enchantment declared as a ResourceKey<Enchantment> of value ResourceKey.create(Registries.ENCHANTMENT, ResourceLocation.fromNamespaceAndPath([modid], [name])), declared in a seperate enchantments class, can be used in the LootItemRandomChanceWithEnchantedBonusCondition constructor as a Holder? I can't use getOrThrow() because there is no level or block entity/entity in the start() method and it is running as datagen. It's driving me nuts.
  • Topics

×
×
  • Create New...

Important Information

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