Add InputUpdateEvent (#4356)

This commit is contained in:
Bartek Bok 2017-10-31 19:47:47 +01:00 committed by LexManos
parent 9c7538db8d
commit 6f49568c98
4 changed files with 90 additions and 1 deletions

View File

@ -89,7 +89,15 @@
}
public boolean func_70613_aW()
@@ -859,10 +880,13 @@
@@ -840,6 +861,7 @@
float f = 0.8F;
boolean flag2 = this.field_71158_b.field_192832_b >= 0.8F;
this.field_71158_b.func_78898_a();
+ net.minecraftforge.client.ForgeHooksClient.onInputUpdate(this, this.field_71158_b);
this.field_71159_c.func_193032_ao().func_193293_a(this.field_71158_b);
if (this.func_184587_cr() && !this.func_184218_aH())
@@ -859,10 +881,13 @@
}
AxisAlignedBB axisalignedbb = this.func_174813_aQ();

View File

@ -81,6 +81,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.MovementInput;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
@ -94,6 +95,7 @@ import net.minecraftforge.client.event.DrawBlockHighlightEvent;
import net.minecraftforge.client.event.EntityViewRenderEvent;
import net.minecraftforge.client.event.FOVUpdateEvent;
import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.client.event.InputUpdateEvent;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.event.MouseEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
@ -730,4 +732,9 @@ public class ForgeHooksClient
if(!tr.equals(TRSRTransformation.identity())) mat = tr.getMatrix();
return Pair.of(model, mat);
}
public static void onInputUpdate(EntityPlayer player, MovementInput movementInput)
{
MinecraftForge.EVENT_BUS.post(new InputUpdateEvent(player, movementInput));
}
}

View File

@ -0,0 +1,26 @@
package net.minecraftforge.client.event;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.MovementInput;
import net.minecraftforge.event.entity.player.PlayerEvent;
/**
* This event is fired after player movement inputs are updated.<br>
* Handlers can freely manipulate {@link MovementInput} to cancel movement.<br>
*/
public class InputUpdateEvent extends PlayerEvent
{
private final MovementInput movementInput;
public InputUpdateEvent(EntityPlayer player, MovementInput movementInput)
{
super(player);
this.movementInput = movementInput;
}
public MovementInput getMovementInput()
{
return movementInput;
}
}

View File

@ -0,0 +1,48 @@
package net.minecraftforge.debug;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.client.event.InputUpdateEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
@Mod(modid = InputUpdateEventTest.MODID, name = "InputUpdateTest", version = "1.0", acceptableRemoteVersions = "*")
public class InputUpdateEventTest
{
static final String MODID = "input_update_test";
@Mod.EventBusSubscriber(value = Side.CLIENT, modid = MODID)
public static class Registration
{
@SubscribeEvent
public static void onInputUpdate(InputUpdateEvent evt)
{
EntityPlayer player = evt.getEntityPlayer();
final int x = MathHelper.floor(player.posX);
final int y = MathHelper.floor(player.getEntityBoundingBox().minY) - 1;
final int z = MathHelper.floor(player.posZ);
final BlockPos pos = new BlockPos(x, y, z);
IBlockState blockUnder = player.world.getBlockState(pos);
if (blockUnder.getBlock() == Blocks.BLACK_GLAZED_TERRACOTTA)
{
if (evt.getMovementInput().jump)
{
player.sendMessage(new TextComponentString("NO JUMPING!"));
evt.getMovementInput().jump = false;
}
if (evt.getMovementInput().sneak)
{
player.sendMessage(new TextComponentString("NO SNEAKING!"));
evt.getMovementInput().sneak = false;
}
}
}
}
}