-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
22 additions
and
175 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,3 +25,4 @@ run-data | |
|
||
repo | ||
.DS_Store | ||
/.vscode |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,63 +1,9 @@ | ||
// src/main/java/com/removeblindness/Config.java | ||
package com.removeblindness; | ||
|
||
import java.util.List; | ||
import java.util.Set; | ||
import java.util.stream.Collectors; | ||
|
||
import net.minecraft.core.registries.BuiltInRegistries; | ||
import net.minecraft.resources.ResourceLocation; | ||
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 | ||
@EventBusSubscriber(modid = RemoveBlindness.MODID, bus = EventBusSubscriber.Bus.MOD) | ||
public class Config | ||
{ | ||
public class Config { | ||
private static final ModConfigSpec.Builder BUILDER = new ModConfigSpec.Builder(); | ||
|
||
private static final ModConfigSpec.BooleanValue LOG_DIRT_BLOCK = BUILDER | ||
.comment("Whether to log the dirt block on common setup") | ||
.define("logDirtBlock", true); | ||
|
||
private 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 | ||
private 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(); | ||
|
||
public static boolean logDirtBlock; | ||
public static int magicNumber; | ||
public static String magicNumberIntroduction; | ||
public static Set<Item> items; | ||
|
||
private static boolean validateItemName(final Object obj) | ||
{ | ||
return obj instanceof String itemName && BuiltInRegistries.ITEM.containsKey(ResourceLocation.parse(itemName)); | ||
} | ||
|
||
@SubscribeEvent | ||
static void onLoad(final ModConfigEvent event) | ||
{ | ||
logDirtBlock = LOG_DIRT_BLOCK.get(); | ||
magicNumber = MAGIC_NUMBER.get(); | ||
magicNumberIntroduction = MAGIC_NUMBER_INTRODUCTION.get(); | ||
|
||
// convert the list of strings into a set of items | ||
items = ITEM_STRINGS.get().stream() | ||
.map(itemName -> BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemName))) | ||
.collect(Collectors.toSet()); | ||
} | ||
} | ||
} |
136 changes: 18 additions & 118 deletions
136
src/main/java/com/removeblindness/RemoveBlindness.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,136 +1,36 @@ | ||
// src/main/java/com/removeblindness/RemoveBlindness.java | ||
package com.removeblindness; | ||
|
||
import org.slf4j.Logger; | ||
|
||
import com.mojang.logging.LogUtils; | ||
|
||
import net.minecraft.client.Minecraft; | ||
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.minecraft.world.effect.MobEffects; | ||
import net.minecraft.world.entity.player.Player; | ||
import net.neoforged.bus.api.IEventBus; | ||
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.config.ModConfig; | ||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; | ||
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; | ||
import net.neoforged.bus.api.SubscribeEvent; | ||
import net.neoforged.neoforge.event.entity.living.MobEffectEvent; | ||
|
||
// The value here should match an entry in the META-INF/neoforge.mods.toml file | ||
@Mod(RemoveBlindness.MODID) | ||
public class RemoveBlindness | ||
{ | ||
// Define mod id in a common place for everything to reference | ||
public class RemoveBlindness { | ||
public static final String MODID = "removeblindness"; | ||
// Directly reference a slf4j logger | ||
private static final Logger LOGGER = LogUtils.getLogger(); | ||
// Create a Deferred Register to hold Blocks which will all be registered under the "removeblindness" namespace | ||
public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MODID); | ||
// Create a Deferred Register to hold Items which will all be registered under the "removeblindness" namespace | ||
public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID); | ||
// Create a Deferred Register to hold CreativeModeTabs which will all be registered under the "removeblindness" namespace | ||
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); | ||
|
||
// Creates a new Block with the id "removeblindness:example_block", combining the namespace and path | ||
public static final DeferredBlock<Block> EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of().mapColor(MapColor.STONE)); | ||
// Creates a new BlockItem with the id "removeblindness:example_block", combining the namespace and path | ||
public static final DeferredItem<BlockItem> EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem("example_block", EXAMPLE_BLOCK); | ||
|
||
// Creates a new food item with the id "removeblindness:example_id", nutrition 1 and saturation 2 | ||
public static final DeferredItem<Item> EXAMPLE_ITEM = ITEMS.registerSimpleItem("example_item", new Item.Properties().food(new FoodProperties.Builder() | ||
.alwaysEdible().nutrition(1).saturationModifier(2f).build())); | ||
|
||
// Creates a creative tab with the id "removeblindness:example_tab" for the example item, that is placed after the combat tab | ||
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> EXAMPLE_TAB = CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder() | ||
.title(Component.translatable("itemGroup.removeblindness")) //The language key for the title of your CreativeModeTab | ||
.withTabsBefore(CreativeModeTabs.COMBAT) | ||
.icon(() -> EXAMPLE_ITEM.get().getDefaultInstance()) | ||
.displayItems((parameters, output) -> { | ||
output.accept(EXAMPLE_ITEM.get()); // Add the example item to the tab. For your own tabs, this method is preferred over the event | ||
}).build()); | ||
|
||
// 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 RemoveBlindness(IEventBus modEventBus, ModContainer modContainer) | ||
{ | ||
// Register the commonSetup method for modloading | ||
modEventBus.addListener(this::commonSetup); | ||
|
||
// Register the Deferred Register to the mod event bus so blocks get registered | ||
BLOCKS.register(modEventBus); | ||
// Register the Deferred Register to the mod event bus so items get registered | ||
ITEMS.register(modEventBus); | ||
// Register the Deferred Register to the mod event bus so tabs get registered | ||
CREATIVE_MODE_TABS.register(modEventBus); | ||
|
||
// 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 (RemoveBlindness) to respond directly to events. | ||
// Do not add this line if there are no @SubscribeEvent-annotated functions in this class, like onServerStarting() below. | ||
public RemoveBlindness(IEventBus modEventBus) { | ||
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(final FMLCommonSetupEvent event) | ||
{ | ||
// Some common setup code | ||
LOGGER.info("HELLO FROM COMMON SETUP"); | ||
|
||
if (Config.logDirtBlock) | ||
LOGGER.info("DIRT BLOCK >> {}", BuiltInRegistries.BLOCK.getKey(Blocks.DIRT)); | ||
|
||
LOGGER.info(Config.magicNumberIntroduction + Config.magicNumber); | ||
|
||
Config.items.forEach((item) -> LOGGER.info("ITEM >> {}", item.toString())); | ||
} | ||
|
||
// Add the example block item to the building blocks tab | ||
private void addCreative(BuildCreativeModeTabContentsEvent event) | ||
{ | ||
if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) | ||
event.accept(EXAMPLE_BLOCK_ITEM); | ||
LOGGER.info("RemoveBlindness mod initialized - will prevent BasicLogin blindness effect"); | ||
} | ||
|
||
// You can use SubscribeEvent and let the Event Bus discover methods to call | ||
@SubscribeEvent | ||
public void onServerStarting(ServerStartingEvent event) | ||
{ | ||
// Do something when the server starts | ||
LOGGER.info("HELLO from server starting"); | ||
} | ||
|
||
// You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent | ||
@EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) | ||
public static class ClientModEvents | ||
{ | ||
@SubscribeEvent | ||
public static void onClientSetup(FMLClientSetupEvent event) | ||
{ | ||
// Some client setup code | ||
LOGGER.info("HELLO FROM CLIENT SETUP"); | ||
LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName()); | ||
public void onEffectAdded(MobEffectEvent.Added event) { | ||
if (event.getEntity() instanceof Player) { | ||
if (event.getEffectInstance().getEffect() == MobEffects.BLINDNESS | ||
&& event.getEffectInstance().getDuration() == Integer.MAX_VALUE | ||
&& event.getEffectInstance().getAmplifier() == 255) { | ||
event.setCanceled(true); | ||
LOGGER.debug("Prevented BasicLogin blindness effect on player {}", | ||
((Player)event.getEntity()).getName().getString()); | ||
} | ||
} | ||
} | ||
} | ||
} |