Posted May 1, 201510 yr When I do block = GameRegistry.findBlock("minecraft", "chest"); it returns null. For all I can see in the GameData class is that it should work. Getting the UniqueIdentifier from a blockstate works perfectly so they are in there.. Yet they don't match when I try to get the block later. Does anyone have a workaround for it? How much wood could a woodchuck chuck if a wood chuck could chuck wood - Guybrush Treepwood I wrote my own mod ish... still a few bugs to fix. http://thaumcraft.duckdns.org/downloads/MagicCookies-1.0.6.4.jar
May 1, 201510 yr Author if I look at the logs the chest does get added, which the unique id implies to by giving back the name and modid. [17:55:18] [Client thread/TRACE] [FML/]: Registry add: minecraft:chest 54 net.minecraft.block.BlockChest@1f440e7 (req. id 54) so it is in the registry, but the findblock doesnt find it in the minecraft:chest combo. Going to try to open up by reflection the class now to see whats going on... How much wood could a woodchuck chuck if a wood chuck could chuck wood - Guybrush Treepwood I wrote my own mod ish... still a few bugs to fix. http://thaumcraft.duckdns.org/downloads/MagicCookies-1.0.6.4.jar
May 1, 201510 yr Author For those interested I found out the error occurs in the containsKey method. that always returns false. to get an object out of it though, you can use this. Class gdClass = GameData.class; try { Method method = gdClass.getDeclaredMethod("getMain"); method.setAccessible(true); GameData gamedata = (GameData)method.invoke(null); FMLControlledNamespacedRegistry<Block> b = gamedata.getBlockRegistry(); Loggingthingy.log.warn(b.getKeys());// All the keys are there... Block found = b.getObject("minecraft:chest"); if(found != Blocks.air) {// maybe add a check if you want an air block... // Do something with found, whatever.. } } catch(Exception ex) { ex.printStackTrace(); } Now, to figure out where to submit a bug report.... How much wood could a woodchuck chuck if a wood chuck could chuck wood - Guybrush Treepwood I wrote my own mod ish... still a few bugs to fix. http://thaumcraft.duckdns.org/downloads/MagicCookies-1.0.6.4.jar
May 1, 201510 yr Author Figured out how to submit a bug ish ;-) http://www.minecraftforge.net/forum/index.php/topic,29993.0.html for those who just want to stay in the findBlock flow, I made this method. Tweak as you see fit /** * Tries to approach all legit ways to get a block from the game registry * but will go hackish when needed to to get the desired result. * @param modid String The modname * @param blockname String the block name * @return Blocks.air on not finding anything or the desired block. */ public static Block findBlock(String modid,String blockname) { Block find = GameRegistry.findBlock(modid,blockname); // legit way fails? if(find == null) { String searchkey = modid+":"+blockname; // Lets fire up the reflection... // You might want to put the map somewhere so you // don't have to reflect every time. saves a lot of cpu time. Class x = GameData.class; try { Method method = x.getDeclaredMethod("getMain"); method.setAccessible(true); GameData gamedata = (GameData)method.invoke(null); // and I mean saving the below list b FMLControlledNamespacedRegistry<Block> b = gamedata.getBlockRegistry(); // lets be gracious and give it a chance to find it this way if(b.containsKey(searchkey)) { find = b.getObject(searchkey); } else { // take a wild stab. returns air if nothing found find = b.getObject(searchkey); if(find != Blocks.air) { WhoTookMyCookies.log.warn("Chest found: "+GameRegistry.findUniqueIdentifierFor(b.getObject("minecraft:chest")).name); } else { if(!searchkey.equals("minecraft:air")) { // this is where we go and cry. // you can choose to leave find air which it is at this point // or set it to null... } } } } catch(Exception ex) { // your error handling here } } return find; } How much wood could a woodchuck chuck if a wood chuck could chuck wood - Guybrush Treepwood I wrote my own mod ish... still a few bugs to fix. http://thaumcraft.duckdns.org/downloads/MagicCookies-1.0.6.4.jar
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.