aboutsummaryrefslogtreecommitdiff
path: root/main/java/gregtech/api/util/GT_SpawnEventHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/java/gregtech/api/util/GT_SpawnEventHandler.java')
-rw-r--r--main/java/gregtech/api/util/GT_SpawnEventHandler.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/main/java/gregtech/api/util/GT_SpawnEventHandler.java b/main/java/gregtech/api/util/GT_SpawnEventHandler.java
new file mode 100644
index 0000000000..d4d4c65d6c
--- /dev/null
+++ b/main/java/gregtech/api/util/GT_SpawnEventHandler.java
@@ -0,0 +1,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);
+ }
+ }
+ }
+ }
+ }
+ }
+}