Jump to content

Recommended Posts

Posted

So I have experience in other languages and a little in Java.

But no experience in Forge / Minecraft modding.

 

And I came to an issue I am unable to solve:

 

I worked mostly of the examples made by https://github.com/TheGreyGhost/MinecraftByExample/

 

I nailed my issue down to the overridden functions getStateFromMeta and getMetaFromState.

 

So the issue is:

 

My code crashes with the following stacktrace:

 

net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from Test (testmod)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 18
at net.minecraftforge.fml.common.registry.GameData$BlockCallbacks.onAdd(GameData.java:303)
at net.minecraftforge.fml.common.registry.GameData$BlockCallbacks.onAdd(GameData.java:284)
at net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry.addObjectRaw(FMLControlledNamespacedRegistry.java:584)
at net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry.add(FMLControlledNamespacedRegistry.java:482)
at net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry.register(FMLControlledNamespacedRegistry.java:829)
at net.minecraftforge.fml.common.registry.GameData.register_impl(GameData.java:254)
at net.minecraftforge.fml.common.registry.GameRegistry.register(GameRegistry.java:153)

at my.testmod.StartupCommon.preInitCommon(StartupCommon.java:27) <---

 

First problem is, the stacktrace is not detailed enough, all it points me to is:

 

GameRegistry.register(testBlockVariant);

 

Is there a way to get more out of the stacktrace in Java/Forge/Minecraft?

 

But I was able to find what is possibly the cause of the crash, its somewhere in the Meta/State functions.

 

Here is the full BlockTestBlockVariants.java

 

https://gist.github.com/DeadSix27/3f508233175d7e5874ce18aa32698053

 

and StartupCommon.java

 

https://gist.github.com/DeadSix27/2997707637f59db7c81d82ee7c7e5159

 

If you need any more information or files, tell me.

 

 

Posted

So in short the example is wrong?

 

Meaning

 

    @Override
    public int getMetaFromState(IBlockState state)
    {
        EnumFacing facing = (EnumFacing)state.getValue(PROPERTYFACING);
        EnumColour colour = (EnumColour)state.getValue(PROPERTYCOLOUR);

        int facingbits = facing.getHorizontalIndex();
        int colourbits = colour.getMetadata() << 2;
        return facingbits | colourbits;
    }

 

would return a number bigger than 15?

Posted

You have 2 properties: one for the horizontal directions (4 directions) and one for the colors, which are right now 7 values, because you commented out the rest. 4*7=28 possible states, which is more than the 16 values metadata can handle (0-15). If you need more than 16 different values, you have to use another way of storing data, most likely a

TileEntity

.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Posted

So in short the example is wrong?

 

Meaning

 

    @Override
    public int getMetaFromState(IBlockState state)
    {
        EnumFacing facing = (EnumFacing)state.getValue(PROPERTYFACING);
        EnumColour colour = (EnumColour)state.getValue(PROPERTYCOLOUR);

        int facingbits = facing.getHorizontalIndex();
        int colourbits = colour.getMetadata() << 2;
        return facingbits | colourbits;
    }

 

would return a number bigger than 15?

Yes it would return a bigger value than 15, but the tutorial is not wrong. You used the wrong bit shift "<<" instead of ">>"

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted

I figured it has something to do with that, the whole bit code there is a  little beyond my experience, never worked with bitshifting, I will have to read more into that.

 

EDIT: However I should also look at Tile Entities, I guess, I read about people using the tile data for colour and the state for facing, which would allow for a bigger range of colours too.

Posted

Yes it would return a bigger value than 15, but the tutorial is not wrong. You used the wrong bit shift "<<" instead of ">>"

 

What could cause the facing and colour to be wrong upon world load though? I got it working but only until I save and close the world.

 

Then when it loads the world data the states are wrong.

Posted

If you are still using more than 16 metadata values, that's probably what's causing the issue. If you want to have 4 facings, and the full 16 colors, you have 64 different states, which metadata can't handle. You should really use a

TileEntity

for this.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Posted

BTW, using a TE will not get you away from states and properties. It only serves to truncate the metadata value stored with a block.

 

Another dodge is if one of your properties can be calculated from looking at neighboring blocks (the way walls connect). If for instance your facing depended on neighboring blocks, then it need not be stored in meta.

 

PS: Does vanilla already have a BlockHorizontal class from which you can subclass?

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Posted

BTW, using a TE will not get you away from states and properties. It only serves to truncate the metadata value stored with a block.

 

Another dodge is if one of your properties can be calculated from looking at neighboring blocks (the way walls connect). If for instance your facing depended on neighboring blocks, then it need not be stored in meta.

 

PS: Does vanilla already have a BlockHorizontal class from which you can subclass?

 

Unfortunately the neighboring blocks idea doesn't work in my case, as for example, it can be on any of the 3 sides in a corner of 3 blocks.

 

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

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