Jump to content

Recommended Posts

Posted (edited)

I got linked to Cadiboo's Example mod because i was having trouble with registering items, so i used his ModUtil and ModCreativeTabs class and a few others. When i copied them to my mod to edit i saw that in the ModCreativeTabs class it had a few errors like:

Class 'Anonymous class derived from CustomCreativeTab' must be either be declared abstract or implement abstract method 'getTabIconItem()' in 'CretiveTabs'

caused by

public static final CustomCreativeTab CREATIVE_TAB = new CustomCreativeTab(MOD_ID, true) {
	@Override
	public ItemStack createIcon() {
		return TAB_ICON_ITEMSTACK;
	}
};

and

Method does not override method from it's superclass

caused by

@SideOnly(Side.CLIENT)
@Override
abstract public ItemStack createIcon();

and in the ModUtil class:

Cannot resolve symbol
Item#setTranslationKey(String)

also

ResourceLocation#getPath()

and

Item#getNamespace

?

caused by

@Nonnull
public static CreativeTabs[] getCreativeTabs(@Nonnull final Item item) {
    Preconditions.checkNotNull(item, "Item cannot be null!");
    if (item.getRegistryName().getNamespace().equals(Reference.MOD_ID)) {
        return new CreativeTabs[]{item.getCreativeTab(), ModCreativeTabs.CREATIVE_TAB, CreativeTabs.SEARCH};
    }
    return new CreativeTabs[]{item.getCreativeTab(), CreativeTabs.SEARCH};
}

The thing is is that the original source that i got from his mod, had no errors like that.

I've tried to update the forge version, didn't help.

Can anyone tell me whats going on? Maybe i missed something or forgot to also copy another class. My Github: Here

Edited by DiamondMiner88
  • Replies 50
  • Created
  • Last Reply

Top Posters In This Topic

Posted (edited)

Sorry, but what does mappings mean? Method names?

I looked over it but couldn't find anything.

What about

Item#setTranslationKey(String)

it said it couldn't find that but it should be located in the Item class.

I manually looked and i could find that in his version but not my version of the Item class

Edited by DiamondMiner88
Posted

MCP (Mod Coder Pack) Mappings are what Forge uses to deobfuscate minecraft’s code and turn it into something human-readable. These names are provided by the community and can change, so its relatively important to keep them up to date. You can find a list of mappings here. Simply copy the name/date of the release and put it into your build.gradle file in the minecraft block.

 

The 1.12.2 Example Mod was done with the latest stable mapping’s for 1.12.2 (stable_39).

getDomain->getNamespace

setUnlocalisedName->setTranslationKey

getTabIconItem->createIcon

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted

When i change

mappings = "snapshot_20171003"

to

mappings = "stable_45"

and say Import Changes for Gradle i get an error like:

Quote

The mappings version must be a number! eg: channel_### or channel_custom (for custom mappings).
Open File

 

Posted

I have another question: when i used

snapshot_20171003

this piece of code worked:

@Override
public IBlockState getStateFromMeta(int meta) {
    EnumFacing facing = EnumFacing.getHorizontal(meta);
    return this.getDefaultState().withProperty(FACING, facing);
}

Now it says that it cannot resolve EnumFacing#getHorizontal

Also what is used instead of

@Override
public BlockRenderLayer getBlockLayer() {
    return BlockRenderLayer.TRANSLUCENT;
}

It can't find getBlockLayer() anymore.

Is getRenderLayer() used used instead?

Posted
1 hour ago, DiamondMiner88 said:

It can't find getBlockLayer() anymore.

Is getRenderLayer() used used instead?

Yes. Remember that these mapping’s are applied to the minecraft jar, so you can just look at where the now-broken mapping was normally used and find the new mapping

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted

Forge works like this

1) download minecraft

2) decompile minecraft

3) apply patches

4) recompile minecraft

5) remap the obfuscated names to human readable names using MCP

(4 and 5 may be in the opposite order)

If you have a mapping that no longer works, you can look at the vanilla code to see what it was changed to. 

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted

I tried downloading MCP and using the decompile.bat file to extract 1.12.2 but it returns a version less than the stable_39 and returns the minecraft source i had before all of this.

