coolAlias Posted February 20, 2014 Posted February 20, 2014 I'm getting abnormal behavior from getExplosionResistance - it seems to ignore the real world metadata values or the real world metadata gets changed before getting the explosion resistance: @Override public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) { // printing the values I would expect from the block placed, e.g. 12 System.out.println("Block metadata: " + world.getBlockMetadata(x, y, z)); } @Override public float getExplosionResistance(Entity entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) { // printing the world meta here prints ZERO?!?! it just printed 12 when I clicked the block a second ago... System.out.println("Block meta: " + world.getBlockMetadata(x, y, z)); if (world.getBlockMetadata(x, y, z) < 0x8) { return getExplosionResistance(entity); } else { // never prints, obviously return 500F; } } Quote http://i.imgur.com/NdrFdld.png[/img]
Draco18s Posted February 20, 2014 Posted February 20, 2014 getExplosionResistance(entity); What does that do? You also have print statements in there, what do they say when run? Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
darty11 Posted February 20, 2014 Posted February 20, 2014 getExplosionResistance(entity); What does that do? You also have print statements in there, what do they say when run? getExplosionResistance(entity); is a function that gets the explosion resistance of a block. It is found in the block class. Quote
Draco18s Posted February 20, 2014 Posted February 20, 2014 And my other question? Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
coolAlias Posted February 20, 2014 Author Posted February 20, 2014 getExplosionResistance(entity) is what vanilla blocks call from the multiple parameter getExplosionResistance method, which ultimately just returns blockHardness / 5.0F. The print statements in clickBlock show the correct metadata, in my test it was 12, and previously (1.6.4) getExplosionResistance(args[]...) would also show the correct metadata; now, however, it always prints 0 zero for the metadata in that method, so of course my block is destroyed when it shouldn't be. Quote http://i.imgur.com/NdrFdld.png[/img]
Draco18s Posted February 20, 2014 Posted February 20, 2014 Print out the block ID at that location. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
coolAlias Posted February 20, 2014 Author Posted February 20, 2014 It prints that it's an air block, and yet it's calling the method from my block class. Looks like explosions have changed the way they work to blow up blocks before calling the method that should determine whether they can be destroyed or not... great... Quote http://i.imgur.com/NdrFdld.png[/img]
Draco18s Posted February 20, 2014 Posted February 20, 2014 And now you have found the problem. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
coolAlias Posted February 20, 2014 Author Posted February 20, 2014 Well, thanks to Draco's suggestion, I found out the source of the problem: // vanilla method: public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) { world.setBlockToAir(x, y, z); onBlockDestroyedByExplosion(world, x, y, z, explosion); } // my "fix": @Override public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) { if (world.getBlockMetadata(x, y, z) < 0x8) { super.onBlockExploded(world, x, y, z, explosion); } } That solves the blocks getting destroyed when they shouldn't, though I'm not very satisfied with it. This method is the same as in 1.6.4, so I'm not sure what else has changed to cause this discrepancy, so if anyone else has insights, I'd love to hear them. Likewise, I'll post my findings if I discover anything more about this. Quote http://i.imgur.com/NdrFdld.png[/img]
coolAlias Posted February 21, 2014 Author Posted February 21, 2014 It's a bug in the vanilla code: // Entity.getExplosionResistance: public float func_145772_a(Explosion p_145772_1_, World p_145772_2_, int p_145772_3_, int p_145772_4_, int p_145772_5_, Block p_145772_6_) { return p_145772_6_.getExplosionResistance(this, p_145772_2_, p_145772_3_, p_145772_3_, p_145772_4_, posX, posY + getEyeHeight(), posZ); } Notice how the parameter 'x' is used for both x and y when getting the block's explosion resistance, and the y parameter is used for z. Quote http://i.imgur.com/NdrFdld.png[/img]
Draco18s Posted February 21, 2014 Posted February 21, 2014 Report it to Mojang. I've reported things I've found in the code before (like why walking on slabs over ice is like walking on ice, it has to do with the fact that the entity position is floored, then subtracts 1 to determine what block you're walking on). Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
coolAlias Posted February 21, 2014 Author Posted February 21, 2014 Every time I go to report a bug, I get to the point where it asks me to create a new account and I stop. Call me lazy, but I think it's ridiculous to need an account just to report a bug, and being unable to use the one we already have with Mojang is even more ridiculous. So I just end up never reporting bugs. I know, it's petty, but it pisses me off every time I go there. Just one of those random things... Quote http://i.imgur.com/NdrFdld.png[/img]
Draco18s Posted February 21, 2014 Posted February 21, 2014 You are a lazy bastard indeed. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
coolAlias Posted February 21, 2014 Author Posted February 21, 2014 Not lazy, it's just one of those things that I can't stand for some illogical reason. I realize it's stupid, but it still irks me to no end that I have to create an account to post a bug report. I actually did create an account for the original Atlassian bug tracker, but somehow that's gotten all f-ed up and I can't use it anymore due to some onDemand gibberish, and I really don't feel like making another or wasting any more time than I already have on it, when they could just as easily link it to our Minecraft accounts. I don't see how they expect people to report bugs when they make it such a damn hassle to do so, but perhaps I'm the only one that feels that way. Quote http://i.imgur.com/NdrFdld.png[/img]
Draco18s Posted February 21, 2014 Posted February 21, 2014 due to some onDemand gibberish You mean like migrating to a new URL? Your login is valid on the new tracker if you had one on the old. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
coolAlias Posted February 21, 2014 Author Posted February 21, 2014 You mean like migrating to a new URL? Your login is valid on the new tracker if you had one on the old. That's what I thought as well, but you know, it was quite a long time ago when I set up that account, and to be honest I don't recall if I ever got it working back then either. I thought I had, but now I'm not so certain, as I recall it being quite difficult to set up. I realize that makes me look like an idiot, I mean come on, who can't set up an online account these days... but man, I've never encountered a service that is that freaking difficult to use before. I set up an account, log in and there seem to be all sorts of other account 'options', and later on I can't use the account anymore because it's not set up for whatever that damn on Demand crap is, and I sure as hell am not signing up for that because it sounds like a paid 'service'. I was definitely able to at least log in before, more than a year ago, but now I can't even do that. Anyway, I've wasted a lot of time messing around with the damn thing since its inception, and I've just had enough of it, in addition to my original point that I think it's absurd to require an account, especially one separate from the one we already use to play the game, just to report a bug. Sorry, but the whole situation has been grating on my nerves for some time, and it's been exceedingly frustrating to use (or not, since I haven't been successful since I first set up the account). Quote http://i.imgur.com/NdrFdld.png[/img]
Recommended Posts
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.