119 lines
5.8 KiB
Java
119 lines
5.8 KiB
Java
/*
|
|
* Minecraft Forge
|
|
* Copyright (c) 2016-2018.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation version 2.1
|
|
* of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
package net.minecraftforge.fml.common;
|
|
|
|
import java.lang.annotation.ElementType;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.lang.annotation.Target;
|
|
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
import net.minecraftforge.fml.common.event.ModLifecycleEvent;
|
|
import net.minecraftforge.fml.common.event.FMLFingerprintViolationEvent;
|
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
|
import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent;
|
|
import net.minecraftforge.fml.common.event.FMLServerStartedEvent;
|
|
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
|
|
import net.minecraftforge.fml.common.event.FMLServerStoppedEvent;
|
|
import net.minecraftforge.fml.common.event.FMLServerStoppingEvent;
|
|
import net.minecraftforge.fml.common.registry.GameRegistry;
|
|
|
|
/**
|
|
* This defines a Mod to FML.
|
|
* Any class found with this annotation applied will be loaded as a Mod. The instance that is loaded will
|
|
* represent the mod to other Mods in the system. It will be sent various subclasses of {@link ModLifecycleEvent}
|
|
* at pre-defined times during the loading of the game, based on where you have applied the {@link EventHandler}
|
|
* annotation.
|
|
*/
|
|
@Retention(RetentionPolicy.RUNTIME)
|
|
@Target(ElementType.TYPE)
|
|
public @interface Mod
|
|
{
|
|
/**
|
|
* The unique mod identifier for this mod.
|
|
* <b>Required to be lowercased in the english locale for compatibility. Will be truncated to 64 characters long.</b>
|
|
*
|
|
* This will be used to identify your mod for third parties (other mods), it will be used to identify your mod for registries such as block and item registries.
|
|
* By default, you will have a resource domain that matches the modid. All these uses require that constraints are imposed on the format of the modid.
|
|
*/
|
|
String value();
|
|
/**
|
|
* Marks the associated method as handling an FML lifecycle event.
|
|
* The method must have a single parameter, one of the following types. This annotation
|
|
* replaces the multiple different annotations that previously were used.
|
|
*
|
|
* Current event classes. This first section is standard lifecycle events. They are dispatched
|
|
* at various phases as the game starts. Each event should have information useful to that
|
|
* phase of the lifecycle. They are fired in this order.
|
|
*
|
|
* These suggestions are mostly just suggestions on what to do in each event.
|
|
* <ul>
|
|
* <li> {@link FMLPreInitializationEvent} : Run before anything else. Read your config, create blocks,
|
|
* items, etc, and register them with the {@link GameRegistry}.</li>
|
|
* <li> {@link FMLInitializationEvent} : Do your mod setup. Build whatever data structures you care about. Register recipes,
|
|
* send {@link FMLInterModComms} messages to other mods.</li>
|
|
* <li> {@link FMLPostInitializationEvent} : Handle interaction with other mods, complete your setup based on this.</li>
|
|
* </ul>
|
|
* <p>These are the server lifecycle events. They are fired whenever a server is running, or about to run. Each time a server
|
|
* starts they will be fired in this sequence.
|
|
* <ul>
|
|
* <li> {@link FMLServerAboutToStartEvent} : Use if you need to handle something before the server has even been created.</li>
|
|
* <li> {@link FMLServerStartingEvent} : Do stuff you need to do to set up the server. register commands, tweak the server.</li>
|
|
* <li> {@link FMLServerStartedEvent} : Do what you need to with the running server.</li>
|
|
* <li> {@link FMLServerStoppingEvent} : Do what you need to before the server has started it's shutdown sequence.</li>
|
|
* <li> {@link FMLServerStoppedEvent} : Do whatever cleanup you need once the server has shutdown. Generally only useful
|
|
* on the integrated server.</li>
|
|
* </ul>
|
|
* The second set of events are more specialized, for receiving notification of specific
|
|
* information.
|
|
* <ul>
|
|
* <li> {@link FMLFingerprintViolationEvent} : Sent just before {@link FMLPreInitializationEvent}
|
|
* if something is wrong with your mod signature</li>
|
|
* <li> {@link IMCEvent} : Sent just after {@link FMLInitializationEvent} if you have IMC messages waiting
|
|
* from other mods</li>
|
|
* </ul>
|
|
*
|
|
* @author cpw
|
|
*
|
|
*/
|
|
@Deprecated
|
|
@Retention(RetentionPolicy.RUNTIME)
|
|
@Target(ElementType.METHOD)
|
|
@interface EventHandler{}
|
|
|
|
/**
|
|
* A class which will be subscribed to {@link net.minecraftforge.common.MinecraftForge.EVENT_BUS} at mod construction time.
|
|
*/
|
|
@Retention(RetentionPolicy.RUNTIME)
|
|
@Target(ElementType.TYPE)
|
|
@interface EventBusSubscriber {
|
|
Dist[] value() default { Dist.CLIENT, Dist.DEDICATED_SERVER };
|
|
|
|
/**
|
|
* Optional value, only nessasary if tis annotation is not on the same class that has a @Mod annotation.
|
|
* Needed to prevent early classloading of classes not owned by your mod.
|
|
* @return
|
|
*/
|
|
String modid() default "";
|
|
}
|
|
}
|