From 6931df590bad21cfea50e7737c9c1fa6a5358f88 Mon Sep 17 00:00:00 2001 From: Starexify Date: Wed, 31 Jul 2024 09:46:30 +0200 Subject: [PATCH] Updated NeoForge to stable --- TEMPLATE_LICENSE.txt => LICENSE | 7 +- README.md | 33 ++----- gradle.properties | 14 ++- .../loot_table/blocks/mystic_shrub.json | 57 +++++++++++ .../biome_modifier/add_mystic_shrub.json | 6 ++ .../configured_feature/mystic_shrub.json | 30 ++++++ .../placed_feature/mystic_shrub_placed.json | 19 ++++ .../net/nova/mysticshrubs/MysticShrubs.java | 32 +++++-- .../mysticshrubs/blocks/MysticShrubBlock.java | 90 +++++++++--------- .../mysticshrubs/datagen/DataGenerators.java | 28 ++++++ .../datagen/ModLootTableProvider.java | 41 ++++++++ .../datagen/ModWorldGenProvider.java | 27 ++++++ .../datagen/loot/ModBlockLootTables.java | 63 ++++++++++++ .../events/ModEventBusEvents.java | 79 +++++++++++++++ .../nova/mysticshrubs/items/EmeraldPiece.java | 58 +++++++++++ .../nova/mysticshrubs/items/EmeraldShard.java | 49 +++++++++- .../nova/mysticshrubs/items/HeartDrop.java | 33 +++++++ .../worldgen/ModBiomeModifiers.java | 30 ++++++ .../worldgen/ModConfiguredFeatures.java | 36 +++++++ .../worldgen/ModPlacedFeatures.java | 35 +++++++ .../resources/META-INF/neoforge.mods.toml | 3 +- src/main/resources/mystic_shrubs_logo.png | Bin 0 -> 71806 bytes 22 files changed, 675 insertions(+), 95 deletions(-) rename TEMPLATE_LICENSE.txt => LICENSE (88%) create mode 100644 src/generated/resources/data/mystic_shrubs/loot_table/blocks/mystic_shrub.json create mode 100644 src/generated/resources/data/mystic_shrubs/neoforge/biome_modifier/add_mystic_shrub.json create mode 100644 src/generated/resources/data/mystic_shrubs/worldgen/configured_feature/mystic_shrub.json create mode 100644 src/generated/resources/data/mystic_shrubs/worldgen/placed_feature/mystic_shrub_placed.json create mode 100644 src/main/java/net/nova/mysticshrubs/datagen/DataGenerators.java create mode 100644 src/main/java/net/nova/mysticshrubs/datagen/ModLootTableProvider.java create mode 100644 src/main/java/net/nova/mysticshrubs/datagen/ModWorldGenProvider.java create mode 100644 src/main/java/net/nova/mysticshrubs/datagen/loot/ModBlockLootTables.java create mode 100644 src/main/java/net/nova/mysticshrubs/events/ModEventBusEvents.java create mode 100644 src/main/java/net/nova/mysticshrubs/worldgen/ModBiomeModifiers.java create mode 100644 src/main/java/net/nova/mysticshrubs/worldgen/ModConfiguredFeatures.java create mode 100644 src/main/java/net/nova/mysticshrubs/worldgen/ModPlacedFeatures.java create mode 100644 src/main/resources/mystic_shrubs_logo.png diff --git a/TEMPLATE_LICENSE.txt b/LICENSE similarity index 88% rename from TEMPLATE_LICENSE.txt rename to LICENSE index b64bc64..92d8155 100644 --- a/TEMPLATE_LICENSE.txt +++ b/LICENSE @@ -1,9 +1,6 @@ MIT License -Copyright (c) 2023 NeoForged project - -This license applies to the template files as supplied by github.com/NeoForged/MDK - +Copyright (c) 2024 Starexify Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 03927f8..6722e5f 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,14 @@ -Installation information -======= +

-This template repository can be directly cloned to get you started with a new -mod. Simply create a new repository cloned from this one, by following the -instructions at [github](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template). +

+ curseforge + modrinth +

-Once you have your clone, simply open the repository in the IDE of your choice. The usual recommendation for an IDE is either IntelliJ IDEA or Eclipse. +

+ GitHub Issues + GitHub License +

-> **Note**: For Eclipse, use tasks in `Launch Group` instead of ones founds in `Java Application`. A preparation task must run before launching the game. NeoGradle uses launch groups to do these subsequently. - -If at any point you are missing libraries in your IDE, or you've run into problems you can -run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything -{this does not affect your code} and then start the process again. - -Mapping Names: -============ -By default, the MDK is configured to use the official mapping names from Mojang for methods and fields -in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this -license. For the latest license text, refer to the mapping file itself, or the reference copy here: -https://github.com/NeoForged/NeoForm/blob/main/Mojang.md - -Additional Resources: -========== -Community Documentation: https://docs.neoforged.net/ -NeoForged Discord: https://discord.neoforged.net/ +

