Jump to content

Guff

Members
  • Posts

    159
  • Joined

  • Last visited

  • Days Won

    1

Guff last won the day on December 2 2023

Guff had the most liked content!

Converted

  • Gender
    Undisclosed
  • Personal Text
    Java the Hutt

Guff's Achievements

Creeper Killer

Creeper Killer (4/8)

27

Reputation

  1. It's not about conserving space, it's (more or less) for my mods and mods like them. I have a basic setup that allows for an unlimited number of alloys, and I figured it would be nice to be able to tell the game when my ingots are in the form of Steel Ingots versus when they are in the form of a Bronze Ingot, or when they are just in an undetermined mixture. They use NBT data so it's not currently possible to check for that.
  2. Hey there, just a quick suggestion (with code that works, just needs to be officially implemented). The ore dictionary recipes should check for a special interface and see if an item that could be different (NBT) from one time to the next to see if it is a potential match for a recipe. The code I have here works: The interface: public interface IOreDictionary { public String getOreName(ItemStack stack); } This is to be implemented by Item subclasses that need to have special behavior with ore recipes. In ShapedOreRecipe and ShapelessOreRecipe, there is this line in the checkMatch() method: matched = matched || checkItemEquals(item, slot); This simply needs changed to: matched = matched || checkIOreMatch(item, slot) || checkItemEquals(item, slot); And the method checkIOreMatch() that does all the work (this can be public static somewhere): private boolean checkIOreMatch(ItemStack target, ItemStack input) { if(input == null || target == null) { return false; } if(!(input.getItem() instanceof IOreDictionary)) { return false; } int oreID = OreDictionary.getOreID(target); if(oreID != -1) { String name = OreDictionary.getOreName(oreID); boolean ret = name.equals("Unknown") ? false : ((IOreDictionary)input.getItem()).getOreName(input).equals(name); return ret; } return false; } Basically, if the item has special cases (might be "ingotIron" at one time and "logWood" another) it will still match, regardless of whether or not it is actually registered. That is all, here's to hoping this becomes official!
  3. getItems(Random) will not work since it only generates a random selection of loot. He wants a list of ALL loot that could spawn there.
  4. Reflection will work with this since it's a class that is added by Forge. Therefore, when the classes are reobfuscated, these classes' members are not changed. However, attempting to use reflection on Minecraft source will cause problems outside of MCP. Just want to make this clear for future reference.
  5. I'm something similar to this with my new mod, but I too am having trouble. I can open the item, put items in, and then close it (doing so will print the tag compound of the items so I can check the items went in, and indeed the items are written to the tag compound). When I open the item again (presumably with items inside) they do not appear, and printing the tag compound on load reveals that they are indeed no in the tag compound. They are not getting erased, they just aren't loading for some reason. If anyone can help figure this out, that'd be appreciated. I didn't want to start a new thread since I know Lua needs help with a similar problem, so I figured I'd just post here so he can read from what I end up with.
  6. Do you want modders to interface with your machines, or just add recipes (I assume your machines are some sort of furnace, modified to fit your mod's theme), or maybe use them in recipes to make upgraded versions? Using Optionals would be a good place to start for actually getting a possible instance of the item or block. For recipes, you could add a method that does it using reflection. It really all depends on what you want modders to be able to do with your mod. My APIs generally don't provide the blocks and items for use, but they do usually provide ways to add custom behavior (MA allows mods to disable mashing, cloning, enchanting, and repairs; PR allows new special rewards, map types, teleport types, etc) and file listers. I'd recommend starting with Optionals, though.
  7. You can't use an item like you would a tile entity (which is what you're doing as you've implemented IInventory) since items are static. Everything will need to be written to the ItemStack's NBTTagCompound.
  8. If you are only using one texture for all sides of the block, just use the method that does that (it's some func_######_d or something) and save the headache for tracking down texture problems later. As for the hole appearing, something in your code is making the blocks disappearing. Did you get a warning when you loaded up the world, something about "The ID ### is mismatched between the game and the world."? Make sure you didn't remove/comment the block from being initialized.
  9. Close your parenthesis after the 0 and the 10 ")";
  10. Can't do a base item since they are different types of items. One is an extension of ItemAxe, the other is just Item. I would have done a base item if I could have.
  11. Never mind, I fixed it. Was using hard values instead of overriding getMaxItemUseDuration(). I feel pathetic.
  12. Okay, I don't normally ask questions, but this is really weird and I can't track it. So I have several items in my mod that have "charge up" functions. They use a combination of onItemRightClick() and onPlayerStoppedUsing() in order to perform. However, one of these items has the Client and Server sides syncing properly, and another does not. For example, I added printouts to EntityPlayer and ItemStack methods, and this is what I get for the broken item: 2013-08-01 15:50:39 [iNFO] [sTDOUT] Player: CLIENT 2013-08-01 15:50:39 [iNFO] [sTDOUT] ItemStack CLIENT 2013-08-01 15:50:39 [iNFO] [sTDOUT] CLIENT 2013-08-01 15:50:39 [iNFO] [sTDOUT] Player: SERVER With the properly syncing item, ItemStack SERVER and SERVER will print out below Player: SERVER. I am not sure what is causing this. Has this happened to anyone else? Does anyone have a solution?
  13. Basic Java. Blocks are not ints, use block.blockID to get what you're looking for.
  14. You must have missed this: int blockID = world.getBlockId(i, j, k);
  15. FurnaceRecipes.smelting().addSmelting(Item.dyePowder.itemID, 4, new ItemStack(LapisIngot), 100.0F); CraftingManager.getInstance().addShapelessRecipe(new ItemStack(Item.blazeRod), new ItemStack(Block.wood, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Block.wood, 1, OreDictionary.WILDCARD_VALUE));
×
×
  • Create New...

Important Information

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