use of net.minecraftforge.event.entity.player.PlayerInteractEvent in project PneumaticCraft by MineMaarten.
the class DroneAIBlockInteract method rightClick.
private boolean rightClick(ChunkPosition pos) {
int xCoord = pos.chunkPosX;
int yCoord = pos.chunkPosY;
int zCoord = pos.chunkPosZ;
ForgeDirection faceDir = ProgWidgetPlace.getDirForSides(((ISidedWidget) widget).getSides());
EntityPlayer player = drone.getFakePlayer();
World worldObj = drone.getWorld();
int dx = faceDir.offsetX;
int dy = faceDir.offsetY;
int dz = faceDir.offsetZ;
int x = xCoord;
int y = yCoord;
int z = zCoord;
player.setPosition(x + 0.5, y + 0.5 - player.eyeHeight, z + 0.5);
player.rotationPitch = faceDir.offsetY * -90;
switch(faceDir) {
case NORTH:
player.rotationYaw = 180;
break;
case SOUTH:
player.rotationYaw = 0;
break;
case WEST:
player.rotationYaw = 90;
break;
case EAST:
player.rotationYaw = -90;
}
try {
PlayerInteractEvent event = ForgeEventFactory.onPlayerInteract(player, Action.RIGHT_CLICK_AIR, x, y, z, faceDir.ordinal(), worldObj);
if (event.isCanceled())
return false;
Block block = worldObj.getBlock(x, y, z);
ItemStack stack = player.getCurrentEquippedItem();
if (stack != null && stack.getItem().onItemUseFirst(stack, player, worldObj, x, y, z, faceDir.ordinal(), dx, dy, dz))
return false;
if (!worldObj.isAirBlock(x, y, z) && block.onBlockActivated(worldObj, x, y, z, player, faceDir.ordinal(), dx, dy, dz))
return false;
if (stack != null) {
boolean isGoingToShift = false;
if (stack.getItem() instanceof ItemReed || stack.getItem() instanceof ItemRedstone) {
isGoingToShift = true;
}
int useX = isGoingToShift ? xCoord : x;
int useY = isGoingToShift ? yCoord : y;
int useZ = isGoingToShift ? zCoord : z;
if (stack.getItem().onItemUse(stack, player, worldObj, useX, useY, useZ, faceDir.ordinal(), dx, dy, dz))
return false;
ItemStack copy = stack.copy();
player.setCurrentItemOrArmor(0, stack.getItem().onItemRightClick(stack, worldObj, player));
if (!copy.isItemEqual(stack))
return true;
}
return false;
} catch (Throwable e) {
Log.error("DroneAIBlockInteract crashed! Stacktrace: ");
e.printStackTrace();
return false;
}
}
use of net.minecraftforge.event.entity.player.PlayerInteractEvent in project PneumaticCraft by MineMaarten.
the class TileEntityUniversalSensor method onEvent.
public void onEvent(Event event) {
ISensorSetting sensor = SensorHandler.instance().getSensorFromPath(sensorSetting);
if (sensor != null && sensor instanceof IEventSensorSetting && getPressure(ForgeDirection.UNKNOWN) > PneumaticValues.MIN_PRESSURE_UNIVERSAL_SENSOR) {
int newRedstoneStrength = ((IEventSensorSetting) sensor).emitRedstoneOnEvent(event, this, getRange(), sensorGuiText);
if (newRedstoneStrength != 0)
eventTimer = ((IEventSensorSetting) sensor).getRedstonePulseLength();
if (invertedRedstone)
newRedstoneStrength = 15 - newRedstoneStrength;
if (eventTimer > 0 && ThirdPartyManager.computerCraftLoaded) {
if (event instanceof PlayerInteractEvent) {
PlayerInteractEvent e = (PlayerInteractEvent) event;
notifyComputers(newRedstoneStrength, e.x, e.y, e.z);
} else {
notifyComputers(newRedstoneStrength);
}
}
if (newRedstoneStrength != redstoneStrength) {
redstoneStrength = newRedstoneStrength;
updateNeighbours();
}
}
}
Aggregations