CurseForge Downloads

\ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 0229672..3d4ab6d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ # Sets default memory used for gradle commands. Can be overridden by user or command line properties. -org.gradle.jvmargs=-Xmx2G +org.gradle.jvmargs=-Xmx1G org.gradle.daemon=false org.gradle.debug=false #read more on this at https://github.com/neoforged/NeoGradle/blob/NG_7.0/README.md#apply-parchment-mappings # you can also find the latest versions at: https://parchmentmc.org/docs/getting-started -neogradle.subsystems.parchment.minecraftVersion=1.20.6 -neogradle.subsystems.parchment.mappingsVersion=2024.05.01 +neogradle.subsystems.parchment.minecraftVersion=1.21 +neogradle.subsystems.parchment.mappingsVersion=2024.07.28 # Environment Properties # You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge # The Minecraft version must agree with the Neo version to get a valid artifact @@ -16,7 +16,7 @@ minecraft_version=1.21 # as they do not follow standard versioning conventions. minecraft_version_range=[1.21,1.21.1) # The Neo version must agree with the Minecraft version to get a valid artifact -neo_version=21.0.0-beta +neo_version=21.0.146 # The Neo version range can use any version of Neo as bounds neo_version_range=[21.0.0-beta,) # The loader version range can only use the major version of FML as bounds @@ -27,9 +27,7 @@ loader_version_range=[4,) mod_id=mystic_shrubs mod_name=Mystic Shrubs mod_license=MIT -# The mod version. See https://semver.org/ -mod_version=0.1-1.21 -# See https://maven.apache.org/guides/mini/guide-naming-conventions.html +mod_version=1.0.0 mod_group_id=net.nova.mysticshrubs mod_authors=ImVeryBad -mod_description=Bringing back the nostalgia +mod_description=Bringing back the nostalgia \ No newline at end of file diff --git a/src/generated/resources/data/mystic_shrubs/loot_table/blocks/mystic_shrub.json b/src/generated/resources/data/mystic_shrubs/loot_table/blocks/mystic_shrub.json new file mode 100644 index 0000000..b18a3e1 --- /dev/null +++ b/src/generated/resources/data/mystic_shrubs/loot_table/blocks/mystic_shrub.json @@ -0,0 +1,57 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "mystic_shrubs:mystic_shrub", + "condition": "minecraft:block_state_property", + "properties": { + "age": "1" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "chance": 0.25, + "condition": "minecraft:random_chance" + } + ], + "name": "mystic_shrubs:heart_drop" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "chance": 0.6, + "condition": "minecraft:random_chance" + } + ], + "name": "mystic_shrubs:emerald_shard" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "chance": 0.7, + "condition": "minecraft:random_chance" + } + ], + "name": "minecraft:arrow", + "weight": 2 + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "mystic_shrubs:blocks/mystic_shrub" +} \ No newline at end of file diff --git a/src/generated/resources/data/mystic_shrubs/neoforge/biome_modifier/add_mystic_shrub.json b/src/generated/resources/data/mystic_shrubs/neoforge/biome_modifier/add_mystic_shrub.json new file mode 100644 index 0000000..566ef7a --- /dev/null +++ b/src/generated/resources/data/mystic_shrubs/neoforge/biome_modifier/add_mystic_shrub.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge:add_features", + "biomes": "#c:is_plains", + "features": "mystic_shrubs:mystic_shrub_placed", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/generated/resources/data/mystic_shrubs/worldgen/configured_feature/mystic_shrub.json b/src/generated/resources/data/mystic_shrubs/worldgen/configured_feature/mystic_shrub.json new file mode 100644 index 0000000..67ee8d7 --- /dev/null +++ b/src/generated/resources/data/mystic_shrubs/worldgen/configured_feature/mystic_shrub.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "mystic_shrubs:mystic_shrub", + "Properties": { + "age": "1" + } + } + } + } + }, + "placement": [ + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + } + ] + }, + "tries": 8, + "xz_spread": 4, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/mystic_shrubs/worldgen/placed_feature/mystic_shrub_placed.json b/src/generated/resources/data/mystic_shrubs/worldgen/placed_feature/mystic_shrub_placed.json new file mode 100644 index 0000000..f64ad46 --- /dev/null +++ b/src/generated/resources/data/mystic_shrubs/worldgen/placed_feature/mystic_shrub_placed.json @@ -0,0 +1,19 @@ +{ + "feature": "mystic_shrubs:mystic_shrub", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/java/net/nova/mysticshrubs/MysticShrubs.java b/src/main/java/net/nova/mysticshrubs/MysticShrubs.java index 127e0ff..6f7bd8a 100644 --- a/src/main/java/net/nova/mysticshrubs/MysticShrubs.java +++ b/src/main/java/net/nova/mysticshrubs/MysticShrubs.java @@ -1,9 +1,7 @@ package net.nova.mysticshrubs; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.Items; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.*; import net.nova.mysticshrubs.init.ModBlocks; import net.nova.mysticshrubs.init.ModItems; import net.nova.mysticshrubs.init.ModSounds; @@ -28,14 +26,28 @@ public MysticShrubs(IEventBus bus) { bus.addListener(this::addCreative); } + // Add items to the vanilla creative tabs private void addCreative(BuildCreativeModeTabContentsEvent event) { - final ResourceKey tab = event.getTabKey(); - if (tab.equals(CreativeModeTabs.INGREDIENTS)) { - event.getEntries().putAfter(Items.EMERALD.getDefaultInstance(), ModItems.EMERALD_PIECE.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); - event.getEntries().putAfter(ModItems.EMERALD_PIECE.get().getDefaultInstance(), ModItems.EMERALD_SHARD.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + if (event.getTabKey().equals(CreativeModeTabs.INGREDIENTS)) { + event.getEntries().putAfter(keyToPutAfter(event, Items.EMERALD), ModItems.EMERALD_PIECE.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + event.getEntries().putAfter(keyToPutAfter(event, ModItems.EMERALD_PIECE.get()), ModItems.EMERALD_SHARD.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); } - if (tab.equals(CreativeModeTabs.NATURAL_BLOCKS)) { - event.getEntries().putAfter(Items.NETHER_WART.getDefaultInstance(), ModItems.MYSTICAL_SEED.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + if (event.getTabKey().equals(CreativeModeTabs.NATURAL_BLOCKS)) { + event.getEntries().putAfter(keyToPutAfter(event, Items.NETHER_WART), ModItems.MYSTICAL_SEED.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); } } + + private ItemStack keyToPutAfter(BuildCreativeModeTabContentsEvent event, Item item) { + for (var iter = event.getEntries().iterator(); iter.hasNext(); ) { + var stack = iter.next(); + if (stack.getKey().getItem() == item) { + return stack.getKey(); + } + } + return null; + } + + public static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(MODID, path); + } } diff --git a/src/main/java/net/nova/mysticshrubs/blocks/MysticShrubBlock.java b/src/main/java/net/nova/mysticshrubs/blocks/MysticShrubBlock.java index 0366892..d573438 100644 --- a/src/main/java/net/nova/mysticshrubs/blocks/MysticShrubBlock.java +++ b/src/main/java/net/nova/mysticshrubs/blocks/MysticShrubBlock.java @@ -23,19 +23,30 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.neoforge.common.CommonHooks; import net.nova.mysticshrubs.init.ModItems; public class MysticShrubBlock extends CropBlock { public static final int MAX_AGE = 1; public static final IntegerProperty AGE = BlockStateProperties.AGE_1; + private static final VoxelShape[] SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(2, 0, 2, 14, 3, 14), + Block.box(1.5, 0, 1.5, 14.5, 14, 14.5) + }; public MysticShrubBlock(Properties pProperties) { super(pProperties); } @Override - protected ItemLike getBaseSeedId() { - return ModItems.MYSTICAL_SEED; + protected VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + return SHAPE_BY_AGE[this.getAge(pState)]; + } + + @Override + protected boolean mayPlaceOn(BlockState pState, BlockGetter pLevel, BlockPos pPos) { + // Allow placement on GRASS_BLOCK and DIRT + return pState.is(Blocks.GRASS_BLOCK) || pState.is(Blocks.DIRT); } @Override @@ -49,14 +60,29 @@ public int getMaxAge() { } @Override - protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { - pBuilder.add(AGE); + protected void randomTick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) { + if (!pLevel.isAreaLoaded(pPos, 1)) + return; // Forge: prevent loading unloaded chunks when checking neighbor's light + int i = this.getAge(pState); + if (i < this.getMaxAge()) { + float f = getGrowthSpeed(pState, pLevel, pPos); + // Adjust the growth speed here by adding a delay or reducing probability + float modifiedGrowthSpeed = f * 0.2F; // Doubling the growth time + if (net.neoforged.neoforge.common.CommonHooks.canCropGrow(pLevel, pPos, pState, pRandom.nextInt((int) (25.0F / f) + 1) == 0)) { + pLevel.setBlock(pPos, this.getStateForAge(i + 1), 2); + net.neoforged.neoforge.common.CommonHooks.fireCropGrowPost(pLevel, pPos, pState); + } + } } @Override - protected boolean mayPlaceOn(BlockState pState, BlockGetter pLevel, BlockPos pPos) { - // Allow placement on GRASS_BLOCK and DIRT - return pState.is(Blocks.GRASS_BLOCK) || pState.is(Blocks.DIRT); + protected boolean canSurvive(BlockState pState, LevelReader pLevel, BlockPos pPos) { + return pLevel.canSeeSky(pPos) && super.canSurvive(pState, pLevel, pPos); + } + + @Override + protected ItemLike getBaseSeedId() { + return ModItems.MYSTICAL_SEED; } @Override @@ -64,18 +90,21 @@ public boolean isBonemealSuccess(Level pLevel, RandomSource pRandom, BlockPos pP return false; } - // On player right-click + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { + pBuilder.add(AGE); + } + // On player right-click @Override protected ItemInteractionResult useItemOn(ItemStack pStack, BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHitResult) { if (!pLevel.isClientSide) { if (pState.getValue(AGE).equals(1)) { + // Drop item for block state 1 + pLevel.destroyBlock(pPos, true); + // Set the age to 0 pLevel.setBlock(pPos, pState.setValue(AGE, 0), 2); - - // Drop item for block state 1 - //pLevel.destroyBlock(pPos, true); - //MysticShrubDrops.execute(pLevel, pPos.getX()+0.5, pPos.getY(), pPos.getZ()+0.5); } } return ItemInteractionResult.SUCCESS; @@ -85,12 +114,11 @@ protected ItemInteractionResult useItemOn(ItemStack pStack, BlockState pState, L protected InteractionResult useWithoutItem(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, BlockHitResult pHitResult) { if (!pLevel.isClientSide) { if (pState.getValue(AGE).equals(1)) { + // Drop item for block state 1 + pLevel.destroyBlock(pPos, true); + // Set the age to 0 pLevel.setBlock(pPos, pState.setValue(AGE, 0), 2); - - // Drop item for block state 1 - //pLevel.destroyBlock(pPos, true); - //MysticShrubDrops.execute(pLevel, pPos.getX()+0.5, pPos.getY(), pPos.getZ()+0.5); } } return InteractionResult.SUCCESS; @@ -119,34 +147,4 @@ protected float getDestroyProgress(BlockState pState, Player pPlayer, BlockGette return 1.0f; } } - - @Override - protected VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { - if (pState.getValue(AGE) == 0) { - return box(2, 0, 2, 14, 3, 14); - } else { - return box(2, 0, 2, 14, 14, 14); - } - } - - @Override - protected boolean canSurvive(BlockState pState, LevelReader pLevel, BlockPos pPos) { - return pLevel.canSeeSky(pPos) && super.canSurvive(pState, pLevel, pPos); - } - - @Override - protected void randomTick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) { - if (!pLevel.isAreaLoaded(pPos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light - int i = this.getAge(pState); - if (i < this.getMaxAge()) { - float f = getGrowthSpeed(this, pLevel, pPos); - // Adjust the growth speed here by adding a delay or reducing probability - float modifiedGrowthSpeed = f * 0.2F; // Doubling the growth time - if (net.neoforged.neoforge.common.CommonHooks.canCropGrow(pLevel, pPos, pState, pRandom.nextInt((int) (25.0F / modifiedGrowthSpeed) + 1) == 0)) { - pLevel.setBlock(pPos, this.getStateForAge(i + 1), 2); - net.neoforged.neoforge.common.CommonHooks.fireCropGrowPost(pLevel, pPos, pState); - } - } - } - } diff --git a/src/main/java/net/nova/mysticshrubs/datagen/DataGenerators.java b/src/main/java/net/nova/mysticshrubs/datagen/DataGenerators.java new file mode 100644 index 0000000..0feb764 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/datagen/DataGenerators.java @@ -0,0 +1,28 @@ +package net.nova.mysticshrubs.datagen; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; + +import java.util.concurrent.CompletableFuture; + +import static net.nova.mysticshrubs.MysticShrubs.MODID; + +@EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD) +public class DataGenerators { + + @SubscribeEvent + public static void gatherData(GatherDataEvent event) { + DataGenerator generator = event.getGenerator(); + PackOutput output = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + CompletableFuture lookupProvider = event.getLookupProvider(); + + generator.addProvider(true, new ModLootTableProvider(output, lookupProvider)); + generator.addProvider(true, new ModWorldGenProvider(output, lookupProvider)); + } +} diff --git a/src/main/java/net/nova/mysticshrubs/datagen/ModLootTableProvider.java b/src/main/java/net/nova/mysticshrubs/datagen/ModLootTableProvider.java new file mode 100644 index 0000000..cbbadb5 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/datagen/ModLootTableProvider.java @@ -0,0 +1,41 @@ +package net.nova.mysticshrubs.datagen; + +import com.google.common.collect.Sets; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.WritableRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.util.ProblemReporter; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.ValidationContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.nova.mysticshrubs.datagen.loot.ModBlockLootTables; + +import java.util.List; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +import static net.nova.mysticshrubs.MysticShrubs.MODID; + +public class ModLootTableProvider extends LootTableProvider { + + public ModLootTableProvider(PackOutput pOutput, CompletableFuture pRegistries) { + super(pOutput, Set.of(), List.of(new SubProviderEntry(ModBlockLootTables::new, LootContextParamSets.BLOCK)), pRegistries); + } + + @Override + protected void validate(WritableRegistry writableregistry, ValidationContext validationcontext, ProblemReporter.Collector problemreporter$collector) { + var modLootTablesId = BuiltInLootTables.all() + .stream() + .filter(id -> id.registry().getNamespace().equals(MODID)) + .collect(Collectors.toSet()); + + for (var id : Sets.difference(modLootTablesId, writableregistry.keySet())) { + validationcontext.reportProblem("Missing built-in table:" + id); + } + + writableregistry.forEach((lootTable -> lootTable.validate(validationcontext))); + } +} diff --git a/src/main/java/net/nova/mysticshrubs/datagen/ModWorldGenProvider.java b/src/main/java/net/nova/mysticshrubs/datagen/ModWorldGenProvider.java new file mode 100644 index 0000000..4637551 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/datagen/ModWorldGenProvider.java @@ -0,0 +1,27 @@ +package net.nova.mysticshrubs.datagen; + +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import net.nova.mysticshrubs.worldgen.ModBiomeModifiers; +import net.nova.mysticshrubs.worldgen.ModConfiguredFeatures; +import net.nova.mysticshrubs.worldgen.ModPlacedFeatures; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +import static net.nova.mysticshrubs.MysticShrubs.MODID; + +public class ModWorldGenProvider extends DatapackBuiltinEntriesProvider { + public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.CONFIGURED_FEATURE, ModConfiguredFeatures::bootstrap) + .add(Registries.PLACED_FEATURE, ModPlacedFeatures::bootstrap) + .add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap); + + public ModWorldGenProvider(PackOutput output, CompletableFuture registries) { + super(output, registries, BUILDER, Set.of(MODID)); + } +} diff --git a/src/main/java/net/nova/mysticshrubs/datagen/loot/ModBlockLootTables.java b/src/main/java/net/nova/mysticshrubs/datagen/loot/ModBlockLootTables.java new file mode 100644 index 0000000..e5b4ec3 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/datagen/loot/ModBlockLootTables.java @@ -0,0 +1,63 @@ +package net.nova.mysticshrubs.datagen.loot; + +import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; +import net.nova.mysticshrubs.MysticShrubs; +import net.nova.mysticshrubs.blocks.MysticShrubBlock; +import net.nova.mysticshrubs.init.ModBlocks; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import static net.nova.mysticshrubs.MysticShrubs.MODID; + +public class ModBlockLootTables extends BlockLootSubProvider { + public ModBlockLootTables(HolderLookup.Provider pRegistries) { + super(Set.of(), FeatureFlags.REGISTRY.allFlags(), pRegistries); + } + + @Override + protected void generate() { + LootItemCondition.Builder lootitemcondition$builder = LootItemBlockStatePropertyCondition + .hasBlockStateProperties(ModBlocks.MYSTIC_SHRUB.get()) + .setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(MysticShrubBlock.AGE, 1)); + + this.add(ModBlocks.MYSTIC_SHRUB.get(), this.applyExplosionDecay(ModBlocks.MYSTIC_SHRUB.get(), + LootTable.lootTable() + .withPool(LootPool.lootPool().when(lootitemcondition$builder) + .add(LootItem.lootTableItem(BuiltInRegistries.ITEM.get(MysticShrubs.rl("heart_drop"))) + .when(LootItemRandomChanceCondition.randomChance(0.25F)) + .setWeight(1)) + + .add(LootItem.lootTableItem(BuiltInRegistries.ITEM.get(MysticShrubs.rl("emerald_shard"))) + .when(LootItemRandomChanceCondition.randomChance(0.6F)) + .setWeight(1)) + + .add(LootItem.lootTableItem(BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath("minecraft", "arrow"))) + .when(LootItemRandomChanceCondition.randomChance(0.7F)) + .setWeight(2)) + ))); + } + + @Override + protected @NotNull Iterable getKnownBlocks() { + return BuiltInRegistries.BLOCK.stream() + .filter(block -> Optional.of(BuiltInRegistries.BLOCK.getKey(block)) + .filter(key -> key.getNamespace().equals(MODID)) + .isPresent()) + .collect(Collectors.toSet()); + } +} diff --git a/src/main/java/net/nova/mysticshrubs/events/ModEventBusEvents.java b/src/main/java/net/nova/mysticshrubs/events/ModEventBusEvents.java new file mode 100644 index 0000000..420ca15 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/events/ModEventBusEvents.java @@ -0,0 +1,79 @@ +package net.nova.mysticshrubs.events; + +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.LevelAccessor; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.entity.living.LivingDeathEvent; +import net.neoforged.neoforge.event.entity.player.ItemEntityPickupEvent; +import net.nova.mysticshrubs.init.ModItems; +import net.nova.mysticshrubs.init.ModSounds; + +import static net.nova.mysticshrubs.MysticShrubs.MODID; + +@EventBusSubscriber(modid = MODID) +public class ModEventBusEvents { + + // Player picked up item + @SubscribeEvent + public static void onPlayerPickUp(ItemEntityPickupEvent.Post event) { + Player player = event.getPlayer(); + ItemStack item = event.getOriginalStack(); + + if (item.is(ModItems.EMERALD_SHARD)) { + if (!player.level().isClientSide) { + player.level().playSound(null, player.getX(), player.getY(), player.getZ(), ModSounds.EMERALD_SHARD_PICKUP.get(), SoundSource.PLAYERS, 1.0f, 1.0f); + } else { + player.level().playLocalSound(player.getX(), player.getY(), player.getZ(), ModSounds.EMERALD_SHARD_PICKUP.get(), SoundSource.PLAYERS, 1.0f, 1.0f, false); + } + } + + if (item.is(ModItems.HEART_DROP)) { + if (!player.level().isClientSide) { + if (player.getHealth() < player.getMaxHealth() - 1.0f ) { + + // Heal the player by 2 health points (one heart) + player.heal(2.0f); + + // Despawn the item + // event.setCanceled(true); + // player.getInventory().removeItem(item); + //item.getEntityRepresentation().remove(Entity.RemovalReason.DISCARDED); + } + player.level().playSound(null, player.getX(), player.getY(), player.getZ(), ModSounds.COLLECT_HEART.get(), SoundSource.PLAYERS, 1.0f, 1.0f); + } else { + player.level().playLocalSound(player.getX(), player.getY(), player.getZ(), ModSounds.COLLECT_HEART.get(), SoundSource.PLAYERS, 1.0f, 1.0f, false); + } + } + } + + // On entity death spawn item + @SubscribeEvent + public static void onEntityDeath(LivingDeathEvent event) { + LivingEntity entity = event.getEntity(); + LevelAccessor world = event.getEntity().level(); + + if (event != null && entity instanceof Monster) { + double Random = Math.random(); + if (world instanceof ServerLevel level) { + if (Random <= 0.05) { + ItemEntity entityToSpawn = new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), new ItemStack(ModItems.HEART_DROP.get())); + entityToSpawn.setPickUpDelay(10); + level.addFreshEntity(entityToSpawn); + } + if (Random <= 0.25) { + ItemEntity entityToSpawn = new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), new ItemStack(ModItems.EMERALD_SHARD.get())); + entityToSpawn.setPickUpDelay(10); + level.addFreshEntity(entityToSpawn); + } + } + } + } +} diff --git a/src/main/java/net/nova/mysticshrubs/items/EmeraldPiece.java b/src/main/java/net/nova/mysticshrubs/items/EmeraldPiece.java index c5da48a..dfed6ef 100644 --- a/src/main/java/net/nova/mysticshrubs/items/EmeraldPiece.java +++ b/src/main/java/net/nova/mysticshrubs/items/EmeraldPiece.java @@ -1,9 +1,67 @@ package net.nova.mysticshrubs.items; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.nova.mysticshrubs.init.ModItems; +import net.nova.mysticshrubs.init.ModSounds; public class EmeraldPiece extends Item { public EmeraldPiece(Properties pProperties) { super(pProperties); } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) { + // Check if the player has at least 8 Emerald Shards + ItemStack emeraldPiece = new ItemStack(ModItems.EMERALD_PIECE.get()); + int emeraldPieceCount = 0; + for (int i = 0; i < pPlayer.getInventory().getContainerSize(); i++) { + ItemStack stack = pPlayer.getInventory().getItem(i); + if (stack.is(emeraldPiece.getItem())) { + emeraldPieceCount += stack.getCount(); + } + } + + // If the player has at least 8 Emerald Shards, remove them and give them an Emerald Piece + if (emeraldPieceCount >= 8) { + // Remove 8 Emerald Shards from the player's inventory (only survival) + if (!pPlayer.isCreative()) { + int removedCount = 0; + for (int i = 0; i < pPlayer.getInventory().getContainerSize(); i++) { + ItemStack stack = pPlayer.getInventory().getItem(i); + if (stack.is(emeraldPiece.getItem())) { + int toRemove = Math.min(stack.getCount(), 8 - removedCount); + stack.shrink(toRemove); + removedCount += toRemove; + if (removedCount >= 8) { + break; + } + } + } + } + + // Give the player an Emerald Piece + ItemStack giveEmerald = new ItemStack(Items.EMERALD); + pPlayer.addItem(giveEmerald); + + // Play sound + if (!pLevel.isClientSide()) { + pLevel.playSound(null, pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), ModSounds.EMERALD_PIECE_USED.get(), SoundSource.PLAYERS, 1.0f, 1.0f); + } else { + pLevel.playLocalSound(pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), ModSounds.EMERALD_PIECE_USED.get(), SoundSource.PLAYERS, 1.0f, 1.0f, false); + } + + // Return success to indicate that the interaction was successful + return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand)); + } + + // Return pass to indicate that the interaction didn't do anything + return InteractionResultHolder.pass(pPlayer.getItemInHand(pUsedHand)); + } } diff --git a/src/main/java/net/nova/mysticshrubs/items/EmeraldShard.java b/src/main/java/net/nova/mysticshrubs/items/EmeraldShard.java index 8a174a7..5ee0d9c 100644 --- a/src/main/java/net/nova/mysticshrubs/items/EmeraldShard.java +++ b/src/main/java/net/nova/mysticshrubs/items/EmeraldShard.java @@ -1,11 +1,14 @@ package net.nova.mysticshrubs.items; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.nova.mysticshrubs.init.ModItems; +import net.nova.mysticshrubs.init.ModSounds; public class EmeraldShard extends Item { public EmeraldShard(Properties pProperties) { @@ -14,6 +17,50 @@ public EmeraldShard(Properties pProperties) { @Override public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) { - return super.use(pLevel, pPlayer, pUsedHand); + // Check if the player has at least 8 Emerald Shards + ItemStack emeraldShard = new ItemStack(ModItems.EMERALD_SHARD.get()); + int emeraldShardCount = 0; + for (int i = 0; i < pPlayer.getInventory().getContainerSize(); i++) { + ItemStack stack = pPlayer.getInventory().getItem(i); + if (stack.is(emeraldShard.getItem())) { + emeraldShardCount += stack.getCount(); + } + } + + // If the player has at least 8 Emerald Shards, remove them and give them an Emerald Piece + if (emeraldShardCount >= 8) { + if (!pPlayer.isCreative()) { + // Remove 8 Emerald Shards from the player's inventory + int removedCount = 0; + for (int i = 0; i < pPlayer.getInventory().getContainerSize(); i++) { + ItemStack stack = pPlayer.getInventory().getItem(i); + if (stack.is(emeraldShard.getItem())) { + int toRemove = Math.min(stack.getCount(), 8 - removedCount); + stack.shrink(toRemove); + removedCount += toRemove; + if (removedCount >= 8) { + break; + } + } + } + } + + // Give the player an Emerald Piece + ItemStack giveEmeraldPiece = new ItemStack(ModItems.EMERALD_PIECE.get()); + pPlayer.addItem(giveEmeraldPiece); + + // Play sound + if (!pLevel.isClientSide()) { + pLevel.playSound(null, pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), ModSounds.EMERALD_SHARD_USED.get(), SoundSource.PLAYERS, 1.0f, 1.0f); + } else { + pLevel.playLocalSound(pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), ModSounds.EMERALD_SHARD_USED.get(), SoundSource.PLAYERS, 1.0f, 1.0f, false); + } + + // Return success to indicate that the interaction was successful + return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand)); + } + + // Return pass to indicate that the interaction didn't do anything + return InteractionResultHolder.pass(pPlayer.getItemInHand(pUsedHand)); } } diff --git a/src/main/java/net/nova/mysticshrubs/items/HeartDrop.java b/src/main/java/net/nova/mysticshrubs/items/HeartDrop.java index 615017e..1b4ea45 100644 --- a/src/main/java/net/nova/mysticshrubs/items/HeartDrop.java +++ b/src/main/java/net/nova/mysticshrubs/items/HeartDrop.java @@ -1,9 +1,42 @@ package net.nova.mysticshrubs.items; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.nova.mysticshrubs.init.ModItems; +import net.nova.mysticshrubs.init.ModSounds; public class HeartDrop extends Item { public HeartDrop(Properties pProperties) { super(pProperties); } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) { + // Check if the player has less than 2 health points + if (pPlayer.getHealth() < pPlayer.getMaxHealth() - 1.0f) { + if (pPlayer.getItemInHand(pUsedHand).getItem() == ModItems.HEART_DROP.get() && !pPlayer.isCreative()) { + if (!pLevel.isClientSide()) { + // Remove the Heart Drop from the player's hand + pPlayer.setItemInHand(pUsedHand, ItemStack.EMPTY); + + // Heal the player by 2 health points (one hearts) + pPlayer.heal(2.0f); + + // Play sound regardless of health + pLevel.playSound(null, pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), ModSounds.COLLECT_HEART.get(), SoundSource.PLAYERS, 1.0f, 1.0f); + } else { + // Play sound on the client + pLevel.playLocalSound(pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), ModSounds.COLLECT_HEART.get(), SoundSource.PLAYERS, 1.0f, 1.0f, false); + } + } + } + + // Return pass to indicate that the interaction didn't do anything + return InteractionResultHolder.pass(pPlayer.getItemInHand(pUsedHand)); + } } diff --git a/src/main/java/net/nova/mysticshrubs/worldgen/ModBiomeModifiers.java b/src/main/java/net/nova/mysticshrubs/worldgen/ModBiomeModifiers.java new file mode 100644 index 0000000..501ab79 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/worldgen/ModBiomeModifiers.java @@ -0,0 +1,30 @@ +package net.nova.mysticshrubs.worldgen; + +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.world.BiomeModifier; +import net.neoforged.neoforge.common.world.BiomeModifiers; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import net.nova.mysticshrubs.MysticShrubs; + +public class ModBiomeModifiers { + public static final ResourceKey ADD_MYSTIC_SHRUB = registerKey("add_mystic_shrub"); + + public static void bootstrap(BootstrapContext context) { + var placedFeatures = context.lookup(Registries.PLACED_FEATURE); + var biomes = context.lookup(Registries.BIOME); + + context.register(ADD_MYSTIC_SHRUB, new BiomeModifiers.AddFeaturesBiomeModifier( + biomes.getOrThrow(Tags.Biomes.IS_PLAINS), + HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.MYSTIC_SHRUB_PLACED)), + GenerationStep.Decoration.VEGETAL_DECORATION)); + + } + private static ResourceKey registerKey(String name) { + return ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, MysticShrubs.rl(name)); + } +} \ No newline at end of file diff --git a/src/main/java/net/nova/mysticshrubs/worldgen/ModConfiguredFeatures.java b/src/main/java/net/nova/mysticshrubs/worldgen/ModConfiguredFeatures.java new file mode 100644 index 0000000..c3ee521 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/worldgen/ModConfiguredFeatures.java @@ -0,0 +1,36 @@ +package net.nova.mysticshrubs.worldgen; + +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.nova.mysticshrubs.MysticShrubs; +import net.nova.mysticshrubs.init.ModBlocks; + +import static net.nova.mysticshrubs.blocks.MysticShrubBlock.AGE; + +public class ModConfiguredFeatures { + public static final ResourceKey> MYSTIC_SHRUB_PATCH = registerKey("mystic_shrub"); + + public static void bootstrap(BootstrapContext> context) { + context.register(ModConfiguredFeatures.MYSTIC_SHRUB_PATCH, + new ConfiguredFeature<>(Feature.RANDOM_PATCH, new RandomPatchConfiguration(8, 4, 3, + PlacementUtils.inlinePlaced(Feature.SIMPLE_BLOCK, + new SimpleBlockConfiguration(BlockStateProvider.simple(ModBlocks.MYSTIC_SHRUB.get().defaultBlockState().setValue(AGE, 1))), + PlacementUtils.HEIGHTMAP_WORLD_SURFACE)))); + } + + public static ResourceKey> registerKey(String name) { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, MysticShrubs.rl(name)); + } + + private static > void register(BootstrapContext> context, ResourceKey> key, F feature, FC configuration) { + context.register(key, new ConfiguredFeature<>(feature, configuration)); + } +} diff --git a/src/main/java/net/nova/mysticshrubs/worldgen/ModPlacedFeatures.java b/src/main/java/net/nova/mysticshrubs/worldgen/ModPlacedFeatures.java new file mode 100644 index 0000000..f5d86e4 --- /dev/null +++ b/src/main/java/net/nova/mysticshrubs/worldgen/ModPlacedFeatures.java @@ -0,0 +1,35 @@ +package net.nova.mysticshrubs.worldgen; + +import net.minecraft.core.Holder; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.data.worldgen.placement.VegetationPlacements; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import net.nova.mysticshrubs.MysticShrubs; + +import java.util.List; + +public class ModPlacedFeatures { + public static final ResourceKey MYSTIC_SHRUB_PLACED = registerKey("mystic_shrub_placed"); + + public static void bootstrap(BootstrapContext context) { + HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); + + register(context, MYSTIC_SHRUB_PLACED, configuredFeatures.getOrThrow(ModConfiguredFeatures.MYSTIC_SHRUB_PATCH), + VegetationPlacements.worldSurfaceSquaredWithCount(3) + ); + } + + private static ResourceKey registerKey(String name) { + return ResourceKey.create(Registries.PLACED_FEATURE, MysticShrubs.rl(name)); + } + + private static void register(BootstrapContext context, ResourceKey key, Holder> configuration, + List modifiers) { + context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); + } +} diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml index 1b9f6e9..516ec82 100644 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -34,8 +34,7 @@ displayName="${mod_name}" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI #displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional -# A file name (in the root of the mod JAR) containing a logo for display -#logoFile="examplemod.png" #optional +logoFile="mystic_shrubs_logo.png" # A text field displayed in the mod UI #credits="" #optional diff --git a/src/main/resources/mystic_shrubs_logo.png b/src/main/resources/mystic_shrubs_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..83f8f2e2b2541247b94c402eea2c1e0ce28b1dc7 GIT binary patch literal 71806 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 literal 0 HcmV?d00001