package com.bioxx.tfc2;
import java.io.File;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.passive.*;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.Packet;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.FMLCommonHandler;
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.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.EntityRegistry;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry;
import com.bioxx.jmapgen.IslandMap;
import com.bioxx.jmapgen.attributes.Attribute;
import com.bioxx.jmapgen.attributes.LakeAttribute;
import com.bioxx.jmapgen.attributes.RiverAttribute;
import com.bioxx.jmapgen.graph.Center;
import com.bioxx.jmapgen.graph.Center.Marker;
import com.bioxx.tfc2.api.*;
import com.bioxx.tfc2.api.AnimalSpawnRegistry.SpawnGroup;
import com.bioxx.tfc2.api.AnimalSpawnRegistry.SpawnParameters;
import com.bioxx.tfc2.api.SkillsManager.Skill;
import com.bioxx.tfc2.api.ore.OreConfig;
import com.bioxx.tfc2.api.ore.OreConfig.VeinType;
import com.bioxx.tfc2.api.ore.OreRegistry;
import com.bioxx.tfc2.api.types.ClimateTemp;
import com.bioxx.tfc2.api.types.Moisture;
import com.bioxx.tfc2.api.types.OreType;
import com.bioxx.tfc2.api.types.StoneType;
import com.bioxx.tfc2.core.FluidTFC;
import com.bioxx.tfc2.core.Recipes;
import com.bioxx.tfc2.core.TFC_Sounds;
import com.bioxx.tfc2.entity.*;
import com.bioxx.tfc2.entity.EntityBear.BearType;
import com.bioxx.tfc2.entity.EntityTiger.TigerType;
import com.bioxx.tfc2.handlers.*;
import com.bioxx.tfc2.handlers.client.DrinkWaterHandler;
import com.bioxx.tfc2.potion.PotionTFC;
import com.bioxx.tfc2.world.DimensionTFC;
import com.bioxx.tfc2.world.generators.*;
public class CommonProxy
{
public void preInit(FMLPreInitializationEvent event)
{
TFC_Sounds.register();
registerWorldGen();
DimensionManager.unregisterDimension(0);
DimensionManager.registerDimension(0, DimensionTFC.SURFACE);
DimensionManager.registerDimension(2, DimensionTFC.PATHS);
ResourceLocation still = Core.CreateRes(Reference.getResID()+"blocks/water_still");
ResourceLocation flow = Core.CreateRes(Reference.getResID()+"blocks/water_flow");
TFCFluids.SALTWATER = new FluidTFC("saltwater", still, flow).setBaseColor(0xff001945);
TFCFluids.FRESHWATER = new FluidTFC("freshwater", still, flow).setBaseColor(0xff001945);
FluidRegistry.registerFluid(TFCFluids.SALTWATER);
FluidRegistry.registerFluid(TFCFluids.FRESHWATER);
registerCrops();
TFCBlocks.LoadBlocks();
TFCBlocks.RegisterBlocks();
TFCBlocks.RegisterTileEntites();
TFCItems.Load();
TFCItems.Register();
registerCropProduce();//Must run after item setup
setupOre();
SkillsManager.instance.registerSkill(new Skill("Woodworker", 1.0f, 1f));
SkillsManager.instance.registerSkill(new Skill("Smith", 1.0f, 1f));
SkillsManager.instance.registerSkill(new Skill("Toolsmith", 1.0f, 10f));
SkillsManager.instance.registerSkill(new Skill("Weaponsmith", 1.0f, 10f));
SkillsManager.instance.registerSkill(new Skill("Armorsmith", 1.0f, 10f));
SkillsManager.instance.registerSkill(new Skill("Farmer", 1.0f, 1f));
SkillsManager.instance.registerSkill(new Skill("Fisherman", 1.0f, 1f));
SkillsManager.instance.registerSkill(new Skill("Butcher", 1.0f, 1f));
}
public void init(FMLInitializationEvent event)
{
registerGuiHandler();
MinecraftForge.EVENT_BUS.register(new PlayerTracker());
Global.EVENT_BUS.register(new CreateDungeonHandler());
registerEntities();
ForgeRegistries.POTIONS.register(PotionTFC.THIRST_POTION);
}
protected void registerWorldGen()
{
GameRegistry.registerWorldGenerator(new WorldGenPortals(), 0);
GameRegistry.registerWorldGenerator(new WorldGenTrees(), 10);
GameRegistry.registerWorldGenerator(new WorldGenGrass(), 100);
GameRegistry.registerWorldGenerator(new WorldGenStalag(), 4);
GameRegistry.registerWorldGenerator(new WorldGenLooseRock(), 5);
GameRegistry.registerWorldGenerator(new WorldGenPamsGardens(), 6);
}
protected void registerEntities()
{
DataSerializersTFC.register();
EntityRegistry.registerModEntity(EntityCart.class, "Cart", 0, TFC.instance, 80, 3, true, 0x000000, 0x00ff00);
EntityRegistry.registerModEntity(EntityBear.class, "Bear", 1, TFC.instance, 80, 3, true, 0x000000, 0xff0000);
EntityRegistry.registerModEntity(EntityBearPanda.class, "BearPanda", 2, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityLion.class, "Lion", 3, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityTiger.class, "Tiger", 4, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityRhino.class, "Rhino", 5, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityElephant.class, "Elephant", 6, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityMammoth.class, "Mammoth", 7, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityBoar.class, "Boar", 8, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityBison.class, "Bison", 9, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityFoxRed.class, "FoxRed", 10, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityFoxArctic.class, "FoxArctic", 11, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityFoxDesert.class, "FoxDesert", 12, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityHippo.class, "Hippo", 13, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityBigCat.class, "BigCat", 14, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntitySabertooth.class, "Sabertooth", 15, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
EntityRegistry.registerModEntity(EntityElk.class, "Elk", 16, TFC.instance, 80, 3, true, 0x000000, 0xffffff);
}
public void postInit(FMLPostInitializationEvent event)
{
Recipes.RegisterNormalRecipes();
Recipes.RegisterKnappingRecipes();
MinecraftForge.EVENT_BUS.register(new CreateSpawnHandler());
MinecraftForge.EVENT_BUS.register(new WorldLoadHandler());
MinecraftForge.EVENT_BUS.register(new EntityLivingHandler());
MinecraftForge.EVENT_BUS.register(new JoinWorldHandler());
MinecraftForge.EVENT_BUS.register(new ChunkLoadHandler());
MinecraftForge.EVENT_BUS.register(new ServerTickHandler());
MinecraftForge.EVENT_BUS.register(new DrinkWaterHandler());
Global.EVENT_BUS.register(new HexUpdateHandler());
Global.EVENT_BUS.register(new IslandUpdateHandler());
registerAnimals();
}
protected void setupOre()
{
OreRegistry.getInstance().registerOre(OreType.Bismuthinite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Bismuthinite, /*wMin*/2, /*wMax*/3, /*hMin*/1, /*hMax*/1), StoneType.getForSubTypes(StoneType.SubType.IgneousExtrusive, StoneType.SubType.Sedimentary));
OreRegistry.getInstance().registerOre(OreType.Anthracite.getName(), new OreConfig(VeinType.Layer, TFCBlocks.Ore, OreType.Anthracite, /*wMin*/0, /*wMax*/0, /*hMin*/1, /*hMax*/3).setNoiseVertical(1).setMinSeamLength(2).setMaxSeamLength(8), new StoneType[] {StoneType.Chert, StoneType.Dolomite, StoneType.Limestone});
OreRegistry.getInstance().registerOre(OreType.Lignite.getName(), new OreConfig(VeinType.Layer, TFCBlocks.Ore, OreType.Lignite, /*wMin*/0, /*wMax*/0, /*hMin*/1, /*hMax*/3).setNoiseVertical(1).setMinSeamLength(2).setMaxSeamLength(8), new StoneType[] {StoneType.Shale, StoneType.Claystone});
OreRegistry.getInstance().registerOre(OreType.Cassiterite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Cassiterite, /*wMin*/1, /*wMax*/2, /*hMin*/1, /*hMax*/1).setRarity(1).setSubSeamRarity(3).setMinSeamLength(20).setMaxSeamLength(40), StoneType.getForSubTypes(StoneType.SubType.IgneousIntrusive));
OreRegistry.getInstance().registerOre(OreType.Tetrahedrite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Tetrahedrite, /*wMin*/1, /*wMax*/1, /*hMin*/1, /*hMax*/3), StoneType.getForSubTypes(StoneType.SubType.Metamorphic));
OreRegistry.getInstance().registerOre(OreType.Sphalerite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Sphalerite, /*wMin*/2, /*wMax*/3, /*hMin*/1, /*hMax*/1), StoneType.getForSubTypes(StoneType.SubType.Metamorphic));
OreRegistry.getInstance().registerOre(OreType.Garnierite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Garnierite, /*wMin*/1, /*wMax*/1, /*hMin*/1, /*hMax*/1).setRarity(3), StoneType.getForSubTypes(StoneType.SubType.IgneousIntrusive));
OreRegistry.getInstance().registerOre(OreType.Hematite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Hematite, /*wMin*/2, /*wMax*/3, /*hMin*/1, /*hMax*/2).setRarity(1).setSubSeamRarity(5), StoneType.getForSubTypes(StoneType.SubType.IgneousExtrusive));
OreRegistry.getInstance().registerOre(OreType.Magnetite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Magnetite, /*wMin*/1, /*wMax*/2, /*hMin*/3, /*hMax*/4).setSubSeamRarity(5), new StoneType[] {StoneType.Chert, StoneType.Dolomite, StoneType.Claystone});
OreRegistry.getInstance().registerOre(OreType.Limonite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Limonite, /*wMin*/2, /*wMax*/3, /*hMin*/1, /*hMax*/2).setRarity(1), new StoneType[] {StoneType.Shale, StoneType.Limestone});
OreRegistry.getInstance().registerOre(OreType.Malachite.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Malachite, /*wMin*/1, /*wMax*/1, /*hMin*/1, /*hMax*/1).setRarity(20).setMinSeamLength(3).setMaxSeamLength(10), new StoneType[] {StoneType.Marble});
OreRegistry.getInstance().registerOre(OreType.NativeGold.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.NativeGold, /*wMin*/1, /*wMax*/1, /*hMin*/1, /*hMax*/1).setRarity(8).setMinSeamLength(4).setMaxSeamLength(8), StoneType.getForSubTypes(StoneType.SubType.IgneousIntrusive, StoneType.SubType.IgneousExtrusive));
OreRegistry.getInstance().registerOre(OreType.Galena.getName(), new OreConfig(VeinType.Seam, TFCBlocks.Ore, OreType.Galena, /*wMin*/1, /*wMax*/2, /*hMin*/1, /*hMax*/2).setRarity(2), StoneType.getForSubTypes(StoneType.SubType.Metamorphic, StoneType.SubType.IgneousExtrusive));
}
protected void registerCrops()
{
Crop.registerCrop(Crop.Corn);
Crop.registerCrop(Crop.Cabbage);
Crop.registerCrop(Crop.Tomato);
Crop.registerCrop(Crop.Wheat);
Crop.registerCrop(Crop.Barley);
Crop.registerCrop(Crop.Rye);
Crop.registerCrop(Crop.Oat);
Crop.registerCrop(Crop.Rice);
}
protected void registerCropProduce()
{
/*FoodRegistry.getInstance().registerCropProduce(Crop.Corn, new ItemStack(TFCItems.FoodCornWhole, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Cabbage, new ItemStack(TFCItems.FoodCabbage, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Tomato, new ItemStack(TFCItems.FoodTomato, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Wheat, new ItemStack(TFCItems.FoodWheatWhole, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Barley, new ItemStack(TFCItems.FoodBarleyWhole, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Rye, new ItemStack(TFCItems.FoodRyeWhole, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Oat, new ItemStack(TFCItems.FoodOatWhole, 1, 0));
FoodRegistry.getInstance().registerCropProduce(Crop.Rice, new ItemStack(TFCItems.FoodRiceWhole, 1, 0));*/
}
protected void registerAnimals()
{
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Elephant", EntityElephant.class, 2, 4, 20, 20, new SpawnParameters(ClimateTemp.SUBTROPICAL, ClimateTemp.TROPICAL, Moisture.LOW, Moisture.MAX)
{
@Override
public boolean canSpawnInDesert()
{
return true;
}
}));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Brown Bear", EntityBear.class, 1, 1, 200, 30, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.TEMPERATE, Moisture.MEDIUM, Moisture.MAX)){
@Override
public void onSpawn(EntityLiving e)
{
((EntityBear)e).setBearType(BearType.Brown);
}
});
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Black Bear", EntityBear.class, 1, 1, 200, 30, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.TEMPERATE, Moisture.MEDIUM, Moisture.MAX)){
@Override
public void onSpawn(EntityLiving e)
{
((EntityBear)e).setBearType(BearType.Black);
}
});
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Polar Bear", EntityBear.class, 1, 1, 300, 30, new SpawnParameters(ClimateTemp.POLAR, ClimateTemp.POLAR, Moisture.LOW, Moisture.MAX)){
@Override
public void onSpawn(EntityLiving e)
{
((EntityBear)e).setBearType(BearType.Polar);
}
});
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Panda Bear", EntityBearPanda.class, 1, 1, 200, 20,
new SpawnParameters(ClimateTemp.TEMPERATE, ClimateTemp.TEMPERATE, Moisture.HIGH, Moisture.MAX)
{
@Override
public boolean canSpawnHere(IslandMap map, Center closest)
{
//TODO make this check for a bamboo forest
return super.canSpawnHere(map, closest);
}
}){
@Override
public void onSpawn(EntityLiving e)
{
((EntityBearPanda)e).setBearType(BearType.Panda);
}
});
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Bison", EntityBison.class, 3, 5, 300, 50, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.TEMPERATE, Moisture.LOW, Moisture.MEDIUM)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Cow", EntityCow.class, 2, 4, 300, 50, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.SUBTROPICAL, Moisture.LOW, Moisture.HIGH)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Boar", EntityBoar.class, 2, 4, 500, 50, new SpawnParameters(ClimateTemp.TEMPERATE, ClimateTemp.SUBTROPICAL, Moisture.LOW, Moisture.MEDIUM)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Wolf", EntityWolf.class, 2, 4, 200, 20, new SpawnParameters(ClimateTemp.POLAR, ClimateTemp.TEMPERATE, Moisture.LOW, Moisture.MAX)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Fox Arctic", EntityFoxArctic.class, 1, 1, 200, 30, new SpawnParameters(ClimateTemp.POLAR, ClimateTemp.SUBPOLAR, Moisture.MEDIUM, Moisture.MAX)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Fox Red", EntityFoxRed.class, 1, 1, 200, 30, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.TEMPERATE, Moisture.MEDIUM, Moisture.HIGH)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Fox Desert", EntityFoxDesert.class, 1, 1, 200, 30, new SpawnParameters(ClimateTemp.TEMPERATE, ClimateTemp.SUBTROPICAL, Moisture.LOW, Moisture.LOW){
@Override
public boolean canSpawnInDesert()
{
return true;
}
}));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Hippo", EntityHippo.class, 1, 1, 50, 20, new SpawnParameters(ClimateTemp.SUBTROPICAL, ClimateTemp.TROPICAL, Moisture.LOW, Moisture.MEDIUM, EntityLiving.SpawnPlacementType.IN_WATER){
@Override
public boolean canSpawnHere(IslandMap map, Center closest)
{
boolean isValid = false;
if(closest.hasAttribute(Attribute.River))
{
RiverAttribute attrib = (RiverAttribute) closest.getAttribute(Attribute.River);
isValid = attrib.getRiver() >= 1.0;
}
if(closest.hasMarker(Marker.Pond))
isValid = true;
if(closest.hasAttribute(Attribute.Lake))
{
LakeAttribute attrib = (LakeAttribute) closest.getAttribute(Attribute.Lake);
if(attrib.getBorderDistance() <= 1)
isValid = true;
}
return isValid;
}
@Override
public boolean canSpawnInDesert()
{
return true;
}
}));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Lion", EntityLion.class, 1, 3, 200, 30, new SpawnParameters(ClimateTemp.SUBTROPICAL, ClimateTemp.TROPICAL, Moisture.LOW, Moisture.HIGH){
@Override
public boolean canSpawnHere(IslandMap map, Center closest)
{
boolean isValid = super.canSpawnHere(map, closest);
//This makes sure that the hex isn't too heavily forested
if(closest.getMoisture().isGreaterThan(Moisture.MEDIUM))
return false;
return isValid;
}
}));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Rhino", EntityRhino.class, 1, 1, 50, 20, new SpawnParameters(ClimateTemp.SUBTROPICAL, ClimateTemp.TROPICAL, Moisture.LOW, Moisture.HIGH){
@Override
public boolean canSpawnHere(IslandMap map, Center closest)
{
boolean isValid = super.canSpawnHere(map, closest);
//This makes sure that the hex isn't too heavily forested
if(closest.getMoisture().isGreaterThan(Moisture.LOW))
return false;
return isValid;
}
@Override
public boolean canSpawnInDesert()
{
return true;
}
}));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Tiger", EntityTiger.class, 1, 1, 100, 20, new SpawnParameters(ClimateTemp.TEMPERATE, ClimateTemp.TROPICAL, Moisture.MEDIUM, Moisture.MAX))
{
@Override
public void onSpawn(EntityLiving e)
{
((EntityTiger)e).setTigerType(TigerType.Normal);
}
});
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Snow Tiger", EntityTiger.class, 1, 1, 100, 20, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.TEMPERATE, Moisture.MEDIUM, Moisture.MAX))
{
@Override
public void onSpawn(EntityLiving e)
{
((EntityTiger)e).setTigerType(TigerType.Snow);
}
});
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Ocelot", EntityOcelot.class, 2, 4, 300, 40, new SpawnParameters(ClimateTemp.SUBTROPICAL, ClimateTemp.TROPICAL, Moisture.HIGH, Moisture.MAX)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Chicken", EntityChicken.class, 2, 4, 500, 50, new SpawnParameters(ClimateTemp.SUBTROPICAL, ClimateTemp.TROPICAL, Moisture.MEDIUM, Moisture.VERYHIGH)));
AnimalSpawnRegistry.getInstance().register(new SpawnGroup("Sheep", EntitySheep.class, 2, 4, 300, 30, new SpawnParameters(ClimateTemp.SUBPOLAR, ClimateTemp.TEMPERATE, Moisture.MEDIUM, Moisture.VERYHIGH){
@Override
public boolean canSpawnHere(IslandMap map, Center closest)
{
boolean isValid = super.canSpawnHere(map, closest);
if(closest.getElevation() < 0.5)
return false;
return isValid;
}
}));
}
public void registerGuiHandler()
{
NetworkRegistry.INSTANCE.registerGuiHandler(TFC.instance, new GuiHandler());
}
public void setupFluids()
{
//FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluid(TFCFluids.LAVA.getName()), new ItemStack(TFCItems.BlueSteelBucketLava), new ItemStack(TFCItems.BlueSteelBucketEmpty));
}
public File getMinecraftDir()
{
return FMLCommonHandler.instance().getMinecraftServerInstance().getFile("");/*new File(".");*/
}
public void registerKeys()
{
}
public void registerKeyBindingHandler()
{
}
public void uploadKeyBindingsToGame()
{
}
public void onClientLogin()
{
}
public boolean isClientSide()
{
return false;
}
public void sendToAllNear(World world, BlockPos pos, int range, Packet<?> packet)
{
world.getMinecraftServer().getPlayerList().sendToAllNearExcept(null, pos.getX(), pos.getY(), pos.getZ(), range, world.provider.getDimension(), packet);
}
public EntityPlayer getPlayer()
{
return null;
}
}