Posted April 3, 20196 yr 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 April 3, 20196 yr by DiamondMiner88
April 3, 20196 yr Looks like your version of mappings doesn't correspond to the one Cadiboo has used. You either need to use the same mappings or manually update the methods names.
April 3, 20196 yr Author 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 April 3, 20196 yr by DiamondMiner88
April 4, 20196 yr 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 Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.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)
April 4, 20196 yr Author 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
April 4, 20196 yr Author Never mind apparently stable_45 is for later than 1.12.2 now redoing setupdecompWorkspace Edited April 4, 20196 yr by DiamondMiner88 Wrong #
April 4, 20196 yr Author 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?
April 4, 20196 yr 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 Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.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)
April 4, 20196 yr 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 Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.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)
April 4, 20196 yr Author 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.
April 4, 20196 yr 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 April 4, 20196 yr by desht
April 4, 20196 yr Author 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 April 4, 20196 yr by DiamondMiner88 Spelling
April 4, 20196 yr 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.
April 4, 20196 yr Author 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 April 4, 20196 yr by DiamondMiner88
April 4, 20196 yr 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?
April 4, 20196 yr Author 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 April 4, 20196 yr by DiamondMiner88
April 4, 20196 yr Author 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
April 4, 20196 yr 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()); }
April 4, 20196 yr Author 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?
April 4, 20196 yr 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();
April 4, 20196 yr Author Still get the same error i need something else instead of EnumFacing.byIndex(meta);
April 5, 20196 yr 40 minutes ago, DiamondMiner88 said: Still get the same error i need something else instead of EnumFacing.byIndex(meta); Replace it with EnumFacing.getHorizontal(meta);
April 5, 20196 yr Author I'm using mapping stable_39 getHorizontal is not in there. Can't use anything lower because i use parts that are only in there and higher. Edited April 5, 20196 yr by DiamondMiner88
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.