diff options
Diffstat (limited to 'src/main/java/de/oscoder')
| -rw-r--r-- | src/main/java/de/oscoder/tutorialmod/Config.java | 42 | ||||
| -rw-r--r-- | src/main/java/de/oscoder/tutorialmod/TutorialMod.java | 71 | ||||
| -rw-r--r-- | src/main/java/de/oscoder/tutorialmod/TutorialModClient.java | 31 |
3 files changed, 144 insertions, 0 deletions
diff --git a/src/main/java/de/oscoder/tutorialmod/Config.java b/src/main/java/de/oscoder/tutorialmod/Config.java new file mode 100644 index 0000000..ab23e24 --- /dev/null +++ b/src/main/java/de/oscoder/tutorialmod/Config.java @@ -0,0 +1,42 @@ +package de.oscoder.tutorialmod; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.event.config.ModConfigEvent; +import net.neoforged.neoforge.common.ModConfigSpec; + +// An example config class. This is not required, but it's a good idea to have one to keep your config organized. +// Demonstrates how to use Neo's config APIs +public class Config { + private static final ModConfigSpec.Builder BUILDER = new ModConfigSpec.Builder(); + + public static final ModConfigSpec.BooleanValue LOG_DIRT_BLOCK = BUILDER + .comment("Whether to log the dirt block on common setup") + .define("logDirtBlock", true); + + public static final ModConfigSpec.IntValue MAGIC_NUMBER = BUILDER + .comment("A magic number") + .defineInRange("magicNumber", 42, 0, Integer.MAX_VALUE); + + public static final ModConfigSpec.ConfigValue<String> MAGIC_NUMBER_INTRODUCTION = BUILDER + .comment("What you want the introduction message to be for the magic number") + .define("magicNumberIntroduction", "The magic number is... "); + + // a list of strings that are treated as resource locations for items + public static final ModConfigSpec.ConfigValue<List<? extends String>> ITEM_STRINGS = BUILDER + .comment("A list of items to log on common setup.") + .defineListAllowEmpty("items", List.of("minecraft:iron_ingot"), () -> "", Config::validateItemName); + + static final ModConfigSpec SPEC = BUILDER.build(); + + private static boolean validateItemName(final Object obj) { + return obj instanceof String itemName && BuiltInRegistries.ITEM.containsKey(Identifier.parse(itemName)); + } +} diff --git a/src/main/java/de/oscoder/tutorialmod/TutorialMod.java b/src/main/java/de/oscoder/tutorialmod/TutorialMod.java new file mode 100644 index 0000000..9ca13d6 --- /dev/null +++ b/src/main/java/de/oscoder/tutorialmod/TutorialMod.java @@ -0,0 +1,71 @@ +package de.oscoder.tutorialmod; + +import org.slf4j.Logger; + +import com.mojang.logging.LogUtils; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MapColor; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.event.server.ServerStartingEvent; +import net.neoforged.neoforge.registries.DeferredBlock; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; + +// The value here should match an entry in the META-INF/neoforge.mods.toml file +@Mod(TutorialMod.MOD_ID) +public class TutorialMod { + // Define mod id in a common place for everything to reference + public static final String MOD_ID = "tutorialmod"; + // Directly reference a slf4j logger + public static final Logger LOGGER = LogUtils.getLogger(); + + // The constructor for the mod class is the first code that is run when your mod is loaded. + // FML will recognize some parameter types like IEventBus or ModContainer and pass them in automatically. + public TutorialMod(IEventBus modEventBus, ModContainer modContainer) { + // Register the commonSetup method for modloading + modEventBus.addListener(this::commonSetup); + + // Register ourselves for server and other game events we are interested in. + // Note that this is necessary if and only if we want *this* class (TutorialMod) to respond directly to events. + // Do not add this line if there are no @SubscribeEvent-annotated functions in this class, like onServerStarting() below. + NeoForge.EVENT_BUS.register(this); + + // Register the item to a creative tab + modEventBus.addListener(this::addCreative); + + // Register our mod's ModConfigSpec so that FML can create and load the config file for us + modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC); + } + + private void commonSetup(FMLCommonSetupEvent event) { + } + + // Add the example block item to the building blocks tab + private void addCreative(BuildCreativeModeTabContentsEvent event) { + } + + // You can use SubscribeEvent and let the Event Bus discover methods to call + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + } +} diff --git a/src/main/java/de/oscoder/tutorialmod/TutorialModClient.java b/src/main/java/de/oscoder/tutorialmod/TutorialModClient.java new file mode 100644 index 0000000..a6e1af0 --- /dev/null +++ b/src/main/java/de/oscoder/tutorialmod/TutorialModClient.java @@ -0,0 +1,31 @@ +package de.oscoder.tutorialmod; + +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.gui.ConfigurationScreen; +import net.neoforged.neoforge.client.gui.IConfigScreenFactory; + +// This class will not load on dedicated servers. Accessing client side code from here is safe. +@Mod(value = TutorialMod.MOD_ID, dist = Dist.CLIENT) +// You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent +@EventBusSubscriber(modid = TutorialMod.MOD_ID, value = Dist.CLIENT) +public class TutorialModClient { + public TutorialModClient(ModContainer container) { + // Allows NeoForge to create a config screen for this mod's configs. + // The config screen is accessed by going to the Mods screen > clicking on your mod > clicking on config. + // Do not forget to add translations for your config options to the en_us.json file. + container.registerExtensionPoint(IConfigScreenFactory.class, ConfigurationScreen::new); + } + + @SubscribeEvent + static void onClientSetup(FMLClientSetupEvent event) { + // Some client setup code + TutorialMod.LOGGER.info("HELLO FROM CLIENT SETUP"); + TutorialMod.LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName()); + } +} |
