2012-05-03 19:40:55 -04:00
/*
* The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
*
* 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; either version 2.1 of the License, or any later version.
*
* 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
*/
2012-05-10 18:54:25 -04:00
package net.minecraft.src ;
2012-05-03 19:40:55 -04:00
2012-08-17 09:24:38 -04:00
import static cpw.mods.fml.common.Side.CLIENT ;
2012-05-05 14:42:46 -04:00
import java.awt.image.BufferedImage ;
2012-05-14 01:38:53 -04:00
import java.util.Collections ;
2012-05-03 19:40:55 -04:00
import java.util.List ;
2012-05-05 14:42:46 -04:00
import java.util.Map ;
2012-05-03 19:40:55 -04:00
import java.util.logging.Logger ;
2012-05-04 17:02:12 -04:00
import net.minecraft.client.Minecraft ;
2012-08-02 16:50:30 -02:30
import net.minecraft.server.MinecraftServer ;
2012-05-04 17:02:12 -04:00
import cpw.mods.fml.client.FMLClientHandler ;
2012-05-07 01:26:21 -04:00
import cpw.mods.fml.client.SpriteHelper ;
2012-07-30 22:31:07 -04:00
import cpw.mods.fml.client.TextureFXManager ;
2012-08-10 16:37:06 -04:00
import cpw.mods.fml.client.modloader.ModLoaderClientHelper ;
import cpw.mods.fml.client.modloader.ModLoaderKeyBindingHandler ;
2012-08-02 02:08:30 -02:30
import cpw.mods.fml.client.registry.ClientRegistry ;
2012-08-02 16:50:30 -02:30
import cpw.mods.fml.client.registry.KeyBindingRegistry ;
import cpw.mods.fml.client.registry.RenderingRegistry ;
2012-05-03 19:40:55 -04:00
import cpw.mods.fml.common.FMLCommonHandler ;
2012-08-02 16:50:30 -02:30
import cpw.mods.fml.common.FMLLog ;
2012-05-03 19:40:55 -04:00
import cpw.mods.fml.common.Loader ;
2012-08-17 09:24:38 -04:00
import cpw.mods.fml.common.ObfuscationReflectionHelper ;
2012-08-13 22:51:53 -04:00
import cpw.mods.fml.common.asm.SideOnly ;
2012-05-07 00:54:18 -04:00
import cpw.mods.fml.common.modloader.ModLoaderHelper ;
2012-05-04 17:02:12 -04:00
import cpw.mods.fml.common.modloader.ModLoaderModContainer ;
2012-08-06 09:52:42 -04:00
import cpw.mods.fml.common.network.NetworkRegistry ;
2012-08-13 19:57:40 -04:00
import cpw.mods.fml.common.network.PacketDispatcher ;
2012-08-06 09:52:42 -04:00
import cpw.mods.fml.common.network.Player ;
2012-08-02 16:50:30 -02:30
import cpw.mods.fml.common.registry.EntityRegistry ;
2012-08-01 21:10:57 -02:30
import cpw.mods.fml.common.registry.GameRegistry ;
2012-08-06 22:30:13 -04:00
import cpw.mods.fml.common.registry.LanguageRegistry ;
2012-08-17 09:24:38 -04:00
import cpw.mods.fml.server.FMLServerHandler ;
2012-05-03 19:40:55 -04:00
public class ModLoader
{
2012-08-04 11:26:51 -04:00
public static final String fmlMarker = "This is an FML marker" ;
2012-05-14 01:38:53 -04:00
// TODO dirty workaround for millinaire
2012-05-14 11:38:54 -04:00
@Deprecated
public static final Map < String , Map < String , String >> localizedStrings = Collections . emptyMap ();
2012-09-15 18:04:56 -07:00
2012-05-03 19:40:55 -04:00
/**
2012-09-15 18:04:56 -07:00
* Adds localization info for an achievement, Not used on the server.
2012-06-26 16:24:50 -04:00
*
2012-09-15 18:04:56 -07:00
* @param achievement The achievement to name
* @param name The name
* @param description The description
2012-05-03 19:40:55 -04:00
*/
public static void addAchievementDesc ( Achievement achievement , String name , String description )
{
2012-08-02 16:50:30 -02:30
String achName = achievement . func_75970_i ();
2012-05-05 20:33:40 -04:00
addLocalization ( achName , name );
addLocalization ( achName + ".desc" , description );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* This method is a call in hook from modified external code. Implemented elsewhere.
2012-06-26 16:24:50 -04:00
*
2012-09-15 18:04:56 -07:00
* {@link GameRegistry#getFuelValue(ItemStack))}
2012-06-26 16:24:50 -04:00
*
2012-09-15 18:04:56 -07:00
* @param id The Item ID
* @param metadata The Item Metadata
* @return The fuel strength, in ticks, 0 if unhandled
2012-05-03 19:40:55 -04:00
*/
@Deprecated
public static int addAllFuel ( int id , int metadata )
{
return 0 ;
}
2012-05-14 01:38:53 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 01:26:21 -04:00
public static void addAllRenderers ( Map < Class <? extends Entity > , Render > renderers )
2012-05-05 14:42:46 -04:00
{
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 01:26:21 -04:00
public static void addAnimation ( TextureFX anim )
2012-05-05 14:42:46 -04:00
{
2012-07-30 22:31:07 -04:00
TextureFXManager . instance (). addAnimation ( anim );
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
2012-09-15 18:04:56 -07:00
* Adds a new prefix to the armor texture list
*
* {@link RenderingRegistry#addNewArmourRendererPrefix(String))}
*
* @param armor The new armor prefix
* @return The new armor index
2012-05-03 19:40:55 -04:00
*/
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-03 19:40:55 -04:00
public static int addArmor ( String armor )
{
2012-08-13 19:57:40 -04:00
return RenderingRegistry . addNewArmourRendererPrefix ( armor );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* This method adds the supplied biome to the set of candidate biomes for the default world generator type.
*
2012-09-15 18:04:56 -07:00
* @param biome The biome to add
2012-05-03 19:40:55 -04:00
*/
public static void addBiome ( BiomeGenBase biome )
{
2012-08-02 16:50:30 -02:30
GameRegistry . addBiome ( biome );
2012-05-03 19:40:55 -04:00
}
2012-08-22 23:46:16 -04:00
public static void addEntityTracker ( BaseMod mod , Class <? extends Entity > entityClass , int entityTypeId , int updateRange , int updateInterval , boolean sendVelocityInfo )
{
ModLoaderHelper . buildEntityTracker ( mod , entityClass , entityTypeId , updateRange , updateInterval , sendVelocityInfo );
}
2012-08-26 13:07:35 -04:00
public static void addCommand ( ICommand command )
{
ModLoaderHelper . addCommand ( command );
}
2012-05-03 19:40:55 -04:00
/**
2012-05-10 18:54:25 -04:00
* Add localization for the specified string
*
2012-09-15 18:04:56 -07:00
* @param key Key
* @param value Value
2012-05-03 19:40:55 -04:00
*/
public static void addLocalization ( String key , String value )
{
2012-05-05 19:52:53 -04:00
addLocalization ( key , "en_US" , value );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* Add localization for the specified string
*
2012-09-15 18:04:56 -07:00
* @param key Key
* @param lang Language identifier
* @param value Value
2012-05-03 19:40:55 -04:00
*/
public static void addLocalization ( String key , String lang , String value )
{
2012-08-06 22:30:13 -04:00
LanguageRegistry . instance (). addStringLocalization ( key , lang , value );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* Name the specified minecraft object with the supplied name
*
2012-09-15 18:04:56 -07:00
* @param instance Item to name
* @param name The name to give it
2012-05-03 19:40:55 -04:00
*/
public static void addName ( Object instance , String name )
{
2012-05-05 19:52:53 -04:00
addName ( instance , "en_US" , name );
2012-05-03 19:40:55 -04:00
}
/**
* Unimplemented on the server as it does not generate names
2012-05-10 18:54:25 -04:00
*
2012-09-15 18:04:56 -07:00
* @param instance Item to name
* @param lang Languge identifier
* @param name Name to give it
2012-05-03 19:40:55 -04:00
*/
public static void addName ( Object instance , String lang , String name )
{
2012-08-06 22:30:13 -04:00
LanguageRegistry . instance (). addNameForObject ( instance , lang , name );
2012-05-03 19:40:55 -04:00
}
/**
2012-09-15 18:04:56 -07:00
* Attempts to register a small image to be applied to a larger texture image,
* typically how old ModLoader mods add custom Item/Block textures.
*
* Forge mods should use setTextureFile in Item/Block
*
* Will return the icon index it was applied to.
*
2012-05-03 19:40:55 -04:00
* Unimplemented on the server as it does not render textures
2012-06-26 16:24:50 -04:00
*
2012-09-15 18:04:56 -07:00
* @param fileToOverride The texture to apply the new image to
* @param fileToAdd The new image
* @return The 'icon index' in the main image that the new image will be applied to
2012-05-03 19:40:55 -04:00
*/
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-03 19:40:55 -04:00
public static int addOverride ( String fileToOverride , String fileToAdd )
{
2012-08-13 19:57:40 -04:00
return RenderingRegistry . addTextureOverride ( fileToOverride , fileToAdd );
2012-05-03 19:40:55 -04:00
}
/**
2012-09-15 18:04:56 -07:00
* Attempts to register a small image to be applied to a larger texture image,
* typically how old ModLoader mods add custom Item/Block textures.
*
* Forge mods should use setTextureFile in Item/Block
*
2012-05-03 19:40:55 -04:00
* Unimplemented on the server as it does not render textures
2012-06-26 16:24:50 -04:00
*
2012-09-15 18:04:56 -07:00
* @param path The texture to apply the new image to
* @param overlayPath The new image
* @param index Where on the texture to apply it
2012-05-03 19:40:55 -04:00
*/
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-03 19:40:55 -04:00
public static void addOverride ( String path , String overlayPath , int index )
{
2012-08-13 19:57:40 -04:00
RenderingRegistry . addTextureOverride ( path , overlayPath , index );
2012-05-03 19:40:55 -04:00
}
/**
* Add a Shaped Recipe
2012-05-10 18:54:25 -04:00
*
2012-09-15 18:04:56 -07:00
* @param output The result
* @param params The input
2012-05-03 19:40:55 -04:00
*/
public static void addRecipe ( ItemStack output , Object ... params )
{
2012-08-01 21:10:57 -02:30
GameRegistry . addRecipe ( output , params );
2012-05-03 19:40:55 -04:00
}
/**
* Add a shapeless recipe
2012-05-10 18:54:25 -04:00
*
2012-09-15 18:04:56 -07:00
* @param output The result
* @param params The input
2012-05-03 19:40:55 -04:00
*/
public static void addShapelessRecipe ( ItemStack output , Object ... params )
{
2012-08-01 21:10:57 -02:30
GameRegistry . addShapelessRecipe ( output , params );
2012-05-03 19:40:55 -04:00
}
/**
* Add a new product to be smelted
2012-05-10 18:54:25 -04:00
*
2012-05-03 19:40:55 -04:00
* @param input
* @param output
*/
public static void addSmelting ( int input , ItemStack output )
{
2012-08-02 16:50:30 -02:30
GameRegistry . addSmelting ( input , output , 1 . 0f );
2012-05-03 19:40:55 -04:00
}
2012-08-18 10:09:25 -04:00
/**
* Add a new product to be smelted
*
* @param input
* @param output
*/
public static void addSmelting ( int input , ItemStack output , float experience )
{
GameRegistry . addSmelting ( input , output , experience );
}
2012-05-03 19:40:55 -04:00
/**
* Add a mob to the spawn list
2012-05-10 18:54:25 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityClass
* @param weightedProb
* @param min
* @param max
* @param spawnList
*/
2012-05-05 14:42:46 -04:00
public static void addSpawn ( Class <? extends EntityLiving > entityClass , int weightedProb , int min , int max , EnumCreatureType spawnList )
2012-05-03 19:40:55 -04:00
{
2012-08-02 16:50:30 -02:30
EntityRegistry . addSpawn ( entityClass , weightedProb , min , max , spawnList , WorldType . base12Biomes );
2012-05-03 19:40:55 -04:00
}
/**
* Add a mob to the spawn list
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityClass
* @param weightedProb
* @param min
* @param max
* @param spawnList
* @param biomes
*/
2012-05-10 18:54:25 -04:00
public static void addSpawn ( Class <? extends EntityLiving > entityClass , int weightedProb , int min , int max , EnumCreatureType spawnList , BiomeGenBase ... biomes )
2012-05-03 19:40:55 -04:00
{
2012-08-02 16:50:30 -02:30
EntityRegistry . addSpawn ( entityClass , weightedProb , min , max , spawnList , biomes );
2012-05-03 19:40:55 -04:00
}
/**
* Add a mob to the spawn list
2012-05-10 18:54:25 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityName
* @param weightedProb
* @param min
* @param max
* @param spawnList
*/
public static void addSpawn ( String entityName , int weightedProb , int min , int max , EnumCreatureType spawnList )
{
2012-08-02 16:50:30 -02:30
EntityRegistry . addSpawn ( entityName , weightedProb , min , max , spawnList , WorldType . base12Biomes );
2012-05-03 19:40:55 -04:00
}
/**
* Add a mob to the spawn list
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityName
* @param weightedProb
* @param min
* @param max
* @param spawnList
* @param biomes
*/
public static void addSpawn ( String entityName , int weightedProb , int min , int max , EnumCreatureType spawnList , BiomeGenBase ... biomes )
{
2012-08-02 16:50:30 -02:30
EntityRegistry . addSpawn ( entityName , weightedProb , min , max , spawnList , biomes );
2012-05-03 19:40:55 -04:00
}
2012-08-23 01:40:03 -04:00
public static void addTrade ( int profession , TradeEntry entry )
{
ModLoaderHelper . registerTrade ( profession , entry );
}
2012-08-23 00:37:45 -04:00
/**
* Send a packet from the client
* @param packet
*/
public static void clientSendPacket ( Packet packet )
{
PacketDispatcher . sendPacketToServer ( packet );
}
2012-05-03 19:40:55 -04:00
/**
2012-05-10 18:54:25 -04:00
* This method is a call in hook from modified external code. Implemented elsewhere.
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param world
* @param x
* @param y
* @param z
* @param xVel
* @param zVel
* @param item
2012-09-15 18:04:56 -07:00
* @return Always false, not implemented here
2012-05-03 19:40:55 -04:00
*/
@Deprecated
public static boolean dispenseEntity ( World world , double x , double y , double z , int xVel , int zVel , ItemStack item )
{
return false ;
}
/**
* Remove a container and drop all the items in it on the ground around
2012-05-10 18:54:25 -04:00
*
2012-05-03 19:40:55 -04:00
* @param world
* @param x
* @param y
* @param z
*/
public static void genericContainerRemoval ( World world , int x , int y , int z )
{
2012-07-30 22:31:07 -04:00
/* TileEntity te = world.func_603_b(x, y, z);
2012-05-03 19:40:55 -04:00
if (!(te instanceof IInventory))
{
return;
}
2012-05-10 18:54:25 -04:00
IInventory inv = (IInventory)te;
2012-05-03 19:40:55 -04:00
2012-05-04 17:02:12 -04:00
for (int l = 0; l < inv.func_469_c(); l++)
2012-05-03 19:40:55 -04:00
{
2012-05-04 17:02:12 -04:00
ItemStack itemstack = inv.func_468_c(l);
2012-05-03 19:40:55 -04:00
if (itemstack == null)
{
continue;
}
2012-05-04 17:02:12 -04:00
float f = world.field_1037_n.nextFloat() * 0.8F + 0.1F;
float f1 = world.field_1037_n.nextFloat() * 0.8F + 0.1F;
float f2 = world.field_1037_n.nextFloat() * 0.8F + 0.1F;
2012-05-03 19:40:55 -04:00
2012-05-04 17:02:12 -04:00
while (itemstack.field_1615_a > 0)
2012-05-03 19:40:55 -04:00
{
2012-05-04 17:02:12 -04:00
int i1 = world.field_1037_n.nextInt(21) + 10;
2012-05-03 19:40:55 -04:00
2012-05-04 17:02:12 -04:00
if (i1 > itemstack.field_1615_a)
2012-05-03 19:40:55 -04:00
{
2012-05-05 14:42:46 -04:00
i1 = itemstack.field_1615_a;
2012-05-03 19:40:55 -04:00
}
2012-05-05 14:42:46 -04:00
itemstack.field_1615_a -= i1;
2012-05-10 18:54:25 -04:00
EntityItem entityitem = new EntityItem(world, (float)te.field_823_f + f, (float)te.field_822_g + f1, (float)te.field_821_h + f2, new ItemStack(itemstack.field_1617_c, i1, itemstack.func_21181_i()));
2012-05-03 19:40:55 -04:00
float f3 = 0.05F;
2012-05-05 14:42:46 -04:00
entityitem.field_608_an = (float) world.field_1037_n.nextGaussian() * f3;
entityitem.field_607_ao = (float) world.field_1037_n.nextGaussian() * f3 + 0.2F;
entityitem.field_606_ap = (float) world.field_1037_n.nextGaussian() * f3;
2012-05-03 19:40:55 -04:00
2012-05-04 17:02:12 -04:00
if (itemstack.func_40710_n())
2012-05-03 19:40:55 -04:00
{
2012-05-05 14:42:46 -04:00
entityitem.field_801_a.func_40706_d((NBTTagCompound) itemstack.func_40709_o().func_40195_b());
2012-05-03 19:40:55 -04:00
}
2012-05-04 17:02:12 -04:00
world.func_674_a(entityitem);
2012-05-03 19:40:55 -04:00
}
}
2012-07-30 22:31:07 -04:00
*/ }
2012-05-03 19:40:55 -04:00
/**
* Get a list of all BaseMod loaded into the system
* {@link ModLoaderModContainer#findAll}
2012-05-10 18:54:25 -04:00
*
2012-09-15 18:04:56 -07:00
* @return A list containing all loaded ModLoader mods
2012-05-03 19:40:55 -04:00
*/
2012-05-31 22:42:23 -04:00
public static List < BaseMod > getLoadedMods ()
2012-05-03 19:40:55 -04:00
{
2012-05-31 22:42:23 -04:00
return ModLoaderModContainer . findAll ( BaseMod . class );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* Get a logger instance {@link FMLCommonHandler#getFMLLogger()}
*
2012-09-15 18:04:56 -07:00
* @return The current logger
2012-05-03 19:40:55 -04:00
*/
public static Logger getLogger ()
{
2012-08-02 16:50:30 -02:30
return FMLLog . getLogger ();
2012-05-03 19:40:55 -04:00
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 01:26:21 -04:00
public static Minecraft getMinecraftInstance ()
2012-05-05 14:42:46 -04:00
{
return FMLClientHandler . instance (). getClient ();
}
2012-08-02 16:50:30 -02:30
public static MinecraftServer getMinecraftServerInstance ()
2012-05-05 14:42:46 -04:00
{
2012-08-02 16:50:30 -02:30
return FMLCommonHandler . instance (). getMinecraftServerInstance ();
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
* Get a value from a field using reflection
2012-07-22 11:56:38 -02:30
* {@link ObfuscationReflectionHelper#getPrivateValue(Class, Object, int)}
2012-05-10 18:54:25 -04:00
*
2012-05-03 19:40:55 -04:00
* @param instanceclass
* @param instance
* @param fieldindex
2012-09-15 18:04:56 -07:00
* @return The value in the specified field.
2012-05-03 19:40:55 -04:00
*/
2012-05-05 14:42:46 -04:00
public static < T , E > T getPrivateValue ( Class <? super E > instanceclass , E instance , int fieldindex )
2012-05-03 19:40:55 -04:00
{
2012-07-22 11:56:38 -02:30
return ObfuscationReflectionHelper . getPrivateValue ( instanceclass , instance , fieldindex );
2012-05-03 19:40:55 -04:00
}
/**
* Get a value from a field using reflection
2012-09-15 18:04:56 -07:00
* {@link ObfuscationReflectionHelper#getPrivateValue(Class, Object, String[])}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param instanceclass
* @param instance
* @param field
2012-09-15 18:04:56 -07:00
* @return The value in the specified field.
2012-05-03 19:40:55 -04:00
*/
2012-05-05 14:42:46 -04:00
public static < T , E > T getPrivateValue ( Class <? super E > instanceclass , E instance , String field )
2012-05-03 19:40:55 -04:00
{
2012-07-22 11:56:38 -02:30
return ObfuscationReflectionHelper . getPrivateValue ( instanceclass , instance , field );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-05 14:42:46 -04:00
* Stubbed method on the server to return a unique model id
2012-06-26 16:24:50 -04:00
*
2012-05-05 14:42:46 -04:00
*/
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 17:44:49 -04:00
public static int getUniqueBlockModelID ( BaseMod mod , boolean inventoryRenderer )
2012-05-05 14:42:46 -04:00
{
2012-08-10 16:37:06 -04:00
return ModLoaderClientHelper . obtainBlockModelIdFor ( mod , inventoryRenderer );
2012-05-05 14:42:46 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* Get a new unique entity id
2012-09-15 18:04:56 -07:00
* {@link EntityRegistry#findGlobalUniqueEntityId()}
2012-05-10 18:54:25 -04:00
*
2012-09-15 18:04:56 -07:00
* @return A unique entity ID
2012-05-03 19:40:55 -04:00
*/
public static int getUniqueEntityId ()
{
2012-08-02 16:50:30 -02:30
return EntityRegistry . findGlobalUniqueEntityId ();
2012-05-03 19:40:55 -04:00
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-06 16:32:59 -07:00
public static int getUniqueSpriteIndex ( String path )
2012-05-05 14:42:46 -04:00
{
2012-05-07 01:26:21 -04:00
return SpriteHelper . getUniqueSpriteIndex ( path );
2012-05-06 16:32:59 -07:00
}
2012-06-26 16:24:50 -04:00
2012-05-05 14:42:46 -04:00
/**
* To properly implement packet 250 protocol you should always check your
* channel is active prior to sending the packet
2012-06-26 16:24:50 -04:00
*
2012-05-05 14:42:46 -04:00
* @param player
* @param channel
2012-09-15 18:04:56 -07:00
* @return If the channel is registered to the current connection.
2012-05-05 14:42:46 -04:00
*/
public static boolean isChannelActive ( EntityPlayer player , String channel )
{
2012-08-06 09:52:42 -04:00
return NetworkRegistry . instance (). isChannelActive ( channel , ( Player ) player );
2012-05-05 14:42:46 -04:00
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 01:26:21 -04:00
public static boolean isGUIOpen ( Class <? extends GuiScreen > gui )
2012-05-05 14:42:46 -04:00
{
2012-07-30 22:31:07 -04:00
return FMLClientHandler . instance (). getClient (). field_71462_r != null && FMLClientHandler . instance (). getClient (). field_71462_r . equals ( gui );
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
2012-05-10 18:54:25 -04:00
* Is the named mod loaded?
* {@link Loader#isModLoaded(String)}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param modname
2012-09-15 18:04:56 -07:00
* @return If the specified mod is loaded
2012-05-03 19:40:55 -04:00
*/
public static boolean isModLoaded ( String modname )
{
return Loader . isModLoaded ( modname );
}
/**
2012-05-05 14:42:46 -04:00
* Implemented elsewhere
*/
@Deprecated
2012-05-07 01:26:21 -04:00
public static void loadConfig ()
2012-05-05 14:42:46 -04:00
{
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 17:44:49 -04:00
public static BufferedImage loadImage ( RenderEngine renderEngine , String path ) throws Exception
2012-05-05 14:42:46 -04:00
{
2012-07-30 22:31:07 -04:00
return TextureFXManager . instance (). loadImageFromTexturePack ( renderEngine , path );
2012-05-05 14:42:46 -04:00
}
/**
* Call in from elsewhere. Unimplemented here.
* @param player
* @param item
*/
@Deprecated
2012-05-07 01:26:21 -04:00
public static void onItemPickup ( EntityPlayer player , ItemStack item )
2012-05-05 14:42:46 -04:00
{
}
2012-05-07 01:26:21 -04:00
/**
* Call in from elsewhere. Unimplemented here.
*/
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 01:26:21 -04:00
public static void onTick ( float tick , Minecraft game )
2012-05-05 14:42:46 -04:00
{
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 01:26:21 -04:00
public static void openGUI ( EntityPlayer player , GuiScreen gui )
2012-05-05 14:42:46 -04:00
{
2012-05-07 17:44:49 -04:00
FMLClientHandler . instance (). displayGuiScreen ( player , gui );
2012-05-05 14:42:46 -04:00
}
@Deprecated
2012-05-10 00:07:46 -04:00
public static void populateChunk ( IChunkProvider generator , int chunkX , int chunkZ , World world )
2012-05-05 14:42:46 -04:00
{
}
/**
2012-05-10 18:54:25 -04:00
* This method is a call in hook from modified external code. Implemented elsewhere.
2012-09-15 18:04:56 -07:00
* {@link FMLNetworkHandler#handlePacket250(Packet250CustomPayload, NetworkManager, NetHandler)}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param packet
*/
@Deprecated
public static void receivePacket ( Packet250CustomPayload packet )
{
}
2012-05-07 17:44:49 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-07 17:44:49 -04:00
public static KeyBinding [] registerAllKeys ( KeyBinding [] keys )
2012-05-05 14:42:46 -04:00
{
return keys ;
}
2012-05-07 17:44:49 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-10 00:07:46 -04:00
public static void registerAllTextureOverrides ( RenderEngine cache )
2012-05-05 14:42:46 -04:00
{
}
2012-05-03 19:40:55 -04:00
/**
* Register a new block
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param block
*/
public static void registerBlock ( Block block )
{
2012-08-02 16:50:30 -02:30
GameRegistry . registerBlock ( block );
2012-05-03 19:40:55 -04:00
}
/**
* Register a new block
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param block
* @param itemclass
*/
2012-05-05 14:42:46 -04:00
public static void registerBlock ( Block block , Class <? extends ItemBlock > itemclass )
2012-05-03 19:40:55 -04:00
{
2012-08-02 16:50:30 -02:30
GameRegistry . registerBlock ( block , itemclass );
2012-05-03 19:40:55 -04:00
}
2012-08-20 21:44:28 -04:00
public static void registerContainerID ( BaseMod mod , int id )
2012-08-20 21:43:59 -04:00
{
ModLoaderHelper . buildGuiHelper ( mod , id );
}
2012-05-03 19:40:55 -04:00
/**
* Register a new entity ID
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityClass
* @param entityName
* @param id
*/
2012-05-05 14:42:46 -04:00
public static void registerEntityID ( Class <? extends Entity > entityClass , String entityName , int id )
2012-05-03 19:40:55 -04:00
{
2012-08-09 03:04:25 -07:00
EntityRegistry . registerGlobalEntityID ( entityClass , entityName , id );
2012-05-03 19:40:55 -04:00
}
/**
* Register a new entity ID
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityClass
* @param entityName
* @param id
* @param background
* @param foreground
*/
2012-05-05 14:42:46 -04:00
public static void registerEntityID ( Class <? extends Entity > entityClass , String entityName , int id , int background , int foreground )
2012-05-03 19:40:55 -04:00
{
2012-08-09 03:04:25 -07:00
EntityRegistry . registerGlobalEntityID ( entityClass , entityName , id , background , foreground );
2012-05-03 19:40:55 -04:00
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-08-20 21:44:28 -04:00
public static void registerKey ( BaseMod mod , KeyBinding keyHandler , boolean allowRepeat )
2012-05-05 14:42:46 -04:00
{
2012-08-19 01:44:33 -04:00
ModLoaderClientHelper . registerKeyBinding ( mod , keyHandler , allowRepeat );
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
2012-08-11 11:01:18 -04:00
* Register the mod for packets on this channel.
2012-09-15 18:04:56 -07:00
* {@link NetworkRegistry#registerChannel(IPacketHandler, String)}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param mod
* @param channel
*/
2012-08-20 21:44:28 -04:00
public static void registerPacketChannel ( BaseMod mod , String channel )
2012-05-03 19:40:55 -04:00
{
2012-08-06 17:27:21 -04:00
NetworkRegistry . instance (). registerChannel ( ModLoaderHelper . buildPacketHandlerFor ( mod ), channel );
2012-05-03 19:40:55 -04:00
}
/**
* Register a new tile entity class
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param tileEntityClass
* @param id
*/
2012-05-05 14:42:46 -04:00
public static void registerTileEntity ( Class <? extends TileEntity > tileEntityClass , String id )
2012-05-03 19:40:55 -04:00
{
2012-08-02 16:50:30 -02:30
GameRegistry . registerTileEntity ( tileEntityClass , id );
2012-05-03 19:40:55 -04:00
}
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-10 00:07:46 -04:00
public static void registerTileEntity ( Class <? extends TileEntity > tileEntityClass , String id , TileEntitySpecialRenderer renderer )
2012-05-05 14:42:46 -04:00
{
2012-08-02 16:50:30 -02:30
ClientRegistry . registerTileEntity ( tileEntityClass , id , renderer );
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
2012-05-05 14:42:46 -04:00
* Remove a biome from the list of generated biomes
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param biome
*/
public static void removeBiome ( BiomeGenBase biome )
{
2012-08-02 16:50:30 -02:30
GameRegistry . removeBiome ( biome );
2012-05-03 19:40:55 -04:00
}
/**
* Remove a spawn
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityClass
* @param spawnList
*/
2012-05-05 14:42:46 -04:00
public static void removeSpawn ( Class <? extends EntityLiving > entityClass , EnumCreatureType spawnList )
2012-05-03 19:40:55 -04:00
{
2012-08-02 16:50:30 -02:30
EntityRegistry . removeSpawn ( entityClass , spawnList , WorldType . base12Biomes );
2012-05-03 19:40:55 -04:00
}
/**
* Remove a spawn
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityClass
* @param spawnList
* @param biomes
*/
2012-05-05 14:42:46 -04:00
public static void removeSpawn ( Class <? extends EntityLiving > entityClass , EnumCreatureType spawnList , BiomeGenBase ... biomes )
2012-05-03 19:40:55 -04:00
{
2012-08-02 16:50:30 -02:30
EntityRegistry . removeSpawn ( entityClass , spawnList , biomes );
2012-05-03 19:40:55 -04:00
}
/**
* Remove a spawn
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityName
* @param spawnList
*/
public static void removeSpawn ( String entityName , EnumCreatureType spawnList )
{
2012-08-02 16:50:30 -02:30
EntityRegistry . removeSpawn ( entityName , spawnList , WorldType . base12Biomes );
2012-05-03 19:40:55 -04:00
}
/**
* Remove a spawn
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param entityName
* @param spawnList
* @param biomes
*/
public static void removeSpawn ( String entityName , EnumCreatureType spawnList , BiomeGenBase ... biomes )
{
2012-08-03 01:50:48 -07:00
EntityRegistry . removeSpawn ( entityName , spawnList , biomes );
2012-05-03 19:40:55 -04:00
}
2012-05-10 18:54:25 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-10 00:07:46 -04:00
public static boolean renderBlockIsItemFull3D ( int modelID )
2012-05-05 14:42:46 -04:00
{
2012-08-10 16:37:06 -04:00
return RenderingRegistry . instance (). renderItemAsFull3DBlock ( modelID );
2012-05-05 14:42:46 -04:00
}
2012-05-10 18:54:25 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-10 00:07:46 -04:00
public static void renderInvBlock ( RenderBlocks renderer , Block block , int metadata , int modelID )
2012-05-05 14:42:46 -04:00
{
2012-08-10 16:37:06 -04:00
RenderingRegistry . instance (). renderInventoryBlock ( renderer , block , metadata , modelID );
2012-05-05 14:42:46 -04:00
}
2012-05-10 18:54:25 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-10 00:07:46 -04:00
public static boolean renderWorldBlock ( RenderBlocks renderer , IBlockAccess world , int x , int y , int z , Block block , int modelID )
2012-05-05 14:42:46 -04:00
{
2012-08-10 16:37:06 -04:00
return RenderingRegistry . instance (). renderWorldBlock ( renderer , world , x , y , z , block , modelID );
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
2012-05-10 18:54:25 -04:00
* Configuration is handled elsewhere
* {@link ModLoaderModContainer}
2012-05-03 19:40:55 -04:00
*/
@Deprecated
public static void saveConfig ()
{
}
2012-08-13 19:57:40 -04:00
/**
* Send a packet from client to server
*
* @param packet
*/
2012-05-11 17:31:28 -04:00
public static void sendPacket ( Packet packet ) {
2012-08-13 19:57:40 -04:00
PacketDispatcher . sendPacketToServer ( packet );
2012-05-11 17:31:28 -04:00
}
2012-05-03 19:40:55 -04:00
/**
2012-05-05 14:42:46 -04:00
* Send a chat message to the server
2012-09-15 18:04:56 -07:00
* {@link FMLNetworkHandler#handleChatMessage(NetHandler, Packet3Chat)}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param text
*/
2012-05-10 18:54:25 -04:00
@Deprecated
2012-05-03 19:40:55 -04:00
public static void serverChat ( String text )
{
2012-05-05 14:42:46 -04:00
//TODO
}
2012-05-10 18:54:25 -04:00
@Deprecated
2012-08-13 22:51:53 -04:00
@SideOnly ( CLIENT )
2012-05-10 00:07:46 -04:00
public static void serverLogin ( NetClientHandler handler , Packet1Login loginPacket )
2012-05-05 14:42:46 -04:00
{
//TODO
2012-05-03 19:40:55 -04:00
}
2012-08-23 09:02:12 -04:00
public static void serverSendPacket ( NetServerHandler handler , Packet packet )
{
if ( handler != null )
{
PacketDispatcher . sendPacketToPlayer ( packet , ( Player ) handler . getPlayer ());
}
}
2012-08-20 21:44:28 -04:00
public static void serverOpenWindow ( EntityPlayerMP player , Container container , int ID , int x , int y , int z )
2012-08-20 21:43:59 -04:00
{
ModLoaderHelper . openGui ( ID , player , container , x , y , z );
}
2012-05-03 19:40:55 -04:00
/**
* Indicate that you want to receive ticks
2012-05-10 18:54:25 -04:00
*
* @param mod receiving the events
* @param enable indicates whether you want to recieve them or not
* @param useClock don't receive render subticks, just world ticks
2012-05-03 19:40:55 -04:00
*/
2012-08-20 21:44:28 -04:00
public static void setInGameHook ( BaseMod mod , boolean enable , boolean useClock )
2012-05-03 19:40:55 -04:00
{
2012-05-07 00:54:18 -04:00
ModLoaderHelper . updateStandardTicks ( mod , enable , useClock );
2012-05-03 19:40:55 -04:00
}
2012-06-26 16:24:50 -04:00
2012-08-20 21:44:28 -04:00
public static void setInGUIHook ( BaseMod mod , boolean enable , boolean useClock )
2012-05-05 14:42:46 -04:00
{
2012-05-07 00:54:18 -04:00
ModLoaderHelper . updateGUITicks ( mod , enable , useClock );
2012-05-05 14:42:46 -04:00
}
2012-05-03 19:40:55 -04:00
/**
* Set a private field to a value using reflection
2012-07-22 11:56:38 -02:30
* {@link ObfuscationReflectionHelper#setPrivateValue(Class, Object, int, Object)}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param instanceclass
* @param instance
* @param fieldindex
* @param value
*/
2012-05-05 14:42:46 -04:00
public static < T , E > void setPrivateValue ( Class <? super T > instanceclass , T instance , int fieldindex , E value )
2012-05-03 19:40:55 -04:00
{
2012-07-22 11:56:38 -02:30
ObfuscationReflectionHelper . setPrivateValue ( instanceclass , instance , value , fieldindex );
2012-05-03 19:40:55 -04:00
}
/**
* Set a private field to a value using reflection
2012-07-22 11:56:38 -02:30
* {@link ObfuscationReflectionHelper#setPrivateValue(Class, Object, String, Object)}
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param instanceclass
* @param instance
* @param field
* @param value
*/
2012-05-05 14:42:46 -04:00
public static < T , E > void setPrivateValue ( Class <? super T > instanceclass , T instance , String field , E value )
2012-05-03 19:40:55 -04:00
{
2012-07-22 11:56:38 -02:30
ObfuscationReflectionHelper . setPrivateValue ( instanceclass , instance , value , field );
2012-05-03 19:40:55 -04:00
}
/**
2012-05-10 18:54:25 -04:00
* This method is a call in hook from modified external code. Implemented elsewhere.
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param player
* @param item
* @param matrix
*/
@Deprecated
public static void takenFromCrafting ( EntityPlayer player , ItemStack item , IInventory matrix )
{
}
/**
2012-05-10 18:54:25 -04:00
* This method is a call in hook from modified external code. Implemented elsewhere.
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param player
* @param item
*/
@Deprecated
public static void takenFromFurnace ( EntityPlayer player , ItemStack item )
{
}
/**
* Throw the offered exception. Likely will stop the game.
2012-06-26 16:24:50 -04:00
*
2012-05-03 19:40:55 -04:00
* @param message
* @param e
*/
public static void throwException ( String message , Throwable e )
{
2012-05-10 18:54:25 -04:00
FMLCommonHandler . instance (). raiseException ( e , message , true );
2012-05-03 19:40:55 -04:00
}
2012-06-26 16:24:50 -04:00
2012-05-06 16:32:59 -07:00
public static void throwException ( Throwable e )
{
throwException ( "Exception in ModLoader" , e );
}
2012-05-03 19:40:55 -04:00
}