This is soooo confusing.

Posted (edited)
6 hours ago, DiamondMiner88 said:

I tried downloading MCP and using the decompile.bat file to extract 1.12.2 but it returns a version less than the stable_39 and returns the minecraft source i had before all of this.

This is soooo confusing.

There's no need to download MCP or do any decompiling yourself for normal mod development.  That's all handled for you (by the gradle setupDecompWorkspace task, for example).

 

Minecraft, as it's shipped by Mojang, is obfuscated, which means that all those class names, field names and method names which make perfect sense in your dev environment (like EnumFacing.getHorizontal()) are replaced with unreadable symbols like xyx.a() (note - that isn't the actual mapping for EnumFacing.getHorizontal()).

 

To make modding possible, MCP is a project which maps all those unreadable names to the ones that make sense to humans.  So when you run setupDecompWorkspace, ForgeGradle uses MCP and related tools to de-obfuscate the Minecraft code, and make the readable names available to your IDE so you can code against it.

 

When you build your mod (with the gradle build task) your code is reobfuscated so that when you ship your mod to be run against shipped (and obfuscated) Minecraft instances, it works.

 

The mappings do change and evolve, and when you update your mappings, it's possible that some of your code will no longer compile because it's referencing old mappings.  In this case, you hit this problem with EnumFacing.getHorizontal().  A little investigation is often all that's needed; find methods in the class with the same signature for a start, and use some intuition to figure out which method might be the replacement for the old one.  In this case, there are only two static methods in EnumFacing which take a single int parameter and return an EnumFacing: byIndex() and byHorizontalIndex().  I'll leave it to you to figure out which one of those replaces getHorizontal() :)

Edited by desht
Posted (edited)

I already understood what obfuscation means and what it does, i just didn't get how to find the new code.

I'v hit a boulder again.

Non-static method 'getHorizonstalIndex()' cannot be referenced from a static context
@Override
public IBlockState getStateFromMeta(int meta) {
    EnumFacing facing = EnumFacing.getHorizontalIndex(meta);
    return this.getDefaultState().withProperty(FACING, facing);
}
Edited by DiamondMiner88
Spelling
Posted
24 minutes ago, DiamondMiner88 said:

I already understood what obfuscation means and what it does, i just didn't get how to find the new code.

I'v hit a boulder again.


Non-static method 'getHorizonstalIndex()' cannot be referenced from a static context

@Override
public IBlockState getStateFromMeta(int meta) {
    EnumFacing facing = EnumFacing.getHorizontalIndex(meta);
    return this.getDefaultState().withProperty(FACING, facing);
}

The error tells you exactly what the problem is.  getHorizontalIndex() is not a static method.  It's also not the method I pointed you toward in my last post.

Posted (edited)

Okay, byIndex() works it was a 50 50 so i guessed forgot to look at if it's static or not.

When i run the MC Client i get this:

Error:java: invalid source release: 12

IDK what that means

Edited by DiamondMiner88
Posted
27 minutes ago, DiamondMiner88 said:

Okay, byIndex() works it was a 50 50 so i guessed forgot to look at if it's static or not.

byIndex() might seem to work, but it is not the method you want.  I gave you two options for possible replacements for EnumFacing.getHorizontal() but you seem grimly determined not to pick the obviously correct one.

 

As for the "invalid source release" error, not sure, but what JDK version are you using in your project?

Posted (edited)

Then what method do I use? I'm not new to modding but certainly not a expert at it.

 

JDK: 1.8.0_202

I also tried 1.8.0_172 but same thing

 

Information:java: Errors occurred while compiling module 'CharacterMod'
Information:javac 1.8.0_172 was used to compile java sources
Information:Module "CharacterMod" was fully rebuilt due to project configuration/dependencies changes
Information:4/4/2019 2:54 PM - Compilation completed with 1 error and 0 warnings in 7 s 873 ms
Error:java: invalid source release: 12

The 12 is changed to a different number by changing the Project language level in IntelliJ. I have it set to '12:No new language features'

Looks like the compilation is successful but it's IntelliJ or some kind of library that's having trouble

 

