Added event to allow modification of player visibility to mobs/AI (#3382)
(cherry picked from commit 0a5ef64d6ea96fe85d7c62107081ced649e6a3e9)
This commit is contained in:
parent
def75dc092
commit
f0d9bf7886
3 changed files with 60 additions and 10 deletions
|
@ -692,7 +692,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean func_175640_z(BlockPos p_175640_1_)
|
public boolean func_175640_z(BlockPos p_175640_1_)
|
||||||
@@ -3240,7 +3427,7 @@
|
@@ -3179,6 +3366,8 @@
|
||||||
|
d2 *= ((Double)Objects.firstNonNull(p_184150_11_.apply(entityplayer1), Double.valueOf(1.0D))).doubleValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ d2 = net.minecraftforge.common.ForgeHooks.getPlayerVisibilityDistance(entityplayer1, d2, p_184150_9_);
|
||||||
|
+
|
||||||
|
if ((p_184150_9_ < 0.0D || Math.abs(entityplayer1.field_70163_u - p_184150_3_) < p_184150_9_ * p_184150_9_) && (p_184150_7_ < 0.0D || d1 < d2 * d2) && (d0 == -1.0D || d1 < d0))
|
||||||
|
{
|
||||||
|
d0 = d1;
|
||||||
|
@@ -3240,7 +3429,7 @@
|
||||||
|
|
||||||
public long func_72905_C()
|
public long func_72905_C()
|
||||||
{
|
{
|
||||||
|
@ -701,7 +710,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public long func_82737_E()
|
public long func_82737_E()
|
||||||
@@ -3250,17 +3437,17 @@
|
@@ -3250,17 +3439,17 @@
|
||||||
|
|
||||||
public long func_72820_D()
|
public long func_72820_D()
|
||||||
{
|
{
|
||||||
|
@ -722,7 +731,7 @@
|
||||||
|
|
||||||
if (!this.func_175723_af().func_177746_a(blockpos))
|
if (!this.func_175723_af().func_177746_a(blockpos))
|
||||||
{
|
{
|
||||||
@@ -3272,7 +3459,7 @@
|
@@ -3272,7 +3461,7 @@
|
||||||
|
|
||||||
public void func_175652_B(BlockPos p_175652_1_)
|
public void func_175652_B(BlockPos p_175652_1_)
|
||||||
{
|
{
|
||||||
|
@ -731,7 +740,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
@@ -3292,12 +3479,18 @@
|
@@ -3292,12 +3481,18 @@
|
||||||
|
|
||||||
if (!this.field_72996_f.contains(p_72897_1_))
|
if (!this.field_72996_f.contains(p_72897_1_))
|
||||||
{
|
{
|
||||||
|
@ -750,7 +759,7 @@
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3391,8 +3584,7 @@
|
@@ -3391,8 +3586,7 @@
|
||||||
|
|
||||||
public boolean func_180502_D(BlockPos p_180502_1_)
|
public boolean func_180502_D(BlockPos p_180502_1_)
|
||||||
{
|
{
|
||||||
|
@ -760,7 +769,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -3453,12 +3645,12 @@
|
@@ -3453,12 +3647,12 @@
|
||||||
|
|
||||||
public int func_72800_K()
|
public int func_72800_K()
|
||||||
{
|
{
|
||||||
|
@ -775,7 +784,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public Random func_72843_D(int p_72843_1_, int p_72843_2_, int p_72843_3_)
|
public Random func_72843_D(int p_72843_1_, int p_72843_2_, int p_72843_3_)
|
||||||
@@ -3502,7 +3694,7 @@
|
@@ -3502,7 +3696,7 @@
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public double func_72919_O()
|
public double func_72919_O()
|
||||||
{
|
{
|
||||||
|
@ -784,7 +793,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public void func_175715_c(int p_175715_1_, BlockPos p_175715_2_, int p_175715_3_)
|
public void func_175715_c(int p_175715_1_, BlockPos p_175715_2_, int p_175715_3_)
|
||||||
@@ -3536,7 +3728,7 @@
|
@@ -3536,7 +3730,7 @@
|
||||||
|
|
||||||
public void func_175666_e(BlockPos p_175666_1_, Block p_175666_2_)
|
public void func_175666_e(BlockPos p_175666_1_, Block p_175666_2_)
|
||||||
{
|
{
|
||||||
|
@ -793,7 +802,7 @@
|
||||||
{
|
{
|
||||||
BlockPos blockpos = p_175666_1_.func_177972_a(enumfacing);
|
BlockPos blockpos = p_175666_1_.func_177972_a(enumfacing);
|
||||||
|
|
||||||
@@ -3621,6 +3813,112 @@
|
@@ -3621,6 +3815,112 @@
|
||||||
return i >= -128 && i <= 128 && j >= -128 && j <= 128;
|
return i >= -128 && i <= 128 && j >= -128 && j <= 128;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent;
|
||||||
import net.minecraftforge.event.entity.living.LootingLevelEvent;
|
import net.minecraftforge.event.entity.living.LootingLevelEvent;
|
||||||
import net.minecraftforge.event.entity.player.AnvilRepairEvent;
|
import net.minecraftforge.event.entity.player.AnvilRepairEvent;
|
||||||
import net.minecraftforge.event.entity.player.AttackEntityEvent;
|
import net.minecraftforge.event.entity.player.AttackEntityEvent;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
import net.minecraftforge.event.world.BlockEvent;
|
import net.minecraftforge.event.world.BlockEvent;
|
||||||
import net.minecraftforge.event.world.NoteBlockEvent;
|
import net.minecraftforge.event.world.NoteBlockEvent;
|
||||||
|
@ -586,6 +587,14 @@ public class ForgeHooks
|
||||||
return event.getLootingLevel();
|
return event.getLootingLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double getPlayerVisibilityDistance(EntityPlayer player, double xzDistance, double maxXZDistance)
|
||||||
|
{
|
||||||
|
PlayerEvent.Visibility event = new PlayerEvent.Visibility(player);
|
||||||
|
MinecraftForge.EVENT_BUS.post(event);
|
||||||
|
double value = event.getVisibilityModifier() * xzDistance;
|
||||||
|
return value >= maxXZDistance ? maxXZDistance : value;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isLivingOnLadder(IBlockState state, World world, BlockPos pos, EntityLivingBase entity)
|
public static boolean isLivingOnLadder(IBlockState state, World world, BlockPos pos, EntityLivingBase entity)
|
||||||
{
|
{
|
||||||
boolean isSpectator = (entity instanceof EntityPlayer && ((EntityPlayer)entity).isSpectator());
|
boolean isSpectator = (entity instanceof EntityPlayer && ((EntityPlayer)entity).isSpectator());
|
||||||
|
|
|
@ -351,4 +351,36 @@ public class PlayerEvent extends LivingEvent
|
||||||
return playerUUID;
|
return playerUUID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when the world checks if a player is near enough to be attacked by an entity.
|
||||||
|
* The resulting visibility modifier is multiplied by the one calculated by Minecraft (based on sneaking and more) and used to calculate the radius a player has to be in (targetDistance*modifier).
|
||||||
|
* This can also be used to increase the visibility of a player, if it was decreased by Minecraft or other mods. But the resulting value cannot be higher than the standard target distance.
|
||||||
|
*/
|
||||||
|
public static class Visibility extends PlayerEvent
|
||||||
|
{
|
||||||
|
|
||||||
|
private double visibilityModifier = 1D;
|
||||||
|
|
||||||
|
public Visibility(EntityPlayer player)
|
||||||
|
{
|
||||||
|
super(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mod Is multiplied with the current modifier
|
||||||
|
*/
|
||||||
|
public void modifyVisibility(double mod)
|
||||||
|
{
|
||||||
|
visibilityModifier *= mod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The current modifier
|
||||||
|
*/
|
||||||
|
public double getVisibilityModifier()
|
||||||
|
{
|
||||||
|
return visibilityModifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue