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 }