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.

PyralIron

Members
  • Joined

  • Last visited

Everything posted by PyralIron

  1. Oh that helps You mean 1.13 right? Okay I was wondering whether to do that anyway but I thought I should try to follow the system already there. Thanks guys!
  2. Yes I want the different variants to have their own names. So how do I get the unlocalized name from the itemstack?
  3. But what am I doing wrong? I only have one block ID currently, and everything else came from the original BlockDirt class.
  4. I made a copy of Minecraft's BlockDirt class and modified it to go with my packages (i plan to change that later), but the sub-blocks of coarse dirt and podzol seem to not be getting unique ids and names. I'm not sure whether there's a problem in giving the different blockstates (i think that's what they are called) a registry name or something else. As you can see there are 3 different itemstacks in the creative inventory, but they all have the same id (ignore the temp texture by the way): Dirt block class: package com.pyraliron.pyralfishmod.block; import java.util.Random; import com.pyraliron.pyralfishmod.init.ModBlocks; import net.minecraft.block.Block; import net.minecraft.block.BlockDirt; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IStringSerializable; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class BlockDirtPyral extends BlockBase { public static final PropertyEnum<BlockDirtPyral.DirtType> VARIANT = PropertyEnum.<BlockDirtPyral.DirtType>create("variant", BlockDirtPyral.DirtType.class); public static final PropertyBool SNOWY = PropertyBool.create("snowy"); public BlockDirtPyral() { super(Material.GROUND, "dirt_block_pyral", CreativeTabs.BUILDING_BLOCKS); this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockDirtPyral.DirtType.DIRT).withProperty(SNOWY, Boolean.valueOf(false))); } public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) { return ((BlockDirtPyral.DirtType)state.getValue(VARIANT)).getColor(); } /** * Get the actual Block state of this Block at the given position. This applies properties not visible in the * metadata, such as fence connections. */ public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { if (state.getValue(VARIANT) == BlockDirtPyral.DirtType.PODZOL) { Block block = worldIn.getBlockState(pos.up()).getBlock(); state = state.withProperty(SNOWY, Boolean.valueOf(block == Blocks.SNOW || block == Blocks.SNOW_LAYER)); } return state; } /** * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) */ @SideOnly(Side.CLIENT) public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items) { items.add(new ItemStack(this, 1, BlockDirtPyral.DirtType.DIRT.getMetadata())); items.add(new ItemStack(this, 1, BlockDirtPyral.DirtType.COARSE_DIRT.getMetadata())); items.add(new ItemStack(this, 1, BlockDirtPyral.DirtType.PODZOL.getMetadata())); } public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) { return new ItemStack(this, 1, ((BlockDirtPyral.DirtType)state.getValue(VARIANT)).getMetadata()); } /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(VARIANT, BlockDirtPyral.DirtType.byMetadata(meta)); } /** * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState state) { return ((BlockDirtPyral.DirtType)state.getValue(VARIANT)).getMetadata(); } protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {VARIANT, SNOWY}); } /** * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It * returns the metadata of the dropped item based on the old metadata of the block. */ @Override public int damageDropped(IBlockState state) { //metadata test BlockDirtPyral.DirtType blockdirt$dirttype = (BlockDirtPyral.DirtType)state.getValue(VARIANT); System.out.println(blockdirt$dirttype.getMetadata()); if (blockdirt$dirttype == BlockDirtPyral.DirtType.PODZOL) { System.out.println("Podzol"); blockdirt$dirttype = BlockDirtPyral.DirtType.DIRT; } else if (blockdirt$dirttype == BlockDirtPyral.DirtType.DIRT) { System.out.println("Dirt"); blockdirt$dirttype = BlockDirtPyral.DirtType.COARSE_DIRT; } else { System.out.println("Coarse Dirt"); blockdirt$dirttype = BlockDirtPyral.DirtType.PODZOL; } System.out.println(blockdirt$dirttype.getMetadata()); return blockdirt$dirttype.getMetadata(); } public static enum DirtType implements IStringSerializable { DIRT(0, "dirt", "default", MapColor.DIRT), COARSE_DIRT(1, "coarse_dirt", "coarse", MapColor.DIRT), PODZOL(2, "podzol", MapColor.OBSIDIAN); private static final BlockDirtPyral.DirtType[] METADATA_LOOKUP = new BlockDirtPyral.DirtType[values().length]; private final int metadata; private final String name; private final String unlocalizedName; private final MapColor color; private DirtType(int metadataIn, String nameIn, MapColor color) { this(metadataIn, nameIn, nameIn, color); } private DirtType(int metadataIn, String nameIn, String unlocalizedNameIn, MapColor color) { this.metadata = metadataIn; this.name = nameIn; this.unlocalizedName = unlocalizedNameIn; this.color = color; } public int getMetadata() { return this.metadata; } public String getUnlocalizedName() { return this.unlocalizedName; } public MapColor getColor() { return this.color; } public String toString() { return this.name; } public static BlockDirtPyral.DirtType byMetadata(int metadata) { if (metadata < 0 || metadata >= METADATA_LOOKUP.length) { metadata = 0; } return METADATA_LOOKUP[metadata]; } public String getName() { return this.name; } static { for (BlockDirtPyral.DirtType blockdirt$dirttype : values()) { METADATA_LOOKUP[blockdirt$dirttype.getMetadata()] = blockdirt$dirttype; } } } } BlockBase class: package com.pyraliron.pyralfishmod.block; import com.pyraliron.pyralfishmod.Main; import com.pyraliron.pyralfishmod.init.ModBlocks; import com.pyraliron.pyralfishmod.init.ModItems; import com.pyraliron.pyralfishmod.util.IHasModel; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; public class BlockBase extends Block implements IHasModel { public BlockBase(Material material, String name, CreativeTabs tab) { super(material); setUnlocalizedName(name); setRegistryName(name); setCreativeTab(tab); ModBlocks.BLOCKS.add(this); ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName())); } @Override public void registerModel() { Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory"); } } ModBlocks class: package com.pyraliron.pyralfishmod.init; import java.util.ArrayList; import java.util.List; import com.pyraliron.pyralfishmod.block.BlockBase; import com.pyraliron.pyralfishmod.block.BlockDirtPyral; import com.pyraliron.pyralfishmod.block.BlockGrassPyral; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; public class ModBlocks { public static final List<Block> BLOCKS = new ArrayList<Block>(); public static final Block GRASS_BLOCK_PYRAL = new BlockGrassPyral(); public static final Block DIRT_BLOCK_PYRAL = new BlockDirtPyral(); } RegistryHandler class: package com.pyraliron.pyralfishmod.util.handlers; import com.pyraliron.pyralfishmod.init.ModBlocks; import com.pyraliron.pyralfishmod.init.ModItems; import com.pyraliron.pyralfishmod.util.IHasModel; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @EventBusSubscriber public class RegistryHandler { @SubscribeEvent public static void onItemRegister(RegistryEvent.Register<Item> event) { event.getRegistry().registerAll(ModItems.ITEMS.toArray(new Item[0])); } @SubscribeEvent public static void onBlockRegister(RegistryEvent.Register<Block> event) { event.getRegistry().registerAll(ModBlocks.BLOCKS.toArray(new Block[0])); } @SubscribeEvent public static void onModelRegister(ModelRegistryEvent event) { for (Item item : ModItems.ITEMS) { if (item instanceof IHasModel) { ((IHasModel)item).registerModel(); } } for (Block block : ModBlocks.BLOCKS) { if (block instanceof IHasModel) { ((IHasModel)block).registerModel(); } } } } ClientProxy: package com.pyraliron.pyralfishmod.proxy; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraftforge.client.model.ModelLoader; public class ClientProxy extends CommonProxy { @Override public void registerItemRenderer(Item item, int meta, String id) { ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id)); } } IHasModel: package com.pyraliron.pyralfishmod.util; public interface IHasModel { public void registerModel(); }

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.