EDIT: Fixed by changing to 8

Edited by DiamondMiner88
Posted

What do i use instead of getHorizontal?

I get an error like

[15:30:23] [main/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.RegistryEvent$Register@78519d63:
java.lang.IllegalArgumentException: Cannot set property PropertyDirection{name=facing, clazz=class net.minecraft.util.EnumFacing, values=[north, south, west, east]} to down on block character_mod:a_glass_black, it is not an allowed value
	at net.minecraft.block.state.BlockStateContainer$StateImplementation.withProperty(BlockStateContainer.java:233) ~[BlockStateContainer$StateImplementation.class:?]
	at tk.diamondbuildz.mod.character.blocks.blockbases.a.BlockBaseGlassA.getStateFromMeta(BlockBaseGlassA.java:66) ~[BlockBaseGlassA.class:?]
	at net.minecraftforge.registries.GameData$BlockCallbacks.onAdd(GameData.java:330) ~[GameData$BlockCallbacks.class:?]
	at net.minecraftforge.registries.GameData$BlockCallbacks.onAdd(GameData.java:296) ~[GameData$BlockCallbacks.class:?]
	at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:358) ~[ForgeRegistry.class:?]
	at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:289) ~[ForgeRegistry.class:?]
	at net.minecraftforge.registries.ForgeRegistry.register(ForgeRegistry.java:122) ~[ForgeRegistry.class:?]
	at tk.diamondbuildz.mod.character.EventSubscriber.onRegisterBlocksEvent(EventSubscriber.java:44) ~[EventSubscriber.class:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_EventSubscriber_onRegisterBlocksEvent_Register.invoke(.dynamic) ~[?:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144) ~[EventBus$1.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) [EventBus.class:?]
	at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:777) [GameData.class:?]
	at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:628) [Loader.class:?]
	at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252) [FMLClientHandler.class:?]
	at net.minecraft.client.Minecraft.init(Minecraft.java:513) [Minecraft.class:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:421) [Minecraft.class:?]
	at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
	at GradleStart.main(GradleStart.java:25) [start/:?]
[15:30:23] [main/ERROR] [FML]: Index: 2 Listeners:
[15:30:23] [main/ERROR] [FML]: 0: NORMAL
[15:30:23] [main/ERROR] [FML]: 1: net.minecraftforge.fml.common.eventhandler.EventBus$1@6da640fe
[15:30:23] [main/ERROR] [FML]: 2: net.minecraftforge.fml.common.eventhandler.EventBus$1@62832e24
[15:30:23] [main/ERROR] [FML]: 3: net.minecraftforge.fml.common.eventhandler.EventBus$1@48c49c1a

 

Posted
10 minutes ago, DiamondMiner88 said:

What do i use instead of getHorizontal?

I get an error like


[15:30:23] [main/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.RegistryEvent$Register@78519d63:
java.lang.IllegalArgumentException: Cannot set property PropertyDirection{name=facing, clazz=class net.minecraft.util.EnumFacing, values=[north, south, west, east]} to down on block character_mod:a_glass_black, it is not an allowed value
	at net.minecraft.block.state.BlockStateContainer$StateImplementation.withProperty(BlockStateContainer.java:233) ~[BlockStateContainer$StateImplementation.class:?]
	at tk.diamondbuildz.mod.character.blocks.blockbases.a.BlockBaseGlassA.getStateFromMeta(BlockBaseGlassA.java:66) ~[BlockBaseGlassA.class:?]
	at net.minecraftforge.registries.GameData$BlockCallbacks.onAdd(GameData.java:330) ~[GameData$BlockCallbacks.class:?]
	at net.minecraftforge.registries.GameData$BlockCallbacks.onAdd(GameData.java:296) ~[GameData$BlockCallbacks.class:?]
	at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:358) ~[ForgeRegistry.class:?]
	at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:289) ~[ForgeRegistry.class:?]
	at net.minecraftforge.registries.ForgeRegistry.register(ForgeRegistry.java:122) ~[ForgeRegistry.class:?]
	at tk.diamondbuildz.mod.character.EventSubscriber.onRegisterBlocksEvent(EventSubscriber.java:44) ~[EventSubscriber.class:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_EventSubscriber_onRegisterBlocksEvent_Register.invoke(.dynamic) ~[?:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144) ~[EventBus$1.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) [EventBus.class:?]
	at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:777) [GameData.class:?]
	at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:628) [Loader.class:?]
	at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252) [FMLClientHandler.class:?]
	at net.minecraft.client.Minecraft.init(Minecraft.java:513) [Minecraft.class:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:421) [Minecraft.class:?]
	at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
	at GradleStart.main(GradleStart.java:25) [start/:?]
