001 /*
002 * The FML Forge Mod Loader suite.
003 * Copyright (C) 2012 cpw
004 *
005 * 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
006 * Software Foundation; either version 2.1 of the License, or any later version.
007 *
008 * 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
009 * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
010 *
011 * 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
012 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
013 */
014 package cpw.mods.fml.common;
015
016 import java.lang.annotation.ElementType;
017 import java.lang.annotation.Retention;
018 import java.lang.annotation.RetentionPolicy;
019 import java.lang.annotation.Target;
020
021 import net.minecraft.src.ItemBlock;
022
023 /**
024 * The new mod style in FML 1.3
025 *
026 * @author cpw
027 *
028 */
029 @Retention(RetentionPolicy.RUNTIME)
030 @Target(ElementType.TYPE)
031 public @interface Mod
032 {
033 /**
034 * The unique mod identifier for this mod
035 */
036 String modid();
037 /**
038 * A user friendly name for the mod
039 */
040 String name() default "";
041 /**
042 * A version string for this mod
043 */
044 String version() default "";
045 /**
046 * A simple dependency string for this mod (see modloader's "priorities" string specification)
047 */
048 String dependencies() default "";
049 /**
050 * Whether to use the mcmod.info metadata by default for this mod.
051 * If true, settings in the mcmod.info file will override settings in these annotations.
052 */
053 boolean useMetadata() default false;
054
055 /**
056 * The acceptable range of minecraft versions that this mod will load and run in
057 * The default ("empty string") indicates that only the current minecraft version is acceptable.
058 * FML will refuse to run with an error if the minecraft version is not in this range across all mods.
059 * @return A version range as specified by the maven version range specification or the empty string
060 */
061 String acceptedMinecraftVersions() default "";
062 /**
063 * An optional bukkit plugin that will be injected into the bukkit plugin framework if
064 * this mod is loaded into the FML framework and the bukkit coremod is present.
065 * Instances of the bukkit plugin can be obtained via the {@link BukkitPluginRef} annotation on fields.
066 * @return
067 */
068 String bukkitPlugin() default "";
069 /**
070 * Mark the designated method as being called at the "pre-initialization" phase
071 * @author cpw
072 *
073 */
074 @Retention(RetentionPolicy.RUNTIME)
075 @Target(ElementType.METHOD)
076 public @interface PreInit {}
077 /**
078 * Mark the designated method as being called at the "initialization" phase
079 * @author cpw
080 *
081 */
082 @Retention(RetentionPolicy.RUNTIME)
083 @Target(ElementType.METHOD)
084 public @interface Init {}
085 /**
086 * Mark the designated method as being called at the "post-initialization" phase
087 * @author cpw
088 *
089 */
090 @Retention(RetentionPolicy.RUNTIME)
091 @Target(ElementType.METHOD)
092 public @interface PostInit {}
093 /**
094 * Mark the designated method as being called at the "server-starting" phase
095 * @author cpw
096 *
097 */
098 @Retention(RetentionPolicy.RUNTIME)
099 @Target(ElementType.METHOD)
100 public @interface ServerStarting {}
101 /**
102 * Mark the designated method as being called at the "post-initialization" phase
103 * @author cpw
104 *
105 */
106 @Retention(RetentionPolicy.RUNTIME)
107 @Target(ElementType.METHOD)
108 public @interface ServerStarted {}
109 /**
110 * Mark the designated method as being called at the "post-initialization" phase
111 * @author cpw
112 *
113 */
114 @Retention(RetentionPolicy.RUNTIME)
115 @Target(ElementType.METHOD)
116 public @interface ServerStopping {}
117 /**
118 * Populate the annotated field with the mod instance.
119 * @author cpw
120 *
121 */
122 @Retention(RetentionPolicy.RUNTIME)
123 @Target(ElementType.FIELD)
124 public @interface Instance {
125 /**
126 * The mod object to inject into this field
127 */
128 String value() default "";
129 }
130 /**
131 * Populate the annotated field with the mod's metadata.
132 * @author cpw
133 *
134 */
135 @Retention(RetentionPolicy.RUNTIME)
136 @Target(ElementType.FIELD)
137 public @interface Metadata {
138 /**
139 * The mod id specifying the metadata to load here
140 */
141 String value() default "";
142 }
143 /**
144 * Populate the annotated field with an instance of the Block as specified
145 * @author cpw
146 *
147 */
148 @Retention(RetentionPolicy.RUNTIME)
149 @Target(ElementType.FIELD)
150 public @interface Block {
151 /**
152 * The block's name
153 */
154 String name();
155 /**
156 * The associated ItemBlock subtype for the item (can be null for an ItemBlock)
157 */
158 Class<?> itemTypeClass() default ItemBlock.class;
159 }
160 /**
161 * Populate the annotated field with an Item
162 * @author cpw
163 *
164 */
165 @Retention(RetentionPolicy.RUNTIME)
166 @Target(ElementType.FIELD)
167 public @interface Item {
168 /**
169 * The name of the item
170 */
171 String name();
172 /**
173 * The type of the item
174 */
175 String typeClass();
176 }
177 }