Jump to content
Search In
  • More options...
Find results that contain...
Find results in...


  • Posts

  • Joined

  • Last visited


  • Gender
  • Personal Text
    Not the best modder.

onVoid's Achievements

Tree Puncher

Tree Puncher (2/8)



  1. Are there mappings for parameter names yet? Or does every modder just have to deal with typing in an auto-generated string when referencing a parameter. For example: Is there a solution to this that I am not privy to? If so please enlighten me.
  2. I have edited my light_elemental.json (in blockstates) to this: { "variants": { "default": { "model": "adjunct:light_elemental" }, "glassless": { "model": "adjunct:light_elemental_glassless" }, "intricate": { "model": "adjunct:light_elemental_intricate" } } } yet the issue persists.
  3. Yeah, I did that because I was attempting to mirror vanilla, which has a different json for each block (which would be the default, glassless, and intricate ones) of dirt. Is that not doable for my situation?
  4. Aight. I've got this block, BlockElementalLight. It's pretty simple, it lights up. Now, I've decided the block should be chiselable, meaning I need to create variants of the block to house the different textures. The fruits of my labors are as shown: item textures working, but not the block ones. I based my code, and my json files, off of the vanilla code for dirt (dirt, coarse, podzol). I'd like to know what I can do to fix this. Relevant code is below. BlockElementalLight.java ItemBlockElementalLight.java CommonProxy.java (I guess CommonProxies are a bad thing to have... oh well) Blocks class Edit: Error Logs My json files follow the vanilla format so there is a separate blockstate, item model, and block model for each variant. (they are each the same, except have the _glassless or _intricate suffix for those specific ones) Here are the samples: blockstates/light_elemental.json { "variants": { "normal": { "model": "adjunct:light_elemental" } } } models/block/light_elemental.json { "parent": "block/cube_all", "textures": { "all": "adjunct:blocks/light_elemental" } } models/item/light_elemental.json {"parent": "adjunct:block/light_elemental"} Also, to make this post EVEN longer, you know how I said I wanted these to be chiselable. Well, the whole chisel thing isn't working properly. I have this (addVariations) function being ran from my init event. public static void addVariations(){ addVariation("light_elemental", BlocksAdjunct.lightElemental, 0); addVariation("light_elemental", BlocksAdjunct.lightElemental, 1); addVariation("light_elemental", BlocksAdjunct.lightElemental, 2); } public static void addVariation(String group, Block block, int meta){ NBTTagCompound tag = new NBTTagCompound(); tag.setString("group", group); tag.setString("block", block.getRegistryName().toString()); tag.setInteger("meta", meta); FMLInterModComms.sendMessage("chisel", "add_variation", tag); } It seems to register the 0 metadata block as one that can enter the chisel, but it doesn't do the same for the 1 and 2 metadata blocks. When I replace the 1 and 2 metadata blocks with vanilla ones, the chiseling works flawlessly. Any help is appreciated. Thanks.
  5. Thank you. Does it not come with the material anymore?
  6. Alright, I have a block that I am trying to mimic glowstone with. The problem is, the block always has the sound of stone when it breaks and not the glass sound that I want (and I assume this is due to the material of the block not being set). Here is my block's class: public class BlockElementalLight extends BlockBase { public BlockElementalLight() { super("light_elemental", Material.GLASS); setHardness(0.3F); setResistance(1.5F); setLightLevel(1.0F); } public int quantityDroppedWithBonus(int fortune, Random random) { return MathHelper.clamp(this.quantityDropped(random) + random.nextInt(fortune + 1), 1, 4); } public int quantityDropped(Random random) { return 2 + random.nextInt(3); } public Item getItemDropped(IBlockState state, Random rand, int fortune) { return ItemsAdjunct.dustElementalMixture; } public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) { return MapColor.ORANGE_STAINED_HARDENED_CLAY; } } Here is the BlockBase class: public class BlockBase extends Block implements IHasModel { public BlockBase(String name, Material material) { super(material); setUnlocalizedName(name); setRegistryName(name); setCreativeTab(CreativeTabsAdjunct.tabAdjunct); } @SideOnly(Side.CLIENT) public void initModel() { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory")); } } And here's my blocks class where this is registered public class BlocksAdjunct { @GameRegistry.ObjectHolder("adjunct:light_elemental") public static BlockElementalLight lightElemental; @SideOnly(Side.CLIENT) public static void initModels() { lightElemental.initModel(); } } Thanks.
  7. Thanks for the help, realizing that objects are universal is something that has tripped me up a few times in Java.
  8. Alright, so I have an item where when I break a block, the drop is changed based on a recipe system I have going. The class where the recipes are added is here (yes I know it's ugly, I'll work on it): public static HashMap<String, ArrayList<Object>> blocks = new HashMap<String, ArrayList<Object>>(); public static void addRecipe(String block, HashMap<Object, Integer> drops){ ArrayList<Object> temp = new ArrayList<Object>(); for (Object i : drops.keySet()){ int x = drops.get(i); for (int y = 0; y < x; y++){ temp.add(i); } } blocks.put(block, new ArrayList<Object>(temp)); temp.clear(); return; } public static void addRecipe(String block, Object drop){ ArrayList<Object> temp = new ArrayList<Object>(); temp.add(drop); blocks.put(block, new ArrayList<Object>(temp)); temp.clear(); return; } public static ArrayList<Object> getDrop(String block, EntityPlayer player){ return blocks.get(block); } public static void init(){ //LOG HashMap<Object, Integer> LOG = new HashMap<Object, Integer>();{ LOG.put("block", 39); LOG.put(new ItemStack(Items.STICK), 45); LOG.put(new ItemStack(ItemsAdjunct.petrifiedWood, 1, 2), 8); LOG.put(new ItemStack(ItemsAdjunct.petrifiedWood, 1, 1), 4); LOG.put(new ItemStack(ItemsAdjunct.petrifiedWood, 1, 0), 4); } addRecipe("logWood", LOG); //LEAVES HashMap<Object, Integer> LEAVES = new HashMap<Object, Integer>();{ LEAVES.put(null, 17); LEAVES.put(new ItemStack(ItemsAdjunct.leafDry, 1), 2); LEAVES.put(new ItemStack(ItemsAdjunct.leaf, 1), 1); } addRecipe("treeLeaves", LEAVES); addRecipe("dirt", new ItemStack(Blocks.GOLD_BLOCK, 1)); } The drop is calculated in the tool class, as a method ran from onBlockStartBreak, and that method is here: public static void calculateDrop(ItemStack itemstack, BlockPos pos, net.minecraft.entity.player.EntityPlayer player){ IBlockState bs = player.getEntityWorld().getBlockState(pos); Block block = bs.getBlock(); int[] blockIDs = OreDictionary.getOreIDs(new ItemStack(Item.getItemFromBlock(block), 1, block.damageDropped(bs))); ArrayList<String> blockNAMEs = new ArrayList<String>(); for (int id : blockIDs){ blockNAMEs.add(OreDictionary.getOreName(id)); } Random rand = new java.util.Random(); ItemStack drop = ItemStack.EMPTY; for (String name : blockNAMEs){ if (Pruner.blocks.keySet().contains(name)){ player.getEntityWorld().setBlockToAir(pos); int outOf = Pruner.getDrop(name, player).size(); Object j = Pruner.getDrop(name, player).get(rand.nextInt(outOf)); if (j instanceof ItemStack){ drop = (ItemStack)j; break; } else if (j instanceof String){ if (((String)j).equals("block")){ drop = new ItemStack (block.getItemDropped(bs, new Random(), block.damageDropped(bs)), 1, block.damageDropped(bs)); break; } } } } // if (!drop.isEmpty()){ float f = 0.7F; double d = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.2D; double d2 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.2D; net.minecraft.entity.item.EntityItem entityitem = new net.minecraft.entity.item.EntityItem(player.getEntityWorld(), (double)pos.getX() + d, (double)pos.getY(), (double)pos.getZ() + d2, drop); entityitem.setDefaultPickupDelay(); player.getEntityWorld().spawnEntity(entityitem); return; } } Now, the issue I am having is that when I break the block that I am using to test (dirt block), at first I receive a single gold block like I am supposed to. But, as I keep breaking more, the amount that drops keeps doubling (I've done some bug testing, and it seems that the actual ItemStack inside of my blocks map is being edited. Now, the only time this map is mentioned in my mod (besides in contains, get, or keySet) is in the class I gave. Also, init(), in the recipe class, is ran from my main class' FMLInitializationEvent only. Help would be much appreciated, thanks.
  9. I just don't know how to use an IRecipe. Are there any tutorials?
  10. I have a recipe where I combine three obsidian with my item to make a more durable version, but the new item has a reset damage value. I have googled and found things stating an "IRecipe" but I have no idea how to use it to achieve this. Can anybody help? Thanks.
  11. Just changed it to return SUCCESS and it worked. Thank you so much!
  12. Mine's done on right click, if that changes anything. public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if (!worldIn.isRemote) { int dir = MathHelper.floor_double((double)((playerIn.rotationYaw * 4F) / 360F) + 0.5D) & 3; if (dir == 0){ for (int i = 0; i < 2; i++){ if (worldIn.getBlockState(pos.add(0, 0, i)).getBlock().equals(Blocks.STONE)){ worldIn.destroyBlock(pos.add(0, 0, i), false); } if (worldIn.getBlockState(pos.add(1, 0, i)).getBlock().equals(Blocks.STONE)){ worldIn.destroyBlock(pos.add(1, 0, i), false); } if (worldIn.getBlockState(pos.add(-1, 0, i)).getBlock().equals(Blocks.STONE)){ worldIn.destroyBlock(pos.add(-1, 0, i), false); } } } } return null; } Full code EDIT: Longer gif
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.