Add PlayerEvent.StartTracking and .StopTracking & make trackedEntityIDs visible

& Update, as discussed on IRC (squash)
This commit is contained in:
diesieben07 2014-05-29 03:33:32 +02:00
parent 4a6a49e073
commit deb5df542e
4 changed files with 92 additions and 0 deletions

View file

@ -0,0 +1,26 @@
--- ../src-base/minecraft/net/minecraft/entity/EntityTracker.java
+++ ../src-work/minecraft/net/minecraft/entity/EntityTracker.java
@@ -337,4 +337,23 @@
}
}
}
+
+ /* ======================================== FORGE START =====================================*/
+
+ // don't expose the EntityTrackerEntry directly so mods can't mess with the data in there as easily
+ /**
+ * Get all players tracking the given Entity. The Entity must be part of the World that this Tracker belongs to.
+ * @param entity the Entity
+ * @return all players tracking the Entity
+ */
+ public Set<net.minecraft.entity.player.EntityPlayer> getTrackingPlayers(Entity entity)
+ {
+ EntityTrackerEntry entry = (EntityTrackerEntry) field_72794_c.func_76041_a(entity.func_145782_y());
+ if (entry == null)
+ return java.util.Collections.emptySet();
+ else
+ return java.util.Collections.unmodifiableSet(entry.field_73134_o);
+ }
+
+ /* ======================================== FORGE END =====================================*/
}

View file

@ -0,0 +1,17 @@
--- ../src-base/minecraft/net/minecraft/entity/EntityTrackerEntry.java
+++ ../src-work/minecraft/net/minecraft/entity/EntityTrackerEntry.java
@@ -436,12 +436,14 @@
p_73117_1_.field_71135_a.func_147359_a(new S1DPacketEntityEffect(this.field_73132_a.func_145782_y(), potioneffect));
}
}
+ net.minecraftforge.event.ForgeEventFactory.onStartEntityTracking(field_73132_a, p_73117_1_);
}
}
else if (this.field_73134_o.contains(p_73117_1_))
{
this.field_73134_o.remove(p_73117_1_);
p_73117_1_.field_71130_g.add(Integer.valueOf(this.field_73132_a.func_145782_y()));
+ net.minecraftforge.event.ForgeEventFactory.onStopEntityTracking(field_73132_a, p_73117_1_);
}
}
}

View file

@ -155,4 +155,14 @@ public class ForgeEventFactory
MinecraftForge.EVENT_BUS.post(event); MinecraftForge.EVENT_BUS.post(event);
return event.result; return event.result;
} }
public static void onStartEntityTracking(Entity entity, EntityPlayer player)
{
MinecraftForge.EVENT_BUS.post(new PlayerEvent.StartTracking(player, entity));
}
public static void onStopEntityTracking(Entity entity, EntityPlayer player)
{
MinecraftForge.EVENT_BUS.post(new PlayerEvent.StopTracking(player, entity));
}
} }

View file

@ -2,6 +2,7 @@ package net.minecraftforge.event.entity.player;
import cpw.mods.fml.common.eventhandler.Cancelable; import cpw.mods.fml.common.eventhandler.Cancelable;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.event.entity.living.LivingEvent;
@ -92,4 +93,42 @@ public class PlayerEvent extends LivingEvent
this.wasDeath = wasDeath; this.wasDeath = wasDeath;
} }
} }
/**
* Fired when an Entity is started to be "tracked" by this player (the player receives updates about this entity, e.g. motion).
*
*/
public static class StartTracking extends PlayerEvent {
/**
* The Entity now being tracked.
*/
public final Entity target;
public StartTracking(EntityPlayer player, Entity target)
{
super(player);
this.target = target;
}
}
/**
* Fired when an Entity is stopped to be "tracked" by this player (the player no longer receives updates about this entity, e.g. motion).
*
*/
public static class StopTracking extends PlayerEvent {
/**
* The Entity no longer being tracked.
*/
public final Entity target;
public StopTracking(EntityPlayer player, Entity target)
{
super(player);
this.target = target;
}
}
} }