
Toasterkid
Members-
Posts
26 -
Joined
-
Last visited
Converted
-
Gender
Undisclosed
-
Personal Text
I am new!
Recent Profile Visitors
53237 profile views
Toasterkid's Achievements

Tree Puncher (2/8)
0
Reputation
-
Also doubting if my usage of awardStat is correct. It just looks like this right now: player.awardStat(SampleModRegistry.FIREWORK_BOOSTS_USED.getId()); but there are places vanilla Minecraft uses the function like this: .awardStat(Stats.CUSTOM.get(Stats.DAMAGE_BLOCKED_BY_SHIELD)
-
What does NetworkHooks.openScreen(player, blockEntity, pPos) do?
-
At an attempt at answering my first question I thought I might be able to change the code to this public class SampleModStatisticsRegistry { public static final DeferredRegister<StatType<?>> STATISTICS = DeferredRegister.create(ForgeRegistries.STAT_TYPES, SampleMod.MODID); public static final RegistryObject<StatType<?>> FIREWORK_BOOSTS_USED = STATISTICS.register("firework_boosts_used", () -> new StatType<>(ForgeRegistries.STAT_TYPES, Component.literal("firework_boosts"))); } or to this public class SampleModStatisticsRegistry { public static final DeferredRegister<StatType<?>> STATISTICS = DeferredRegister.create(ForgeRegistries.STAT_TYPES, SampleMod.MODID); public static final RegistryObject<StatType<?>> FIREWORK_BOOSTS_USED = STATISTICS.register("firework_boosts_used", () -> new StatType<>(BuiltInRegistries.STAT_TYPE, Component.literal("firework_boosts"))); } but for the first code snippet the StatType constructor requires a Registry not an IForgeRegistry and for the second code snippet we run into the same NPE issue from above.
-
I am attempting to create a mod that adds custom statistics to Minecraft. I've had some help from LexManos on the Discord server, but posting a lot of what I posted in the #mod-dev-support-1.20 channel here to have a more permanent spot for discussion. --- Minecraft creates their stats like this: and some of the registries in the code above are located in BuiltInRegistries.java like this: and the ForgeRegistries#STAT_TYPES looks like this: So, attempting to follow that and the forge documentation on registries I arrived at this: Clearly, registering a stat twice in a row is the wrong way to do it, but the makeRegistryStatType function was used as it does give the correct return type for the code I had come up with so far. --- At this point the game crashes upon trying to use Player#awardStat, because of a NPE that occurs in Stat#locationToKey. Which happens in the 2nd Stat#locationToKey in the Stat#buildName function. The .getRegistry returns the this.registry class variable with a value of {MappedRegistry@#####} "Registry[ResourceKey[minecraft:root / minecraft:custom_stat] (Stable)]" The value passed into .getKey is "samplemod:fireworks_boosts_used" but the reference found is null. So Lex's conclusion was that "[I'm] passing in null because the registry doesnt have an entry for your custom stat instance. So.. register your custom stat instance in that registry." --- So I suppose at this point my questions are 1. How can I create a supplier that returns a Supplier<? extends StatType<?>> to replace the () -> makeRegistryStatType("firework_boosts_used", BuiltInRegistries.CUSTOM_STAT) line of code. 2. Is my registry entry public static final RegistryObject<StatType<?>> FIREWORK_BOOSTS_USED the correct type? 3. Do I need to do anything additional, like create my own StatType<> or my own Stat<> ?
-
(1.20) Beginner having issue with making a crafting recipe
Toasterkid replied to Evanski's topic in Modder Support
Pretty sure you get that error because ShapelessRecipe is only for recipes that are crafted using a grid, and don't need to be arranged in a certain way. You have to use AbstractCookingRecipe for any recipe that uses the [smeltable item - fuel item - result item] combination. But I don't think you really need to be messing with code here for recipes. You should just be able to copy what the minecraft\recipes\iron_ingot_from_smelting_raw_iron.json does and replace the ingredient item and your result item: { "type": "minecraft:smelting", "category": "misc", "cookingtime": 200, "experience": 0.7, "group": "iron_ingot", "ingredient": { "item": "minecraft:raw_iron" }, "result": "minecraft:iron_ingot" } or just add the block to the logs_that_burn_tag since the Minecraft recipe for charcoal uses that: { "type": "minecraft:smelting", "category": "misc", "cookingtime": 200, "experience": 0.15, "ingredient": { "tag": "minecraft:logs_that_burn" }, "result": "minecraft:charcoal" } -
If you don't want an item to have a recipe then simply don't create the .json file for it in the `your_mod/recipes/` directory.
-
[1.20.1] Custom Crop - Disallow vanilla farmland block
Toasterkid replied to Sinsei's topic in Modder Support
Have you checked if you need to override Block#canSustainPlant ? It has this line of code in it: if (net.minecraftforge.common.PlantType.CROP.equals(type)) { return state.is(Blocks.FARMLAND); } which would be relevant since StemBlock.java has this in it: @Override public net.minecraftforge.common.PlantType getPlantType(BlockGetter world, BlockPos pos) { return net.minecraftforge.common.PlantType.CROP; } -
If you look at the Minecraft wiki, you can see that there already exists one block that unlocks without needing any other blocks, which is the crafting table. https://minecraft.fandom.com/wiki/Recipe_book#Unlocking So if you find the file: \data\minecraft\advancements\recipes\decorations\crafting_table.json You can see that it uses a "unlock_right_away" criteria to do the job. { "parent": "minecraft:recipes/root", "criteria": { "has_the_recipe": { "conditions": { "recipe": "minecraft:crafting_table" }, "trigger": "minecraft:recipe_unlocked" }, "unlock_right_away": { "trigger": "minecraft:tick" } }, "requirements": [ [ "has_the_recipe", "unlock_right_away" ] ], "rewards": { "recipes": [ "minecraft:crafting_table" ] }, "sends_telemetry_event": false }