aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java
blob: d4d4c65d6c145a6c2e58daba8f96ac20610fb1a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package gregtech.api.util;

import gregtech.api.metatileentity.BaseMetaTileEntity;
import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MonsterRepellent;

import java.util.ArrayList;
import java.util.List;

import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn;

public class GT_SpawnEventHandler {

	public static volatile List <int[]> mobReps = new ArrayList();
	
	public GT_SpawnEventHandler(){
		MinecraftForge.EVENT_BUS.register(this);
	}
	
	  @SubscribeEvent
	  public void denyMobSpawn(CheckSpawn event)
	  {
	    if (event.getResult() == Event.Result.ALLOW) {return;}
	    if (event.entityLiving.isCreatureType(EnumCreatureType.monster, false)) 
	       {
	    	for(int[] rep : mobReps){
	    		if(rep[3] == event.entity.worldObj.provider.dimensionId){
	    			TileEntity tTile = event.entity.worldObj.getTileEntity(rep[0], rep[1], rep[2]);
	    			if(tTile instanceof BaseMetaTileEntity && ((BaseMetaTileEntity)tTile).getMetaTileEntity() instanceof GT_MetaTileEntity_MonsterRepellent){
	    				int r = ((GT_MetaTileEntity_MonsterRepellent)((BaseMetaTileEntity)tTile).getMetaTileEntity()).mRange;
	    				double dx = rep[0] + 0.5F - event.entity.posX;
	    				double dy = rep[1] + 0.5F - event.entity.posY;
	    				double dz = rep[2] + 0.5F - event.entity.posZ;
	    				if ((dx * dx + dz * dz + dy * dy) <= Math.pow(r, 2))  {
	    					event.setResult(Event.Result.DENY);
	    				}	
	    			}
	    		}
	    	}
	    }
	}
}