Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (โ‹ฎ) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

DroidCrafter23

Members
  • Joined

  • Last visited

  1. I would recommend the YouTube channel ModdingByKaupenjoe. He provides modding tutorials for Forge, Fabric and Neoforge from 1.17 to 1.21 that cover a wide range of topics (items, blocks, armour, tools, ore, trees, world generation, etc). He also always gives the link to his GitHub repository in the description so you can view the code yourself. On his channel you can also find a Java tutorial which you can use beforehand if you want to. Here's the link: https://youtube.com/@moddingbykaupenjoe?feature=shared
  2. I returned to a mod I worked on in April to update it and I kept getting errno2 when running the client. Could not set process working directory to 'C:\Users\[USER]\Downloads\BaseMDK_Forge1-21\BaseMDK_Forge1-21': could not set current directory (errno 2) Upon further inspection, I noticed that a lot of the gradle features were missing in the side bar. Usually there would be more than just the run configurations. See this image for context: https://ibb.co/84b0ySMP I later ran the client for another mod of mine and it worked as normal. The only difference I can think of between the two is the one that isn't working is the one I ran the jar for to upload the mod whereas the other mod is yet to be publicly released. I have absolutely no idea what to do and I've found nothing online about the gradle features being missing and the fixes I tried for errno2 did not work. Help would be greatly appreciated.
  3. I am wanting to rename the file of my mod for ease of recognition as when modding I have a base mod that I use with everything needed for set-up complete, ready for me to make a mod. However, when I do I need to reload the Gradle build script. There is usually a pop-up in my IDE (IntelliJ) that allows me to load it, though it is not present after changing the file name. How would I load the Gradle build script and am I doing anything wrong with how I mod? Advice would be much appreciated.
  4. Tired of the same old iron sword and pickaxe? Dive into a world of enhanced possibilities with Droid's Implements! This exciting addition to your Minecraft experience introduces: Four Unique Weapons: Daggers: Quick, cheap, and effective, great for agility. Applies Weakness for one minute. Warhammers: A powerful option for defeating strong enemies. Applies Harming for a quarter of a second, making it ineffective against the undead. Spears: A balanced weapon with fair damage and speed. Applies Mining Fatigue, making escape difficult for cornered enemies. Clubs: Hard-hitting yet slow, the club is a robust alternative to the sword. Applies Slowness, increasing the chance of catching your enemy. Two Handy Tools: The Mining Hammer: A worthwhile alternative to the pickaxe, the Mining Hammer mines in a 3x3 area, making mining stone more efficient. The Heavy Shovel: A beneficial substitute to the shovel, the Mining Hammer mines in a 3x3 area, making mining sand and gravel more efficient. Damage Comparison: Dagger > Spear > Sword = Club > Warhammer Check it out now!
  5. I have recently released my first ever Minecraft mod, it adds an overpowered sword with an insane grind to craft. More info on the CurseForge page: https://www.curseforge.com/minecraft/mc-mods/destroyer-of-worlds I'd love to hear your thoughts.
  6. @Madduck4, I'm glad to have helped you and I thank you for reading the entire post. No need to apologise either for taking a while to respond. I'll be looking forward to seeing what you create! ๐Ÿ˜
  7. Yes, the GatherDataEvent class is called in the DataGenerators Class only, though no changes are made to it in the WorldGen tutorial I was following.
  8. Recently I feel like the time taken for a response in the Modder Support forum is slower than what it was when I first joined the forum (9 months ago), which feels odd due to the amount of views many posts get (my most recent one is currently sitting at 19.6k views with no replies; though I understand that not everyone viewing may have an account or be able to help). I would usually get replies only a few days after originally posting, but with my most recent post I have been waiting for two weeks. I even saw a post a few days ago where someone got a reply six months after they posted. In my case, I am quite an inexperienced modder that is relying on tutorials to learn my modding. With my inexperience there are some issues, like two that I am having now where things are going wrong with my code yet my code matches perfectly with the tutorial, that I am simply clueless on and am put in quite a roadblock. The help here on the forums is excellent and I usually don't mind waiting a few days, but I would also really like to progress with my mod and release it to the public. I am not trying to complain with this post, I am just wanting to mention something bothering me to see if anyone else is the same.
  9. I myself am quite new to the modding scene, I started modding in February but have been in development hell a lot and have struggled to focus on one mod though I have been developing the current mod I've been working on since September and have made a lot of progress; during this time I have found a lot of helpful resources and have learnt a lot of things. 1. You can, I have had no Java experience previously and since modding have managed to be quite knowledgeable in Java. 2. Modding does not require massive teams, I and many others work alone, though having a team is certainly helpful in the modding process to get things done in a quicker and more organised way. 3. I absolutely have to recommend ModdingByKaupenjoe, he makes loads of tutorials for Minecraft from 1.16.5 and above with support for Forge, Fabric, and as of his 1.21 tutorials, Neoforge. These tutorials are really well made, covering almost every modding topic, (such as items, blocks, mobs, worldgen, etc.) and are pretty easy to follow, and Kaupenjoe always leaves the link to his GitHub repositories where you can view the code of that tutorial at your own pace as well as linking textures in the description of his videos for you to use. These forums are also quite good if you need help, though I have found that it sometimes takes a little while for a response but it is always worth the wait; from my experience the people on these forums have always been kind and helpful. There are also user-submitted tutorials that may be helpful as well. Using GitHub to search up a certain class that you are wanting to use in your mod is also quite helpful, the video I have linked goes into more detail. I would also recommend planning out your mod before you make it to have a clearer idea of how you want your mod to be, including sketches and annotations are also a good idea for this. It has helped me make progress a lot quicker when programming as I already know how I want things to look/act. I hope all this information helps!
  10. I have followed a tutorial on how to generate ores for my mod though the data files have not been generated despite me running data in my IDE. I have looked over and compared my code multiple times and the only differences are either with the IDs or with unnecessary code because of what my mod is (The mod is for the End so I don't need the Overworld or Nether ores), my folders are all in the right structure and no warnings are present when ran. I have been trying to figure this out for a few days now so help would be much appreciated. The tutorial I was following. The GitHub Repository from the tutorial. My code - public class ModBiomeModifiers { public static final ResourceKey<BiomeModifier> ADD_GAZITE_ORE = registerKey("add_gazite_ore"); public static final ResourceKey<BiomeModifier> TRANSCENDINE_GAZITE_ORE = registerKey("add_transcendine_ore"); public static void bootstrap(BootstrapContext<BiomeModifier> context) { var placedFeature = context.lookup(Registries.PLACED_FEATURE); var biomes = context.lookup(Registries.BIOME); context.register(ADD_GAZITE_ORE, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_END), HolderSet.direct(placedFeature.getOrThrow(ModPlacedFeatures.GAZITE_ORE_PLACED_KEY)), GenerationStep.Decoration.UNDERGROUND_ORES)); context.register(TRANSCENDINE_GAZITE_ORE, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_END), HolderSet.direct(placedFeature.getOrThrow(ModPlacedFeatures.TRANSCENDINE_ORE_PLACED_KEY)), GenerationStep.Decoration.UNDERGROUND_ORES)); } private static ResourceKey<BiomeModifier> registerKey(String name) { return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(EchoingEnd.MOD_ID, name)); } } The tutorial's code - public class ModBiomeModifiers { public static final ResourceKey<BiomeModifier> ADD_ALEXANDRITE_ORE = registerKey("add_alexandrite_ore"); public static final ResourceKey<BiomeModifier> ADD_NETHER_ALEXANDRITE_ORE = registerKey("add_nether_alexandrite_ore"); public static final ResourceKey<BiomeModifier> ADD_END_ALEXANDRITE_ORE = registerKey("add_end_alexandrite_ore"); public static void bootstrap(BootstrapContext<BiomeModifier> context) { var placedFeature = context.lookup(Registries.PLACED_FEATURE); var biomes = context.lookup(Registries.BIOME); context.register(ADD_ALEXANDRITE_ORE, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_OVERWORLD), HolderSet.direct(placedFeature.getOrThrow(ModPlacedFeatures.ALEXANDRITE_ORE_PLACED_KEY)), GenerationStep.Decoration.UNDERGROUND_ORES)); // Individual Biomes // context.register(ADD_ALEXANDRITE_ORE, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( // HolderSet.direct(biomes.getOrThrow(Biomes.PLAINS), biomes.getOrThrow(Biomes.BAMBOO_JUNGLE)), // HolderSet.direct(placedFeature.getOrThrow(ModPlacedFeatures.ALEXANDRITE_ORE_PLACED_KEY)), // GenerationStep.Decoration.UNDERGROUND_ORES)); context.register(ADD_NETHER_ALEXANDRITE_ORE, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_NETHER), HolderSet.direct(placedFeature.getOrThrow(ModPlacedFeatures.NETHER_ALEXANDRITE_ORE_PLACED_KEY)), GenerationStep.Decoration.UNDERGROUND_ORES)); context.register(ADD_END_ALEXANDRITE_ORE, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_END), HolderSet.direct(placedFeature.getOrThrow(ModPlacedFeatures.END_ALEXANDRITE_ORE_PLACED_KEY)), GenerationStep.Decoration.UNDERGROUND_ORES)); } private static ResourceKey<BiomeModifier> registerKey(String name) { return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, name)); } } ModConfiguredFeatures: My code - public class ModConfiguredFeatures { public static final ResourceKey<ConfiguredFeature<?, ?>> GAZITE_ORE_KEY = registerKey("gazite_ore"); public static final ResourceKey<ConfiguredFeature<?, ?>> TRANSCENDINE_ORE_KEY = registerKey("transcendine_ore"); public static void bootstrap(BootstrapContext<ConfiguredFeature<?, ?>> context) { RuleTest endReplaceables = new BlockMatchTest(Blocks.END_STONE); register(context, GAZITE_ORE_KEY, Feature.ORE, new OreConfiguration(endReplaceables, ModBlocks.GAZITE_ORE.get().defaultBlockState(), 4)); register(context, TRANSCENDINE_ORE_KEY, Feature.ORE, new OreConfiguration(endReplaceables, ModBlocks.TRANSCENDINE_ORE.get().defaultBlockState(), 8)); List<OreConfiguration.TargetBlockState> EndOres = List.of( OreConfiguration.target(endReplaceables, ModBlocks.GAZITE_ORE.get().defaultBlockState()), OreConfiguration.target(endReplaceables, ModBlocks.TRANSCENDINE_ORE.get().defaultBlockState())); } public static ResourceKey<ConfiguredFeature<?, ?>> registerKey(String name) { return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(EchoingEnd.MOD_ID, name)); } private static <FC extends FeatureConfiguration, F extends Feature<FC>> void register(BootstrapContext<ConfiguredFeature<?, ?>> context, ResourceKey<ConfiguredFeature<?, ?>> key, F feature, FC configuration) { context.register(key, new ConfiguredFeature<>(feature, configuration)); } } The tutorial's code - public class ModConfiguredFeatures { public static final ResourceKey<ConfiguredFeature<?, ?>> OVERWORLD_ALEXANDRITE_ORE_KEY = registerKey("alexandrite_ore"); public static final ResourceKey<ConfiguredFeature<?, ?>> NETHER_ALEXANDRITE_ORE_KEY = registerKey("nether_alexandrite_ore"); public static final ResourceKey<ConfiguredFeature<?, ?>> END_ALEXANDRITE_ORE_KEY = registerKey("end_alexandrite_ore"); public static void bootstrap(BootstrapContext<ConfiguredFeature<?, ?>> context) { RuleTest stoneReplaceables = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES); RuleTest deepslateReplaceables = new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES); RuleTest netherrackReplaceables = new BlockMatchTest(Blocks.NETHERRACK); RuleTest endReplaceables = new BlockMatchTest(Blocks.END_STONE); List<OreConfiguration.TargetBlockState> overworldAlexandriteOres = List.of( OreConfiguration.target(stoneReplaceables, ModBlocks.ALEXANDRITE_ORE.get().defaultBlockState()), OreConfiguration.target(deepslateReplaceables, ModBlocks.ALEXANDRITE_DEEPSLATE_ORE.get().defaultBlockState())); register(context, OVERWORLD_ALEXANDRITE_ORE_KEY, Feature.ORE, new OreConfiguration(overworldAlexandriteOres, 9)); register(context, NETHER_ALEXANDRITE_ORE_KEY, Feature.ORE, new OreConfiguration(netherrackReplaceables, ModBlocks.ALEXANDRITE_NETHER_ORE.get().defaultBlockState(), 9)); register(context, END_ALEXANDRITE_ORE_KEY, Feature.ORE, new OreConfiguration(endReplaceables, ModBlocks.ALEXANDRITE_END_ORE.get().defaultBlockState(), 9)); } public static ResourceKey<ConfiguredFeature<?, ?>> registerKey(String name) { return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, name)); } private static <FC extends FeatureConfiguration, F extends Feature<FC>> void register(BootstrapContext<ConfiguredFeature<?, ?>> context, ResourceKey<ConfiguredFeature<?, ?>> key, F feature, FC configuration) { context.register(key, new ConfiguredFeature<>(feature, configuration)); } } ModPlacedFeatures: My code - public class ModPlacedFeatures { public static final ResourceKey<PlacedFeature> GAZITE_ORE_PLACED_KEY = registerKey("gazite_ore_placed"); public static final ResourceKey<PlacedFeature> TRANSCENDINE_ORE_PLACED_KEY = registerKey("transcendine_ore_placed"); public static void bootstrap(BootstrapContext<PlacedFeature> context) { var configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); register(context, GAZITE_ORE_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.GAZITE_ORE_KEY), ModOrePlacement.commonOrePlacement(9, HeightRangePlacement.uniform(VerticalAnchor.absolute(-64), VerticalAnchor.absolute(71)))); register(context, TRANSCENDINE_ORE_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.GAZITE_ORE_KEY), ModOrePlacement.rareOrePlacement(6, HeightRangePlacement.uniform(VerticalAnchor.absolute(-32), VerticalAnchor.absolute(71)))); } private static ResourceKey<PlacedFeature> registerKey(String name) { return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(EchoingEnd.MOD_ID, name)); } private static void register(BootstrapContext<PlacedFeature> context, ResourceKey<PlacedFeature> key, Holder<ConfiguredFeature<?, ?>> configuration, List<PlacementModifier> modifiers) { context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); } } the tutorial's code - public class ModPlacedFeatures { public static final ResourceKey<PlacedFeature> ALEXANDRITE_ORE_PLACED_KEY = registerKey("alexandrite_ore_placed"); public static final ResourceKey<PlacedFeature> NETHER_ALEXANDRITE_ORE_PLACED_KEY = registerKey("nether_alexandrite_ore_placed"); public static final ResourceKey<PlacedFeature> END_ALEXANDRITE_ORE_PLACED_KEY = registerKey("end_alexandrite_ore_placed"); public static void bootstrap(BootstrapContext<PlacedFeature> context) { var configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); register(context, ALEXANDRITE_ORE_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.OVERWORLD_ALEXANDRITE_ORE_KEY), ModOrePlacement.commonOrePlacement(12, HeightRangePlacement.uniform(VerticalAnchor.absolute(-64), VerticalAnchor.absolute(80)))); register(context, NETHER_ALEXANDRITE_ORE_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.NETHER_ALEXANDRITE_ORE_KEY), ModOrePlacement.commonOrePlacement(12, HeightRangePlacement.uniform(VerticalAnchor.absolute(-64), VerticalAnchor.absolute(80)))); register(context, END_ALEXANDRITE_ORE_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.END_ALEXANDRITE_ORE_KEY), ModOrePlacement.commonOrePlacement(12, HeightRangePlacement.uniform(VerticalAnchor.absolute(-64), VerticalAnchor.absolute(80)))); } private static ResourceKey<PlacedFeature> registerKey(String name) { return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, name)); } private static void register(BootstrapContext<PlacedFeature> context, ResourceKey<PlacedFeature> key, Holder<ConfiguredFeature<?, ?>> configuration, List<PlacementModifier> modifiers) { context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); } } ModOrePlacement: My code - public class ModOrePlacement { public static List<PlacementModifier> orePlacement(PlacementModifier pCountPlacement, PlacementModifier pHeightRange) { return List.of(pCountPlacement, InSquarePlacement.spread(), pHeightRange, BiomeFilter.biome()); } public static List<PlacementModifier> commonOrePlacement(int pCount, PlacementModifier pHeightRange) { return orePlacement(CountPlacement.of(pCount), pHeightRange); } public static List<PlacementModifier> rareOrePlacement(int pChance, PlacementModifier pHeightRange) { return orePlacement(RarityFilter.onAverageOnceEvery(pChance), pHeightRange); } } The tutorial's code - public class ModOrePlacement { public static List<PlacementModifier> orePlacement(PlacementModifier pCountPlacement, PlacementModifier pHeightRange) { return List.of(pCountPlacement, InSquarePlacement.spread(), pHeightRange, BiomeFilter.biome()); } public static List<PlacementModifier> commonOrePlacement(int pCount, PlacementModifier pHeightRange) { return orePlacement(CountPlacement.of(pCount), pHeightRange); } public static List<PlacementModifier> rareOrePlacement(int pChance, PlacementModifier pHeightRange) { return orePlacement(RarityFilter.onAverageOnceEvery(pChance), pHeightRange); } } ModDataPackEntries: My code - public class ModDataPackEntries extends DatapackBuiltinEntriesProvider { public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() .add(Registries.CONFIGURED_FEATURE, ModConfiguredFeatures::bootstrap) .add(Registries.PLACED_FEATURE, ModPlacedFeatures::bootstrap) .add(ForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap); public ModDataPackEntries(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) { super(output, registries, BUILDER, Set.of(EchoingEnd.MOD_ID)); } } The tutorial's code - public class ModDatapackEntries extends DatapackBuiltinEntriesProvider { public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() //.add(Registries.TRIM_MATERIAL, ModTrimMaterials::bootstrap) //.add(Registries.TRIM_PATTERN, ModTrimPatterns::bootstrap) //.add(Registries.ENCHANTMENT, ModEnchantments::bootstrap) // (From a different tutorial). .add(Registries.CONFIGURED_FEATURE, ModConfiguredFeatures::bootstrap) .add(Registries.PLACED_FEATURE, ModPlacedFeatures::bootstrap) .add(ForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap); public ModDatapackEntries(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) { super(output, registries, BUILDER, Set.of(TutorialMod.MOD_ID)); } }
  11. Okay, thank you so much for your help. I will try out your first idea over the coming days; the second one will probably take a while to complete, even more so due to the fact I'm inexperienced with modding, though your idea for it seems plausible. I will post updates here as I go along, including issues, to both keep track of progress and to get help for it. Your contributions are much appreciated.
  12. I am wanting to give the armour in my mod special properties, but I have no idea how to do so. For the first armour set I want it to be the case that when the full set is worn it has the properties of a carved pumpkin, making it so you won't aggravate endermen when you look at them. The second, and presumably harder property is that for the second set I would like it to be the case that when the full set is worn, you can walk over the void without falling. (I was considering using the levitation to accomplish this but I wanted to check beforehand). Would both of these specialities be achievable for each armour set and how exactly would they both be done? Help would be much appreciated.
  13. This problem has now been resolved. No action is needed towards it.
  14. I have been working on recipes for my mod and have come across two errors. ERROR ONE: [19:38:01] [Render thread/ERROR] [minecraft/RecipeManager]: Parsing error loading recipe echoingend:gazite_block com.google.gson.JsonParseException: Map entry 'A' : Failed to parse either. First: Input does not contain a key [type]: MapLike[{"item":"echoingend:gazite"}]; Second: Failed to parse either. First: Not a json array: {"item":"echoingend:gazite"}; Second: No key tag in MapLike[{"item":"echoingend:gazite"}]; Unknown registry key in ResourceKey[minecraft:root / minecraft:item]: echoingend:gazite LINKED CODE: { "type": "minecraft:crafting_shaped", "category": "misc", "key": { "A": { "item": "echoingend:gazite" } }, "pattern": [ "AAA", "AAA", "AAA" ], "result": { "count": 1, "id": "echoingend:gazite_block" } } ERROR TWO: [19:38:01] [Render thread/ERROR] [minecraft/RecipeManager]: Parsing error loading recipe echoingend:gazite com.google.gson.JsonParseException: Unknown registry key in ResourceKey[minecraft:root / minecraft:item]: echoingend:gazite LINKED CODE: { "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ { "item": "echoingend:gazite_block" } ], "result": { "count": 9, "id": "echoingend:gazite" } } The tutorial I was following. The GitHub Repository from the tutorial. My file structure is: data/[MOD ID]/recipe/[ITEM/BLOCK], as it is in the tutorial.

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions โ†’ Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.