[15:30:23] [main/ERROR] [FML]: Index: 2 Listeners:
[15:30:23] [main/ERROR] [FML]: 0: NORMAL
[15:30:23] [main/ERROR] [FML]: 1: net.minecraftforge.fml.common.eventhandler.EventBus$1@6da640fe
[15:30:23] [main/ERROR] [FML]: 2: net.minecraftforge.fml.common.eventhandler.EventBus$1@62832e24
[15:30:23] [main/ERROR] [FML]: 3: net.minecraftforge.fml.common.eventhandler.EventBus$1@48c49c1a

 

You have it set so there is up or down values, but just replace it with a horizontal value. remove that and add this:
 

@Override
    @Nonnull
    public IBlockState getStateForPlacement(@Nullable World world, @Nullable BlockPos pos, @Nullable EnumFacing facing, float hitX, float hitY, float hitZ, int meta, @Nullable EntityLivingBase placer, EnumHand hand) {
        assert placer != null;
        return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
    }

 

Posted

I have south,north,west,east for states and have

{
  "variants": {
    "facing=south": { "model": "character_mod:a_concrete_black", "y": 0 },
    "facing=west": { "model": "character_mod:a_concrete_black", "y": 90 },
    "facing=north": { "model": "character_mod:a_concrete_black", "y": 180 },
    "facing=east": { "model": "character_mod:a_concrete_black", "y": 270 }
  }
}

for my blockstates

Code for it:

@Override
public IBlockState getStateFromMeta(int meta) {
    EnumFacing facing = EnumFacing.byIndex(meta);
    return this.getDefaultState().withProperty(FACING, facing);
}

@Override
public int getMetaFromState(IBlockState state) {
    EnumFacing facing = state.getValue(FACING);
    return facing.getHorizontalIndex();
}

@Override
public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing blockFaceClickedOn, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) {
    // find the quadrant the player is facing
    EnumFacing enumfacing = (placer == null) ? EnumFacing.NORTH : EnumFacing.fromAngle(placer.rotationYaw);

    return this.getDefaultState().withProperty(FACING, enumfacing);
}

That's what i already have, what do i need to remove and replace with your code?

Posted
38 minutes ago, DiamondMiner88 said:

I have south,north,west,east for states and have


{
  "variants": {
    "facing=south": { "model": "character_mod:a_concrete_black", "y": 0 },
    "facing=west": { "model": "character_mod:a_concrete_black", "y": 90 },
    "facing=north": { "model": "character_mod:a_concrete_black", "y": 180 },
    "facing=east": { "model": "character_mod:a_concrete_black", "y": 270 }
  }
}

for my blockstates

Code for it:


@Override
public IBlockState getStateFromMeta(int meta) {
    EnumFacing facing = EnumFacing.byIndex(meta);
    return this.getDefaultState().withProperty(FACING, facing);
}

@Override
public int getMetaFromState(IBlockState state) {
    EnumFacing facing = state.getValue(FACING);
    return facing.getHorizontalIndex();
}

@Override
public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing blockFaceClickedOn, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) {
    // find the quadrant the player is facing
    EnumFacing enumfacing = (placer == null) ? EnumFacing.NORTH : EnumFacing.fromAngle(placer.rotationYaw);

    return this.getDefaultState().withProperty(FACING, enumfacing);
}

That's what i already have, what do i need to remove and replace with your code?

Replace

EnumFacing.fromAngle(player.rotationYaw);

with

placer.getHorizontalFacing().getOpposite();

 

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




×
×
  • Create New...

Important Information

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